- Improve amd64 toolchain support.

svn path=/branches/cmake-bringup/; revision=50171
This commit is contained in:
Amine Khaldi 2010-12-27 20:10:40 +00:00
parent c44d0d4055
commit 0e74512f1e
5 changed files with 253 additions and 167 deletions

View file

@ -3,48 +3,56 @@ cmake_minimum_required(VERSION 2.8)
project(REACTOS) project(REACTOS)
# Compile options # Compile options
include(config.cmake) if(ARCH MATCHES i386)
include(config.cmake)
elseif(ARCH MATCHES amd64)
include(config-amd64.cmake)
endif()
if(NOT CMAKE_CROSSCOMPILING) if(NOT CMAKE_CROSSCOMPILING)
add_definitions(-DTARGET_i386) if(ARCH MATCHES i386)
if(MSVC) add_definitions(-DTARGET_i386)
add_definitions(-Dinline=__inline) if(MSVC)
endif() add_definitions(-Dinline=__inline)
endif()
elseif(ARCH MATCHES amd64)
add_definitions(-DTARGET_amd64)
endif()
include_directories( include_directories(
${REACTOS_SOURCE_DIR}/tools/unicode ${REACTOS_SOURCE_DIR}/tools/unicode
include include
include/host include/host
include/reactos include/reactos
include/reactos/wine include/reactos/wine
${REACTOS_BINARY_DIR}/include) ${REACTOS_BINARY_DIR}/include)
add_subdirectory(tools) add_subdirectory(tools)
add_subdirectory(lib) add_subdirectory(lib)
if(NOT MSVC) 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 nci buildno gendib cabman cdmake mkhive spec2def geninc FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake NAMESPACE native- )
else() else()
export(TARGETS nci buildno gendib cabman cdmake mkhive spec2def geninc FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake NAMESPACE native- ) export(TARGETS nci buildno gendib cabman cdmake mkhive spec2def geninc FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake NAMESPACE native- )
endif() endif()
else() else()
if(NOT DEFINED REACTOS_BUILD_TOOLS_DIR) if(NOT DEFINED REACTOS_BUILD_TOOLS_DIR)
set(REACTOS_BUILD_TOOLS_DIR ${REACTOS_SOURCE_DIR}/build) set(REACTOS_BUILD_TOOLS_DIR ${REACTOS_SOURCE_DIR}/build)
endif() endif()
set(IMPORT_EXECUTABLES "${REACTOS_BUILD_TOOLS_DIR}/ImportExecutables.cmake" CACHE FILEPATH "Host executables") set(IMPORT_EXECUTABLES "${REACTOS_BUILD_TOOLS_DIR}/ImportExecutables.cmake" CACHE FILEPATH "Host executables")
include(${IMPORT_EXECUTABLES}) include(${IMPORT_EXECUTABLES})
endif(NOT CMAKE_CROSSCOMPILING) endif(NOT CMAKE_CROSSCOMPILING)
# Compiler specific definitions and macros # Compiler specific definitions and macros
if(MSVC) if(MSVC)
include(msc.cmake) include(msc.cmake)
else() else()
include(gcc.cmake) include(gcc.cmake)
endif(MSVC) endif(MSVC)
# Generic macros # Generic macros
@ -65,147 +73,154 @@ add_definitions(-D__REACTOS__)
if(CMAKE_CROSSCOMPILING) if(CMAKE_CROSSCOMPILING)
#Some cleanup #Some cleanup
file(REMOVE file(REMOVE
${REACTOS_BINARY_DIR}/boot/ros_livecd.txt ${REACTOS_BINARY_DIR}/boot/ros_livecd.txt
${REACTOS_BINARY_DIR}/boot/ros_livecd_target.txt ${REACTOS_BINARY_DIR}/boot/ros_livecd_target.txt
${REACTOS_BINARY_DIR}/boot/ros_minicd.txt ${REACTOS_BINARY_DIR}/boot/ros_minicd.txt
${REACTOS_BINARY_DIR}/boot/ros_minicd_target.txt ${REACTOS_BINARY_DIR}/boot/ros_minicd_target.txt
${REACTOS_BINARY_DIR}/boot/ros_cab.txt ${REACTOS_BINARY_DIR}/boot/ros_cab.txt
${REACTOS_BINARY_DIR}/boot/ros_cab_target.txt) ${REACTOS_BINARY_DIR}/boot/ros_cab_target.txt)
#Some useful variables #Some useful variables
set(LIVECD_DIR "${REACTOS_BINARY_DIR}/boot/livecd") set(LIVECD_DIR "${REACTOS_BINARY_DIR}/boot/livecd")
set(BOOTCD_DIR "${REACTOS_BINARY_DIR}/boot/bootcd") set(BOOTCD_DIR "${REACTOS_BINARY_DIR}/boot/bootcd")
# Activate support for assembly source files # Activate support for assembly source files
enable_language(ASM) enable_language(ASM)
# Activate language support for resource files # Activate language support for resource files
enable_language(RC) enable_language(RC)
if(DBG)
add_definitions(-DDBG=1 -D_SEH_ENABLE_TRACE)
else()
add_definitions(-DDBG=0)
endif()
if(DBG) if(KDBG)
add_definitions(-DDBG=1 -D_SEH_ENABLE_TRACE) add_definitions(-DKDBG=1)
else() else()
add_definitions(-DDBG=0) add_definitions(-DKDBG=0)
endif(DBG) endif()
if(KDBG) # Version Options
add_definitions(-DKDBG=1) add_definitions(-DWINVER=0x502 -D_WIN32_IE=0x600 -D_WIN32_WINNT=0x502 -D_WIN32_WINDOWS=0x502 -D_SETUPAPI_VER=0x502)
else()
add_definitions(-DKDBG=0)
endif(KDBG)
# Version Options # Arch Options
add_definitions(-DWINVER=0x502 -D_WIN32_IE=0x600 -D_WIN32_WINNT=0x502 -D_WIN32_WINDOWS=0x502 -D_SETUPAPI_VER=0x502) 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)
endif()
# Arch Options # Other
add_definitions(-D_M_IX86 -D_X86_ -D__i386__) if(ARCH MATCHES i386)
add_definitions(-DUSE_COMPILER_EXCEPTIONS -D_USE_32BIT_TIME_T)
elseif(ARCH MATCHES amd64)
add_definitions(-DUSE_COMPILER_EXCEPTIONS -DNO_UNDERSCORE_PREFIX)
endif()
# Other include_directories(
add_definitions(-DUSE_COMPILER_EXCEPTIONS -D_USE_32BIT_TIME_T) include
include/psdk
include/dxsdk
${REACTOS_BINARY_DIR}/include
${REACTOS_BINARY_DIR}/include/dxsdk
${REACTOS_BINARY_DIR}/include/psdk
${REACTOS_BINARY_DIR}/include/reactos
include/crt
include/ddk
include/ndk
include/reactos
include/reactos/libs)
include_directories( if(MSVC)
include include_directories(include/crt/msc)
include/psdk else()
include/dxsdk include_directories(include/crt/mingw32)
${REACTOS_BINARY_DIR}/include endif()
${REACTOS_BINARY_DIR}/include/dxsdk
${REACTOS_BINARY_DIR}/include/psdk
${REACTOS_BINARY_DIR}/include/reactos
include/crt
include/ddk
include/ndk
include/reactos
include/reactos/libs)
if(MSVC) add_subdirectory(include/psdk)
include_directories(include/crt/msc) add_subdirectory(include/dxsdk)
else() add_subdirectory(include/reactos/idl)
include_directories(include/crt/mingw32) add_subdirectory(include/reactos/wine)
endif(MSVC) add_subdirectory(include/reactos/mc)
add_subdirectory(include/asm)
add_subdirectory(include/psdk) include(baseaddress.cmake)
add_subdirectory(include/dxsdk)
add_subdirectory(include/reactos/idl)
add_subdirectory(include/reactos/wine)
add_subdirectory(include/reactos/mc)
add_subdirectory(include/asm)
include(baseaddress.cmake) add_subdirectory(base)
add_subdirectory(boot)
add_subdirectory(dll)
add_subdirectory(drivers)
add_subdirectory(hal)
add_subdirectory(lib)
add_subdirectory(media)
add_subdirectory(modules)
add_subdirectory(ntoskrnl)
add_subdirectory(subsystems)
add_subdirectory(base) # nci generated intermediate files
add_subdirectory(boot)
add_subdirectory(dll)
add_subdirectory(drivers)
add_subdirectory(hal)
add_subdirectory(lib)
add_subdirectory(media)
add_subdirectory(modules)
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_output list(APPEND nci_folders
${REACTOS_BINARY_DIR}/ntoskrnl/include/internal/napi.h ${CMAKE_CURRENT_BINARY_DIR}/dll/ntdll/def
${REACTOS_BINARY_DIR}/subsystems/win32/win32k/include/napi.h ${CMAKE_CURRENT_BINARY_DIR}/lib/ntdllsys/ntdll
${REACTOS_BINARY_DIR}/lib/ntdllsys/ntdll.S ${CMAKE_CURRENT_BINARY_DIR}/lib/win32ksys
${REACTOS_BINARY_DIR}/ntoskrnl/ex/zw.S ${CMAKE_CURRENT_BINARY_DIR}/ntoskrnl/include/internal
${REACTOS_BINARY_DIR}/lib/win32ksys/win32k.S ${CMAKE_CURRENT_BINARY_DIR}/ntoskrnl/ex
${REACTOS_BINARY_DIR}/dll/ntdll/def/ntsys.pspec) ${CMAKE_CURRENT_BINARY_DIR}/subsystems/win32/win32k/include)
list(APPEND nci_folders file(MAKE_DIRECTORY ${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})
add_custom_command( set_source_files_properties(${nci_output} PROPERTIES GENERATED TRUE)
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)
add_custom_target(ntdll_S ALL DEPENDS ${REACTOS_BINARY_DIR}/lib/ntdllsys/ntdll.S) file(MAKE_DIRECTORY ${REACTOS_BINARY_DIR}/include/reactos)
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_command( add_custom_target(buildno_header ALL DEPENDS ${REACTOS_BINARY_DIR}/include/reactos/buildno.h)
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)
file(MAKE_DIRECTORY ${REACTOS_BINARY_DIR}/subsystems/win32/win32k/dib) list(APPEND OUTPUT_FILES
${REACTOS_BINARY_DIR}/subsystems/win32/win32k/dib/dib8gen.c
${REACTOS_BINARY_DIR}/subsystems/win32/win32k/dib/dib16gen.c
${REACTOS_BINARY_DIR}/subsystems/win32/win32k/dib/dib32gen.c)
list(APPEND OUTPUT_FILES add_custom_command(
${REACTOS_BINARY_DIR}/subsystems/win32/win32k/dib/dib8gen.c OUTPUT ${OUTPUT_FILES}
${REACTOS_BINARY_DIR}/subsystems/win32/win32k/dib/dib16gen.c COMMAND native-gendib ${REACTOS_BINARY_DIR}/subsystems/win32/win32k/dib
${REACTOS_BINARY_DIR}/subsystems/win32/win32k/dib/dib32gen.c) DEPENDS native-gendib)
add_custom_command( add_custom_target(gendib_generated ALL DEPENDS ${OUTPUT_FILES})
OUTPUT ${OUTPUT_FILES}
COMMAND native-gendib ${REACTOS_BINARY_DIR}/subsystems/win32/win32k/dib
DEPENDS native-gendib)
add_custom_target(gendib_generated ALL DEPENDS ${OUTPUT_FILES}) file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/importlibs)
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/importlibs) #bootcd and livecd
include(ros_cd.cmake)
#bootcd and livecd
include(ros_cd.cmake)
endif() endif()

