-cmake_minimum_required(VERSION 2.8)
+cmake_minimum_required(VERSION 2.6)
project(REACTOS)
+#versioning
+include(include/reactos/version.cmake)
+
+# Don't escape preprocessor definition values added via add_definitions
+cmake_policy(SET CMP0005 OLD)
+# Shadow cmake provided modules
+cmake_policy(SET CMP0017 OLD)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+set(CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON)
+set(CMAKE_SHARED_LIBRARY_PREFIX "")
+set(CMAKE_SKIP_PREPROCESSED_SOURCE_RULES TRUE)
+set(CMAKE_SKIP_ASSEMBLY_SOURCE_RULES TRUE)
+set(CMAKE_COLOR_MAKEFILE OFF)
+set_property(GLOBAL PROPERTY RULE_MESSAGES OFF)
+
if(NOT ARCH)
set(ARCH i386)
endif()
+string(TOLOWER ${ARCH} ARCH)
# Compile options
if(ARCH MATCHES i386)
include(config.cmake)
elseif(ARCH MATCHES amd64)
include(config-amd64.cmake)
+elseif(ARCH MATCHES arm)
+ include(config-arm.cmake)
endif()
+add_definitions(-D__REACTOS__)
+
if(NOT CMAKE_CROSSCOMPILING)
- if(ARCH MATCHES i386)
- add_definitions(-DTARGET_i386)
- if(MSVC)
- add_definitions(-Dinline=__inline)
- endif()
- elseif(ARCH MATCHES amd64)
- add_definitions(-DTARGET_amd64)
+ add_definitions(-DTARGET_${ARCH})
+
+ if(MSVC)
+ add_definitions(-Dinline=__inline)
+ else()
+ add_definitions(-fshort-wchar)
endif()
include_directories(
${REACTOS_SOURCE_DIR}/tools/unicode
include
include/host
- include/reactos
- include/reactos/wine
${REACTOS_BINARY_DIR}/include)
add_subdirectory(tools)
add_subdirectory(lib)
if(NOT MSVC)
- export(TARGETS widl nci buildno gendib cabman cdmake mkhive spec2def geninc FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake NAMESPACE native- )
+ export(TARGETS widl gendib cabman cdmake mkhive spec2def geninc FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake NAMESPACE native- )
else()
- export(TARGETS nci buildno gendib cabman cdmake mkhive spec2def geninc FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake NAMESPACE native- )
+ export(TARGETS gendib cabman cdmake mkhive spec2def geninc FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake NAMESPACE native- )
endif()
else()
+ # adjust the default behaviour of the FIND_XXX() commands:
+ # search headers and libraries in the target environment, search
+ # programs in the host environment
+ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+ set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+ set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+
+ # Do some cleanup
+ file(REMOVE
+ ${REACTOS_BINARY_DIR}/dependencies.graphml
+ ${REACTOS_BINARY_DIR}/boot/ros_livecd.txt
+ ${REACTOS_BINARY_DIR}/boot/ros_livecd_target.txt
+ ${REACTOS_BINARY_DIR}/boot/ros_minicd.txt
+ ${REACTOS_BINARY_DIR}/boot/ros_minicd_target.txt
+ ${REACTOS_BINARY_DIR}/boot/ros_cab.txt
+ ${REACTOS_BINARY_DIR}/boot/ros_cab_target.txt)
+
if(NOT DEFINED REACTOS_BUILD_TOOLS_DIR)
set(REACTOS_BUILD_TOOLS_DIR ${REACTOS_SOURCE_DIR}/build)
endif()
set(IMPORT_EXECUTABLES "${REACTOS_BUILD_TOOLS_DIR}/ImportExecutables.cmake" CACHE FILEPATH "Host executables")
include(${IMPORT_EXECUTABLES})
-endif(NOT CMAKE_CROSSCOMPILING)
-
-# Compiler specific definitions and macros
-if(MSVC)
- include(msc.cmake)
-else()
- include(gcc.cmake)
-endif(MSVC)
-
-# Generic macros
-include(CMakeMacros.cmake)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-set(CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON)
-set(CMAKE_SHARED_LIBRARY_PREFIX "")
-
-set(CMAKE_SKIP_PREPROCESSED_SOURCE_RULES TRUE)
-set(CMAKE_SKIP_ASSEMBLY_SOURCE_RULES TRUE)
-
-set(CMAKE_COLOR_MAKEFILE OFF)
-
-set_property(GLOBAL PROPERTY RULE_MESSAGES OFF)
-
-add_definitions(-D__REACTOS__)
+ # Compiler specific definitions and macros
+ if(MSVC)
+ include(msc.cmake)
+ else()
+ include(gcc.cmake)
+ endif()
-if(CMAKE_CROSSCOMPILING)
+ # Generic macros
+ include(CMakeMacros.cmake)
- #Some cleanup
- file(REMOVE
- ${REACTOS_BINARY_DIR}/boot/ros_livecd.txt
- ${REACTOS_BINARY_DIR}/boot/ros_livecd_target.txt
- ${REACTOS_BINARY_DIR}/boot/ros_minicd.txt
- ${REACTOS_BINARY_DIR}/boot/ros_minicd_target.txt
- ${REACTOS_BINARY_DIR}/boot/ros_cab.txt
- ${REACTOS_BINARY_DIR}/boot/ros_cab_target.txt)
+ # IDL macros for widl/midl
+ include(cmake/idl-support.cmake)
#Some useful variables
set(LIVECD_DIR "${REACTOS_BINARY_DIR}/boot/livecd")
if(DBG)
add_definitions(-DDBG=1 -D_SEH_ENABLE_TRACE)
- else()
- add_definitions(-DDBG=0)
endif()
if(KDBG)
add_definitions(-DKDBG=1)
- else()
- add_definitions(-DKDBG=0)
+ endif()
+
+ if(_WINKD_)
+ add_definitions(-D_WINKD_=1)
endif()
# Version Options
- add_definitions(-DWINVER=0x502 -D_WIN32_IE=0x600 -D_WIN32_WINNT=0x502 -D_WIN32_WINDOWS=0x502 -D_SETUPAPI_VER=0x502)
+ add_definitions(-DWINVER=0x502
+ -D_WIN32_IE=0x600
+ -D_WIN32_WINNT=0x502
+ -D_WIN32_WINDOWS=0x502
+ -D_SETUPAPI_VER=0x502)
# Arch Options
if(ARCH MATCHES i386)
add_definitions(-D_M_IX86 -D_X86_ -D__i386__)
elseif(ARCH MATCHES amd64)
- add_definitions(-D_M_AMD64 -D_AMD64_ -D_M_AXP64 -D__x86_64__ -D_WIN64)
+ add_definitions(-D_M_AMD64 -D_AMD64_ -D__x86_64__ -D_WIN64)
+ elseif(ARCH MATCHES arm)
+ # _M_ARM is already defined by toolchain
+ add_definitions(-D_ARM_ -D__arm__)
endif()
# Other
add_definitions(-DUSE_COMPILER_EXCEPTIONS -D_USE_32BIT_TIME_T)
elseif(ARCH MATCHES amd64)
add_definitions(-DUSE_COMPILER_EXCEPTIONS -DNO_UNDERSCORE_PREFIX)
+ elseif(ARCH MATCHES arm)
+ add_definitions(-DUSE_COMPILER_EXCEPTIONS)
endif()
include_directories(
include/reactos
include/reactos/libs)
+ if(ARCH MATCHES arm)
+ include_directories(${REACTOS_SOURCE_DIR}/include/reactos/arm)
+ endif()
+
if(MSVC)
include_directories(include/crt/msc)
else()
include_directories(include/crt/mingw32)
endif()
+ add_dependency_header()
+
add_subdirectory(include/psdk)
add_subdirectory(include/dxsdk)
add_subdirectory(include/reactos/idl)
add_subdirectory(ntoskrnl)
add_subdirectory(subsystems)
- # nci generated intermediate files
-
- list(APPEND nci_output
- ${REACTOS_BINARY_DIR}/ntoskrnl/include/internal/napi.h
- ${REACTOS_BINARY_DIR}/subsystems/win32/win32k/include/napi.h
- ${REACTOS_BINARY_DIR}/lib/ntdllsys/ntdll.S
- ${REACTOS_BINARY_DIR}/ntoskrnl/ex/zw.S
- ${REACTOS_BINARY_DIR}/lib/win32ksys/win32k.S
- ${REACTOS_BINARY_DIR}/dll/ntdll/def/ntsys.pspec)
-
- list(APPEND nci_folders
- ${CMAKE_CURRENT_BINARY_DIR}/dll/ntdll/def
- ${CMAKE_CURRENT_BINARY_DIR}/lib/ntdllsys/ntdll
- ${CMAKE_CURRENT_BINARY_DIR}/lib/win32ksys
- ${CMAKE_CURRENT_BINARY_DIR}/ntoskrnl/include/internal
- ${CMAKE_CURRENT_BINARY_DIR}/ntoskrnl/ex
- ${CMAKE_CURRENT_BINARY_DIR}/subsystems/win32/win32k/include)
-
- file(MAKE_DIRECTORY ${nci_folders})
-
- add_custom_command(
- OUTPUT ${nci_output}
- COMMAND native-nci -arch ${ARCH} ${REACTOS_SOURCE_DIR}/ntoskrnl/sysfuncs.lst ${REACTOS_SOURCE_DIR}/subsystems/win32/win32k/w32ksvc.db ${nci_output}
- DEPENDS native-nci ${nci_folders})
-
- set_source_files_properties(${nci_output} PROPERTIES GENERATED TRUE)
-
- add_custom_target(ntdll_S ALL DEPENDS ${REACTOS_BINARY_DIR}/lib/ntdllsys/ntdll.S)
- add_custom_target(win32k_S ALL DEPENDS ${REACTOS_BINARY_DIR}/lib/win32ksys/win32k.S)
- add_custom_target(ntsys_pspec ALL DEPENDS ${REACTOS_BINARY_DIR}/dll/ntdll/def/ntsys.pspec)
- add_custom_target(kernel_napi ALL DEPENDS ${REACTOS_BINARY_DIR}/ntoskrnl/include/internal/napi.h)
- add_custom_target(subsystem_napi ALL DEPENDS ${REACTOS_BINARY_DIR}/subsystems/win32/win32k/include/napi.h)
- add_custom_target(kernel_zw ALL DEPENDS ${REACTOS_BINARY_DIR}/ntoskrnl/ex/zw.S)
-
file(MAKE_DIRECTORY ${REACTOS_BINARY_DIR}/include/reactos)
- add_custom_command(
- OUTPUT ${REACTOS_BINARY_DIR}/include/reactos/buildno.h
- COMMAND native-buildno ${REACTOS_BINARY_DIR}/include/reactos/buildno.h
- DEPENDS ${REACTOS_SOURCE_DIR}/include/reactos/version.h)
-
add_custom_target(buildno_header ALL DEPENDS ${REACTOS_BINARY_DIR}/include/reactos/buildno.h)
file(MAKE_DIRECTORY ${REACTOS_BINARY_DIR}/subsystems/win32/win32k/dib)
add_custom_command(
OUTPUT ${OUTPUT_FILES}
COMMAND native-gendib ${REACTOS_BINARY_DIR}/subsystems/win32/win32k/dib
- DEPENDS native-gendib)
+ DEPENDS native-gendib)
add_custom_target(gendib_generated ALL DEPENDS ${OUTPUT_FILES})
#bootcd and livecd
include(ros_cd.cmake)
+ add_dependency_footer()
+
endif()