Blame SOURCES/runtime-39044-cmake-downgrade.patch

7c038d
diff --git a/eng/common/cross/toolchain.cmake b/eng/common/cross/toolchain.cmake
7c038d
index 534f1d19de6..50d81842274 100644
7c038d
--- a/eng/common/cross/toolchain.cmake
7c038d
+++ b/eng/common/cross/toolchain.cmake
7c038d
@@ -83,15 +83,26 @@ endif()
7c038d
 
7c038d
 # Specify link flags
7c038d
 
7c038d
+function(add_toolchain_linker_flag Flag)
7c038d
+  set(Config "${ARGV1}")
7c038d
+  set(CONFIG_SUFFIX "")
7c038d
+  if (NOT Config STREQUAL "")
7c038d
+    set(CONFIG_SUFFIX "_${Config}")
7c038d
+  endif()
7c038d
+  set("CMAKE_EXE_LINKER_FLAGS${CONFIG_SUFFIX}" "${CMAKE_EXE_LINKER_FLAGS${CONFIG_SUFFIX}} ${Flag}" PARENT_SCOPE)
7c038d
+  set("CMAKE_SHARED_LINKER_FLAGS${CONFIG_SUFFIX}" "${CMAKE_SHARED_LINKER_FLAGS${CONFIG_SUFFIX}} ${Flag}" PARENT_SCOPE)
7c038d
+endfunction()
7c038d
+
7c038d
+
7c038d
 if(TARGET_ARCH_NAME STREQUAL "armel")
7c038d
   if(DEFINED TIZEN_TOOLCHAIN) # For Tizen only
7c038d
-    add_link_options("-B${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}")
7c038d
-    add_link_options("-L${CROSS_ROOTFS}/lib")
7c038d
-    add_link_options("-L${CROSS_ROOTFS}/usr/lib")
7c038d
-    add_link_options("-L${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}")
7c038d
+    add_toolchain_linker_flag("-B${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}")
7c038d
+    add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib")
7c038d
+    add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib")
7c038d
+    add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}")
7c038d
   endif()
7c038d
 elseif(TARGET_ARCH_NAME STREQUAL "x86")
7c038d
-  add_link_options(-m32)
7c038d
+  add_toolchain_linker_flag(-m32)
7c038d
 endif()
7c038d
 
7c038d
 # Specify compile options
7c038d
diff --git a/eng/native/build-commons.sh b/eng/native/build-commons.sh
7c038d
index a1a975ce177..9a0c296ff66 100755
7c038d
--- a/eng/native/build-commons.sh
7c038d
+++ b/eng/native/build-commons.sh
7c038d
@@ -51,12 +51,9 @@ check_prereqs()
7c038d
     # Check presence of CMake on the path
7c038d
     command -v cmake 2>/dev/null || { echo >&2 "Please install cmake before running this script"; exit 1; }
7c038d
 
7c038d
-    function version { echo "$@" | awk -F. '{ printf("%d%02d%02d\n", $1,$2,$3); }'; }
7c038d
-
7c038d
-    local cmake_version="$(cmake --version | awk '/^cmake version [0-9]+\.[0-9]+\.[0-9]+$/ {print $3}')"
7c038d
-
7c038d
-    if [[ "$(version "$cmake_version")" -lt "$(version 3.14.2)" ]]; then
7c038d
-        echo "Please install CMake 3.14.2 or newer from http://www.cmake.org/download/ or https://apt.kitware.com and ensure it is on your path."; exit 1;
7c038d
+    if [[ "$__HostOS" == "OSX" ]]; then
7c038d
+        # Check presence of pkg-config on the path
7c038d
+        command -v pkg-config 2>/dev/null || { echo >&2 "Please install pkg-config before running this script, see https://github.com/dotnet/runtime/blob/master/docs/workflow/requirements/macos-requirements.md"; exit 1; }
7c038d
     fi
7c038d
 
7c038d
     if [[ "$__UseNinja" == 1 ]]; then
7c038d
@@ -156,8 +153,8 @@ build_native()
7c038d
             cmake_command="emcmake $cmake_command"
7c038d
         fi
7c038d
 
7c038d
-        echo "Executing $cmake_command --build \"$intermediatesDir\" --target install -j $__NumProc"
7c038d
-        $cmake_command --build "$intermediatesDir" --target install -j "$__NumProc"
7c038d
+        echo "Executing $cmake_command --build \"$intermediatesDir\" --target install -- -j $__NumProc"
7c038d
+        $cmake_command --build "$intermediatesDir" --target install -- -j "$__NumProc"
7c038d
     fi
7c038d
 
7c038d
     local exit_code="$?"
7c038d
diff --git a/eng/native/configurecompiler.cmake b/eng/native/configurecompiler.cmake
7c038d
index 2937916ced9..07fd6f75f6f 100644
7c038d
--- a/eng/native/configurecompiler.cmake
7c038d
+++ b/eng/native/configurecompiler.cmake
7c038d
@@ -8,8 +8,6 @@ set(CMAKE_C_STANDARD_REQUIRED ON)
7c038d
 set(CMAKE_CXX_STANDARD 11)
7c038d
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
7c038d
 
7c038d
-cmake_policy(SET CMP0083 NEW)
7c038d
-
7c038d
 include(CheckCXXCompilerFlag)
7c038d
 
7c038d
 # "configureoptimization.cmake" must be included after CLR_CMAKE_HOST_UNIX has been set.
7c038d
@@ -40,11 +38,18 @@ set(CMAKE_CXX_FLAGS_CHECKED "")
7c038d
 set(CMAKE_EXE_LINKER_FLAGS_CHECKED "")
7c038d
 set(CMAKE_SHARED_LINKER_FLAGS_CHECKED "")
7c038d
 
7c038d
+set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "")
7c038d
+set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "")
7c038d
+set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "")
7c038d
+set(CMAKE_EXE_LINKER_FLAGS_DEBUG "")
7c038d
+set(CMAKE_EXE_LINKER_FLAGS_DEBUG "")
7c038d
+set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "")
7c038d
+
7c038d
 add_compile_definitions("$<$<OR:$<CONFIG:DEBUG>,$<CONFIG:CHECKED>>:DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1>")
7c038d
 add_compile_definitions("$<$<OR:$<CONFIG:RELEASE>,$<CONFIG:RELWITHDEBINFO>>:NDEBUG;URTBLDENV_FRIENDLY=Retail>")
7c038d
 
7c038d
 if (MSVC)
7c038d
-  add_link_options(/GUARD:CF)
7c038d
+  add_linker_flag(/GUARD:CF)
7c038d
 
7c038d
   # Linker flags
7c038d
   #
7c038d
@@ -57,48 +62,51 @@ if (MSVC)
7c038d
   endif ()
7c038d
 
7c038d
   #Do not create Side-by-Side Assembly Manifest
7c038d
-  add_link_options($<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:/MANIFEST:NO>)
7c038d
+  set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /MANIFEST:NO")
7c038d
   # can handle addresses larger than 2 gigabytes
7c038d
-  add_link_options($<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:/LARGEADDRESSAWARE>)
7c038d
+  set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /LARGEADDRESSAWARE")
7c038d
   #Compatible with Data Execution Prevention
7c038d
-  add_link_options($<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:/NXCOMPAT>)
7c038d
+  set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NXCOMPAT")
7c038d
   #Use address space layout randomization
7c038d
-  add_link_options($<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:/DYNAMICBASE>)
7c038d
+  set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DYNAMICBASE")
7c038d
   #shrink pdb size
7c038d
-  add_link_options($<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:/PDBCOMPRESS>)
7c038d
+  set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /PDBCOMPRESS")
7c038d
 
7c038d
-  add_link_options($<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:/DEBUG>)
7c038d
-  add_link_options($<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:/IGNORE:4197,4013,4254,4070,4221>)
7c038d
-  add_link_options($<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:/SUBSYSTEM:WINDOWS,${WINDOWS_SUBSYSTEM_VERSION}>)
7c038d
+  set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG")
7c038d
+  set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /IGNORE:4197,4013,4254,4070,4221")
7c038d
+  set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SUBSYSTEM:WINDOWS,${WINDOWS_SUBSYSTEM_VERSION}")
7c038d
 
7c038d
   set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /IGNORE:4221")
7c038d
 
7c038d
-  add_link_options($<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:/DEBUG>)
7c038d
-  add_link_options($<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:/PDBCOMPRESS>)
7c038d
-  add_link_options($<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:/STACK:1572864>)
7c038d
+  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG")
7c038d
+  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /PDBCOMPRESS")
7c038d
+  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:1572864")
7c038d
 
7c038d
   # Debug build specific flags
7c038d
-  add_link_options($<$<AND:$<OR:$<CONFIG:DEBUG>,$<CONFIG:CHECKED>>,$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>>:/NOVCFEATURE>)
7c038d
+  set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /NOVCFEATURE")
7c038d
+  set(CMAKE_SHARED_LINKER_FLAGS_CHECKED "${CMAKE_SHARED_LINKER_FLAGS_CHECKED} /NOVCFEATURE")
7c038d
 
7c038d
   # Checked build specific flags
7c038d
-  add_link_options($<$<CONFIG:CHECKED>:/INCREMENTAL:NO>) # prevent "warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:REF' specification"
7c038d
-  add_link_options($<$<CONFIG:CHECKED>:/OPT:REF>)
7c038d
-  add_link_options($<$<CONFIG:CHECKED>:/OPT:NOICF>)
7c038d
+  add_linker_flag(/INCREMENTAL:NO CHECKED) # prevent "warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:REF' specification"
7c038d
+  add_linker_flag(/OPT:REF CHECKED)
7c038d
+  add_linker_flag(/OPT:NOICF CHECKED)
7c038d
 
7c038d
   # Release build specific flags
7c038d
-  add_link_options($<$<CONFIG:RELEASE>:/LTCG>)
7c038d
-  add_link_options($<$<CONFIG:RELEASE>:/OPT:REF>)
7c038d
-  add_link_options($<$<CONFIG:RELEASE>:/OPT:ICF>)
7c038d
+  add_linker_flag(/LTCG RELEASE)
7c038d
+  add_linker_flag(/OPT:REF RELEASE)
7c038d
+  add_linker_flag(/OPT:ICF RELEASE)
7c038d
+  add_linker_flag(/INCREMENTAL:NO RELEASE)
7c038d
   set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} /LTCG")
