8bd6a8ad7b873eb3a559ecd572617ca9d0b50d74
[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/reactos)
23 include_directories(include/reactos/wine)
24 include_directories(${REACTOS_BINARY_DIR}/include)
25
26 add_subdirectory(tools)
27 add_subdirectory(lib)
28
29 export(TARGETS widl winebuild nci buildno gendib cdmake FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake NAMESPACE native- )
30
31 else()
32
33 # Linking
34 link_directories("${REACTOS_SOURCE_DIR}/importlibs" ${REACTOS_BINARY_DIR}/lib/3rdparty/mingw)
35
36 # Activate support for assembly source files
37 enable_language(ASM)
38
39 # Activate language support for resource files
40 enable_language(RC)
41
42 set(IMPORT_EXECUTABLES "${REACTOS_SOURCE_DIR}/build/ImportExecutables.cmake" CACHE FILEPATH "Host executables")
43 include(${IMPORT_EXECUTABLES})
44
45 # Debug Options
46 set(_WINKD_ 0)
47 set(KDBG 1)
48 set(DBG 1)
49
50 add_definitions(-DDBG=${DBG} -DKDBG=${KDBG})
51
52 if(DBG MATCHES 1)
53 add_definitions(-D_SEH_ENABLE_TRACE)
54 endif(DBG MATCHES 1)
55
56 if((DBG MATCHES 1) OR (KDBG MATCHES 1))
57 set(DBG_OR_KDBG true)
58 endif((DBG MATCHES 1) OR (KDBG MATCHES 1))
59
60 # Version Options
61 add_definitions(-DWINVER=0x502 -D_WIN32_IE=0x600 -D_WIN32_WINNT=0x502 -D_WIN32_WINDOWS=0x502 -D_SETUPAPI_VER=0x502)
62
63 # Arch Options
64 add_definitions(-D_M_IX86 -D_X86_ -D__i386__)
65
66 # Other
67 add_definitions(-DUSE_COMPILER_EXCEPTIONS)
68 add_definitions(-D_USE_32BIT_TIME_T)
69
70 # Compiler Core
71 add_definitions(-pipe -fms-extensions)
72
73 # Debugging (Note: DWARF-4 on 4.5.1 when we ship)
74 add_definitions(-gdwarf-2 -g2 -femit-struct-debug-detailed=none -feliminate-unused-debug-types)
75
76 # Tuning
77 add_definitions(-march=pentium -mtune=i686)
78
79 # Warnings
80 add_definitions(-Wall -Wno-char-subscripts -Wpointer-arith -Wno-multichar -Wno-error=uninitialized -Wno-unused-value -Winvalid-pch)
81
82 # Optimizations
83 add_definitions(-Os -fno-strict-aliasing -ftracer -momit-leaf-frame-pointer -mpreferred-stack-boundary=2 -fno-set-stack-executable -fno-optimize-sibling-calls)
84
85 # C++ Flags
86 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -fno-rtti")
87
88 include_directories(include)
89 include_directories(include/psdk)
90 include_directories(include/dxsdk)
91 include_directories(${REACTOS_BINARY_DIR}/include)
92 include_directories(${REACTOS_BINARY_DIR}/include/dxsdk)
93 include_directories(${REACTOS_BINARY_DIR}/include/psdk)
94 include_directories(${REACTOS_BINARY_DIR}/include/reactos)
95 include_directories(include/crt)
96 include_directories(include/crt/mingw32)
97 include_directories(include/ddk)
98 include_directories(include/ndk)
99 include_directories(include/reactos)
100 include_directories(include/reactos/libs)
101
102 add_subdirectory(include/psdk)
103 add_subdirectory(include/dxsdk)
104 add_subdirectory(include/reactos/idl)
105 add_subdirectory(include/reactos/mc)
106
107 add_subdirectory(base)
108 add_subdirectory(boot)
109 add_subdirectory(dll)
110 add_subdirectory(drivers)
111 add_subdirectory(hal)
112 add_subdirectory(lib)
113 add_subdirectory(ntoskrnl)
114 add_subdirectory(subsystems)
115
116 # nci generated intermediate files
117
118 list(APPEND nci_output
119 ${REACTOS_BINARY_DIR}/ntoskrnl/include/internal/napi.h
120 ${REACTOS_BINARY_DIR}/subsystems/win32/win32k/include/napi.h
121 ${REACTOS_BINARY_DIR}/lib/ntdllsys/ntdll.S
122 ${REACTOS_BINARY_DIR}/ntoskrnl/ex/zw.S
123 ${REACTOS_BINARY_DIR}/lib/win32ksys/win32k.S
124 ${REACTOS_BINARY_DIR}/dll/ntdll/def/ntsys.pspec)
125
126 list(APPEND nci_folders
127 ${CMAKE_CURRENT_BINARY_DIR}/dll/ntdll/def
128 ${CMAKE_CURRENT_BINARY_DIR}/lib/ntdllsys/ntdll
129 ${CMAKE_CURRENT_BINARY_DIR}/lib/win32ksys
130 ${CMAKE_CURRENT_BINARY_DIR}/ntoskrnl/include/internal
131 ${CMAKE_CURRENT_BINARY_DIR}/ntoskrnl/ex
132 ${CMAKE_CURRENT_BINARY_DIR}/subsystems/win32/win32k/include)
133
134 file(MAKE_DIRECTORY ${nci_folders})
135
136 add_custom_command(
137 OUTPUT ${nci_output}
138 COMMAND native-nci -arch ${ARCH} ${REACTOS_SOURCE_DIR}/ntoskrnl/sysfuncs.lst ${REACTOS_SOURCE_DIR}/subsystems/win32/win32k/w32ksvc.db ${nci_output}
139 DEPENDS native-nci ${nci_folders})
140
141 set_source_files_properties(${nci_output} PROPERTIES GENERATED TRUE)
142
143 add_custom_target(ntdll_S ALL DEPENDS ${REACTOS_BINARY_DIR}/lib/ntdllsys/ntdll.S)
144 add_custom_target(win32k_S ALL DEPENDS ${REACTOS_BINARY_DIR}/lib/win32ksys/win32k.S)
145 add_custom_target(ntsys_pspec ALL DEPENDS ${REACTOS_BINARY_DIR}/dll/ntdll/def/ntsys.pspec)
146 add_custom_target(kernel_napi ALL DEPENDS ${REACTOS_BINARY_DIR}/ntoskrnl/include/internal/napi.h)
147 add_custom_target(subsystem_napi ALL DEPENDS ${REACTOS_BINARY_DIR}/subsystems/win32/win32k/include/napi.h)
148 add_custom_target(kernel_zw ALL DEPENDS ${REACTOS_BINARY_DIR}/ntoskrnl/ex/zw.S)
149
150 file(MAKE_DIRECTORY ${REACTOS_BINARY_DIR}/include/reactos)
151
152 add_custom_command(
153 OUTPUT ${REACTOS_BINARY_DIR}/include/reactos/buildno.h
154 COMMAND native-buildno ${REACTOS_BINARY_DIR}/include/reactos/buildno.h
155 DEPENDS ${REACTOS_SOURCE_DIR}/include/reactos/version.h)
156
157 add_custom_target(buildno_header ALL DEPENDS ${REACTOS_BINARY_DIR}/include/reactos/buildno.h)
158
159 file(MAKE_DIRECTORY ${REACTOS_BINARY_DIR}/subsystems/win32/win32k/dib)
160
161 list(APPEND OUTPUT_FILES
162 ${REACTOS_BINARY_DIR}/subsystems/win32/win32k/dib/dib8gen.c
163 ${REACTOS_BINARY_DIR}/subsystems/win32/win32k/dib/dib16gen.c
164 ${REACTOS_BINARY_DIR}/subsystems/win32/win32k/dib/dib32gen.c)
165
166 add_custom_command(
167 OUTPUT ${OUTPUT_FILES}
168 COMMAND native-gendib ${REACTOS_BINARY_DIR}/subsystems/win32/win32k/dib
169 DEPENDS native-gendib)
170
171 add_custom_target(gendib_generated ALL DEPENDS ${OUTPUT_FILES})
172
173 endif()