[CMAKE]
[reactos.git] / CMakeLists.txt
1 cmake_minimum_required(VERSION 2.8)
2 project(REACTOS)
3
4 include(CMakeMacros.cmake)
5
6 set(CMAKE_INCLUDE_CURRENT_DIR ON)
7 set(CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON)
8 set(CMAKE_SHARED_LIBRARY_PREFIX "")
9
10 set(CMAKE_SKIP_PREPROCESSED_SOURCE_RULES TRUE)
11 set(CMAKE_SKIP_ASSEMBLY_SOURCE_RULES TRUE)
12
13 add_definitions(-D__REACTOS__)
14
15 if(NOT CMAKE_CROSSCOMPILING)
16
17 add_definitions(-DTARGET_i386)
18 add_definitions(-fshort-wchar)
19
20 include_directories(${REACTOS_SOURCE_DIR}/tools/unicode)
21 include_directories(include)
22 include_directories(include/host)
23 include_directories(include/reactos)
24 include_directories(include/reactos/wine)
25 include_directories(${REACTOS_BINARY_DIR}/include)
26
27 add_subdirectory(tools)
28 add_subdirectory(lib)
29
30 export(TARGETS widl winebuild nci buildno gendib cdmake FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake NAMESPACE native- )
31
32 else()
33
34 if(MSVC)
35 include(msc.cmake)
36 else()
37 include(gcc.cmake)
38 endif(MSVC)
39
40 # Activate support for assembly source files
41 enable_language(ASM)
42
43 # Activate language support for resource files
44 enable_language(RC)
45
46 set(IMPORT_EXECUTABLES "${REACTOS_SOURCE_DIR}/build/ImportExecutables.cmake" CACHE FILEPATH "Host executables")
47 include(${IMPORT_EXECUTABLES})
48
49 # Debug Options
50 set(_WINKD_ 0)
51 set(KDBG 1)
52 set(DBG 1)
53
54 add_definitions(-DDBG=${DBG} -DKDBG=${KDBG})
55
56 if(DBG MATCHES 1)
57 add_definitions(-D_SEH_ENABLE_TRACE)
58 endif(DBG MATCHES 1)
59
60 if((DBG MATCHES 1) OR (KDBG MATCHES 1))
61 set(DBG_OR_KDBG true)
62 endif((DBG MATCHES 1) OR (KDBG MATCHES 1))
63
64 # Version Options
65 add_definitions(-DWINVER=0x502 -D_WIN32_IE=0x600 -D_WIN32_WINNT=0x502 -D_WIN32_WINDOWS=0x502 -D_SETUPAPI_VER=0x502)
66
67 # Arch Options
68 add_definitions(-D_M_IX86 -D_X86_ -D__i386__)
69
70 # Other
71 add_definitions(-DUSE_COMPILER_EXCEPTIONS)
72 add_definitions(-D_USE_32BIT_TIME_T)
73
74 include_directories(include)
75 include_directories(include/psdk)
76 include_directories(include/dxsdk)
77 include_directories(${REACTOS_BINARY_DIR}/include)
78 include_directories(${REACTOS_BINARY_DIR}/include/dxsdk)
79 include_directories(${REACTOS_BINARY_DIR}/include/psdk)
80 include_directories(${REACTOS_BINARY_DIR}/include/reactos)
81 include_directories(include/crt)
82 if(MSVC)
83 include_directories(include/crt/msc)
84 else()
85 include_directories(include/crt/mingw32)
86 endif(MSVC)
87 include_directories(include/ddk)
88 include_directories(include/ndk)
89 include_directories(include/reactos)
90 include_directories(include/reactos/libs)
91
92 add_subdirectory(include/psdk)
93 add_subdirectory(include/dxsdk)
94 add_subdirectory(include/reactos/idl)
95 add_subdirectory(include/reactos/mc)
96
97 add_subdirectory(base)
98 add_subdirectory(boot)
99 add_subdirectory(dll)
100 add_subdirectory(drivers)
101 add_subdirectory(hal)
102 add_subdirectory(lib)
103 add_subdirectory(ntoskrnl)
104 add_subdirectory(subsystems)
105
106 # nci generated intermediate files
107
108 list(APPEND nci_output
109 ${REACTOS_BINARY_DIR}/ntoskrnl/include/internal/napi.h
110 ${REACTOS_BINARY_DIR}/subsystems/win32/win32k/include/napi.h
111 ${REACTOS_BINARY_DIR}/lib/ntdllsys/ntdll.S
112 ${REACTOS_BINARY_DIR}/ntoskrnl/ex/zw.S
113 ${REACTOS_BINARY_DIR}/lib/win32ksys/win32k.S
114 ${REACTOS_BINARY_DIR}/dll/ntdll/def/ntsys.pspec)
115
116 list(APPEND nci_folders
117 ${CMAKE_CURRENT_BINARY_DIR}/dll/ntdll/def
118 ${CMAKE_CURRENT_BINARY_DIR}/lib/ntdllsys/ntdll
119 ${CMAKE_CURRENT_BINARY_DIR}/lib/win32ksys
120 ${CMAKE_CURRENT_BINARY_DIR}/ntoskrnl/include/internal
121 ${CMAKE_CURRENT_BINARY_DIR}/ntoskrnl/ex
122 ${CMAKE_CURRENT_BINARY_DIR}/subsystems/win32/win32k/include)
123
124 file(MAKE_DIRECTORY ${nci_folders})
125
126 add_custom_command(
127 OUTPUT ${nci_output}
128 COMMAND native-nci -arch ${ARCH} ${REACTOS_SOURCE_DIR}/ntoskrnl/sysfuncs.lst ${REACTOS_SOURCE_DIR}/subsystems/win32/win32k/w32ksvc.db ${nci_output}
129 DEPENDS native-nci ${nci_folders})
130
131 set_source_files_properties(${nci_output} PROPERTIES GENERATED TRUE)
132
133 add_custom_target(ntdll_S ALL DEPENDS ${REACTOS_BINARY_DIR}/lib/ntdllsys/ntdll.S)
134 add_custom_target(win32k_S ALL DEPENDS ${REACTOS_BINARY_DIR}/lib/win32ksys/win32k.S)
135 add_custom_target(ntsys_pspec ALL DEPENDS ${REACTOS_BINARY_DIR}/dll/ntdll/def/ntsys.pspec)
136 add_custom_target(kernel_napi ALL DEPENDS ${REACTOS_BINARY_DIR}/ntoskrnl/include/internal/napi.h)
137 add_custom_target(subsystem_napi ALL DEPENDS ${REACTOS_BINARY_DIR}/subsystems/win32/win32k/include/napi.h)
138 add_custom_target(kernel_zw ALL DEPENDS ${REACTOS_BINARY_DIR}/ntoskrnl/ex/zw.S)
139
140 file(MAKE_DIRECTORY ${REACTOS_BINARY_DIR}/include/reactos)
141
142 add_custom_command(
143 OUTPUT ${REACTOS_BINARY_DIR}/include/reactos/buildno.h
144 COMMAND native-buildno ${REACTOS_BINARY_DIR}/include/reactos/buildno.h
145 DEPENDS ${REACTOS_SOURCE_DIR}/include/reactos/version.h)
146
147 add_custom_target(buildno_header ALL DEPENDS ${REACTOS_BINARY_DIR}/include/reactos/buildno.h)
148
149 file(MAKE_DIRECTORY ${REACTOS_BINARY_DIR}/subsystems/win32/win32k/dib)
150
151 list(APPEND OUTPUT_FILES
152 ${REACTOS_BINARY_DIR}/subsystems/win32/win32k/dib/dib8gen.c
153 ${REACTOS_BINARY_DIR}/subsystems/win32/win32k/dib/dib16gen.c
154 ${REACTOS_BINARY_DIR}/subsystems/win32/win32k/dib/dib32gen.c)
155
156 add_custom_command(
157 OUTPUT ${OUTPUT_FILES}
158 COMMAND native-gendib ${REACTOS_BINARY_DIR}/subsystems/win32/win32k/dib
159 DEPENDS native-gendib)
160
161 add_custom_target(gendib_generated ALL DEPENDS ${OUTPUT_FILES})
162
163 endif()