7c038d
 
7c038d
   # ReleaseWithDebugInfo build specific flags
7c038d
-  add_link_options($<$<CONFIG:RELWITHDEBINFO>:/LTCG>)
7c038d
-  add_link_options($<$<CONFIG:RELWITHDEBINFO>:/OPT:REF>)
7c038d
-  add_link_options($<$<CONFIG:RELWITHDEBINFO>:/OPT:ICF>)
7c038d
+  add_linker_flag(/LTCG RELWITHDEBINFO)
7c038d
+  add_linker_flag(/OPT:REF RELWITHDEBINFO)
7c038d
+  add_linker_flag(/OPT:ICF RELWITHDEBINFO)
7c038d
   set(CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO} /LTCG")
7c038d
 
7c038d
   # Force uCRT to be dynamically linked for Release build
7c038d
-  add_link_options("$<$<CONFIG:RELEASE>:/NODEFAULTLIB:libucrt.lib;/DEFAULTLIB:ucrt.lib>")
7c038d
+  add_linker_flag(/NODEFAULTLIB:libucrt.lib RELEASE)
7c038d
+  add_linker_flag(/DEFAULTLIB:ucrt.lib RELEASE)
7c038d
 
7c038d
 elseif (CLR_CMAKE_HOST_UNIX)
7c038d
   # Set the values to display when interactively configuring CMAKE_BUILD_TYPE
7c038d
@@ -157,11 +165,10 @@ elseif (CLR_CMAKE_HOST_UNIX)
7c038d
 
7c038d
       # -fdata-sections -ffunction-sections: each function has own section instead of one per .o file (needed for --gc-sections)
7c038d
       # -O1: optimization level used instead of -O0 to avoid compile error "invalid operand for inline asm constraint"
7c038d
-      add_compile_definitions("$<$<OR:$<CONFIG:DEBUG>,$<CONFIG:CHECKED>>:${CLR_SANITIZE_CXX_OPTIONS};-fdata-sections;--ffunction-sections;-O1>")
7c038d
-      add_link_options($<$<AND:$<OR:$<CONFIG:DEBUG>,$<CONFIG:CHECKED>>,$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>>:${CLR_SANITIZE_LINK_OPTIONS}>)
7c038d
-
7c038d
+      add_compile_options("$<$<OR:$<CONFIG:DEBUG>,$<CONFIG:CHECKED>>:${CLR_SANITIZE_CXX_OPTIONS};-fdata-sections;--ffunction-sections;-O1>")
7c038d
+      add_linker_flag("${CLR_SANITIZE_LINK_OPTIONS}" DEBUG CHECKED)
7c038d
       # -Wl and --gc-sections: drop unused sections\functions (similar to Windows /Gy function-level-linking)
7c038d
-      add_link_options("$<$<AND:$<OR:$<CONFIG:DEBUG>,$<CONFIG:CHECKED>>,$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>>:${CLR_SANITIZE_LINK_OPTIONS};-Wl,--gc-sections>")
7c038d
+      add_linker_flag("-Wl,--gc-sections" DEBUG CHECKED)
7c038d
     endif ()
7c038d
   endif(UPPERCASE_CMAKE_BUILD_TYPE STREQUAL DEBUG OR UPPERCASE_CMAKE_BUILD_TYPE STREQUAL CHECKED)
7c038d
 endif(MSVC)
7c038d
@@ -173,15 +180,18 @@ endif(MSVC)
7c038d
 #       ./build-native.sh cmakeargs "-DCLR_ADDITIONAL_COMPILER_OPTIONS=<...>" cmakeargs "-DCLR_ADDITIONAL_LINKER_FLAGS=<...>"
7c038d
 #
7c038d
 if(CLR_CMAKE_HOST_UNIX)
7c038d
-    add_link_options(${CLR_ADDITIONAL_LINKER_FLAGS})
7c038d
+  foreach(ADDTL_LINKER_FLAG ${CLR_ADDITIONAL_LINKER_FLAGS})
7c038d
+    add_linker_flag(${ADDTL_LINKER_FLAG})
7c038d
+  endforeach()
7c038d
 endif(CLR_CMAKE_HOST_UNIX)
7c038d
 
7c038d
 if(CLR_CMAKE_HOST_LINUX)
7c038d
   add_compile_options($<$<COMPILE_LANGUAGE:ASM>:-Wa,--noexecstack>)
7c038d
-  add_link_options(-Wl,--build-id=sha1 -Wl,-z,relro,-z,now)
7c038d
+  add_linker_flag(-Wl,--build-id=sha1)
7c038d
+  add_linker_flag(-Wl,-z,relro,-z,now)
7c038d
 elseif(CLR_CMAKE_HOST_FREEBSD)
7c038d
   add_compile_options($<$<COMPILE_LANGUAGE:ASM>:-Wa,--noexecstack>)
7c038d
-  add_link_options(LINKER:--build-id=sha1)
7c038d
+  add_linker_flag("-Wl,--build-id=sha1")
7c038d
 elseif(CLR_CMAKE_HOST_SUNOS)
7c038d
   set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} /opt/local/include)
7c038d
   set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} /opt/local/lib)
7c038d
@@ -357,7 +367,7 @@ if (CLR_CMAKE_HOST_UNIX)
7c038d
   if(CLR_CMAKE_HOST_OSX)
7c038d
     set(MACOS_VERSION_MIN_FLAGS -mmacosx-version-min=10.12)
7c038d
     add_compile_options(${MACOS_VERSION_MIN_FLAGS})
7c038d
-    add_link_options(${MACOS_VERSION_MIN_FLAGS})
7c038d
+    add_linker_flag(${MACOS_VERSION_MIN_FLAGS})
7c038d
   endif(CLR_CMAKE_HOST_OSX)
7c038d
 endif(CLR_CMAKE_HOST_UNIX)
7c038d
 
7c038d
@@ -514,7 +524,7 @@ if(CLR_CMAKE_ENABLE_CODE_COVERAGE)
7c038d
 
7c038d
     add_compile_options(-fprofile-arcs)
7c038d
     add_compile_options(-ftest-coverage)
7c038d
-    add_link_options(--coverage)
7c038d
+    add_linker_flag(--coverage)
7c038d
   else()
7c038d
     message(FATAL_ERROR "Code coverage builds not supported on current platform")
7c038d
   endif(CLR_CMAKE_HOST_UNIX)
7c038d
diff --git a/eng/native/configureplatform.cmake b/eng/native/configureplatform.cmake
7c038d
index 1c5254d8496..4a4131cb05d 100644
7c038d
--- a/eng/native/configureplatform.cmake
7c038d
+++ b/eng/native/configureplatform.cmake
7c038d
@@ -1,4 +1,3 @@
7c038d
-include(CheckPIESupported)
7c038d
 include(${CMAKE_CURRENT_LIST_DIR}/functions.cmake)
7c038d
 
7c038d
 # If set, indicates that this is not an officially supported release
7c038d
@@ -363,19 +362,10 @@ if(NOT CLR_CMAKE_TARGET_EMSCRIPTEN)
7c038d
     # but since we know that PIE is supported, we can safely skip this redundant check).
7c038d
     #
7c038d
     # The default linker on Solaris also does not support PIE.
7c038d
-    if(NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_SUNOS)
7c038d
-        # All code we build should be compiled as position independent
7c038d
-        get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES)
7c038d
-        if("CXX" IN_LIST languages)
7c038d
-            set(CLR_PIE_LANGUAGE CXX)
7c038d
-        else()
7c038d
-            set(CLR_PIE_LANGUAGE C)
7c038d
-        endif()
7c038d
-        check_pie_supported(OUTPUT_VARIABLE PIE_SUPPORT_OUTPUT LANGUAGES ${CLR_PIE_LANGUAGE})
7c038d
-        if(NOT MSVC AND NOT CMAKE_${CLR_PIE_LANGUAGE}_LINK_PIE_SUPPORTED)
7c038d
-            message(WARNING "PIE is not supported at link time: ${PIE_SUPPORT_OUTPUT}.\n"
7c038d
-                      "PIE link options will not be passed to linker.")
7c038d
-        endif()
7c038d
+    if(NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_SUNOS AND NOT CLR_CMAKE_TARGET_OSX AND NOT CLR_CMAKE_HOST_TVOS AND NOT CLR_CMAKE_HOST_IOS AND NOT MSVC)
7c038d
+        set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie")
7c038d
+        add_compile_options($<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:-fPIE>)
7c038d
+        add_compile_options($<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:-fPIC>)
7c038d
     endif()
7c038d
 
7c038d
     set(CMAKE_POSITION_INDEPENDENT_CODE ON)
7c038d
diff --git a/eng/native/functions.cmake b/eng/native/functions.cmake
7c038d
index b7f8f463804..f4a96cbe35e 100644
7c038d
--- a/eng/native/functions.cmake
7c038d
+++ b/eng/native/functions.cmake
7c038d
@@ -123,7 +123,7 @@ function(preprocess_compile_asm)
7c038d
   set(options "")
7c038d
   set(oneValueArgs OUTPUT_OBJECTS)
7c038d
   set(multiValueArgs ASM_FILES)
7c038d
-  cmake_parse_arguments(PARSE_ARGV 0 COMPILE_ASM "${options}" "${oneValueArgs}" "${multiValueArgs}")
7c038d
+  cmake_parse_arguments(COMPILE_ASM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGV})
7c038d
 
7c038d
   get_include_directories_asm(ASM_INCLUDE_DIRECTORIES)
7c038d
 
7c038d
@@ -209,7 +209,7 @@ function(target_precompile_header)
7c038d
   set(options "")
7c038d
   set(oneValueArgs TARGET HEADER)
7c038d
   set(multiValueArgs ADDITIONAL_INCLUDE_DIRECTORIES)
7c038d
-  cmake_parse_arguments(PARSE_ARGV 0 PRECOMPILE_HEADERS "${options}" "${oneValueArgs}" "${multiValueArgs}")
7c038d
+  cmake_parse_arguments(PRECOMPILE_HEADERS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGV})
7c038d
 
7c038d
   if ("${PRECOMPILE_HEADERS_TARGET}" STREQUAL "")
7c038d
   message(SEND_ERROR "No target supplied to target_precompile_header.")
