Refactor CMake system to allow cross OS DAC compile (#2054)
authorSteve MacLean <Steve.MacLean@microsoft.com>
Fri, 24 Jan 2020 22:09:26 +0000 (17:09 -0500)
committerGitHub <noreply@github.com>
Fri, 24 Jan 2020 22:09:26 +0000 (17:09 -0500)
* 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
src/coreclr/clrdefinitions.cmake
src/coreclr/clrfeatures.cmake
src/coreclr/configurecompiler.cmake
src/coreclr/crosscomponents.cmake
src/coreclr/src/utilcode/CMakeLists.txt
src/coreclr/src/vm/CMakeLists.txt

index f529f7e..2f2f2d4 100644 (file)
@@ -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()
index 58706f8..a266d29 100644 (file)
@@ -17,7 +17,7 @@ add_compile_definitions($<$<BOOL:$<TARGET_PROPERTY:CROSSGEN_COMPONENT>>:FEATURE_
 add_compile_definitions($<$<BOOL:$<TARGET_PROPERTY:CROSSGEN_COMPONENT>>: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($<$<NOT:$<BOOL:$<TARGET_PROPERTY:CROSSGEN_COMPONENT>>>: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($<$<NOT:$<BOOL:$<TARGET_PROPERTY:CROSSGEN_COMPONENT>>>: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($<$<NOT:$<BOOL:$<TARGET_PROPERTY:CROSSGEN_COMPONENT>>>: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($<$<NOT:$<BOOL:$<TARGET_PROPERTY:CROSSGEN_COMPONENT>>>: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($<$<NOT:$<BOOL:$<TARGET_PROPERTY:CROSSGEN_COMPONENT>>>:FEATURE_PERFMAP>)
-endif(CLR_CMAKE_HOST_FREEBSD)
+endif(CLR_CMAKE_TARGET_FREEBSD)
 if(FEATURE_PREJIT)
   add_definitions(-DFEATURE_PREJIT)
 else()
   add_compile_definitions($<$<BOOL:$<TARGET_PROPERTY:CROSSGEN_COMPONENT>>: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($<$<AND:$<NOT:$<BOOL:$<TARGET_PROPERTY:CROSSGEN_COMPONENT>>>,$<NOT:$<BOOL:$<TARGET_PROPERTY:DAC_COMPONENT>>>>:FEATURE_PROFAPI_ATTACH_DETACH>)
-endif(WIN32 OR CLR_CMAKE_HOST_LINUX)
+endif(CLR_CMAKE_TARGET_WIN32 OR CLR_CMAKE_TARGET_LINUX)
 
 add_compile_definitions($<$<BOOL:$<TARGET_PROPERTY:DAC_COMPONENT>>:DATA_PROFAPI_ATTACH_DETACH>)
 
@@ -205,7 +207,7 @@ set(FEATURE_READYTORUN 1)
 
 add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:CROSSGEN_COMPONENT>>>: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($<$<NOT:$<BOOL:$<TARGET_PROPERTY:CROSSGEN_COMPONENT>>>: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)
index dd8df93..078b4e7 100644 (file)
@@ -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)
index f301d71..6950be0 100644 (file)
@@ -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)
index 8bacac0..b4769cb 100644 (file)
@@ -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()
index ca2262e..fbc4e25 100644 (file)
@@ -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}
index de9bf64..0558453 100644 (file)
@@ -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