View file

@ -241,10 +241,15 @@ endmacro()
macro(add_idl_interface IDL_FILE) macro(add_idl_interface IDL_FILE)
custom_incdefs() custom_incdefs()
if(ARCH MATCHES i386)
set(platform_flags "-m32 --win32")
elseif(ARCH MATCHES amd64)
set(platform_flags "-m64 --win64")
endif()
get_filename_component(FILE ${IDL_FILE} NAME_WE) get_filename_component(FILE ${IDL_FILE} NAME_WE)
add_custom_command( add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_i.c OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_i.c
COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} -m32 --win32 -u -U ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_i.c ${CMAKE_CURRENT_SOURCE_DIR}/${IDL_FILE} COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} ${platform_flags} -u -U ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_i.c ${CMAKE_CURRENT_SOURCE_DIR}/${IDL_FILE}
DEPENDS ${IDL_FILE}) DEPENDS ${IDL_FILE})
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${FILE}_i.c PROPERTIES GENERATED TRUE) set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${FILE}_i.c PROPERTIES GENERATED TRUE)
endmacro() endmacro()

43
config-amd64.cmake Normal file
View file

@ -0,0 +1,43 @@
set(SARCH "" CACHE STRING
"Sub-architecture to build for.")
set(OARCH "athlon64" CACHE STRING
"Generate instructions for this CPU type. Specify one of:
k8 opteron athlon64 athlon-fx")
set (OPTIMIZE "1" CACHE STRING
"What level of optimisation to use.
0 = off
1 = Default option, optimize for size (-Os) with some additional options
2 = -Os
3 = -O1
4 = -O2
5 = -O3")
set(DBG TRUE CACHE BOOL
"Whether to compile for debugging.")
set(KDBG FALSE CACHE BOOL
"Whether to compile in the integrated kernel debugger.")
set(GDB FALSE CACHE BOOL
"Whether to compile for debugging with GDB.
If you don't use GDB, don't enable this.")
set(_WINKD_ TRUE CACHE BOOL
"Whether to compile with the KD protocol.")
set(_ELF_ FALSE CACHE BOOL
"Whether to compile support for ELF files.
Do not enable unless you know what you're doing.")
set(NSWPAT FALSE CACHE BOOL
"Whether to compile apps/libs with features covered software patents or not.
If you live in a country where software patents are valid/apply, don't
enable this (except they/you purchased a license from the patent owner).
This settings is disabled (0) by default.")
set(USERMODE TRUE CACHE BOOL
"Whether to compile any usermode parts. This is while kernel mode is under
heavy development and usermode part not relevant for bootcd.")

View file

@ -24,16 +24,29 @@ set(CMAKE_RC_CREATE_SHARED_LIBRARY "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_F
add_definitions(-gdwarf-2 -g2 -femit-struct-debug-detailed=none -feliminate-unused-debug-types) add_definitions(-gdwarf-2 -g2 -femit-struct-debug-detailed=none -feliminate-unused-debug-types)
# Tuning # Tuning
add_definitions(-march=pentium -mtune=i686) if(ARCH MATCHES i386)
add_definitions(-march=${OARCH} -mtune=${TUNE})
elseif(ARCH MATCHES amd64)
add_definitions(-march=${OARCH})
endif()
# Warnings # Warnings
add_definitions(-Wall -Wno-char-subscripts -Wpointer-arith -Wno-multichar -Wno-error=uninitialized -Wno-unused-value -Winvalid-pch) add_definitions(-Wall -Wno-char-subscripts -Wpointer-arith -Wno-multichar -Wno-error=uninitialized -Wno-unused-value -Winvalid-pch)
# Optimizations # Optimizations
add_definitions(-Os -fno-strict-aliasing -ftracer -momit-leaf-frame-pointer -mpreferred-stack-boundary=2 -fno-set-stack-executable -fno-optimize-sibling-calls) if(ARCH MATCHES i386)
add_definitions(-Os -fno-strict-aliasing -ftracer -momit-leaf-frame-pointer -mpreferred-stack-boundary=2 -fno-set-stack-executable -fno-optimize-sibling-calls)
elseif(ARCH MATCHES amd64)
add_definitions(-Os -fno-strict-aliasing -ftracer -momit-leaf-frame-pointer -mpreferred-stack-boundary=4)
endif()
# Other
if(ARCH MATCHES amd64)
add_definitions(-U_X86_ -UWIN32)
endif()
# Macros # Macros
MACRO(_PCH_GET_COMPILE_FLAGS _target_name _out_compile_flags _header_filename) macro(_PCH_GET_COMPILE_FLAGS _target_name _out_compile_flags _header_filename)
# Add the precompiled header to the build # Add the precompiled header to the build
get_filename_component(FILE ${_header_filename} NAME) get_filename_component(FILE ${_header_filename} NAME)
set(_gch_filename "${_target_name}_${FILE}.gch") set(_gch_filename "${_target_name}_${FILE}.gch")
@ -43,7 +56,7 @@ MACRO(_PCH_GET_COMPILE_FLAGS _target_name _out_compile_flags _header_filename)
get_directory_property(DIRINC INCLUDE_DIRECTORIES) get_directory_property(DIRINC INCLUDE_DIRECTORIES)
foreach(item ${DIRINC}) foreach(item ${DIRINC})
list(APPEND ${_out_compile_flags} -I${item}) list(APPEND ${_out_compile_flags} -I${item})
endforeach(item) endforeach()
# This is a particular bit of undocumented/hacky magic I'm quite proud of # This is a particular bit of undocumented/hacky magic I'm quite proud of
get_directory_property(_compiler_flags DEFINITIONS) get_directory_property(_compiler_flags DEFINITIONS)
@ -55,11 +68,11 @@ MACRO(_PCH_GET_COMPILE_FLAGS _target_name _out_compile_flags _header_filename)
if (_target_defs) if (_target_defs)
foreach(item ${_target_defs}) foreach(item ${_target_defs})
list(APPEND ${_out_compile_flags} -D${item}) list(APPEND ${_out_compile_flags} -D${item})
endforeach(item) endforeach()
endif() endif()
ENDMACRO(_PCH_GET_COMPILE_FLAGS) endmacro()
MACRO(add_pch _target_name _header_filename _src_list) macro(add_pch _target_name _header_filename _src_list)
get_filename_component(FILE ${_header_filename} NAME) get_filename_component(FILE ${_header_filename} NAME)
set(_gch_filename "${_target_name}_${FILE}.gch") set(_gch_filename "${_target_name}_${FILE}.gch")
list(APPEND ${_src_list} ${_gch_filename}) list(APPEND ${_src_list} ${_gch_filename})
@ -69,7 +82,7 @@ MACRO(add_pch _target_name _header_filename _src_list)
OUTPUT ${_gch_filename} OUTPUT ${_gch_filename}
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1} ${_args} COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1} ${_args}
DEPENDS ${_header_filename}) DEPENDS ${_header_filename})
ENDMACRO(add_pch _target_name _header_filename _src_list) endmacro()
macro(add_linkerflag MODULE _flag) macro(add_linkerflag MODULE _flag)
set(NEW_LINKER_FLAGS ${_flag}) set(NEW_LINKER_FLAGS ${_flag})
@ -99,10 +112,9 @@ endmacro()
macro(set_module_type MODULE TYPE) macro(set_module_type MODULE TYPE)
add_dependencies(${MODULE} psdk buildno_header) add_dependencies(${MODULE} psdk buildno_header)
if(${IS_CPP}) if(${IS_CPP})
target_link_libraries(${MODULE} stlport -lsupc++ -lgcc) target_link_libraries(${MODULE} stlport -lsupc++ -lgcc)
endif() endif()
if(${TYPE} MATCHES nativecui) if(${TYPE} MATCHES nativecui)
set_subsystem(${MODULE} native) set_subsystem(${MODULE} native)
@ -115,7 +127,7 @@ macro(set_module_type MODULE TYPE)
else() else()
target_link_libraries(${MODULE} mingw_wmain) target_link_libraries(${MODULE} mingw_wmain)
endif(NOT IS_UNICODE) endif(NOT IS_UNICODE)
target_link_libraries(${MODULE} mingw_common) target_link_libraries(${MODULE} mingw_common)
elseif(${TYPE} MATCHES win32cui) elseif(${TYPE} MATCHES win32cui)
set_subsystem(${MODULE} console) set_subsystem(${MODULE} console)
set_entrypoint(${MODULE} mainCRTStartup) set_entrypoint(${MODULE} mainCRTStartup)
@ -124,15 +136,15 @@ macro(set_module_type MODULE TYPE)
else() else()
target_link_libraries(${MODULE} mingw_wmain) target_link_libraries(${MODULE} mingw_wmain)
endif(NOT IS_UNICODE) endif(NOT IS_UNICODE)
target_link_libraries(${MODULE} mingw_common) target_link_libraries(${MODULE} mingw_common)
elseif(${TYPE} MATCHES win32dll) elseif(${TYPE} MATCHES win32dll)
set_entrypoint(${MODULE} DllMainCRTStartup@12) set_entrypoint(${MODULE} DllMainCRTStartup@12)
target_link_libraries(${MODULE} mingw_dllmain mingw_common) target_link_libraries(${MODULE} mingw_dllmain mingw_common)
if(DEFINED baseaddress_${MODULE}) if(DEFINED baseaddress_${MODULE})
set_image_base(${MODULE} ${baseaddress_${MODULE}}) set_image_base(${MODULE} ${baseaddress_${MODULE}})
else() else()
message(STATUS "${MODULE} has no base address") message(STATUS "${MODULE} has no base address")
endif() endif()
elseif(${TYPE} MATCHES win32ocx) elseif(${TYPE} MATCHES win32ocx)
set_entrypoint(${MODULE} DllMainCRTStartup@12) set_entrypoint(${MODULE} DllMainCRTStartup@12)
target_link_libraries(${MODULE} mingw_dllmain mingw_common) target_link_libraries(${MODULE} mingw_dllmain mingw_common)
@ -142,14 +154,14 @@ macro(set_module_type MODULE TYPE)
target_link_libraries(${MODULE} mingw_dllmain mingw_common) target_link_libraries(${MODULE} mingw_dllmain mingw_common)
set_target_properties(${MODULE} PROPERTIES SUFFIX ".cpl") set_target_properties(${MODULE} PROPERTIES SUFFIX ".cpl")
elseif(${TYPE} MATCHES kernelmodedriver) elseif(${TYPE} MATCHES kernelmodedriver)
set_target_properties(${MODULE} PROPERTIES LINK_FLAGS "-Wl,--exclude-all-symbols -Wl,-file-alignment=0x1000 -Wl,-section-alignment=0x1000" SUFFIX ".sys") set_target_properties(${MODULE} PROPERTIES LINK_FLAGS "-Wl,--exclude-all-symbols -Wl,-file-alignment=0x1000 -Wl,-section-alignment=0x1000" SUFFIX ".sys")
set_entrypoint(${MODULE} DriverEntry@8) set_entrypoint(${MODULE} DriverEntry@8)
set_subsystem(${MODULE} native) set_subsystem(${MODULE} native)
set_image_base(${MODULE} 0x00010000) set_image_base(${MODULE} 0x00010000)
add_dependencies(${MODULE} bugcodes) add_dependencies(${MODULE} bugcodes)
elseif(${TYPE} MATCHES nativedll) elseif(${TYPE} MATCHES nativedll)
set_subsystem(${MODULE} native) set_subsystem(${MODULE} native)
else() else()
message(FATAL_ERROR "Unknown module type : ${TYPE}") message(FATAL_ERROR "Unknown module type : ${TYPE}")
endif() endif()
endmacro() endmacro()
@ -166,18 +178,24 @@ macro(set_rc_compiler)
foreach(arg ${defines}) foreach(arg ${defines})
set(rc_result_defs "${rc_result_defs} -D${arg}") set(rc_result_defs "${rc_result_defs} -D${arg}")
endforeach(arg ${defines}) endforeach()
foreach(arg ${includes}) foreach(arg ${includes})
set(rc_result_incs "-I${arg} ${rc_result_incs}") set(rc_result_incs "-I${arg} ${rc_result_incs}")
endforeach(arg ${includes}) endforeach()
set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> ${rc_result_defs} ${rc_result_incs} -i <SOURCE> -O coff -o <OBJECT>") set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> ${rc_result_defs} ${rc_result_incs} -i <SOURCE> -O coff -o <OBJECT>")
endmacro() endmacro()
#idl files support #idl files support
set(IDL_COMPILER native-widl) set(IDL_COMPILER native-widl)
set(IDL_FLAGS -m32 --win32)
if(ARCH MATCHES i386)
set(IDL_FLAGS -m32 --win32)
elseif(ARCH MATCHES amd64)
set(IDL_FLAGS -m64 --win64)
endif()
set(IDL_HEADER_ARG -h -H) #.h set(IDL_HEADER_ARG -h -H) #.h
set(IDL_TYPELIB_ARG -t -T) #.tlb set(IDL_TYPELIB_ARG -t -T) #.tlb
set(IDL_SERVER_ARG -s -S) #.c for server library set(IDL_SERVER_ARG -s -S) #.c for server library

View file

@ -34,7 +34,12 @@ set(CMAKE_ASM_COMPILER ${MINGW_PREFIX}gcc)
set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> -x assembler-with-cpp -o <OBJECT> -I${REACTOS_SOURCE_DIR}/include/asm -I${REACTOS_BINARY_DIR}/include/asm <FLAGS> <DEFINES> -D__ASM__ -c <SOURCE>") set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> -x assembler-with-cpp -o <OBJECT> -I${REACTOS_SOURCE_DIR}/include/asm -I${REACTOS_BINARY_DIR}/include/asm <FLAGS> <DEFINES> -D__ASM__ -c <SOURCE>")
set(CMAKE_IDL_COMPILER native-widl) set(CMAKE_IDL_COMPILER native-widl)
if(ARCH MATCHES i386)
set(CMAKE_IDL_COMPILE_OBJECT "<CMAKE_IDL_COMPILER> <FLAGS> <DEFINES> -m32 --win32 -h -H <OBJECT> <SOURCE>") set(CMAKE_IDL_COMPILE_OBJECT "<CMAKE_IDL_COMPILER> <FLAGS> <DEFINES> -m32 --win32 -h -H <OBJECT> <SOURCE>")
elseif(ARCH MATCHES amd64)
set(CMAKE_IDL_COMPILE_OBJECT "<CMAKE_IDL_COMPILER> <FLAGS> <DEFINES> -m64 --win64 -h -H <OBJECT> <SOURCE>")
endif()
set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> -i <SOURCE> <CMAKE_C_LINK_FLAGS> <DEFINES> -I${REACTOS_SOURCE_DIR}/include/psdk -I${REACTOS_BINARY_DIR}/include/psdk -I${REACTOS_SOURCE_DIR}/include/ -I${REACTOS_SOURCE_DIR}/include/reactos -I${REACTOS_BINARY_DIR}/include/reactos -I${REACTOS_SOURCE_DIR}/include/reactos/wine -I${REACTOS_SOURCE_DIR}/include/crt -I${REACTOS_SOURCE_DIR}/include/crt/mingw32 -O coff -o <OBJECT> ") set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> -i <SOURCE> <CMAKE_C_LINK_FLAGS> <DEFINES> -I${REACTOS_SOURCE_DIR}/include/psdk -I${REACTOS_BINARY_DIR}/include/psdk -I${REACTOS_SOURCE_DIR}/include/ -I${REACTOS_SOURCE_DIR}/include/reactos -I${REACTOS_BINARY_DIR}/include/reactos -I${REACTOS_SOURCE_DIR}/include/reactos/wine -I${REACTOS_SOURCE_DIR}/include/crt -I${REACTOS_SOURCE_DIR}/include/crt/mingw32 -O coff -o <OBJECT> ")
set(CMAKE_C_CREATE_STATIC_LIBRARY "${MINGW_PREFIX}ar crs <TARGET> <LINK_FLAGS> <OBJECTS>") set(CMAKE_C_CREATE_STATIC_LIBRARY "${MINGW_PREFIX}ar crs <TARGET> <LINK_FLAGS> <OBJECTS>")