From 0e74512f1e211f04673dc792d7d8ef4de21f0d0e Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Mon, 27 Dec 2010 20:10:40 +0000 Subject: [PATCH] [CMAKE] - Improve amd64 toolchain support. svn path=/branches/cmake-bringup/; revision=50171 --- CMakeLists.txt | 293 +++++++++++++++++++++------------------- CMakeMacros.cmake | 7 +- config-amd64.cmake | 43 ++++++ gcc.cmake | 72 ++++++---- toolchain-mingw32.cmake | 5 + 5 files changed, 253 insertions(+), 167 deletions(-) create mode 100644 config-amd64.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 538b57ae51e..af2ddb2beda 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,48 +3,56 @@ cmake_minimum_required(VERSION 2.8) project(REACTOS) # 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) -add_definitions(-DTARGET_i386) -if(MSVC) -add_definitions(-Dinline=__inline) -endif() + if(ARCH MATCHES i386) + add_definitions(-DTARGET_i386) + if(MSVC) + add_definitions(-Dinline=__inline) + endif() + elseif(ARCH MATCHES amd64) + add_definitions(-DTARGET_amd64) + endif() -include_directories( - ${REACTOS_SOURCE_DIR}/tools/unicode - include - include/host - include/reactos - include/reactos/wine - ${REACTOS_BINARY_DIR}/include) + 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) + 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- ) -else() -export(TARGETS nci buildno gendib cabman cdmake mkhive spec2def geninc FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake NAMESPACE native- ) -endif() + if(NOT MSVC) + export(TARGETS widl nci buildno 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- ) + endif() else() -if(NOT DEFINED REACTOS_BUILD_TOOLS_DIR) - set(REACTOS_BUILD_TOOLS_DIR ${REACTOS_SOURCE_DIR}/build) -endif() + 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}) + 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) + include(msc.cmake) else() -include(gcc.cmake) + include(gcc.cmake) endif(MSVC) # Generic macros @@ -65,147 +73,154 @@ add_definitions(-D__REACTOS__) if(CMAKE_CROSSCOMPILING) -#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) + #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) -#Some useful variables -set(LIVECD_DIR "${REACTOS_BINARY_DIR}/boot/livecd") -set(BOOTCD_DIR "${REACTOS_BINARY_DIR}/boot/bootcd") + #Some useful variables + set(LIVECD_DIR "${REACTOS_BINARY_DIR}/boot/livecd") + set(BOOTCD_DIR "${REACTOS_BINARY_DIR}/boot/bootcd") -# Activate support for assembly source files -enable_language(ASM) + # Activate support for assembly source files + enable_language(ASM) -# Activate language support for resource files -enable_language(RC) + # Activate language support for resource files + enable_language(RC) + if(DBG) + add_definitions(-DDBG=1 -D_SEH_ENABLE_TRACE) + else() + add_definitions(-DDBG=0) + endif() -if(DBG) -add_definitions(-DDBG=1 -D_SEH_ENABLE_TRACE) -else() -add_definitions(-DDBG=0) -endif(DBG) + if(KDBG) + add_definitions(-DKDBG=1) + else() + add_definitions(-DKDBG=0) + endif() -if(KDBG) -add_definitions(-DKDBG=1) -else() -add_definitions(-DKDBG=0) -endif(KDBG) + # Version Options + add_definitions(-DWINVER=0x502 -D_WIN32_IE=0x600 -D_WIN32_WINNT=0x502 -D_WIN32_WINDOWS=0x502 -D_SETUPAPI_VER=0x502) -# Version Options -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) + endif() -# Arch Options -add_definitions(-D_M_IX86 -D_X86_ -D__i386__) + # Other + 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 -add_definitions(-DUSE_COMPILER_EXCEPTIONS -D_USE_32BIT_TIME_T) + include_directories( + 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( - 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) + if(MSVC) + include_directories(include/crt/msc) + else() + include_directories(include/crt/mingw32) + endif() -if(MSVC) -include_directories(include/crt/msc) -else() -include_directories(include/crt/mingw32) -endif(MSVC) + add_subdirectory(include/psdk) + add_subdirectory(include/dxsdk) + add_subdirectory(include/reactos/idl) + add_subdirectory(include/reactos/wine) + add_subdirectory(include/reactos/mc) + add_subdirectory(include/asm) -add_subdirectory(include/psdk) -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) -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) -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 -# 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 - ${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) -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}) -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( - 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) -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) -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) -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( - 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) -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 - ${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) + add_custom_command( + OUTPUT ${OUTPUT_FILES} + COMMAND native-gendib ${REACTOS_BINARY_DIR}/subsystems/win32/win32k/dib + DEPENDS native-gendib) -add_custom_command( - 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}) -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() diff --git a/CMakeMacros.cmake b/CMakeMacros.cmake index cda06dd15d0..5c0b50fc33b 100644 --- a/CMakeMacros.cmake +++ b/CMakeMacros.cmake @@ -241,10 +241,15 @@ endmacro() macro(add_idl_interface IDL_FILE) 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) add_custom_command( 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}) set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${FILE}_i.c PROPERTIES GENERATED TRUE) endmacro() diff --git a/config-amd64.cmake b/config-amd64.cmake new file mode 100644 index 00000000000..31b0609b82c --- /dev/null +++ b/config-amd64.cmake @@ -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.") diff --git a/gcc.cmake b/gcc.cmake index 02827568ecd..bbfa0fd4f54 100644 --- a/gcc.cmake +++ b/gcc.cmake @@ -24,16 +24,29 @@ set(CMAKE_RC_CREATE_SHARED_LIBRARY " ${rc_result_defs} ${rc_result_incs} -i -O coff -o ") endmacro() #idl files support 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_TYPELIB_ARG -t -T) #.tlb set(IDL_SERVER_ARG -s -S) #.c for server library diff --git a/toolchain-mingw32.cmake b/toolchain-mingw32.cmake index a93af7acc0e..6eed0060564 100644 --- a/toolchain-mingw32.cmake +++ b/toolchain-mingw32.cmake @@ -34,7 +34,12 @@ set(CMAKE_ASM_COMPILER ${MINGW_PREFIX}gcc) set(CMAKE_ASM_COMPILE_OBJECT " -x assembler-with-cpp -o -I${REACTOS_SOURCE_DIR}/include/asm -I${REACTOS_BINARY_DIR}/include/asm -D__ASM__ -c ") set(CMAKE_IDL_COMPILER native-widl) +if(ARCH MATCHES i386) set(CMAKE_IDL_COMPILE_OBJECT " -m32 --win32 -h -H ") +elseif(ARCH MATCHES amd64) +set(CMAKE_IDL_COMPILE_OBJECT " -m64 --win64 -h -H ") +endif() + set(CMAKE_RC_COMPILE_OBJECT " -i -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 ") set(CMAKE_C_CREATE_STATIC_LIBRARY "${MINGW_PREFIX}ar crs ")