7c038d
@@ -321,7 +321,7 @@ endfunction()
7c038d
 function(install_clr)
7c038d
   set(oneValueArgs ADDITIONAL_DESTINATION)
7c038d
   set(multiValueArgs TARGETS)
7c038d
-  cmake_parse_arguments(PARSE_ARGV 0 INSTALL_CLR "${options}" "${oneValueArgs}" "${multiValueArgs}")
7c038d
+  cmake_parse_arguments(INSTALL_CLR "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGV})
7c038d
 
7c038d
   if ("${INSTALL_CLR_TARGETS}" STREQUAL "")
7c038d
     message(FATAL_ERROR "At least one target must be passed to install_clr(TARGETS )")
7c038d
@@ -377,6 +377,15 @@ function(disable_pax_mprotect targetName)
7c038d
   endif()
7c038d
 endfunction()
7c038d
 
7c038d
+if (CMAKE_VERSION VERSION_LESS "3.12")
7c038d
+  # Polyfill add_compile_definitions when it is unavailable
7c038d
+  function(add_compile_definitions)
7c038d
+    get_directory_property(DIR_COMPILE_DEFINITIONS COMPILE_DEFINITIONS)
7c038d
+    list(APPEND DIR_COMPILE_DEFINITIONS ${ARGV})
7c038d
+    set_directory_properties(PROPERTIES COMPILE_DEFINITIONS "${DIR_COMPILE_DEFINITIONS}")
7c038d
+  endfunction()
7c038d
+endif()
7c038d
+
7c038d
 function(_add_executable)
7c038d
     if(NOT WIN32)
7c038d
       add_executable(${ARGV} ${VERSION_FILE_PATH})
7c038d
@@ -415,3 +424,16 @@ endfunction()
7c038d
 function(add_executable_clr)
7c038d
     _add_executable(${ARGV})
7c038d
 endfunction()
7c038d
+
7c038d
+# add_linker_flag(Flag [Config1 Config2 ...])
7c038d
+function(add_linker_flag Flag)
7c038d
+  if (ARGN STREQUAL "")
7c038d
+    set("CMAKE_EXE_LINKER_FLAGS" "${CMAKE_EXE_LINKER_FLAGS} ${Flag}" PARENT_SCOPE)
7c038d
+    set("CMAKE_SHARED_LINKER_FLAGS" "${CMAKE_SHARED_LINKER_FLAGS} ${Flag}" PARENT_SCOPE)
7c038d
+  else()
7c038d
+    foreach(Config ${ARGN})
7c038d
+      set("CMAKE_EXE_LINKER_FLAGS_${Config}" "${CMAKE_EXE_LINKER_FLAGS_${Config}} ${Flag}" PARENT_SCOPE)
7c038d
+      set("CMAKE_SHARED_LINKER_FLAGS_${Config}" "${CMAKE_SHARED_LINKER_FLAGS_${Config}} ${Flag}" PARENT_SCOPE)
7c038d
+    endforeach()
7c038d
+  endif()
7c038d
+endfunction()
7c038d
diff --git a/eng/native/gen-buildsys.sh b/eng/native/gen-buildsys.sh
7c038d
index f27bb33e357..1b4c2e02c59 100755
7c038d
--- a/eng/native/gen-buildsys.sh
7c038d
+++ b/eng/native/gen-buildsys.sh
7c038d
@@ -91,6 +91,9 @@ if [[ "$build_arch" == "wasm" ]]; then
7c038d
     cmake_command="emcmake $cmake_command"
7c038d
 fi
7c038d
 
7c038d
+# We have to be able to build with CMake 3.6.2, so we can't use the -S or -B options
7c038d
+pushd "$3"
7c038d
+
7c038d
 # Include CMAKE_USER_MAKE_RULES_OVERRIDE as uninitialized since it will hold its value in the CMake cache otherwise can cause issues when branch switching
7c038d
 $cmake_command \
7c038d
   -G "$generator" \
7c038d
@@ -98,5 +101,6 @@ $cmake_command \
7c038d
   "-DCMAKE_INSTALL_PREFIX=$__CMakeBinDir" \
7c038d
   $cmake_extra_defines \
7c038d
   $__UnprocessedCMakeArgs \
7c038d
-  -S "$1" \
7c038d
-  -B "$3"
7c038d
+  "$1"
7c038d
+
7c038d
+popd
7c038d
diff --git a/src/coreclr/CMakeLists.txt b/src/coreclr/CMakeLists.txt
7c038d
index 5fa572c4fcd..071ac2cf5fa 100644
7c038d
--- a/src/coreclr/CMakeLists.txt
7c038d
+++ b/src/coreclr/CMakeLists.txt
7c038d
@@ -1,4 +1,4 @@
7c038d
-cmake_minimum_required(VERSION 3.14.2)
7c038d
+cmake_minimum_required(VERSION 3.6.2)
7c038d
 
7c038d
 cmake_policy(SET CMP0042 NEW)
7c038d
 
7c038d
diff --git a/src/coreclr/pgosupport.cmake b/src/coreclr/pgosupport.cmake
7c038d
index 4b119809017..04bde2bc20b 100644
7c038d
--- a/src/coreclr/pgosupport.cmake
7c038d
+++ b/src/coreclr/pgosupport.cmake
7c038d
@@ -1,5 +1,18 @@
7c038d
-include(CheckIPOSupported)
7c038d
-check_ipo_supported(RESULT HAVE_LTO)
7c038d
+include(CheckCXXSourceCompiles)
7c038d
+include(CheckCXXCompilerFlag)
7c038d
+
7c038d
+# VC++ guarantees support for LTCG (LTO's equivalent)
7c038d
+if(NOT WIN32)
7c038d
+  # Function required to give CMAKE_REQUIRED_* local scope
7c038d
+  function(check_have_lto)
7c038d
+    set(CMAKE_REQUIRED_FLAGS -flto)
7c038d
+    set(CMAKE_REQUIRED_LIBRARIES -flto -fuse-ld=gold)
7c038d
+    check_cxx_source_compiles("int main() { return 0; }" HAVE_LTO)
7c038d
+  endfunction(check_have_lto)
7c038d
+  check_have_lto()
7c038d
+
7c038d
+  check_cxx_compiler_flag(-faligned-new COMPILER_SUPPORTS_F_ALIGNED_NEW)
7c038d
+endif(NOT WIN32)
7c038d
 
7c038d
 # Adds Profile Guided Optimization (PGO) flags to the current target
7c038d
 function(add_pgo TargetName)
7c038d
diff --git a/src/coreclr/src/ToolBox/SOS/DacTableGen/CMakeLists.txt b/src/coreclr/src/ToolBox/SOS/DacTableGen/CMakeLists.txt
7c038d
index dcd39e346c9..7b471d53726 100644
7c038d
--- a/src/coreclr/src/ToolBox/SOS/DacTableGen/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/ToolBox/SOS/DacTableGen/CMakeLists.txt
7c038d
@@ -1,3 +1,4 @@
7c038d
+cmake_minimum_required(VERSION 3.8)
7c038d
 # Quick note: The CMake C# support is using the CSC bundled with the MSBuild that the native build runs on, not the one supplied by the local .NET SDK.
7c038d
 
7c038d
 project(DacTableGen LANGUAGES CSharp)
7c038d
diff --git a/src/coreclr/src/binder/CMakeLists.txt b/src/coreclr/src/binder/CMakeLists.txt
7c038d
index 3a66c81e10e..208f1214dd0 100644
7c038d
--- a/src/coreclr/src/binder/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/binder/CMakeLists.txt
7c038d
@@ -82,11 +82,13 @@ endif(CLR_CMAKE_TARGET_WIN32)
7c038d
 convert_to_absolute_path(BINDER_SOURCES ${BINDER_SOURCES})
7c038d
 convert_to_absolute_path(BINDER_CROSSGEN_SOURCES ${BINDER_CROSSGEN_SOURCES})
7c038d
 
7c038d
-add_library_clr(v3binder
7c038d
-    STATIC
7c038d
+add_library_clr(v3binder_obj
7c038d
+    OBJECT
7c038d
     ${BINDER_SOURCES}
7c038d
 )
7c038d
-add_dependencies(v3binder eventing_headers)
7c038d
+add_dependencies(v3binder_obj eventing_headers)
7c038d
+add_library(v3binder INTERFACE)
7c038d
+target_sources(v3binder INTERFACE $<TARGET_OBJECTS:v3binder_obj>)
7c038d
 
7c038d
 add_library_clr(v3binder_crossgen
7c038d
     STATIC
7c038d
diff --git a/src/coreclr/src/classlibnative/bcltype/CMakeLists.txt b/src/coreclr/src/classlibnative/bcltype/CMakeLists.txt
7c038d
index 391f70eff43..fdcf344c16a 100644
7c038d
--- a/src/coreclr/src/classlibnative/bcltype/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/classlibnative/bcltype/CMakeLists.txt
7c038d
@@ -10,9 +10,11 @@ set(BCLTYPE_SOURCES
7c038d
     variant.cpp
7c038d
 )
7c038d
 
7c038d
-add_library_clr(bcltype
7c038d
-    STATIC
7c038d
+add_library_clr(bcltype_obj
7c038d
+    OBJECT
7c038d
     ${BCLTYPE_SOURCES}
7c038d
 )
7c038d
 
7c038d
-add_dependencies(bcltype eventing_headers)
7c038d
+add_dependencies(bcltype_obj eventing_headers)
7c038d
+add_library(bcltype INTERFACE)
7c038d
+target_sources(bcltype INTERFACE $<TARGET_OBJECTS:bcltype_obj>)
7c038d
diff --git a/src/coreclr/src/classlibnative/float/CMakeLists.txt b/src/coreclr/src/classlibnative/float/CMakeLists.txt
7c038d
index 44d40c92592..3c066620f76 100644
7c038d
--- a/src/coreclr/src/classlibnative/float/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/classlibnative/float/CMakeLists.txt
7c038d
@@ -7,9 +7,12 @@ set(FLOAT_SOURCES
7c038d
     floatsingle.cpp
7c038d
 )
7c038d
 
7c038d
-add_library_clr(comfloat_wks
7c038d
-    STATIC
7c038d
+add_library_clr(comfloat_wks_obj
7c038d
+    OBJECT
7c038d
     ${FLOAT_SOURCES}
7c038d
 )
7c038d
 
7c038d
-add_dependencies(comfloat_wks eventing_headers)
7c038d
+add_dependencies(comfloat_wks_obj eventing_headers)
7c038d
+
7c038d
+add_library(comfloat_wks INTERFACE)
7c038d
+target_sources(comfloat_wks INTERFACE $<TARGET_OBJECTS:comfloat_wks_obj>)
7c038d
diff --git a/src/coreclr/src/debug/debug-pal/CMakeLists.txt b/src/coreclr/src/debug/debug-pal/CMakeLists.txt
7c038d
index ac1e48fb5fb..213fa59e784 100644
7c038d
--- a/src/coreclr/src/debug/debug-pal/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/debug/debug-pal/CMakeLists.txt
7c038d
@@ -34,4 +34,6 @@ if(CLR_CMAKE_HOST_UNIX)
7c038d
 
7c038d
 endif(CLR_CMAKE_HOST_UNIX)
7c038d
 
7c038d
-_add_library(debug-pal STATIC ${TWO_WAY_PIPE_SOURCES})
7c038d
+_add_library(debug-pal_obj OBJECT ${TWO_WAY_PIPE_SOURCES})
7c038d
+add_library(debug-pal INTERFACE)
7c038d
+target_sources(debug-pal INTERFACE $<TARGET_OBJECTS:debug-pal_obj>)
7c038d
diff --git a/src/coreclr/src/debug/ee/wks/CMakeLists.txt b/src/coreclr/src/debug/ee/wks/CMakeLists.txt
7c038d
index ee6c482ce76..3dd5e3612df 100644
7c038d
--- a/src/coreclr/src/debug/ee/wks/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/debug/ee/wks/CMakeLists.txt
7c038d
@@ -9,9 +9,9 @@ if (CLR_CMAKE_TARGET_WIN32)
7c038d
 
7c038d
   if(CLR_CMAKE_HOST_ARCH_ARM OR CLR_CMAKE_HOST_ARCH_ARM64)
7c038d
 
7c038d
-    preprocess_compile_asm(ASM_FILES ${ASM_FILE} OUTPUT_OBJECTS ASM_OBJECTS)
7c038d
+    preprocess_compile_asm(TARGET cordbee_wks_obj ASM_FILES ${ASM_FILE} OUTPUT_OBJECTS ASM_OBJECTS)
7c038d
 
7c038d
-    add_library_clr(cordbee_wks ${CORDBEE_SOURCES_WKS} ${ASM_OBJECTS})
7c038d
+    add_library_clr(cordbee_wks_obj OBJECT ${CORDBEE_SOURCES_WKS} ${ASM_FILE} ${ASM_OBJECTS})
7c038d
 
7c038d
   else ()
7c038d
 
7c038d
@@ -23,19 +23,21 @@ if (CLR_CMAKE_TARGET_WIN32)
7c038d
 
7c038d
     set_source_files_properties(${ASM_FILE} PROPERTIES COMPILE_OPTIONS "${ASM_OPTIONS}")
7c038d
 
7c038d
-    add_library_clr(cordbee_wks ${CORDBEE_SOURCES_WKS} ${ASM_FILE})
7c038d
+    add_library_clr(cordbee_wks_obj OBJECT ${CORDBEE_SOURCES_WKS} ${ASM_FILE})
7c038d
 
7c038d
   endif()
7c038d
 
7c038d
 else ()
7c038d
 
7c038d
   if(CLR_CMAKE_HOST_ARCH_AMD64 OR CLR_CMAKE_HOST_ARCH_ARM OR CLR_CMAKE_HOST_ARCH_ARM64 OR CLR_CMAKE_HOST_ARCH_I386)
7c038d
-    add_library_clr(cordbee_wks ${CORDBEE_SOURCES_WKS} ../${ARCH_SOURCES_DIR}/dbghelpers.S)
7c038d
+    add_library_clr(cordbee_wks_obj OBJECT ${CORDBEE_SOURCES_WKS} ../${ARCH_SOURCES_DIR}/dbghelpers.S)
7c038d
   else()
7c038d
     message(FATAL_ERROR "Unknown platform")
7c038d
   endif()
7c038d
 
7c038d
 endif (CLR_CMAKE_TARGET_WIN32)
7c038d
 
7c038d
-target_precompile_header(TARGET cordbee_wks HEADER stdafx.h)
7c038d
-add_dependencies(cordbee_wks eventing_headers)
7c038d
+target_precompile_header(TARGET cordbee_wks_obj HEADER stdafx.h)
7c038d
+add_dependencies(cordbee_wks_obj eventing_headers)
7c038d
+add_library(cordbee_wks INTERFACE)
7c038d
+target_sources(cordbee_wks INTERFACE $<TARGET_OBJECTS:cordbee_wks_obj>)
7c038d
diff --git a/src/coreclr/src/debug/ildbsymlib/CMakeLists.txt b/src/coreclr/src/debug/ildbsymlib/CMakeLists.txt
7c038d
index 88364658f11..362da1f6483 100644
7c038d
--- a/src/coreclr/src/debug/ildbsymlib/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/debug/ildbsymlib/CMakeLists.txt
7c038d
@@ -10,5 +10,6 @@ set( ILDBSYMLIB_SOURCES
7c038d
   symwrite.cpp
7c038d
 )
7c038d
 
7c038d
-add_library_clr(ildbsymlib ${ILDBSYMLIB_SOURCES})
7c038d
-
7c038d
+add_library_clr(ildbsymlib_obj OBJECT ${ILDBSYMLIB_SOURCES})
7c038d
+add_library(ildbsymlib INTERFACE)
7c038d
+target_sources(ildbsymlib INTERFACE $<TARGET_OBJECTS:ildbsymlib_obj>)
7c038d
diff --git a/src/coreclr/src/dlls/mscoree/coreclr/CMakeLists.txt b/src/coreclr/src/dlls/mscoree/coreclr/CMakeLists.txt
7c038d
index 777a2869e4f..066b75ab01f 100644
7c038d
--- a/src/coreclr/src/dlls/mscoree/coreclr/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/dlls/mscoree/coreclr/CMakeLists.txt
7c038d
@@ -9,20 +9,20 @@ if (CLR_CMAKE_HOST_WIN32)
7c038d
 
7c038d
     list(APPEND CLR_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/coreclr.def)
7c038d
 
7c038d
-    add_link_options(/ENTRY:CoreDllMain)
7c038d
+    add_linker_flag("/ENTRY:CoreDllMain")
7c038d
 
7c038d
     # Incremental linking results in the linker inserting extra padding and routing function calls via thunks that can break the
7c038d
     # invariants (e.g. size of region between Jit_PatchedCodeLast-Jit_PatchCodeStart needs to fit in a page).
7c038d
-    add_link_options(/INCREMENTAL:NO)
7c038d
+    add_linker_flag("/INCREMENTAL:NO")
7c038d
 
7c038d
     # Delay load libraries required for WinRT as that is not supported on all platforms
7c038d
-    add_link_options("/DELAYLOAD:api-ms-win-core-winrt-string-l1-1-0.dll")
7c038d
-    add_link_options("/DELAYLOAD:api-ms-win-core-winrt-l1-1-0.dll")
7c038d
-    add_link_options("/DELAYLOAD:api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll")
7c038d
-    add_link_options("/DELAYLOAD:api-ms-win-ro-typeresolution-l1-1-0.dll")
7c038d
+    add_linker_flag("/DELAYLOAD:api-ms-win-core-winrt-string-l1-1-0.dll")
7c038d
+    add_linker_flag("/DELAYLOAD:api-ms-win-core-winrt-l1-1-0.dll")
7c038d
+    add_linker_flag("/DELAYLOAD:api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll")
7c038d
+    add_linker_flag("/DELAYLOAD:api-ms-win-ro-typeresolution-l1-1-0.dll")
7c038d
 
7c038d
     # Delay load version.dll so that we can specify how to search when loading it as it is not part of Windows' known DLLs
7c038d
-    add_link_options("/DELAYLOAD:version.dll")
7c038d
+    add_linker_flag("/DELAYLOAD:version.dll")
7c038d
 
7c038d
     # No library groups for Win32
7c038d
     set(START_LIBRARY_GROUP)
7c038d
@@ -35,7 +35,7 @@ else(CLR_CMAKE_HOST_WIN32)
7c038d
     if(CLR_CMAKE_TARGET_LINUX OR CLR_CMAKE_TARGET_FREEBSD OR CLR_CMAKE_TARGET_NETBSD)
7c038d
         # This option is necessary to ensure that the overloaded delete operator defined inside
7c038d
         # of the utilcode will be used instead of the standard library delete operator.
7c038d
-        add_link_options("LINKER:-Bsymbolic")
7c038d
+        add_linker_flag("-Wl,-Bsymbolic")
7c038d
 
7c038d
         # The following linked options can be inserted into the linker libraries list to
7c038d
         # ensure proper resolving of circular references between a subset of the libraries.
7c038d
@@ -110,7 +110,7 @@ set(CORECLR_LIBRARIES
7c038d
     utilcode
7c038d
     v3binder
7c038d
     libraries-native
7c038d
-    System.Globalization.Native-Static
7c038d
+    System.Globalization.Native-static
7c038d
     interop
7c038d
 )
7c038d
 
7c038d
@@ -162,7 +162,12 @@ if(FEATURE_EVENT_TRACE)
7c038d
     endif(CLR_CMAKE_HOST_UNIX)
7c038d
 endif(FEATURE_EVENT_TRACE)
7c038d
 
7c038d
-target_link_libraries(coreclr ${CORECLR_LIBRARIES})
7c038d
+if(FEATURE_MERGE_JIT_AND_ENGINE)
7c038d
+    set(CLRJIT_STATIC clrjit_static)
7c038d
+endif(FEATURE_MERGE_JIT_AND_ENGINE)
7c038d
+
7c038d
+target_sources(coreclr PUBLIC $<TARGET_OBJECTS:cee_wks_core>)
7c038d
+target_link_libraries(coreclr PUBLIC ${CORECLR_LIBRARIES} ${CLRJIT_STATIC} cee_wks)
7c038d
 
7c038d
 # Create the runtime module index header file containing the coreclr build id
7c038d
 # for xplat and the timestamp/size on Windows.
7c038d
diff --git a/src/coreclr/src/dlls/mscorrc/CMakeLists.txt b/src/coreclr/src/dlls/mscorrc/CMakeLists.txt
7c038d
index 08cf27aaf80..e114ec19cea 100644
7c038d
--- a/src/coreclr/src/dlls/mscorrc/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/dlls/mscorrc/CMakeLists.txt
7c038d
@@ -19,7 +19,9 @@ if(CLR_CMAKE_HOST_WIN32)
7c038d
 else()
7c038d
     build_resources(${CMAKE_CURRENT_SOURCE_DIR}/include.rc mscorrc TARGET_CPP_FILE)
7c038d
 
7c038d
-    add_library_clr(mscorrc STATIC
7c038d
+    add_library_clr(mscorrc_obj OBJECT
7c038d
         ${TARGET_CPP_FILE}
7c038d
     )
7c038d
+    add_library(mscorrc INTERFACE)
7c038d
+    target_sources(mscorrc INTERFACE $<TARGET_OBJECTS:mscorrc_obj>)
7c038d
 endif(CLR_CMAKE_HOST_WIN32)
7c038d
diff --git a/src/coreclr/src/gcinfo/CMakeLists.txt b/src/coreclr/src/gcinfo/CMakeLists.txt
7c038d
index b0b67462562..50a1722a8ea 100644
7c038d
--- a/src/coreclr/src/gcinfo/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/gcinfo/CMakeLists.txt
7c038d
@@ -16,11 +16,14 @@ endif(CLR_CMAKE_TARGET_ARCH_I386)
7c038d
 
7c038d
 convert_to_absolute_path(GCINFO_SOURCES ${GCINFO_SOURCES})
7c038d
 
7c038d
-add_library_clr(gcinfo
7c038d
-    STATIC
7c038d
+add_library_clr(gcinfo_obj
7c038d
+    OBJECT
7c038d
     ${GCINFO_SOURCES}
7c038d
 )
7c038d
 
7c038d
+add_library(gcinfo INTERFACE)
7c038d
+target_sources(gcinfo INTERFACE $<TARGET_OBJECTS:gcinfo_obj>)
7c038d
+
7c038d
 add_library_clr(gcinfo_crossgen
7c038d
     STATIC
7c038d
     ${GCINFO_SOURCES}
7c038d
diff --git a/src/coreclr/src/inc/CMakeLists.txt b/src/coreclr/src/inc/CMakeLists.txt
7c038d
index 60fad88e77d..4f75d3a882d 100644
7c038d
--- a/src/coreclr/src/inc/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/inc/CMakeLists.txt
7c038d
@@ -58,7 +58,9 @@ if(FEATURE_JIT_PITCHING)
7c038d
 endif(FEATURE_JIT_PITCHING)
7c038d
 
7c038d
 # Compile *_i.cpp to lib
7c038d
-_add_library(corguids ${CORGUIDS_SOURCES})
7c038d
+_add_library(corguids_obj OBJECT ${CORGUIDS_SOURCES})
7c038d
+add_library(corguids INTERFACE)
7c038d
+target_sources(corguids INTERFACE $<TARGET_OBJECTS:corguids_obj>)
7c038d
 
7c038d
 # Binplace the inc files for packaging later.
7c038d
 
7c038d
@@ -75,4 +77,3 @@ _install (FILES cfi.h
7c038d
                gcinfoencoder.h
7c038d
                gcinfotypes.h
7c038d
                DESTINATION inc)
7c038d
-_install (TARGETS corguids DESTINATION lib)
7c038d
diff --git a/src/coreclr/src/interop/CMakeLists.txt b/src/coreclr/src/interop/CMakeLists.txt
7c038d
index d7eaa1b04ae..3924b4fdbb4 100644
7c038d
--- a/src/coreclr/src/interop/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/interop/CMakeLists.txt
7c038d
@@ -30,7 +30,10 @@ endif(WIN32)
7c038d
 
7c038d
 convert_to_absolute_path(INTEROP_SOURCES ${INTEROP_SOURCES})
7c038d
 
7c038d
-add_library_clr(interop
7c038d
-    STATIC
7c038d
+add_library_clr(interop_obj
7c038d
+    OBJECT
7c038d
     ${INTEROP_SOURCES}
7c038d
 )
7c038d
+
7c038d
+add_library(interop INTERFACE)
7c038d
+target_sources(interop INTERFACE $<TARGET_OBJECTS:interop_obj>)
7c038d
diff --git a/src/coreclr/src/jit/dll/CMakeLists.txt b/src/coreclr/src/jit/dll/CMakeLists.txt
7c038d
index ec7cddc78ed..01bdbf5a731 100644
7c038d
--- a/src/coreclr/src/jit/dll/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/jit/dll/CMakeLists.txt
7c038d
@@ -2,17 +2,17 @@ project(ClrJit)
7c038d
 
7c038d
 set_source_files_properties(${JIT_EXPORTS_FILE} PROPERTIES GENERATED TRUE)
7c038d
 
7c038d
+add_library_clr(clrjit_obj
7c038d
+    OBJECT
7c038d
+    ${JIT_CORE_SOURCES}
7c038d
+    ${JIT_ARCH_SOURCES}
7c038d
+)
7c038d
+
7c038d
 if(CLR_CMAKE_HOST_UNIX)
7c038d
-    add_library_clr(clrjit_static
7c038d
-      STATIC
7c038d
-      ${SHARED_LIB_SOURCES}
7c038d
-      ${JIT_ARCH_SOURCES}
7c038d
-    )
7c038d
-    add_dependencies(clrjit_static coreclrpal gcinfo)
7c038d
-else()
7c038d
-    add_library_clr(clrjit_static
7c038d
-      ${SHARED_LIB_SOURCES}
7c038d
-      ${JIT_ARCH_SOURCES}
7c038d
-    )
7c038d
+    add_dependencies(clrjit_obj coreclrpal gcinfo)
7c038d
 endif(CLR_CMAKE_HOST_UNIX)
7c038d
-target_precompile_header(TARGET clrjit_static HEADER jitpch.h ADDITIONAL_INCLUDE_DIRECTORIES ${JIT_SOURCE_DIR})
7c038d
+
7c038d
+target_precompile_header(TARGET clrjit_obj HEADER jitpch.h ADDITIONAL_INCLUDE_DIRECTORIES ${JIT_SOURCE_DIR})
7c038d
+
7c038d
+add_library(clrjit_static INTERFACE)
7c038d
+target_sources(clrjit_static INTERFACE $<TARGET_OBJECTS:clrjit_obj>)
7c038d
diff --git a/src/coreclr/src/md/ceefilegen/CMakeLists.txt b/src/coreclr/src/md/ceefilegen/CMakeLists.txt
7c038d
index 90749c806b2..fd0f8424d97 100644
7c038d
--- a/src/coreclr/src/md/ceefilegen/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/md/ceefilegen/CMakeLists.txt
7c038d
@@ -25,8 +25,11 @@ if (CLR_CMAKE_TARGET_WIN32)
7c038d
     list(APPEND CEEFILEGEN_SOURCES ${CEEFILEGEN_HEADERS})
7c038d
 endif (CLR_CMAKE_TARGET_WIN32)
7c038d
 
7c038d
-add_library_clr(ceefgen
7c038d
-    STATIC
7c038d
+add_library_clr(ceefgen_obj
7c038d
+    OBJECT
7c038d
     ${CEEFILEGEN_SOURCES}
7c038d
 )
7c038d
-target_precompile_header(TARGET ceefgen HEADER stdafx.h)
7c038d
+target_precompile_header(TARGET ceefgen_obj HEADER stdafx.h)
7c038d
+
7c038d
+add_library(ceefgen INTERFACE)
7c038d
+target_sources(ceefgen INTERFACE $<TARGET_OBJECTS:ceefgen_obj>)
7c038d
diff --git a/src/coreclr/src/md/compiler/CMakeLists.txt b/src/coreclr/src/md/compiler/CMakeLists.txt
7c038d
index 3b916cdc9fe..f9f80db2500 100644
7c038d
--- a/src/coreclr/src/md/compiler/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/md/compiler/CMakeLists.txt
7c038d
@@ -58,9 +58,11 @@ add_library_clr(mdcompiler_dac ${MDCOMPILER_SOURCES})
7c038d
 set_target_properties(mdcompiler_dac PROPERTIES DAC_COMPONENT TRUE)
7c038d
 target_precompile_header(TARGET mdcompiler_dac HEADER stdafx.h)
7c038d
 
7c038d
-add_library_clr(mdcompiler_wks ${MDCOMPILER_SOURCES})
7c038d
-target_compile_definitions(mdcompiler_wks PRIVATE FEATURE_METADATA_EMIT_ALL)
7c038d
-target_precompile_header(TARGET mdcompiler_wks HEADER stdafx.h)
7c038d
+add_library_clr(mdcompiler_wks_obj OBJECT ${MDCOMPILER_SOURCES})
7c038d
+target_compile_definitions(mdcompiler_wks_obj PRIVATE FEATURE_METADATA_EMIT_ALL)
7c038d
+target_precompile_header(TARGET mdcompiler_wks_obj HEADER stdafx.h)
7c038d
+add_library(mdcompiler_wks INTERFACE)
7c038d
+target_sources(mdcompiler_wks INTERFACE $<TARGET_OBJECTS:mdcompiler_wks_obj>)
7c038d
 
7c038d
 add_library_clr(mdcompiler-dbi ${MDCOMPILER_SOURCES})
7c038d
 set_target_properties(mdcompiler-dbi PROPERTIES DBI_COMPONENT TRUE)
7c038d
diff --git a/src/coreclr/src/md/enc/CMakeLists.txt b/src/coreclr/src/md/enc/CMakeLists.txt
7c038d
index 7220736b9ca..82af8434296 100644
7c038d
--- a/src/coreclr/src/md/enc/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/md/enc/CMakeLists.txt
7c038d
@@ -48,9 +48,11 @@ add_library_clr(mdruntimerw_dac ${MDRUNTIMERW_SOURCES})
7c038d
 set_target_properties(mdruntimerw_dac PROPERTIES DAC_COMPONENT TRUE)
7c038d
 target_precompile_header(TARGET mdruntimerw_dac HEADER stdafx.h)
7c038d
 
7c038d
-add_library_clr(mdruntimerw_wks ${MDRUNTIMERW_SOURCES})
7c038d
-target_compile_definitions(mdruntimerw_wks PRIVATE FEATURE_METADATA_EMIT_ALL)
7c038d
-target_precompile_header(TARGET mdruntimerw_wks HEADER stdafx.h)
7c038d
+add_library_clr(mdruntimerw_wks_obj OBJECT ${MDRUNTIMERW_SOURCES})
7c038d
+target_compile_definitions(mdruntimerw_wks_obj PRIVATE FEATURE_METADATA_EMIT_ALL)
7c038d
+target_precompile_header(TARGET mdruntimerw_wks_obj HEADER stdafx.h)
7c038d
+add_library(mdruntimerw_wks INTERFACE)
7c038d
+target_sources(mdruntimerw_wks INTERFACE $<TARGET_OBJECTS:mdruntimerw_wks_obj>)
7c038d
 
7c038d
 add_library_clr(mdruntimerw-dbi ${MDRUNTIMERW_SOURCES})
7c038d
 set_target_properties(mdruntimerw-dbi PROPERTIES DBI_COMPONENT TRUE)
7c038d
diff --git a/src/coreclr/src/md/hotdata/CMakeLists.txt b/src/coreclr/src/md/hotdata/CMakeLists.txt
7c038d
index c6168d2a4b0..88475cb72f4 100644
7c038d
--- a/src/coreclr/src/md/hotdata/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/md/hotdata/CMakeLists.txt
7c038d
@@ -33,8 +33,10 @@ add_library_clr(mdhotdata_dac ${MDHOTDATA_SOURCES})
7c038d
 set_target_properties(mdhotdata_dac PROPERTIES DAC_COMPONENT TRUE)
7c038d
 target_precompile_header(TARGET mdhotdata_dac HEADER external.h)
7c038d
 
7c038d
-add_library_clr(mdhotdata_full ${MDHOTDATA_SOURCES})
7c038d
-target_precompile_header(TARGET mdhotdata_full HEADER external.h)
7c038d
+add_library_clr(mdhotdata_full_obj OBJECT ${MDHOTDATA_SOURCES})
7c038d
+target_precompile_header(TARGET mdhotdata_full_obj HEADER external.h)
7c038d
+add_library(mdhotdata_full INTERFACE)
7c038d
+target_sources(mdhotdata_full INTERFACE $<TARGET_OBJECTS:mdhotdata_full_obj>)
7c038d
 
7c038d
 add_library_clr(mdhotdata_crossgen ${MDHOTDATA_SOURCES})
7c038d
 set_target_properties(mdhotdata_crossgen PROPERTIES CROSSGEN_COMPONENT TRUE)
7c038d
diff --git a/src/coreclr/src/md/runtime/CMakeLists.txt b/src/coreclr/src/md/runtime/CMakeLists.txt
7c038d
index 6dc193e14a7..7e0e83f1114 100644
7c038d
--- a/src/coreclr/src/md/runtime/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/md/runtime/CMakeLists.txt
7c038d
@@ -47,9 +47,11 @@ add_library_clr(mdruntime_dac ${MDRUNTIME_SOURCES})
7c038d
 set_target_properties(mdruntime_dac PROPERTIES DAC_COMPONENT TRUE)
7c038d
 target_precompile_header(TARGET mdruntime_dac HEADER stdafx.h)
7c038d
 
7c038d
-add_library_clr(mdruntime_wks ${MDRUNTIME_SOURCES})
7c038d
-target_compile_definitions(mdruntime_wks PRIVATE FEATURE_METADATA_EMIT_ALL)
7c038d
-target_precompile_header(TARGET mdruntime_wks HEADER stdafx.h)
7c038d
+add_library_clr(mdruntime_wks_obj OBJECT ${MDRUNTIME_SOURCES})
7c038d
+target_compile_definitions(mdruntime_wks_obj PRIVATE FEATURE_METADATA_EMIT_ALL)
7c038d
+target_precompile_header(TARGET mdruntime_wks_obj HEADER stdafx.h)
7c038d
+add_library(mdruntime_wks INTERFACE)
7c038d
+target_sources(mdruntime_wks INTERFACE $<TARGET_OBJECTS:mdruntime_wks_obj>)
7c038d
 
7c038d
 add_library_clr(mdruntime-dbi ${MDRUNTIME_SOURCES})
7c038d
 set_target_properties(mdruntime-dbi PROPERTIES DBI_COMPONENT TRUE)
7c038d
diff --git a/src/coreclr/src/pal/src/CMakeLists.txt b/src/coreclr/src/pal/src/CMakeLists.txt
7c038d
index e7c1629d5b2..7818deef050 100644
7c038d
--- a/src/coreclr/src/pal/src/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/pal/src/CMakeLists.txt
7c038d
@@ -256,10 +256,12 @@ add_library(coreclrpal
7c038d
 # > warning for library: libtracepointprovider.a the table of contents is empty (no object file members in the library define global symbols)
7c038d
 #
7c038d
 if(CLR_CMAKE_TARGET_LINUX)
7c038d
-  add_library(tracepointprovider
7c038d
-    STATIC
7c038d
+  add_library(tracepointprovider_obj
7c038d
+    OBJECT
7c038d
     misc/tracepointprovider.cpp
7c038d
   )
7c038d
+  add_library(tracepointprovider INTERFACE)
7c038d
+  target_sources(tracepointprovider INTERFACE $<TARGET_OBJECTS:tracepointprovider_obj>)
7c038d
 endif(CLR_CMAKE_TARGET_LINUX)
7c038d
 
7c038d
 if(CLR_CMAKE_TARGET_OSX)
7c038d
diff --git a/src/coreclr/src/pal/src/eventprovider/dummyprovider/CMakeLists.txt b/src/coreclr/src/pal/src/eventprovider/dummyprovider/CMakeLists.txt
7c038d
index 39b9826d1ab..8e6968cf783 100644
7c038d
--- a/src/coreclr/src/pal/src/eventprovider/dummyprovider/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/pal/src/eventprovider/dummyprovider/CMakeLists.txt
7c038d
@@ -1,8 +1,8 @@
7c038d
-include(FindPython)
7c038d
+include(FindPythonInterp)
7c038d
 
7c038d
 set (GENERATE_SCRIPT ${CLR_DIR}/src/scripts/genDummyProvider.py)
7c038d
 
7c038d
-set(GENERATE_COMMAND ${Python_EXECUTABLE} ${GENERATE_SCRIPT} --man ${EVENT_MANIFEST} --intermediate ${CMAKE_CURRENT_BINARY_DIR})
7c038d
+set(GENERATE_COMMAND ${PYTHON_EXECUTABLE} ${GENERATE_SCRIPT} --man ${EVENT_MANIFEST} --intermediate ${CMAKE_CURRENT_BINARY_DIR})
7c038d
 
7c038d
 execute_process(
7c038d
   COMMAND ${GENERATE_COMMAND} --dry-run
7c038d
diff --git a/src/coreclr/src/pal/src/eventprovider/lttngprovider/CMakeLists.txt b/src/coreclr/src/pal/src/eventprovider/lttngprovider/CMakeLists.txt
7c038d
index 234dea19b75..d55dab3557f 100644
7c038d
--- a/src/coreclr/src/pal/src/eventprovider/lttngprovider/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/pal/src/eventprovider/lttngprovider/CMakeLists.txt
7c038d
@@ -1,7 +1,7 @@
7c038d
-include(FindPython)
7c038d
+include(FindPythonInterp)
7c038d
 set (GENERATE_SCRIPT ${CLR_DIR}/src/scripts/genLttngProvider.py)
7c038d
 
7c038d
-set(GENERATE_COMMAND ${Python_EXECUTABLE} ${GENERATE_SCRIPT} --man ${EVENT_MANIFEST} --intermediate ${CMAKE_CURRENT_BINARY_DIR})
7c038d
+set(GENERATE_COMMAND ${PYTHON_EXECUTABLE} ${GENERATE_SCRIPT} --man ${EVENT_MANIFEST} --intermediate ${CMAKE_CURRENT_BINARY_DIR})
7c038d
 
7c038d
 execute_process(
7c038d
   COMMAND ${GENERATE_COMMAND} --dry-run
7c038d
diff --git a/src/coreclr/src/unwinder/CMakeLists.txt b/src/coreclr/src/unwinder/CMakeLists.txt
7c038d
index 4421ea9f6f6..41a0219bbf7 100644
7c038d
--- a/src/coreclr/src/unwinder/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/unwinder/CMakeLists.txt
7c038d
@@ -20,8 +20,10 @@ list(APPEND UNWINDER_SOURCES
7c038d
 convert_to_absolute_path(UNWINDER_SOURCES ${UNWINDER_SOURCES})
7c038d
 
7c038d
 if(CLR_CMAKE_HOST_UNIX)
7c038d
-    add_library_clr(unwinder_wks ${UNWINDER_SOURCES})
7c038d
-    add_dependencies(unwinder_wks eventing_headers)
7c038d
+    add_library_clr(unwinder_wks_obj OBJECT ${UNWINDER_SOURCES})
7c038d
+    add_dependencies(unwinder_wks_obj eventing_headers)
7c038d
+    add_library(unwinder_wks INTERFACE)
7c038d
+    target_sources(unwinder_wks INTERFACE $<TARGET_OBJECTS:unwinder_wks_obj>)
7c038d
 endif(CLR_CMAKE_HOST_UNIX)
7c038d
 
7c038d
 add_library_clr(unwinder_dac ${UNWINDER_SOURCES})
7c038d
diff --git a/src/coreclr/src/utilcode/CMakeLists.txt b/src/coreclr/src/utilcode/CMakeLists.txt
7c038d
index aa28b2db603..f8082fc9076 100644
7c038d
--- a/src/coreclr/src/utilcode/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/utilcode/CMakeLists.txt
7c038d
@@ -98,7 +98,9 @@ convert_to_absolute_path(UTILCODE_CROSSGEN_SOURCES ${UTILCODE_CROSSGEN_SOURCES})
7c038d
 convert_to_absolute_path(UTILCODE_STATICNOHOST_SOURCES ${UTILCODE_STATICNOHOST_SOURCES})
7c038d
 
7c038d
 add_library_clr(utilcode_dac STATIC ${UTILCODE_DAC_SOURCES})
7c038d
-add_library_clr(utilcode STATIC ${UTILCODE_SOURCES})
7c038d
+add_library_clr(utilcode_obj OBJECT ${UTILCODE_SOURCES})
7c038d
+add_library(utilcode INTERFACE)
7c038d
+target_sources(utilcode INTERFACE $<TARGET_OBJECTS:utilcode_obj>)
7c038d
 add_library_clr(utilcodestaticnohost STATIC ${UTILCODE_STATICNOHOST_SOURCES})
7c038d
 add_library_clr(utilcode_crossgen STATIC ${UTILCODE_CROSSGEN_SOURCES})
7c038d
 
7c038d
@@ -106,9 +108,9 @@ if(CLR_CMAKE_HOST_UNIX)
7c038d
   target_link_libraries(utilcodestaticnohost  nativeresourcestring)
7c038d
   target_link_libraries(utilcode_crossgen  nativeresourcestring)
7c038d
   target_link_libraries(utilcode_dac nativeresourcestring)
7c038d
-  target_link_libraries(utilcode nativeresourcestring)
7c038d
+  target_link_libraries(utilcode INTERFACE nativeresourcestring)
7c038d
   add_dependencies(utilcode_dac coreclrpal)
7c038d
-  add_dependencies(utilcode coreclrpal)
7c038d
+  add_dependencies(utilcode_obj coreclrpal)
7c038d
 endif(CLR_CMAKE_HOST_UNIX)
7c038d
 
7c038d
 
7c038d
@@ -121,10 +123,10 @@ set_target_properties(utilcode_crossgen PROPERTIES CROSSGEN_COMPONENT TRUE)
7c038d
 target_compile_definitions(utilcode_dac PRIVATE SELF_NO_HOST)
7c038d
 target_compile_definitions(utilcodestaticnohost PRIVATE SELF_NO_HOST)
7c038d
 add_dependencies(utilcode_dac ${UTILCODE_DEPENDENCIES})
7c038d
-add_dependencies(utilcode ${UTILCODE_DEPENDENCIES})
7c038d
+add_dependencies(utilcode_obj ${UTILCODE_DEPENDENCIES})
7c038d
 add_dependencies(utilcode_crossgen ${UTILCODE_DEPENDENCIES})
7c038d
 add_dependencies(utilcodestaticnohost ${UTILCODE_DEPENDENCIES})
7c038d
 target_precompile_header(TARGET utilcode_dac HEADER stdafx.h)
7c038d
-target_precompile_header(TARGET utilcode HEADER stdafx.h)
7c038d
+target_precompile_header(TARGET utilcode_obj HEADER stdafx.h)
7c038d
 target_precompile_header(TARGET utilcode_crossgen HEADER stdafx.h)
7c038d
 target_precompile_header(TARGET utilcodestaticnohost HEADER stdafx.h)
7c038d
diff --git a/src/coreclr/src/vm/CMakeLists.txt b/src/coreclr/src/vm/CMakeLists.txt
7c038d
index 3e37cebdc10..2b20d7d910a 100644
7c038d
--- a/src/coreclr/src/vm/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/vm/CMakeLists.txt
7c038d
@@ -923,7 +923,7 @@ list(APPEND VM_HEADERS_DAC
7c038d
 
7c038d
 if (CLR_CMAKE_TARGET_WIN32)
7c038d
     list(APPEND VM_SOURCES_WKS ${VM_HEADERS_WKS})
7c038d
-    list(APPEND VM_SOURCES_WKS_ARCH_ASM ${VM_HEADERS_WKS_ARCH_ASM})
7c038d
+    list(APPEND VM_SOURCES_WKS ${VM_HEADERS_WKS_ARCH_ASM})
7c038d
     list(APPEND VM_SOURCES_DAC ${VM_HEADERS_DAC})
7c038d
 endif(CLR_CMAKE_TARGET_WIN32)
7c038d
 
7c038d
diff --git a/src/coreclr/src/vm/eventing/CMakeLists.txt b/src/coreclr/src/vm/eventing/CMakeLists.txt
7c038d
index 98dd158df54..e2bf024fc59 100644
7c038d
--- a/src/coreclr/src/vm/eventing/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/vm/eventing/CMakeLists.txt
7c038d
@@ -8,12 +8,13 @@ else()
7c038d
   set(NEED_XPLAT_HEADER ON)
7c038d
 endif()
7c038d
 
7c038d
-include(FindPython)
7c038d
+include(FindPythonInterp)
7c038d
 
7c038d
 set (EventingHeaders
7c038d
   ${GENERATED_INCLUDE_DIR}/etmdummy.h
7c038d
   ${GENERATED_INCLUDE_DIR}/clretwallmain.h
7c038d
   ${GENERATED_INCLUDE_DIR}/clreventpipewriteevents.h
7c038d
+  ${GENERATED_INCLUDE_DIR}/clrproviders.h
7c038d
 )
7c038d
 
7c038d
 if (NEED_XPLAT_HEADER)
7c038d
@@ -24,7 +25,7 @@ endif()
7c038d
 set(GENEVENTING_SCRIPT ${CLR_DIR}/src/scripts/genEventing.py)
7c038d
 
7c038d
 add_custom_target(eventing_headers
7c038d
-  ${Python_EXECUTABLE} ${GENEVENTING_SCRIPT} --man ${EVENT_MANIFEST} --inc ${GENERATED_INCLUDE_DIR} --dummy ${GENERATED_INCLUDE_DIR}/etmdummy.h ${NONEXTERN_ARG} ${NOXPLATHEADER_ARG}
7c038d
+  ${PYTHON_EXECUTABLE} ${GENEVENTING_SCRIPT} --man ${EVENT_MANIFEST} --inc ${GENERATED_INCLUDE_DIR} --dummy ${GENERATED_INCLUDE_DIR}/etmdummy.h ${NONEXTERN_ARG} ${NOXPLATHEADER_ARG}
7c038d
   DEPENDS ${EVENT_MANIFEST} ${GENEVENTING_SCRIPT}
7c038d
   VERBATIM
7c038d
 )
7c038d
diff --git a/src/coreclr/src/vm/eventing/EtwProvider/CMakeLists.txt b/src/coreclr/src/vm/eventing/EtwProvider/CMakeLists.txt
7c038d
index 34a067e1ec5..4c7df2fbb3c 100644
7c038d
--- a/src/coreclr/src/vm/eventing/EtwProvider/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/vm/eventing/EtwProvider/CMakeLists.txt
7c038d
@@ -1,4 +1,4 @@
7c038d
-include(FindPython)
7c038d
+include(FindPythonInterp)
7c038d
 
7c038d
 set(ETW_PROVIDER_SCRIPT ${CLR_DIR}/src/scripts/genEtwProvider.py)
7c038d
 
7c038d
@@ -14,5 +14,5 @@ set (ETW_PROVIDER_OUTPUTS
7c038d
 set_source_files_properties(${ETW_PROVIDER_OUTPUTS} PROPERTIES GENERATED TRUE)
7c038d
 
7c038d
 add_custom_target(eventprovider
7c038d
-  ${Python_EXECUTABLE} ${ETW_PROVIDER_SCRIPT} --man ${EVENT_MANIFEST} --exc ${EVENT_EXCLUSIONS} --intermediate ${GENERATED_INCLUDE_DIR}
7c038d
+  ${PYTHON_EXECUTABLE} ${ETW_PROVIDER_SCRIPT} --man ${EVENT_MANIFEST} --exc ${EVENT_EXCLUSIONS} --intermediate ${GENERATED_INCLUDE_DIR}
7c038d
   DEPENDS ${EVENT_MANIFEST} ${EVENT_EXCLUSIONS} ${ETW_PROVIDER_SCRIPT})
7c038d
diff --git a/src/coreclr/src/vm/eventing/eventpipe/CMakeLists.txt b/src/coreclr/src/vm/eventing/eventpipe/CMakeLists.txt
7c038d
index 00b3f6f386f..00d79737e54 100644
7c038d
--- a/src/coreclr/src/vm/eventing/eventpipe/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/vm/eventing/eventpipe/CMakeLists.txt
7c038d
@@ -1,9 +1,9 @@
7c038d
-include(FindPython)
7c038d
+include(FindPythonInterp)
7c038d
 
7c038d
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
7c038d
 
7c038d
 set(GENERATE_SCRIPT ${CLR_DIR}/src/scripts/genEventPipe.py)
7c038d
-set(GENERATE_COMMAND ${Python_EXECUTABLE} ${GENERATE_SCRIPT} --man ${EVENT_MANIFEST} --exc ${EVENT_EXCLUSIONS} --intermediate ${CMAKE_CURRENT_BINARY_DIR} ${NONEXTERN_ARG})
7c038d
+set(GENERATE_COMMAND ${PYTHON_EXECUTABLE} ${GENERATE_SCRIPT} --man ${EVENT_MANIFEST} --exc ${EVENT_EXCLUSIONS} --intermediate ${CMAKE_CURRENT_BINARY_DIR} ${NONEXTERN_ARG})
7c038d
 
7c038d
 execute_process(
7c038d
   COMMAND ${GENERATE_COMMAND} --dry-run
7c038d
@@ -28,10 +28,8 @@ add_custom_command(OUTPUT ${EVENTPIPE_SOURCES}
7c038d
   COMMAND ${GENERATE_COMMAND}
7c038d
   DEPENDS ${GENERATE_SCRIPT} ${EVENT_MANIFEST} ${EVENT_EXCLUSIONS})
7c038d
 
7c038d
-add_library_clr(eventpipe STATIC ${EVENTPIPE_SOURCES})
7c038d
-set_target_properties(eventpipe PROPERTIES LINKER_LANGUAGE CXX)
7c038d
-add_dependencies(eventpipe eventing_headers)
7c038d
-
7c038d
-if (NOT CLR_CMAKE_TARGET_WIN32)
7c038d
-  _install(TARGETS eventpipe DESTINATION lib)
7c038d
-endif()
7c038d
+add_library_clr(eventpipe_obj OBJECT ${EVENTPIPE_SOURCES})
7c038d
+set_target_properties(eventpipe_obj PROPERTIES LINKER_LANGUAGE CXX)
7c038d
+add_dependencies(eventpipe_obj eventing_headers)
7c038d
+add_library(eventpipe INTERFACE)
7c038d
+target_sources(eventpipe INTERFACE $<TARGET_OBJECTS:eventpipe_obj>)
7c038d
diff --git a/src/coreclr/src/vm/wks/CMakeLists.txt b/src/coreclr/src/vm/wks/CMakeLists.txt
7c038d
index 1e94b575fd6..5d355f6adcb 100644
7c038d
--- a/src/coreclr/src/vm/wks/CMakeLists.txt
7c038d
+++ b/src/coreclr/src/vm/wks/CMakeLists.txt
7c038d
@@ -7,13 +7,19 @@ if (CLR_CMAKE_TARGET_WIN32)
7c038d
 
7c038d
 endif (CLR_CMAKE_TARGET_WIN32)
7c038d
 
7c038d
-add_library_clr(cee_wks ${VM_SOURCES_WKS} ${VM_SOURCES_WKS_ARCH_ASM})
7c038d
-target_precompile_header(TARGET cee_wks HEADER common.h)
7c038d
+add_library_clr(cee_wks_core OBJECT ${VM_SOURCES_WKS} ${VM_SOURCES_WKS_ARCH_ASM})
7c038d
+add_library_clr(cee_wks_obj OBJECT ${VM_SOURCES_WKS_SPECIAL})
7c038d
+
7c038d
+target_precompile_header(TARGET cee_wks_core HEADER common.h)
7c038d
+target_precompile_header(TARGET cee_wks_obj HEADER common.h)
7c038d
+
7c038d
 if (MSVC)
7c038d
     # mscorlib.cpp does not compile with precompiled header file
7c038d
     set_source_files_properties(../mscorlib.cpp PROPERTIES COMPILE_FLAGS "/Y-")
7c038d
 endif()
7c038d
-add_dependencies(cee_wks eventing_headers)
7c038d
+
7c038d
+add_dependencies(cee_wks_core eventing_headers)
7c038d
+add_dependencies(cee_wks_obj eventing_headers)
7c038d
 
7c038d
 if (CLR_CMAKE_TARGET_WIN32)
7c038d
 
7c038d
@@ -45,8 +51,16 @@ if (CLR_CMAKE_TARGET_WIN32)
7c038d
       DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/AsmConstants.inc
7c038d
     )
7c038d
 
7c038d
-    add_dependencies(cee_wks asmconstants_inc)
7c038d
+    add_dependencies(cee_wks_core asmconstants_inc)
7c038d
+    add_dependencies(cee_wks_obj asmconstants_inc)
7c038d
 
7c038d
   endif(NOT CLR_CMAKE_HOST_ARCH_ARM AND NOT CLR_CMAKE_HOST_ARCH_ARM64)
7c038d
 
7c038d
 endif (CLR_CMAKE_TARGET_WIN32)
7c038d
+
7c038d
+add_custom_target(preprocessd_asm DEPENDS ${VM_WKS_ARCH_ASM_OBJECTS})
7c038d
+add_dependencies(cee_wks_core preprocessd_asm)
7c038d
+add_dependencies(cee_wks_obj preprocessd_asm)
7c038d
+
7c038d
+add_library(cee_wks INTERFACE)
7c038d
+target_sources(cee_wks INTERFACE $<TARGET_OBJECTS:cee_wks_obj> ${VM_WKS_ARCH_ASM_OBJECTS})
7c038d
diff --git a/src/installer/corehost/CMakeLists.txt b/src/installer/corehost/CMakeLists.txt
7c038d
index 43a59a1a695..dff0496cdd8 100644
7c038d
--- a/src/installer/corehost/CMakeLists.txt
7c038d
+++ b/src/installer/corehost/CMakeLists.txt
7c038d
@@ -1,4 +1,4 @@
7c038d
-cmake_minimum_required(VERSION 3.14.2)
7c038d
+cmake_minimum_required(VERSION 3.6.2)
7c038d
 
7c038d
 project(corehost)
7c038d
 
7c038d
diff --git a/src/installer/corehost/cli/exe.cmake b/src/installer/corehost/cli/exe.cmake
7c038d
index de8cd49396b..732faf97ff9 100644
7c038d
--- a/src/installer/corehost/cli/exe.cmake
7c038d
+++ b/src/installer/corehost/cli/exe.cmake
7c038d
@@ -5,7 +5,6 @@
7c038d
 project (${DOTNET_PROJECT_NAME})
7c038d
 
7c038d
 cmake_policy(SET CMP0011 NEW)
7c038d
-cmake_policy(SET CMP0083 NEW)
7c038d
 
7c038d
 include(${CMAKE_CURRENT_LIST_DIR}/common.cmake)
7c038d
 
7c038d
diff --git a/src/installer/corehost/cli/test/mockhostfxr/CMakeLists.txt b/src/installer/corehost/cli/test/mockhostfxr/CMakeLists.txt
7c038d
index bcf6a051229..8572a6318ec 100644
7c038d
--- a/src/installer/corehost/cli/test/mockhostfxr/CMakeLists.txt
7c038d
+++ b/src/installer/corehost/cli/test/mockhostfxr/CMakeLists.txt
7c038d
@@ -2,7 +2,6 @@
7c038d
 # The .NET Foundation licenses this file to you under the MIT license.
7c038d
 # See the LICENSE file in the project root for more information.
7c038d
 
7c038d
-cmake_minimum_required (VERSION 2.6)
7c038d
 project(mockhostfxr_2_2)
7c038d
 
7c038d
 set(DOTNET_PROJECT_NAME "mockhostfxr_2_2")
7c038d
diff --git a/src/libraries/Native/Unix/CMakeLists.txt b/src/libraries/Native/Unix/CMakeLists.txt
7c038d
index f14ada69fee..cb174fe5013 100644
7c038d
--- a/src/libraries/Native/Unix/CMakeLists.txt
7c038d
+++ b/src/libraries/Native/Unix/CMakeLists.txt
7c038d
@@ -1,19 +1,14 @@
7c038d
-cmake_minimum_required(VERSION 3.14.2)
7c038d
+cmake_minimum_required(VERSION 3.6.2)
7c038d
+if(CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS) 
7c038d
+     # CMake 3.14.5 contains bug fixes for iOS 
7c038d
+     cmake_minimum_required(VERSION 3.14.5) 
7c038d
+ endif() 
7c038d
 cmake_policy(SET CMP0042 NEW)
7c038d
 
7c038d
 project(CoreFX C)
7c038d
 
7c038d
 include(${CLR_ENG_NATIVE_DIR}/configuretools.cmake)
7c038d
 
7c038d
-if(CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
7c038d
-    # CMake 3.14.5 contains bug fixes for iOS
7c038d
-    cmake_minimum_required(VERSION 3.14.5)
7c038d
-endif()
7c038d
-
7c038d
-if(NOT CLR_CMAKE_TARGET_ARCH_WASM)
7c038d
-    cmake_policy(SET CMP0083 NEW)
7c038d
-endif(NOT CLR_CMAKE_TARGET_ARCH_WASM)
7c038d
-
7c038d
 set(CMAKE_MACOSX_RPATH ON)
7c038d
 set(CMAKE_INSTALL_PREFIX $ENV{__CMakeBinDir})
7c038d
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
7c038d
@@ -167,7 +162,8 @@ if(CLR_CMAKE_TARGET_UNIX)
7c038d
     if(NOT CLR_CMAKE_TARGET_ARCH_WASM AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS)
7c038d
         if(CLR_CMAKE_TARGET_OSX)
7c038d
             add_definitions(-DTARGET_OSX)
7c038d
-            add_link_options(-Wl,-bind_at_load)
7c038d
+            set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-bind_at_load")
7c038d
+            set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-bind_at_load" )
7c038d
         else()
7c038d
             add_compile_options($<$<COMPILE_LANGUAGE:ASM>:-Wa,--noexecstack>)
7c038d
             if(CLR_CMAKE_TARGET_SUNOS)
7c038d
@@ -175,7 +171,8 @@ if(CLR_CMAKE_TARGET_UNIX)
7c038d
             else()
7c038d
                 # -z,now is required for full relro.
7c038d
                 # see https://www.redhat.com/en/blog/hardening-elf-binaries-using-relocation-read-only-relro
7c038d
-                add_link_options(-Wl,--build-id=sha1 -Wl,-z,relro,-z,now)
7c038d
+                set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--build-id=sha1 -Wl,-z,relro,-z,now")
7c038d
+                set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--build-id=sha1 -Wl,-z,relro,-z,now" )
7c038d
             endif()
7c038d
         endif()
7c038d
     endif()
7c038d
diff --git a/src/libraries/Native/Unix/System.Globalization.Native/CMakeLists.txt b/src/libraries/Native/Unix/System.Globalization.Native/CMakeLists.txt
7c038d
index bcfc5dd106a..ebcb5a02b3f 100644
7c038d
--- a/src/libraries/Native/Unix/System.Globalization.Native/CMakeLists.txt
7c038d
+++ b/src/libraries/Native/Unix/System.Globalization.Native/CMakeLists.txt
7c038d
@@ -79,14 +79,15 @@ if (GEN_SHARED_LIB)
7c038d
     install_with_stripped_symbols (System.Globalization.Native PROGRAMS .)
7c038d
 endif()
7c038d
 
7c038d
-add_library(System.Globalization.Native-Static
7c038d
-    STATIC
7c038d
+add_library(System.Globalization.Native-obj
7c038d
+    OBJECT
7c038d
     ${NATIVEGLOBALIZATION_SOURCES}
7c038d
 )
7c038d
 
7c038d
-set_target_properties(System.Globalization.Native-Static PROPERTIES OUTPUT_NAME System.Globalization.Native  CLEAN_DIRECT_OUTPUT 1)
7c038d
+set_target_properties(System.Globalization.Native-obj PROPERTIES OUTPUT_NAME System.Globalization.Native  CLEAN_DIRECT_OUTPUT 1)
7c038d
 
7c038d
-install (TARGETS System.Globalization.Native-Static DESTINATION .)
7c038d
+add_library(System.Globalization.Native-static INTERFACE)
7c038d
+target_sources(System.Globalization.Native-static INTERFACE $<TARGET_OBJECTS:System.Globalization.Native-obj>)
7c038d
 
7c038d
 if(NOT CLR_CMAKE_TARGET_OSX AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND NOT CLR_CMAKE_TARGET_ANDROID)
7c038d
     if (GEN_SHARED_LIB)