From a0cb673c96c1a831536ae0bcc1ebc0a2afe45830 Mon Sep 17 00:00:00 2001 From: Steve MacLean Date: Fri, 24 Jan 2020 17:09:26 -0500 Subject: [PATCH] Refactor CMake system to allow cross OS DAC compile (#2054) * Refactor CMake system to allow cross OS DAC compile Add CLR_CMAKE_HOST_OS Add rules to determine which cross OS combinations are valid Make add_definitions depend on TARGET OS properties. Wherever reasonable make C++ defines depend on runtime target rather than host. --- eng/native/configureplatform.cmake | 95 ++++++++++++++++++++++++++-- src/coreclr/clrdefinitions.cmake | 106 ++++++++++++++++---------------- src/coreclr/clrfeatures.cmake | 2 +- src/coreclr/configurecompiler.cmake | 8 ++- src/coreclr/crosscomponents.cmake | 14 +++-- src/coreclr/src/utilcode/CMakeLists.txt | 4 +- src/coreclr/src/vm/CMakeLists.txt | 6 +- 7 files changed, 167 insertions(+), 68 deletions(-) diff --git a/eng/native/configureplatform.cmake b/eng/native/configureplatform.cmake index f529f7e..2f2f2d4 100644 --- a/eng/native/configureplatform.cmake +++ b/eng/native/configureplatform.cmake @@ -13,6 +13,7 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON) # - for non-windows build platform & architecture is detected using inbuilt CMAKE variables and cross target component configure # - for windows we use the passed in parameter to CMAKE to determine build arch #---------------------------------------- +set(CLR_CMAKE_HOST_OS ${CMAKE_SYSTEM_NAME}) if(CMAKE_SYSTEM_NAME STREQUAL Linux) set(CLR_CMAKE_HOST_UNIX 1) if(CLR_CROSS_COMPONENTS_BUILD) @@ -67,8 +68,10 @@ if(CMAKE_SYSTEM_NAME STREQUAL Linux) if(DEFINED CLR_CMAKE_LINUX_ID) if(CLR_CMAKE_LINUX_ID STREQUAL tizen) set(CLR_CMAKE_TARGET_TIZEN_LINUX 1) + set(CLR_CMAKE_HOST_OS ${CLR_CMAKE_LINUX_ID}) elseif(CLR_CMAKE_LINUX_ID STREQUAL alpine) set(CLR_CMAKE_HOST_ALPINE_LINUX 1) + set(CLR_CMAKE_HOST_OS ${CLR_CMAKE_LINUX_ID}) endif() endif(DEFINED CLR_CMAKE_LINUX_ID) endif(CMAKE_SYSTEM_NAME STREQUAL Linux) @@ -113,6 +116,11 @@ if(CMAKE_SYSTEM_NAME STREQUAL SunOS) set(CLR_CMAKE_HOST_SUNOS 1) endif(CMAKE_SYSTEM_NAME STREQUAL SunOS) +if(CMAKE_SYSTEM_NAME STREQUAL Windows) + set(CLR_CMAKE_HOST_OS Windows_NT) +endif(CMAKE_SYSTEM_NAME STREQUAL Windows) + + #-------------------------------------------- # This repo builds two set of binaries # 1. binaries which execute on target arch machine @@ -174,9 +182,88 @@ if (CLR_CMAKE_TARGET_ARCH STREQUAL x64) clr_unknown_arch() endif() -# check if host & target arch combination are valid -if(NOT(CLR_CMAKE_TARGET_ARCH STREQUAL CLR_CMAKE_HOST_ARCH)) - if(NOT((CLR_CMAKE_HOST_ARCH_AMD64 AND CLR_CMAKE_TARGET_ARCH_ARM64) OR (CLR_CMAKE_HOST_ARCH_I386 AND CLR_CMAKE_TARGET_ARCH_ARM) OR (CLR_CMAKE_HOST_ARCH_AMD64 AND CLR_CMAKE_TARGET_ARCH_ARM))) - message(FATAL_ERROR "Invalid host and target arch combination") +# Set TARGET architecture variables +# Target os will be a cmake param (optional) for both windows as well as non-windows build +# if target os is not specified then host & target os are same +if (NOT DEFINED CLR_CMAKE_TARGET_OS OR CLR_CMAKE_TARGET_OS STREQUAL "" ) + set(CLR_CMAKE_TARGET_OS ${CLR_CMAKE_HOST_OS}) +endif() + +if(CLR_CMAKE_TARGET_OS STREQUAL Linux) + set(CLR_CMAKE_TARGET_UNIX 1) + set(CLR_CMAKE_TARGET_LINUX 1) +endif(CLR_CMAKE_TARGET_OS STREQUAL Linux) + +if(CLR_CMAKE_TARGET_OS STREQUAL tizen) + set(CLR_CMAKE_TARGET_UNIX 1) + set(CLR_CMAKE_TARGET_LINUX 1) + set(CLR_CMAKE_TARGET_TIZEN_LINUX 1) +endif(CLR_CMAKE_TARGET_OS STREQUAL tizen) + +if(CLR_CMAKE_TARGET_OS STREQUAL alpine) + set(CLR_CMAKE_TARGET_UNIX 1) + set(CLR_CMAKE_TARGET_LINUX 1) + set(CLR_CMAKE_TARGET_ALPINE_LINUX 1) +endif(CLR_CMAKE_TARGET_OS STREQUAL alpine) + +if(CLR_CMAKE_TARGET_OS STREQUAL Darwin) + set(CLR_CMAKE_TARGET_UNIX 1) + set(CLR_CMAKE_TARGET_DARWIN 1) +endif(CLR_CMAKE_TARGET_OS STREQUAL Darwin) + +if(CLR_CMAKE_TARGET_OS STREQUAL FreeBSD) + set(CLR_CMAKE_TARGET_UNIX 1) + set(CLR_CMAKE_TARGET_FREEBSD 1) +endif(CLR_CMAKE_TARGET_OS STREQUAL FreeBSD) + +if(CLR_CMAKE_TARGET_OS STREQUAL OpenBSD) + set(CLR_CMAKE_TARGET_UNIX 1) + set(CLR_CMAKE_TARGET_OPENBSD 1) +endif(CLR_CMAKE_TARGET_OS STREQUAL OpenBSD) + +if(CLR_CMAKE_TARGET_OS STREQUAL NetBSD) + set(CLR_CMAKE_TARGET_UNIX 1) + set(CLR_CMAKE_TARGET_NETBSD 1) +endif(CLR_CMAKE_TARGET_OS STREQUAL NetBSD) + +if(CLR_CMAKE_TARGET_OS STREQUAL SunOS) + set(CLR_CMAKE_TARGET_UNIX 1) + set(CLR_CMAKE_TARGET_SUNOS 1) +endif(CLR_CMAKE_TARGET_OS STREQUAL SunOS) + +if(CLR_CMAKE_TARGET_UNIX) + if(CLR_CMAKE_TARGET_ARCH STREQUAL x64) + set(CLR_CMAKE_TARGET_UNIX_AMD64 1) + elseif(CLR_CMAKE_TARGET_ARCH STREQUAL armel) + set(CLR_CMAKE_TARGET_UNIX_ARM 1) + elseif(CLR_CMAKE_TARGET_ARCH STREQUAL arm) + set(CLR_CMAKE_TARGET_UNIX_ARM 1) + elseif(CLR_CMAKE_TARGET_ARCH STREQUAL arm64) + set(CLR_CMAKE_TARGET_UNIX_ARM64 1) + elseif(CLR_CMAKE_TARGET_ARCH STREQUAL x86) + set(CLR_CMAKE_TARGET_UNIX_X86 1) + else() + clr_unknown_arch() + endif() +else() + set(CLR_CMAKE_TARGET_WIN32 1) +endif(CLR_CMAKE_TARGET_UNIX) + +# check if host & target os/arch combination are valid +if (CLR_CMAKE_TARGET_OS STREQUAL CLR_CMAKE_HOST_OS) + if(NOT(CLR_CMAKE_TARGET_ARCH STREQUAL CLR_CMAKE_HOST_ARCH)) + if(NOT((CLR_CMAKE_HOST_ARCH_AMD64 AND CLR_CMAKE_TARGET_ARCH_ARM64) OR (CLR_CMAKE_HOST_ARCH_I386 AND CLR_CMAKE_TARGET_ARCH_ARM) OR (CLR_CMAKE_HOST_ARCH_AMD64 AND CLR_CMAKE_TARGET_ARCH_ARM))) + message(FATAL_ERROR "Invalid platform and target arch combination") + endif() + endif() +else() + if(NOT (CLR_CMAKE_HOST_OS STREQUAL Windows_NT)) + message(FATAL_ERROR "Invalid host and target os/arch combination. Host OS: ${CLR_CMAKE_HOST_OS}") + endif() + if(NOT (CLR_CMAKE_TARGET_LINUX OR CLR_CMAKE_TARGET_ALPINE_LINUX)) + message(FATAL_ERROR "Invalid host and target os/arch combination. Target OS: ${CLR_CMAKE_TARGET_OS}") + endif() + if(NOT ((CLR_CMAKE_HOST_ARCH_AMD64 AND (CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_ARM64)) OR (CLR_CMAKE_HOST_ARCH_I386 AND CLR_CMAKE_TARGET_ARCH_ARM))) + message(FATAL_ERROR "Invalid host and target os/arch combination. Host Arch: ${CLR_CMAKE_HOST_ARCH} Target Arch: ${CLR_CMAKE_TARGET_ARCH}") endif() endif() diff --git a/src/coreclr/clrdefinitions.cmake b/src/coreclr/clrdefinitions.cmake index 58706f8..a266d29 100644 --- a/src/coreclr/clrdefinitions.cmake +++ b/src/coreclr/clrdefinitions.cmake @@ -17,7 +17,7 @@ add_compile_definitions($<$>:FEATURE_ add_compile_definitions($<$>:SELF_NO_HOST>) if (CLR_CMAKE_TARGET_ARCH_AMD64) - if (CLR_CMAKE_HOST_UNIX) + if (CLR_CMAKE_TARGET_UNIX) add_definitions(-DDBG_TARGET_AMD64_UNIX) endif() add_definitions(-D_TARGET_AMD64_) @@ -25,7 +25,7 @@ if (CLR_CMAKE_TARGET_ARCH_AMD64) add_definitions(-DDBG_TARGET_64BIT) add_definitions(-DDBG_TARGET_AMD64) elseif (CLR_CMAKE_TARGET_ARCH_ARM64) - if (CLR_CMAKE_HOST_UNIX) + if (CLR_CMAKE_TARGET_UNIX) add_definitions(-DDBG_TARGET_ARM64_UNIX) add_definitions(-DFEATURE_EMULATE_SINGLESTEP) endif() @@ -35,13 +35,13 @@ elseif (CLR_CMAKE_TARGET_ARCH_ARM64) add_definitions(-DDBG_TARGET_ARM64) add_definitions(-DFEATURE_MULTIREG_RETURN) elseif (CLR_CMAKE_TARGET_ARCH_ARM) - if (CLR_CMAKE_HOST_UNIX) + if (CLR_CMAKE_TARGET_UNIX) add_definitions(-DDBG_TARGET_ARM_UNIX) elseif (WIN32 AND NOT DEFINED CLR_CROSS_COMPONENTS_BUILD) # Set this to ensure we can use Arm SDK for Desktop binary linkage when doing native (Arm32) build add_definitions(-D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE) add_definitions(-D_ARM_WORKAROUND_) - endif (CLR_CMAKE_HOST_UNIX) + endif (CLR_CMAKE_TARGET_UNIX) add_definitions(-D_TARGET_ARM_) add_definitions(-DDBG_TARGET_32BIT) add_definitions(-DDBG_TARGET_ARM) @@ -54,12 +54,12 @@ else () clr_unknown_arch() endif (CLR_CMAKE_TARGET_ARCH_AMD64) -if (CLR_CMAKE_HOST_UNIX) +if (CLR_CMAKE_TARGET_UNIX) - if(CLR_CMAKE_HOST_DARWIN) + if(CLR_CMAKE_TARGET_DARWIN) add_definitions(-D_XOPEN_SOURCE) add_definitions(-DFEATURE_DATATARGET4) - endif(CLR_CMAKE_HOST_DARWIN) + endif(CLR_CMAKE_TARGET_DARWIN) if (CLR_CMAKE_TARGET_ARCH_AMD64) add_definitions(-DUNIX_AMD64_ABI) @@ -69,13 +69,13 @@ if (CLR_CMAKE_HOST_UNIX) add_definitions(-DUNIX_X86_ABI) endif() -endif(CLR_CMAKE_HOST_UNIX) +endif(CLR_CMAKE_TARGET_UNIX) -if(CLR_CMAKE_HOST_ALPINE_LINUX) +if(CLR_CMAKE_TARGET_ALPINE_LINUX) # Alpine Linux doesn't have fixed stack limit, this define disables some stack pointer # sanity checks in debug / checked build that rely on a fixed stack limit add_definitions(-DNO_FIXED_STACK_LIMIT) -endif(CLR_CMAKE_HOST_ALPINE_LINUX) +endif(CLR_CMAKE_TARGET_ALPINE_LINUX) add_definitions(-D_BLD_CLR) add_definitions(-DDEBUGGING_SUPPORTED) @@ -89,43 +89,45 @@ if(WIN32) add_definitions(-D_WIN32_WINNT=0x0602) add_definitions(-DWIN32_LEAN_AND_MEAN) add_definitions(-D_CRT_SECURE_NO_WARNINGS) +endif(WIN32) +if(CLR_CMAKE_TARGET_WIN32) if(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_I386) # Only enable edit and continue on windows x86 and x64 # exclude Linux, arm & arm64 add_compile_definitions($<$>>:EnC_SUPPORTED>) endif(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_I386) - endif(WIN32) +endif(CLR_CMAKE_TARGET_WIN32) # Features - please keep them alphabetically sorted -if(WIN32) +if(CLR_CMAKE_TARGET_WIN32) add_definitions(-DFEATURE_APPX) if(NOT CLR_CMAKE_TARGET_ARCH_I386) add_definitions(-DFEATURE_ARRAYSTUB_AS_IL) add_definitions(-DFEATURE_MULTICASTSTUB_AS_IL) endif() -else(WIN32) +else(CLR_CMAKE_TARGET_WIN32) add_definitions(-DFEATURE_ARRAYSTUB_AS_IL) add_definitions(-DFEATURE_MULTICASTSTUB_AS_IL) -endif(WIN32) +endif(CLR_CMAKE_TARGET_WIN32) if(NOT CLR_CMAKE_TARGET_ARCH_I386) add_definitions(-DFEATURE_PORTABLE_SHUFFLE_THUNKS) endif() -if(CLR_CMAKE_HOST_UNIX OR NOT CLR_CMAKE_TARGET_ARCH_I386) +if(CLR_CMAKE_TARGET_UNIX OR NOT CLR_CMAKE_TARGET_ARCH_I386) add_definitions(-DFEATURE_INSTANTIATINGSTUB_AS_IL) endif() add_compile_definitions($<$>>:FEATURE_CODE_VERSIONING>) add_definitions(-DFEATURE_COLLECTIBLE_TYPES) -if(WIN32) +if(CLR_CMAKE_TARGET_WIN32) add_definitions(-DFEATURE_CLASSIC_COMINTEROP) add_definitions(-DFEATURE_COMINTEROP) add_definitions(-DFEATURE_COMINTEROP_APARTMENT_SUPPORT) add_definitions(-DFEATURE_COMINTEROP_UNMANAGED_ACTIVATION) add_definitions(-DFEATURE_COMINTEROP_WINRT_MANAGED_ACTIVATION) -endif(WIN32) +endif(CLR_CMAKE_TARGET_WIN32) add_definitions(-DFEATURE_BASICFREEZE) add_definitions(-DFEATURE_CORECLR) @@ -152,49 +154,49 @@ endif(FEATURE_GDBJIT_LANGID_CS) if(FEATURE_GDBJIT_SYMTAB) add_definitions(-DFEATURE_GDBJIT_SYMTAB) endif(FEATURE_GDBJIT_SYMTAB) -if(CLR_CMAKE_HOST_UNIX) +if(CLR_CMAKE_TARGET_UNIX) add_definitions(-DFEATURE_EVENTSOURCE_XPLAT) -endif(CLR_CMAKE_HOST_UNIX) +endif(CLR_CMAKE_TARGET_UNIX) # NetBSD doesn't implement this feature if(NOT CMAKE_SYSTEM_NAME STREQUAL NetBSD) add_definitions(-DFEATURE_HIJACK) endif(NOT CMAKE_SYSTEM_NAME STREQUAL NetBSD) add_definitions(-DFEATURE_ICASTABLE) -if (WIN32 AND (CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_I386 OR CLR_CMAKE_TARGET_ARCH_ARM64)) +if (CLR_CMAKE_TARGET_WIN32 AND (CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_I386 OR CLR_CMAKE_TARGET_ARCH_ARM64)) add_definitions(-DFEATURE_INTEROP_DEBUGGING) -endif (WIN32 AND (CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_I386 OR CLR_CMAKE_TARGET_ARCH_ARM64)) +endif (CLR_CMAKE_TARGET_WIN32 AND (CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_I386 OR CLR_CMAKE_TARGET_ARCH_ARM64)) if(FEATURE_INTERPRETER) add_compile_definitions($<$>>:FEATURE_INTERPRETER>) endif(FEATURE_INTERPRETER) add_definitions(-DFEATURE_ISYM_READER) -if (CLR_CMAKE_HOST_LINUX OR WIN32) +if (CLR_CMAKE_TARGET_LINUX OR CLR_CMAKE_TARGET_WIN32) add_definitions(-DFEATURE_MANAGED_ETW) -endif(CLR_CMAKE_HOST_LINUX OR WIN32) +endif(CLR_CMAKE_TARGET_LINUX OR CLR_CMAKE_TARGET_WIN32) add_definitions(-DFEATURE_MANAGED_ETW_CHANNELS) if(FEATURE_MERGE_JIT_AND_ENGINE) add_definitions(-DFEATURE_MERGE_JIT_AND_ENGINE) endif(FEATURE_MERGE_JIT_AND_ENGINE) add_compile_definitions($<$>>:FEATURE_MULTICOREJIT>) -if(CLR_CMAKE_HOST_UNIX) +if(CLR_CMAKE_TARGET_UNIX) add_definitions(-DFEATURE_PAL) add_definitions(-DFEATURE_PAL_ANSI) -endif(CLR_CMAKE_HOST_UNIX) -if(CLR_CMAKE_HOST_LINUX) +endif(CLR_CMAKE_TARGET_UNIX) +if(CLR_CMAKE_TARGET_LINUX AND CLR_CMAKE_HOST_LINUX) add_definitions(-DFEATURE_PERFMAP) -endif(CLR_CMAKE_HOST_LINUX) -if(CLR_CMAKE_HOST_FREEBSD) +endif(CLR_CMAKE_TARGET_LINUX AND CLR_CMAKE_HOST_LINUX) +if(CLR_CMAKE_TARGET_FREEBSD) add_compile_definitions($<$>>:FEATURE_PERFMAP>) -endif(CLR_CMAKE_HOST_FREEBSD) +endif(CLR_CMAKE_TARGET_FREEBSD) if(FEATURE_PREJIT) add_definitions(-DFEATURE_PREJIT) else() add_compile_definitions($<$>:FEATURE_PREJIT>) endif(FEATURE_PREJIT) -if(WIN32 OR CLR_CMAKE_HOST_LINUX) +if(CLR_CMAKE_TARGET_WIN32 OR CLR_CMAKE_TARGET_LINUX) add_compile_definitions($<$>>,$>>>:FEATURE_PROFAPI_ATTACH_DETACH>) -endif(WIN32 OR CLR_CMAKE_HOST_LINUX) +endif(CLR_CMAKE_TARGET_WIN32 OR CLR_CMAKE_TARGET_LINUX) add_compile_definitions($<$>:DATA_PROFAPI_ATTACH_DETACH>) @@ -205,7 +207,7 @@ set(FEATURE_READYTORUN 1) add_compile_definitions($<$>>:FEATURE_REJIT>) -if (CLR_CMAKE_HOST_UNIX OR CLR_CMAKE_TARGET_ARCH_ARM64) +if (CLR_CMAKE_TARGET_UNIX OR CLR_CMAKE_TARGET_ARCH_ARM64) add_definitions(-DFEATURE_STUBS_AS_IL) endif () if (FEATURE_NGEN_RELOCS_OPTIMIZATIONS) @@ -217,45 +219,45 @@ endif(FEATURE_ENABLE_NO_ADDRESS_SPACE_RANDOMIZATION) add_definitions(-DFEATURE_SVR_GC) add_definitions(-DFEATURE_SYMDIFF) add_compile_definitions($<$>>:FEATURE_TIERED_COMPILATION>) -if (WIN32) +if (CLR_CMAKE_TARGET_WIN32) add_definitions(-DFEATURE_TYPEEQUIVALENCE) -endif(WIN32) -if (CLR_CMAKE_HOST_ARCH_AMD64) +endif(CLR_CMAKE_TARGET_WIN32) +if (CLR_CMAKE_TARGET_ARCH_AMD64) # Enable the AMD64 Unix struct passing JIT-EE interface for all AMD64 platforms, to enable altjit. add_definitions(-DUNIX_AMD64_ABI_ITF) -endif (CLR_CMAKE_HOST_ARCH_AMD64) -if(CLR_CMAKE_HOST_UNIX_AMD64) +endif (CLR_CMAKE_TARGET_ARCH_AMD64) +if(CLR_CMAKE_TARGET_UNIX_AMD64) add_definitions(-DFEATURE_MULTIREG_RETURN) -endif (CLR_CMAKE_HOST_UNIX_AMD64) -if(CLR_CMAKE_HOST_UNIX AND CLR_CMAKE_TARGET_ARCH_AMD64) +endif (CLR_CMAKE_TARGET_UNIX_AMD64) +if(CLR_CMAKE_TARGET_UNIX AND CLR_CMAKE_TARGET_ARCH_AMD64) add_definitions(-DUNIX_AMD64_ABI) -endif(CLR_CMAKE_HOST_UNIX AND CLR_CMAKE_TARGET_ARCH_AMD64) +endif(CLR_CMAKE_TARGET_UNIX AND CLR_CMAKE_TARGET_ARCH_AMD64) add_definitions(-DFEATURE_USE_ASM_GC_WRITE_BARRIERS) -if(CLR_CMAKE_HOST_ARCH_AMD64 OR CLR_CMAKE_HOST_ARCH_ARM64) +if(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_ARM64) add_definitions(-DFEATURE_USE_SOFTWARE_WRITE_WATCH_FOR_GC_HEAP) -endif(CLR_CMAKE_HOST_ARCH_AMD64 OR CLR_CMAKE_HOST_ARCH_ARM64) -if(CLR_CMAKE_HOST_ARCH_AMD64 OR CLR_CMAKE_HOST_ARCH_ARM64) +endif(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_ARM64) +if(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_ARM64) add_definitions(-DFEATURE_MANUALLY_MANAGED_CARD_BUNDLES) -endif(CLR_CMAKE_HOST_ARCH_AMD64 OR CLR_CMAKE_HOST_ARCH_ARM64) +endif(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_ARM64) -if(NOT CLR_CMAKE_HOST_UNIX) +if(NOT CLR_CMAKE_TARGET_UNIX) add_definitions(-DFEATURE_WIN32_REGISTRY) -endif(NOT CLR_CMAKE_HOST_UNIX) +endif(NOT CLR_CMAKE_TARGET_UNIX) add_definitions(-DFEATURE_WINMD_RESILIENT) add_definitions(-D_SECURE_SCL=0) add_definitions(-DUNICODE) add_definitions(-D_UNICODE) -if(WIN32) +if(CLR_CMAKE_TARGET_WIN32) if (CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_I386) add_definitions(-DFEATURE_DATABREAKPOINT) endif(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_I386) -endif(WIN32) +endif(CLR_CMAKE_TARGET_WIN32) -if(CLR_CMAKE_HOST_DARWIN) +if(CLR_CMAKE_TARGET_DARWIN) add_definitions(-DFEATURE_WRITEBARRIER_COPY) -endif(CLR_CMAKE_HOST_DARWIN) +endif(CLR_CMAKE_TARGET_DARWIN) -if (NOT CLR_CMAKE_TARGET_ARCH_I386 OR NOT WIN32) +if (NOT CLR_CMAKE_TARGET_ARCH_I386 OR NOT CLR_CMAKE_TARGET_WIN32) add_definitions(-DFEATURE_EH_FUNCLETS) -endif (NOT CLR_CMAKE_TARGET_ARCH_I386 OR NOT WIN32) +endif (NOT CLR_CMAKE_TARGET_ARCH_I386 OR NOT CLR_CMAKE_TARGET_WIN32) diff --git a/src/coreclr/clrfeatures.cmake b/src/coreclr/clrfeatures.cmake index dd8df93..078b4e7 100644 --- a/src/coreclr/clrfeatures.cmake +++ b/src/coreclr/clrfeatures.cmake @@ -11,7 +11,7 @@ if(NOT DEFINED FEATURE_PERFTRACING AND FEATURE_EVENT_TRACE) endif(NOT DEFINED FEATURE_PERFTRACING AND FEATURE_EVENT_TRACE) if(NOT DEFINED FEATURE_DBGIPC) - if(CLR_CMAKE_HOST_UNIX AND (NOT CLR_CMAKE_HOST_ANDROID)) + if(CLR_CMAKE_TARGET_UNIX AND (NOT CLR_CMAKE_TARGET_ANDROID)) set(FEATURE_DBGIPC 1) endif() endif(NOT DEFINED FEATURE_DBGIPC) diff --git a/src/coreclr/configurecompiler.cmake b/src/coreclr/configurecompiler.cmake index f301d71..6950be0 100644 --- a/src/coreclr/configurecompiler.cmake +++ b/src/coreclr/configurecompiler.cmake @@ -285,9 +285,6 @@ if (CLR_CMAKE_HOST_UNIX) endif() endif(CLR_CMAKE_HOST_DARWIN) - # Contracts are disabled on UNIX. - add_definitions(-DDISABLE_CONTRACTS) - if (CLR_CMAKE_WARNINGS_ARE_ERRORS) # All warnings that are not explicitly disabled are reported as errors add_compile_options(-Werror) @@ -350,6 +347,11 @@ if (CLR_CMAKE_HOST_UNIX) endif(CLR_CMAKE_HOST_DARWIN) endif(CLR_CMAKE_HOST_UNIX) +if(CLR_CMAKE_TARGET_UNIX) + # Contracts are disabled on UNIX. + add_definitions(-DDISABLE_CONTRACTS) +endif(CLR_CMAKE_TARGET_UNIX) + if(CLR_CMAKE_HOST_UNIX_ARM) if (NOT DEFINED CLR_ARM_FPU_TYPE) set(CLR_ARM_FPU_TYPE vfpv3) diff --git a/src/coreclr/crosscomponents.cmake b/src/coreclr/crosscomponents.cmake index 8bacac0..b4769cb 100644 --- a/src/coreclr/crosscomponents.cmake +++ b/src/coreclr/crosscomponents.cmake @@ -4,14 +4,18 @@ if(CLR_CMAKE_HOST_ARCH_AMD64 AND CLR_CMAKE_TARGET_ARCH_ARM) set(FEATURE_CROSSBITNESS 1) endif(CLR_CMAKE_HOST_ARCH_AMD64 AND CLR_CMAKE_TARGET_ARCH_ARM) -set (CLR_CROSS_COMPONENTS_LIST - crossgen - clrjit -) +if (CLR_CMAKE_HOST_OS STREQUAL CLR_CMAKE_TARGET_OS) + set (CLR_CROSS_COMPONENTS_LIST + crossgen + clrjit + ) +endif() if(NOT CLR_CMAKE_HOST_LINUX AND NOT FEATURE_CROSSBITNESS) list (APPEND CLR_CROSS_COMPONENTS_LIST mscordaccore - mscordbi + if (CLR_CMAKE_HOST_OS STREQUAL CLR_CMAKE_TARGET_OS) + mscordbi + endif (CLR_CMAKE_HOST_OS STREQUAL CLR_CMAKE_TARGET_OS) ) endif() diff --git a/src/coreclr/src/utilcode/CMakeLists.txt b/src/coreclr/src/utilcode/CMakeLists.txt index ca2262e..fbc4e25 100644 --- a/src/coreclr/src/utilcode/CMakeLists.txt +++ b/src/coreclr/src/utilcode/CMakeLists.txt @@ -62,7 +62,7 @@ set(UTILCODE_COMMON_SOURCES # These source file do not yet compile on Linux. # They should be moved out from here into the declaration # of UTILCODE_SOURCES above after fixing compiler errors. -if(WIN32) +if(CLR_CMAKE_TARGET_WIN32) list(APPEND UTILCODE_COMMON_SOURCES appxutil.cpp dacutil.cpp @@ -72,7 +72,7 @@ if(WIN32) securityutil.cpp stacktrace.cpp ) -endif(WIN32) +endif(CLR_CMAKE_TARGET_WIN32) set(UTILCODE_SOURCES ${UTILCODE_COMMON_SOURCES} diff --git a/src/coreclr/src/vm/CMakeLists.txt b/src/coreclr/src/vm/CMakeLists.txt index de9bf64..0558453 100644 --- a/src/coreclr/src/vm/CMakeLists.txt +++ b/src/coreclr/src/vm/CMakeLists.txt @@ -557,7 +557,7 @@ if(FEATURE_STANDALONE_GC) ) endif(FEATURE_STANDALONE_GC) -if(WIN32) +if(CLR_CMAKE_TARGET_WIN32) set(VM_SOURCES_DAC_AND_WKS_WIN32 amsi.cpp @@ -645,6 +645,10 @@ list(APPEND VM_HEADERS_DAC clrprivtypecachewinrt.h ) +endif(CLR_CMAKE_TARGET_WIN32) + +if(WIN32) + if(CLR_CMAKE_TARGET_ARCH_AMD64) set(VM_SOURCES_WKS_ARCH_ASM ${ARCH_SOURCES_DIR}/AsmHelpers.asm -- 2.7.4