From 7c038d9b2f50a15c3fb6254a22551aac3e121265 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Aug 08 2020 18:27:53 +0000 Subject: import dotnet5.0-5.0.100-0.2.preview4.el8 --- diff --git a/.dotnet5.0.metadata b/.dotnet5.0.metadata new file mode 100644 index 0000000..eedf59c --- /dev/null +++ b/.dotnet5.0.metadata @@ -0,0 +1 @@ +efcce335d7ac72c5d51b603732deac394f356463 SOURCES/dotnet-v5.0.100-preview4-SDK.tar.gz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ed21976 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/dotnet-v5.0.100-preview4-SDK.tar.gz diff --git a/SOURCES/check-debug-symbols.py b/SOURCES/check-debug-symbols.py new file mode 100755 index 0000000..be26d87 --- /dev/null +++ b/SOURCES/check-debug-symbols.py @@ -0,0 +1,136 @@ +#!/usr/bin/python3 + +""" +Check debug symbols are present in shared object and can identify +code. + +It starts scanning from a directory and recursively scans all ELF +files found in it for various symbols to ensure all debuginfo is +present and nothing has been stripped. + +Usage: + +./check-debug-symbols /path/of/dir/to/scan/ + + +Example: + +./check-debug-symbols /usr/lib64 +""" + +# This technique was explained to me by Mark Wielaard (mjw). + +import collections +import os +import re +import subprocess +import sys + +ScanResult = collections.namedtuple('ScanResult', + 'file_name debug_info debug_abbrev file_symbols gnu_debuglink') + + +def scan_file(file): + "Scan the provided file and return a ScanResult containing results of the scan." + + # Test for .debug_* sections in the shared object. This is the main test. + # Stripped objects will not contain these. + readelf_S_result = subprocess.run(['eu-readelf', '-S', file], + stdout=subprocess.PIPE, encoding='utf-8', check=True) + has_debug_info = any(line for line in readelf_S_result.stdout.split('\n') if '] .debug_info' in line) + + has_debug_abbrev = any(line for line in readelf_S_result.stdout.split('\n') if '] .debug_abbrev' in line) + + # Test FILE symbols. These will most likely be removed by anyting that + # manipulates symbol tables because it's generally useless. So a nice test + # that nothing has messed with symbols. + def contains_file_symbols(line): + parts = line.split() + if len(parts) < 8: + return False + return \ + parts[2] == '0' and parts[3] == 'FILE' and parts[4] == 'LOCAL' and parts[5] == 'DEFAULT' and \ + parts[6] == 'ABS' and re.match(r'((.*/)?[-_a-zA-Z0-9]+\.(c|cc|cpp|cxx))?', parts[7]) + + readelf_s_result = subprocess.run(["eu-readelf", '-s', file], + stdout=subprocess.PIPE, encoding='utf-8', check=True) + has_file_symbols = any(line for line in readelf_s_result.stdout.split('\n') if contains_file_symbols(line)) + + # Test that there are no .gnu_debuglink sections pointing to another + # debuginfo file. There shouldn't be any debuginfo files, so the link makes + # no sense either. + has_gnu_debuglink = any(line for line in readelf_s_result.stdout.split('\n') if '] .gnu_debuglink' in line) + + return ScanResult(file, has_debug_info, has_debug_abbrev, has_file_symbols, has_gnu_debuglink) + +def is_elf(file): + result = subprocess.run(['file', file], stdout=subprocess.PIPE, encoding='utf-8', check=True) + return re.search('ELF 64-bit LSB (?:executable|shared object)', result.stdout) + +def scan_file_if_sensible(file): + if is_elf(file): + # print(file) + return scan_file(file) + return None + +def scan_dir(dir): + results = [] + for root, _, files in os.walk(dir): + for name in files: + result = scan_file_if_sensible(os.path.join(root, name)) + if result: + results.append(result) + return results + +def scan(file): + file = os.path.abspath(file) + if os.path.isdir(file): + return scan_dir(file) + elif os.path.isfile(file): + return [scan_file_if_sensible(file)] + +def is_bad_result(result): + return not result.debug_info or not result.debug_abbrev or not result.file_symbols or result.gnu_debuglink + +def print_scan_results(results, verbose): + # print(results) + for result in results: + file_name = result.file_name + found_issue = False + if not result.debug_info: + found_issue = True + print('error: missing .debug_info section in', file_name) + if not result.debug_abbrev: + found_issue = True + print('error: missing .debug_abbrev section in', file_name) + if not result.file_symbols: + found_issue = True + print('error: missing FILE symbols in', file_name) + if result.gnu_debuglink: + found_issue = True + print('error: unexpected .gnu_debuglink section in', file_name) + if verbose and not found_issue: + print('OK: ', file_name) + +def main(args): + verbose = False + files = [] + for arg in args: + if arg == '--verbose' or arg == '-v': + verbose = True + else: + files.append(arg) + + results = [] + for file in files: + results.extend(scan(file)) + + print_scan_results(results, verbose) + + if any(is_bad_result(result) for result in results): + return 1 + return 0 + + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) diff --git a/SOURCES/dotnet.sh.in b/SOURCES/dotnet.sh.in new file mode 100644 index 0000000..65b92a0 --- /dev/null +++ b/SOURCES/dotnet.sh.in @@ -0,0 +1,14 @@ + +# Set location for AppHost lookup +[ -z "$DOTNET_ROOT" ] && export DOTNET_ROOT=@LIBDIR@/dotnet + +# Add dotnet tools directory to PATH +DOTNET_TOOLS_PATH="$HOME/.dotnet/tools" +case "$PATH" in + *"$DOTNET_TOOLS_PATH"* ) true ;; + * ) PATH="$PATH:$DOTNET_TOOLS_PATH" ;; +esac + +# Extract self-contained executables under HOME +# to avoid multi-user issues from using the default '/var/tmp'. +[ -z "$DOTNET_BUNDLE_EXTRACT_BASE_DIR" ] && export DOTNET_BUNDLE_EXTRACT_BASE_DIR="${XDG_CACHE_HOME:-"$HOME"/.cache}/dotnet_bundle_extract" diff --git a/SOURCES/runtime-39044-cmake-downgrade.patch b/SOURCES/runtime-39044-cmake-downgrade.patch new file mode 100644 index 0000000..71938d0 --- /dev/null +++ b/SOURCES/runtime-39044-cmake-downgrade.patch @@ -0,0 +1,1158 @@ +diff --git a/eng/common/cross/toolchain.cmake b/eng/common/cross/toolchain.cmake +index 534f1d19de6..50d81842274 100644 +--- a/eng/common/cross/toolchain.cmake ++++ b/eng/common/cross/toolchain.cmake +@@ -83,15 +83,26 @@ endif() + + # Specify link flags + ++function(add_toolchain_linker_flag Flag) ++ set(Config "${ARGV1}") ++ set(CONFIG_SUFFIX "") ++ if (NOT Config STREQUAL "") ++ set(CONFIG_SUFFIX "_${Config}") ++ endif() ++ set("CMAKE_EXE_LINKER_FLAGS${CONFIG_SUFFIX}" "${CMAKE_EXE_LINKER_FLAGS${CONFIG_SUFFIX}} ${Flag}" PARENT_SCOPE) ++ set("CMAKE_SHARED_LINKER_FLAGS${CONFIG_SUFFIX}" "${CMAKE_SHARED_LINKER_FLAGS${CONFIG_SUFFIX}} ${Flag}" PARENT_SCOPE) ++endfunction() ++ ++ + if(TARGET_ARCH_NAME STREQUAL "armel") + if(DEFINED TIZEN_TOOLCHAIN) # For Tizen only +- add_link_options("-B${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") +- add_link_options("-L${CROSS_ROOTFS}/lib") +- add_link_options("-L${CROSS_ROOTFS}/usr/lib") +- add_link_options("-L${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") ++ add_toolchain_linker_flag("-B${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") ++ add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib") ++ add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib") ++ add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") + endif() + elseif(TARGET_ARCH_NAME STREQUAL "x86") +- add_link_options(-m32) ++ add_toolchain_linker_flag(-m32) + endif() + + # Specify compile options +diff --git a/eng/native/build-commons.sh b/eng/native/build-commons.sh +index a1a975ce177..9a0c296ff66 100755 +--- a/eng/native/build-commons.sh ++++ b/eng/native/build-commons.sh +@@ -51,12 +51,9 @@ check_prereqs() + # Check presence of CMake on the path + command -v cmake 2>/dev/null || { echo >&2 "Please install cmake before running this script"; exit 1; } + +- function version { echo "$@" | awk -F. '{ printf("%d%02d%02d\n", $1,$2,$3); }'; } +- +- local cmake_version="$(cmake --version | awk '/^cmake version [0-9]+\.[0-9]+\.[0-9]+$/ {print $3}')" +- +- if [[ "$(version "$cmake_version")" -lt "$(version 3.14.2)" ]]; then +- 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; ++ if [[ "$__HostOS" == "OSX" ]]; then ++ # Check presence of pkg-config on the path ++ 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; } + fi + + if [[ "$__UseNinja" == 1 ]]; then +@@ -156,8 +153,8 @@ build_native() + cmake_command="emcmake $cmake_command" + fi + +- echo "Executing $cmake_command --build \"$intermediatesDir\" --target install -j $__NumProc" +- $cmake_command --build "$intermediatesDir" --target install -j "$__NumProc" ++ echo "Executing $cmake_command --build \"$intermediatesDir\" --target install -- -j $__NumProc" ++ $cmake_command --build "$intermediatesDir" --target install -- -j "$__NumProc" + fi + + local exit_code="$?" +diff --git a/eng/native/configurecompiler.cmake b/eng/native/configurecompiler.cmake +index 2937916ced9..07fd6f75f6f 100644 +--- a/eng/native/configurecompiler.cmake ++++ b/eng/native/configurecompiler.cmake +@@ -8,8 +8,6 @@ set(CMAKE_C_STANDARD_REQUIRED ON) + set(CMAKE_CXX_STANDARD 11) + set(CMAKE_CXX_STANDARD_REQUIRED ON) + +-cmake_policy(SET CMP0083 NEW) +- + include(CheckCXXCompilerFlag) + + # "configureoptimization.cmake" must be included after CLR_CMAKE_HOST_UNIX has been set. +@@ -40,11 +38,18 @@ set(CMAKE_CXX_FLAGS_CHECKED "") + set(CMAKE_EXE_LINKER_FLAGS_CHECKED "") + set(CMAKE_SHARED_LINKER_FLAGS_CHECKED "") + ++set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "") ++set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "") ++set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "") ++set(CMAKE_EXE_LINKER_FLAGS_DEBUG "") ++set(CMAKE_EXE_LINKER_FLAGS_DEBUG "") ++set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "") ++ + add_compile_definitions("$<$,$>:DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1>") + add_compile_definitions("$<$,$>:NDEBUG;URTBLDENV_FRIENDLY=Retail>") + + if (MSVC) +- add_link_options(/GUARD:CF) ++ add_linker_flag(/GUARD:CF) + + # Linker flags + # +@@ -57,48 +62,51 @@ if (MSVC) + endif () + + #Do not create Side-by-Side Assembly Manifest +- add_link_options($<$,SHARED_LIBRARY>:/MANIFEST:NO>) ++ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /MANIFEST:NO") + # can handle addresses larger than 2 gigabytes +- add_link_options($<$,SHARED_LIBRARY>:/LARGEADDRESSAWARE>) ++ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /LARGEADDRESSAWARE") + #Compatible with Data Execution Prevention +- add_link_options($<$,SHARED_LIBRARY>:/NXCOMPAT>) ++ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NXCOMPAT") + #Use address space layout randomization +- add_link_options($<$,SHARED_LIBRARY>:/DYNAMICBASE>) ++ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DYNAMICBASE") + #shrink pdb size +- add_link_options($<$,SHARED_LIBRARY>:/PDBCOMPRESS>) ++ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /PDBCOMPRESS") + +- add_link_options($<$,SHARED_LIBRARY>:/DEBUG>) +- add_link_options($<$,SHARED_LIBRARY>:/IGNORE:4197,4013,4254,4070,4221>) +- add_link_options($<$,SHARED_LIBRARY>:/SUBSYSTEM:WINDOWS,${WINDOWS_SUBSYSTEM_VERSION}>) ++ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG") ++ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /IGNORE:4197,4013,4254,4070,4221") ++ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SUBSYSTEM:WINDOWS,${WINDOWS_SUBSYSTEM_VERSION}") + + set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /IGNORE:4221") + +- add_link_options($<$,EXECUTABLE>:/DEBUG>) +- add_link_options($<$,EXECUTABLE>:/PDBCOMPRESS>) +- add_link_options($<$,EXECUTABLE>:/STACK:1572864>) ++ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG") ++ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /PDBCOMPRESS") ++ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:1572864") + + # Debug build specific flags +- add_link_options($<$,$>,$,SHARED_LIBRARY>>:/NOVCFEATURE>) ++ set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /NOVCFEATURE") ++ set(CMAKE_SHARED_LINKER_FLAGS_CHECKED "${CMAKE_SHARED_LINKER_FLAGS_CHECKED} /NOVCFEATURE") + + # Checked build specific flags +- add_link_options($<$:/INCREMENTAL:NO>) # prevent "warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:REF' specification" +- add_link_options($<$:/OPT:REF>) +- add_link_options($<$:/OPT:NOICF>) ++ add_linker_flag(/INCREMENTAL:NO CHECKED) # prevent "warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:REF' specification" ++ add_linker_flag(/OPT:REF CHECKED) ++ add_linker_flag(/OPT:NOICF CHECKED) + + # Release build specific flags +- add_link_options($<$:/LTCG>) +- add_link_options($<$:/OPT:REF>) +- add_link_options($<$:/OPT:ICF>) ++ add_linker_flag(/LTCG RELEASE) ++ add_linker_flag(/OPT:REF RELEASE) ++ add_linker_flag(/OPT:ICF RELEASE) ++ add_linker_flag(/INCREMENTAL:NO RELEASE) + set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} /LTCG") + + # ReleaseWithDebugInfo build specific flags +- add_link_options($<$:/LTCG>) +- add_link_options($<$:/OPT:REF>) +- add_link_options($<$:/OPT:ICF>) ++ add_linker_flag(/LTCG RELWITHDEBINFO) ++ add_linker_flag(/OPT:REF RELWITHDEBINFO) ++ add_linker_flag(/OPT:ICF RELWITHDEBINFO) + set(CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO} /LTCG") + + # Force uCRT to be dynamically linked for Release build +- add_link_options("$<$:/NODEFAULTLIB:libucrt.lib;/DEFAULTLIB:ucrt.lib>") ++ add_linker_flag(/NODEFAULTLIB:libucrt.lib RELEASE) ++ add_linker_flag(/DEFAULTLIB:ucrt.lib RELEASE) + + elseif (CLR_CMAKE_HOST_UNIX) + # Set the values to display when interactively configuring CMAKE_BUILD_TYPE +@@ -157,11 +165,10 @@ elseif (CLR_CMAKE_HOST_UNIX) + + # -fdata-sections -ffunction-sections: each function has own section instead of one per .o file (needed for --gc-sections) + # -O1: optimization level used instead of -O0 to avoid compile error "invalid operand for inline asm constraint" +- add_compile_definitions("$<$,$>:${CLR_SANITIZE_CXX_OPTIONS};-fdata-sections;--ffunction-sections;-O1>") +- add_link_options($<$,$>,$,EXECUTABLE>>:${CLR_SANITIZE_LINK_OPTIONS}>) +- ++ add_compile_options("$<$,$>:${CLR_SANITIZE_CXX_OPTIONS};-fdata-sections;--ffunction-sections;-O1>") ++ add_linker_flag("${CLR_SANITIZE_LINK_OPTIONS}" DEBUG CHECKED) + # -Wl and --gc-sections: drop unused sections\functions (similar to Windows /Gy function-level-linking) +- add_link_options("$<$,$>,$,SHARED_LIBRARY>>:${CLR_SANITIZE_LINK_OPTIONS};-Wl,--gc-sections>") ++ add_linker_flag("-Wl,--gc-sections" DEBUG CHECKED) + endif () + endif(UPPERCASE_CMAKE_BUILD_TYPE STREQUAL DEBUG OR UPPERCASE_CMAKE_BUILD_TYPE STREQUAL CHECKED) + endif(MSVC) +@@ -173,15 +180,18 @@ endif(MSVC) + # ./build-native.sh cmakeargs "-DCLR_ADDITIONAL_COMPILER_OPTIONS=<...>" cmakeargs "-DCLR_ADDITIONAL_LINKER_FLAGS=<...>" + # + if(CLR_CMAKE_HOST_UNIX) +- add_link_options(${CLR_ADDITIONAL_LINKER_FLAGS}) ++ foreach(ADDTL_LINKER_FLAG ${CLR_ADDITIONAL_LINKER_FLAGS}) ++ add_linker_flag(${ADDTL_LINKER_FLAG}) ++ endforeach() + endif(CLR_CMAKE_HOST_UNIX) + + if(CLR_CMAKE_HOST_LINUX) + add_compile_options($<$:-Wa,--noexecstack>) +- add_link_options(-Wl,--build-id=sha1 -Wl,-z,relro,-z,now) ++ add_linker_flag(-Wl,--build-id=sha1) ++ add_linker_flag(-Wl,-z,relro,-z,now) + elseif(CLR_CMAKE_HOST_FREEBSD) + add_compile_options($<$:-Wa,--noexecstack>) +- add_link_options(LINKER:--build-id=sha1) ++ add_linker_flag("-Wl,--build-id=sha1") + elseif(CLR_CMAKE_HOST_SUNOS) + set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} /opt/local/include) + set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} /opt/local/lib) +@@ -357,7 +367,7 @@ if (CLR_CMAKE_HOST_UNIX) + if(CLR_CMAKE_HOST_OSX) + set(MACOS_VERSION_MIN_FLAGS -mmacosx-version-min=10.12) + add_compile_options(${MACOS_VERSION_MIN_FLAGS}) +- add_link_options(${MACOS_VERSION_MIN_FLAGS}) ++ add_linker_flag(${MACOS_VERSION_MIN_FLAGS}) + endif(CLR_CMAKE_HOST_OSX) + endif(CLR_CMAKE_HOST_UNIX) + +@@ -514,7 +524,7 @@ if(CLR_CMAKE_ENABLE_CODE_COVERAGE) + + add_compile_options(-fprofile-arcs) + add_compile_options(-ftest-coverage) +- add_link_options(--coverage) ++ add_linker_flag(--coverage) + else() + message(FATAL_ERROR "Code coverage builds not supported on current platform") + endif(CLR_CMAKE_HOST_UNIX) +diff --git a/eng/native/configureplatform.cmake b/eng/native/configureplatform.cmake +index 1c5254d8496..4a4131cb05d 100644 +--- a/eng/native/configureplatform.cmake ++++ b/eng/native/configureplatform.cmake +@@ -1,4 +1,3 @@ +-include(CheckPIESupported) + include(${CMAKE_CURRENT_LIST_DIR}/functions.cmake) + + # If set, indicates that this is not an officially supported release +@@ -363,19 +362,10 @@ if(NOT CLR_CMAKE_TARGET_EMSCRIPTEN) + # but since we know that PIE is supported, we can safely skip this redundant check). + # + # The default linker on Solaris also does not support PIE. +- if(NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_SUNOS) +- # All code we build should be compiled as position independent +- get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES) +- if("CXX" IN_LIST languages) +- set(CLR_PIE_LANGUAGE CXX) +- else() +- set(CLR_PIE_LANGUAGE C) +- endif() +- check_pie_supported(OUTPUT_VARIABLE PIE_SUPPORT_OUTPUT LANGUAGES ${CLR_PIE_LANGUAGE}) +- if(NOT MSVC AND NOT CMAKE_${CLR_PIE_LANGUAGE}_LINK_PIE_SUPPORTED) +- message(WARNING "PIE is not supported at link time: ${PIE_SUPPORT_OUTPUT}.\n" +- "PIE link options will not be passed to linker.") +- endif() ++ 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) ++ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie") ++ add_compile_options($<$,EXECUTABLE>:-fPIE>) ++ add_compile_options($<$,SHARED_LIBRARY>:-fPIC>) + endif() + + set(CMAKE_POSITION_INDEPENDENT_CODE ON) +diff --git a/eng/native/functions.cmake b/eng/native/functions.cmake +index b7f8f463804..f4a96cbe35e 100644 +--- a/eng/native/functions.cmake ++++ b/eng/native/functions.cmake +@@ -123,7 +123,7 @@ function(preprocess_compile_asm) + set(options "") + set(oneValueArgs OUTPUT_OBJECTS) + set(multiValueArgs ASM_FILES) +- cmake_parse_arguments(PARSE_ARGV 0 COMPILE_ASM "${options}" "${oneValueArgs}" "${multiValueArgs}") ++ cmake_parse_arguments(COMPILE_ASM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGV}) + + get_include_directories_asm(ASM_INCLUDE_DIRECTORIES) + +@@ -209,7 +209,7 @@ function(target_precompile_header) + set(options "") + set(oneValueArgs TARGET HEADER) + set(multiValueArgs ADDITIONAL_INCLUDE_DIRECTORIES) +- cmake_parse_arguments(PARSE_ARGV 0 PRECOMPILE_HEADERS "${options}" "${oneValueArgs}" "${multiValueArgs}") ++ cmake_parse_arguments(PRECOMPILE_HEADERS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGV}) + + if ("${PRECOMPILE_HEADERS_TARGET}" STREQUAL "") + message(SEND_ERROR "No target supplied to target_precompile_header.") +@@ -321,7 +321,7 @@ endfunction() + function(install_clr) + set(oneValueArgs ADDITIONAL_DESTINATION) + set(multiValueArgs TARGETS) +- cmake_parse_arguments(PARSE_ARGV 0 INSTALL_CLR "${options}" "${oneValueArgs}" "${multiValueArgs}") ++ cmake_parse_arguments(INSTALL_CLR "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGV}) + + if ("${INSTALL_CLR_TARGETS}" STREQUAL "") + message(FATAL_ERROR "At least one target must be passed to install_clr(TARGETS )") +@@ -377,6 +377,15 @@ function(disable_pax_mprotect targetName) + endif() + endfunction() + ++if (CMAKE_VERSION VERSION_LESS "3.12") ++ # Polyfill add_compile_definitions when it is unavailable ++ function(add_compile_definitions) ++ get_directory_property(DIR_COMPILE_DEFINITIONS COMPILE_DEFINITIONS) ++ list(APPEND DIR_COMPILE_DEFINITIONS ${ARGV}) ++ set_directory_properties(PROPERTIES COMPILE_DEFINITIONS "${DIR_COMPILE_DEFINITIONS}") ++ endfunction() ++endif() ++ + function(_add_executable) + if(NOT WIN32) + add_executable(${ARGV} ${VERSION_FILE_PATH}) +@@ -415,3 +424,16 @@ endfunction() + function(add_executable_clr) + _add_executable(${ARGV}) + endfunction() ++ ++# add_linker_flag(Flag [Config1 Config2 ...]) ++function(add_linker_flag Flag) ++ if (ARGN STREQUAL "") ++ set("CMAKE_EXE_LINKER_FLAGS" "${CMAKE_EXE_LINKER_FLAGS} ${Flag}" PARENT_SCOPE) ++ set("CMAKE_SHARED_LINKER_FLAGS" "${CMAKE_SHARED_LINKER_FLAGS} ${Flag}" PARENT_SCOPE) ++ else() ++ foreach(Config ${ARGN}) ++ set("CMAKE_EXE_LINKER_FLAGS_${Config}" "${CMAKE_EXE_LINKER_FLAGS_${Config}} ${Flag}" PARENT_SCOPE) ++ set("CMAKE_SHARED_LINKER_FLAGS_${Config}" "${CMAKE_SHARED_LINKER_FLAGS_${Config}} ${Flag}" PARENT_SCOPE) ++ endforeach() ++ endif() ++endfunction() +diff --git a/eng/native/gen-buildsys.sh b/eng/native/gen-buildsys.sh +index f27bb33e357..1b4c2e02c59 100755 +--- a/eng/native/gen-buildsys.sh ++++ b/eng/native/gen-buildsys.sh +@@ -91,6 +91,9 @@ if [[ "$build_arch" == "wasm" ]]; then + cmake_command="emcmake $cmake_command" + fi + ++# We have to be able to build with CMake 3.6.2, so we can't use the -S or -B options ++pushd "$3" ++ + # 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 + $cmake_command \ + -G "$generator" \ +@@ -98,5 +101,6 @@ $cmake_command \ + "-DCMAKE_INSTALL_PREFIX=$__CMakeBinDir" \ + $cmake_extra_defines \ + $__UnprocessedCMakeArgs \ +- -S "$1" \ +- -B "$3" ++ "$1" ++ ++popd +diff --git a/src/coreclr/CMakeLists.txt b/src/coreclr/CMakeLists.txt +index 5fa572c4fcd..071ac2cf5fa 100644 +--- a/src/coreclr/CMakeLists.txt ++++ b/src/coreclr/CMakeLists.txt +@@ -1,4 +1,4 @@ +-cmake_minimum_required(VERSION 3.14.2) ++cmake_minimum_required(VERSION 3.6.2) + + cmake_policy(SET CMP0042 NEW) + +diff --git a/src/coreclr/pgosupport.cmake b/src/coreclr/pgosupport.cmake +index 4b119809017..04bde2bc20b 100644 +--- a/src/coreclr/pgosupport.cmake ++++ b/src/coreclr/pgosupport.cmake +@@ -1,5 +1,18 @@ +-include(CheckIPOSupported) +-check_ipo_supported(RESULT HAVE_LTO) ++include(CheckCXXSourceCompiles) ++include(CheckCXXCompilerFlag) ++ ++# VC++ guarantees support for LTCG (LTO's equivalent) ++if(NOT WIN32) ++ # Function required to give CMAKE_REQUIRED_* local scope ++ function(check_have_lto) ++ set(CMAKE_REQUIRED_FLAGS -flto) ++ set(CMAKE_REQUIRED_LIBRARIES -flto -fuse-ld=gold) ++ check_cxx_source_compiles("int main() { return 0; }" HAVE_LTO) ++ endfunction(check_have_lto) ++ check_have_lto() ++ ++ check_cxx_compiler_flag(-faligned-new COMPILER_SUPPORTS_F_ALIGNED_NEW) ++endif(NOT WIN32) + + # Adds Profile Guided Optimization (PGO) flags to the current target + function(add_pgo TargetName) +diff --git a/src/coreclr/src/ToolBox/SOS/DacTableGen/CMakeLists.txt b/src/coreclr/src/ToolBox/SOS/DacTableGen/CMakeLists.txt +index dcd39e346c9..7b471d53726 100644 +--- a/src/coreclr/src/ToolBox/SOS/DacTableGen/CMakeLists.txt ++++ b/src/coreclr/src/ToolBox/SOS/DacTableGen/CMakeLists.txt +@@ -1,3 +1,4 @@ ++cmake_minimum_required(VERSION 3.8) + # 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. + + project(DacTableGen LANGUAGES CSharp) +diff --git a/src/coreclr/src/binder/CMakeLists.txt b/src/coreclr/src/binder/CMakeLists.txt +index 3a66c81e10e..208f1214dd0 100644 +--- a/src/coreclr/src/binder/CMakeLists.txt ++++ b/src/coreclr/src/binder/CMakeLists.txt +@@ -82,11 +82,13 @@ endif(CLR_CMAKE_TARGET_WIN32) + convert_to_absolute_path(BINDER_SOURCES ${BINDER_SOURCES}) + convert_to_absolute_path(BINDER_CROSSGEN_SOURCES ${BINDER_CROSSGEN_SOURCES}) + +-add_library_clr(v3binder +- STATIC ++add_library_clr(v3binder_obj ++ OBJECT + ${BINDER_SOURCES} + ) +-add_dependencies(v3binder eventing_headers) ++add_dependencies(v3binder_obj eventing_headers) ++add_library(v3binder INTERFACE) ++target_sources(v3binder INTERFACE $) + + add_library_clr(v3binder_crossgen + STATIC +diff --git a/src/coreclr/src/classlibnative/bcltype/CMakeLists.txt b/src/coreclr/src/classlibnative/bcltype/CMakeLists.txt +index 391f70eff43..fdcf344c16a 100644 +--- a/src/coreclr/src/classlibnative/bcltype/CMakeLists.txt ++++ b/src/coreclr/src/classlibnative/bcltype/CMakeLists.txt +@@ -10,9 +10,11 @@ set(BCLTYPE_SOURCES + variant.cpp + ) + +-add_library_clr(bcltype +- STATIC ++add_library_clr(bcltype_obj ++ OBJECT + ${BCLTYPE_SOURCES} + ) + +-add_dependencies(bcltype eventing_headers) ++add_dependencies(bcltype_obj eventing_headers) ++add_library(bcltype INTERFACE) ++target_sources(bcltype INTERFACE $) +diff --git a/src/coreclr/src/classlibnative/float/CMakeLists.txt b/src/coreclr/src/classlibnative/float/CMakeLists.txt +index 44d40c92592..3c066620f76 100644 +--- a/src/coreclr/src/classlibnative/float/CMakeLists.txt ++++ b/src/coreclr/src/classlibnative/float/CMakeLists.txt +@@ -7,9 +7,12 @@ set(FLOAT_SOURCES + floatsingle.cpp + ) + +-add_library_clr(comfloat_wks +- STATIC ++add_library_clr(comfloat_wks_obj ++ OBJECT + ${FLOAT_SOURCES} + ) + +-add_dependencies(comfloat_wks eventing_headers) ++add_dependencies(comfloat_wks_obj eventing_headers) ++ ++add_library(comfloat_wks INTERFACE) ++target_sources(comfloat_wks INTERFACE $) +diff --git a/src/coreclr/src/debug/debug-pal/CMakeLists.txt b/src/coreclr/src/debug/debug-pal/CMakeLists.txt +index ac1e48fb5fb..213fa59e784 100644 +--- a/src/coreclr/src/debug/debug-pal/CMakeLists.txt ++++ b/src/coreclr/src/debug/debug-pal/CMakeLists.txt +@@ -34,4 +34,6 @@ if(CLR_CMAKE_HOST_UNIX) + + endif(CLR_CMAKE_HOST_UNIX) + +-_add_library(debug-pal STATIC ${TWO_WAY_PIPE_SOURCES}) ++_add_library(debug-pal_obj OBJECT ${TWO_WAY_PIPE_SOURCES}) ++add_library(debug-pal INTERFACE) ++target_sources(debug-pal INTERFACE $) +diff --git a/src/coreclr/src/debug/ee/wks/CMakeLists.txt b/src/coreclr/src/debug/ee/wks/CMakeLists.txt +index ee6c482ce76..3dd5e3612df 100644 +--- a/src/coreclr/src/debug/ee/wks/CMakeLists.txt ++++ b/src/coreclr/src/debug/ee/wks/CMakeLists.txt +@@ -9,9 +9,9 @@ if (CLR_CMAKE_TARGET_WIN32) + + if(CLR_CMAKE_HOST_ARCH_ARM OR CLR_CMAKE_HOST_ARCH_ARM64) + +- preprocess_compile_asm(ASM_FILES ${ASM_FILE} OUTPUT_OBJECTS ASM_OBJECTS) ++ preprocess_compile_asm(TARGET cordbee_wks_obj ASM_FILES ${ASM_FILE} OUTPUT_OBJECTS ASM_OBJECTS) + +- add_library_clr(cordbee_wks ${CORDBEE_SOURCES_WKS} ${ASM_OBJECTS}) ++ add_library_clr(cordbee_wks_obj OBJECT ${CORDBEE_SOURCES_WKS} ${ASM_FILE} ${ASM_OBJECTS}) + + else () + +@@ -23,19 +23,21 @@ if (CLR_CMAKE_TARGET_WIN32) + + set_source_files_properties(${ASM_FILE} PROPERTIES COMPILE_OPTIONS "${ASM_OPTIONS}") + +- add_library_clr(cordbee_wks ${CORDBEE_SOURCES_WKS} ${ASM_FILE}) ++ add_library_clr(cordbee_wks_obj OBJECT ${CORDBEE_SOURCES_WKS} ${ASM_FILE}) + + endif() + + else () + + if(CLR_CMAKE_HOST_ARCH_AMD64 OR CLR_CMAKE_HOST_ARCH_ARM OR CLR_CMAKE_HOST_ARCH_ARM64 OR CLR_CMAKE_HOST_ARCH_I386) +- add_library_clr(cordbee_wks ${CORDBEE_SOURCES_WKS} ../${ARCH_SOURCES_DIR}/dbghelpers.S) ++ add_library_clr(cordbee_wks_obj OBJECT ${CORDBEE_SOURCES_WKS} ../${ARCH_SOURCES_DIR}/dbghelpers.S) + else() + message(FATAL_ERROR "Unknown platform") + endif() + + endif (CLR_CMAKE_TARGET_WIN32) + +-target_precompile_header(TARGET cordbee_wks HEADER stdafx.h) +-add_dependencies(cordbee_wks eventing_headers) ++target_precompile_header(TARGET cordbee_wks_obj HEADER stdafx.h) ++add_dependencies(cordbee_wks_obj eventing_headers) ++add_library(cordbee_wks INTERFACE) ++target_sources(cordbee_wks INTERFACE $) +diff --git a/src/coreclr/src/debug/ildbsymlib/CMakeLists.txt b/src/coreclr/src/debug/ildbsymlib/CMakeLists.txt +index 88364658f11..362da1f6483 100644 +--- a/src/coreclr/src/debug/ildbsymlib/CMakeLists.txt ++++ b/src/coreclr/src/debug/ildbsymlib/CMakeLists.txt +@@ -10,5 +10,6 @@ set( ILDBSYMLIB_SOURCES + symwrite.cpp + ) + +-add_library_clr(ildbsymlib ${ILDBSYMLIB_SOURCES}) +- ++add_library_clr(ildbsymlib_obj OBJECT ${ILDBSYMLIB_SOURCES}) ++add_library(ildbsymlib INTERFACE) ++target_sources(ildbsymlib INTERFACE $) +diff --git a/src/coreclr/src/dlls/mscoree/coreclr/CMakeLists.txt b/src/coreclr/src/dlls/mscoree/coreclr/CMakeLists.txt +index 777a2869e4f..066b75ab01f 100644 +--- a/src/coreclr/src/dlls/mscoree/coreclr/CMakeLists.txt ++++ b/src/coreclr/src/dlls/mscoree/coreclr/CMakeLists.txt +@@ -9,20 +9,20 @@ if (CLR_CMAKE_HOST_WIN32) + + list(APPEND CLR_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/coreclr.def) + +- add_link_options(/ENTRY:CoreDllMain) ++ add_linker_flag("/ENTRY:CoreDllMain") + + # Incremental linking results in the linker inserting extra padding and routing function calls via thunks that can break the + # invariants (e.g. size of region between Jit_PatchedCodeLast-Jit_PatchCodeStart needs to fit in a page). +- add_link_options(/INCREMENTAL:NO) ++ add_linker_flag("/INCREMENTAL:NO") + + # Delay load libraries required for WinRT as that is not supported on all platforms +- add_link_options("/DELAYLOAD:api-ms-win-core-winrt-string-l1-1-0.dll") +- add_link_options("/DELAYLOAD:api-ms-win-core-winrt-l1-1-0.dll") +- add_link_options("/DELAYLOAD:api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll") +- add_link_options("/DELAYLOAD:api-ms-win-ro-typeresolution-l1-1-0.dll") ++ add_linker_flag("/DELAYLOAD:api-ms-win-core-winrt-string-l1-1-0.dll") ++ add_linker_flag("/DELAYLOAD:api-ms-win-core-winrt-l1-1-0.dll") ++ add_linker_flag("/DELAYLOAD:api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll") ++ add_linker_flag("/DELAYLOAD:api-ms-win-ro-typeresolution-l1-1-0.dll") + + # Delay load version.dll so that we can specify how to search when loading it as it is not part of Windows' known DLLs +- add_link_options("/DELAYLOAD:version.dll") ++ add_linker_flag("/DELAYLOAD:version.dll") + + # No library groups for Win32 + set(START_LIBRARY_GROUP) +@@ -35,7 +35,7 @@ else(CLR_CMAKE_HOST_WIN32) + if(CLR_CMAKE_TARGET_LINUX OR CLR_CMAKE_TARGET_FREEBSD OR CLR_CMAKE_TARGET_NETBSD) + # This option is necessary to ensure that the overloaded delete operator defined inside + # of the utilcode will be used instead of the standard library delete operator. +- add_link_options("LINKER:-Bsymbolic") ++ add_linker_flag("-Wl,-Bsymbolic") + + # The following linked options can be inserted into the linker libraries list to + # ensure proper resolving of circular references between a subset of the libraries. +@@ -110,7 +110,7 @@ set(CORECLR_LIBRARIES + utilcode + v3binder + libraries-native +- System.Globalization.Native-Static ++ System.Globalization.Native-static + interop + ) + +@@ -162,7 +162,12 @@ if(FEATURE_EVENT_TRACE) + endif(CLR_CMAKE_HOST_UNIX) + endif(FEATURE_EVENT_TRACE) + +-target_link_libraries(coreclr ${CORECLR_LIBRARIES}) ++if(FEATURE_MERGE_JIT_AND_ENGINE) ++ set(CLRJIT_STATIC clrjit_static) ++endif(FEATURE_MERGE_JIT_AND_ENGINE) ++ ++target_sources(coreclr PUBLIC $) ++target_link_libraries(coreclr PUBLIC ${CORECLR_LIBRARIES} ${CLRJIT_STATIC} cee_wks) + + # Create the runtime module index header file containing the coreclr build id + # for xplat and the timestamp/size on Windows. +diff --git a/src/coreclr/src/dlls/mscorrc/CMakeLists.txt b/src/coreclr/src/dlls/mscorrc/CMakeLists.txt +index 08cf27aaf80..e114ec19cea 100644 +--- a/src/coreclr/src/dlls/mscorrc/CMakeLists.txt ++++ b/src/coreclr/src/dlls/mscorrc/CMakeLists.txt +@@ -19,7 +19,9 @@ if(CLR_CMAKE_HOST_WIN32) + else() + build_resources(${CMAKE_CURRENT_SOURCE_DIR}/include.rc mscorrc TARGET_CPP_FILE) + +- add_library_clr(mscorrc STATIC ++ add_library_clr(mscorrc_obj OBJECT + ${TARGET_CPP_FILE} + ) ++ add_library(mscorrc INTERFACE) ++ target_sources(mscorrc INTERFACE $) + endif(CLR_CMAKE_HOST_WIN32) +diff --git a/src/coreclr/src/gcinfo/CMakeLists.txt b/src/coreclr/src/gcinfo/CMakeLists.txt +index b0b67462562..50a1722a8ea 100644 +--- a/src/coreclr/src/gcinfo/CMakeLists.txt ++++ b/src/coreclr/src/gcinfo/CMakeLists.txt +@@ -16,11 +16,14 @@ endif(CLR_CMAKE_TARGET_ARCH_I386) + + convert_to_absolute_path(GCINFO_SOURCES ${GCINFO_SOURCES}) + +-add_library_clr(gcinfo +- STATIC ++add_library_clr(gcinfo_obj ++ OBJECT + ${GCINFO_SOURCES} + ) + ++add_library(gcinfo INTERFACE) ++target_sources(gcinfo INTERFACE $) ++ + add_library_clr(gcinfo_crossgen + STATIC + ${GCINFO_SOURCES} +diff --git a/src/coreclr/src/inc/CMakeLists.txt b/src/coreclr/src/inc/CMakeLists.txt +index 60fad88e77d..4f75d3a882d 100644 +--- a/src/coreclr/src/inc/CMakeLists.txt ++++ b/src/coreclr/src/inc/CMakeLists.txt +@@ -58,7 +58,9 @@ if(FEATURE_JIT_PITCHING) + endif(FEATURE_JIT_PITCHING) + + # Compile *_i.cpp to lib +-_add_library(corguids ${CORGUIDS_SOURCES}) ++_add_library(corguids_obj OBJECT ${CORGUIDS_SOURCES}) ++add_library(corguids INTERFACE) ++target_sources(corguids INTERFACE $) + + # Binplace the inc files for packaging later. + +@@ -75,4 +77,3 @@ _install (FILES cfi.h + gcinfoencoder.h + gcinfotypes.h + DESTINATION inc) +-_install (TARGETS corguids DESTINATION lib) +diff --git a/src/coreclr/src/interop/CMakeLists.txt b/src/coreclr/src/interop/CMakeLists.txt +index d7eaa1b04ae..3924b4fdbb4 100644 +--- a/src/coreclr/src/interop/CMakeLists.txt ++++ b/src/coreclr/src/interop/CMakeLists.txt +@@ -30,7 +30,10 @@ endif(WIN32) + + convert_to_absolute_path(INTEROP_SOURCES ${INTEROP_SOURCES}) + +-add_library_clr(interop +- STATIC ++add_library_clr(interop_obj ++ OBJECT + ${INTEROP_SOURCES} + ) ++ ++add_library(interop INTERFACE) ++target_sources(interop INTERFACE $) +diff --git a/src/coreclr/src/jit/dll/CMakeLists.txt b/src/coreclr/src/jit/dll/CMakeLists.txt +index ec7cddc78ed..01bdbf5a731 100644 +--- a/src/coreclr/src/jit/dll/CMakeLists.txt ++++ b/src/coreclr/src/jit/dll/CMakeLists.txt +@@ -2,17 +2,17 @@ project(ClrJit) + + set_source_files_properties(${JIT_EXPORTS_FILE} PROPERTIES GENERATED TRUE) + ++add_library_clr(clrjit_obj ++ OBJECT ++ ${JIT_CORE_SOURCES} ++ ${JIT_ARCH_SOURCES} ++) ++ + if(CLR_CMAKE_HOST_UNIX) +- add_library_clr(clrjit_static +- STATIC +- ${SHARED_LIB_SOURCES} +- ${JIT_ARCH_SOURCES} +- ) +- add_dependencies(clrjit_static coreclrpal gcinfo) +-else() +- add_library_clr(clrjit_static +- ${SHARED_LIB_SOURCES} +- ${JIT_ARCH_SOURCES} +- ) ++ add_dependencies(clrjit_obj coreclrpal gcinfo) + endif(CLR_CMAKE_HOST_UNIX) +-target_precompile_header(TARGET clrjit_static HEADER jitpch.h ADDITIONAL_INCLUDE_DIRECTORIES ${JIT_SOURCE_DIR}) ++ ++target_precompile_header(TARGET clrjit_obj HEADER jitpch.h ADDITIONAL_INCLUDE_DIRECTORIES ${JIT_SOURCE_DIR}) ++ ++add_library(clrjit_static INTERFACE) ++target_sources(clrjit_static INTERFACE $) +diff --git a/src/coreclr/src/md/ceefilegen/CMakeLists.txt b/src/coreclr/src/md/ceefilegen/CMakeLists.txt +index 90749c806b2..fd0f8424d97 100644 +--- a/src/coreclr/src/md/ceefilegen/CMakeLists.txt ++++ b/src/coreclr/src/md/ceefilegen/CMakeLists.txt +@@ -25,8 +25,11 @@ if (CLR_CMAKE_TARGET_WIN32) + list(APPEND CEEFILEGEN_SOURCES ${CEEFILEGEN_HEADERS}) + endif (CLR_CMAKE_TARGET_WIN32) + +-add_library_clr(ceefgen +- STATIC ++add_library_clr(ceefgen_obj ++ OBJECT + ${CEEFILEGEN_SOURCES} + ) +-target_precompile_header(TARGET ceefgen HEADER stdafx.h) ++target_precompile_header(TARGET ceefgen_obj HEADER stdafx.h) ++ ++add_library(ceefgen INTERFACE) ++target_sources(ceefgen INTERFACE $) +diff --git a/src/coreclr/src/md/compiler/CMakeLists.txt b/src/coreclr/src/md/compiler/CMakeLists.txt +index 3b916cdc9fe..f9f80db2500 100644 +--- a/src/coreclr/src/md/compiler/CMakeLists.txt ++++ b/src/coreclr/src/md/compiler/CMakeLists.txt +@@ -58,9 +58,11 @@ add_library_clr(mdcompiler_dac ${MDCOMPILER_SOURCES}) + set_target_properties(mdcompiler_dac PROPERTIES DAC_COMPONENT TRUE) + target_precompile_header(TARGET mdcompiler_dac HEADER stdafx.h) + +-add_library_clr(mdcompiler_wks ${MDCOMPILER_SOURCES}) +-target_compile_definitions(mdcompiler_wks PRIVATE FEATURE_METADATA_EMIT_ALL) +-target_precompile_header(TARGET mdcompiler_wks HEADER stdafx.h) ++add_library_clr(mdcompiler_wks_obj OBJECT ${MDCOMPILER_SOURCES}) ++target_compile_definitions(mdcompiler_wks_obj PRIVATE FEATURE_METADATA_EMIT_ALL) ++target_precompile_header(TARGET mdcompiler_wks_obj HEADER stdafx.h) ++add_library(mdcompiler_wks INTERFACE) ++target_sources(mdcompiler_wks INTERFACE $) + + add_library_clr(mdcompiler-dbi ${MDCOMPILER_SOURCES}) + set_target_properties(mdcompiler-dbi PROPERTIES DBI_COMPONENT TRUE) +diff --git a/src/coreclr/src/md/enc/CMakeLists.txt b/src/coreclr/src/md/enc/CMakeLists.txt +index 7220736b9ca..82af8434296 100644 +--- a/src/coreclr/src/md/enc/CMakeLists.txt ++++ b/src/coreclr/src/md/enc/CMakeLists.txt +@@ -48,9 +48,11 @@ add_library_clr(mdruntimerw_dac ${MDRUNTIMERW_SOURCES}) + set_target_properties(mdruntimerw_dac PROPERTIES DAC_COMPONENT TRUE) + target_precompile_header(TARGET mdruntimerw_dac HEADER stdafx.h) + +-add_library_clr(mdruntimerw_wks ${MDRUNTIMERW_SOURCES}) +-target_compile_definitions(mdruntimerw_wks PRIVATE FEATURE_METADATA_EMIT_ALL) +-target_precompile_header(TARGET mdruntimerw_wks HEADER stdafx.h) ++add_library_clr(mdruntimerw_wks_obj OBJECT ${MDRUNTIMERW_SOURCES}) ++target_compile_definitions(mdruntimerw_wks_obj PRIVATE FEATURE_METADATA_EMIT_ALL) ++target_precompile_header(TARGET mdruntimerw_wks_obj HEADER stdafx.h) ++add_library(mdruntimerw_wks INTERFACE) ++target_sources(mdruntimerw_wks INTERFACE $) + + add_library_clr(mdruntimerw-dbi ${MDRUNTIMERW_SOURCES}) + set_target_properties(mdruntimerw-dbi PROPERTIES DBI_COMPONENT TRUE) +diff --git a/src/coreclr/src/md/hotdata/CMakeLists.txt b/src/coreclr/src/md/hotdata/CMakeLists.txt +index c6168d2a4b0..88475cb72f4 100644 +--- a/src/coreclr/src/md/hotdata/CMakeLists.txt ++++ b/src/coreclr/src/md/hotdata/CMakeLists.txt +@@ -33,8 +33,10 @@ add_library_clr(mdhotdata_dac ${MDHOTDATA_SOURCES}) + set_target_properties(mdhotdata_dac PROPERTIES DAC_COMPONENT TRUE) + target_precompile_header(TARGET mdhotdata_dac HEADER external.h) + +-add_library_clr(mdhotdata_full ${MDHOTDATA_SOURCES}) +-target_precompile_header(TARGET mdhotdata_full HEADER external.h) ++add_library_clr(mdhotdata_full_obj OBJECT ${MDHOTDATA_SOURCES}) ++target_precompile_header(TARGET mdhotdata_full_obj HEADER external.h) ++add_library(mdhotdata_full INTERFACE) ++target_sources(mdhotdata_full INTERFACE $) + + add_library_clr(mdhotdata_crossgen ${MDHOTDATA_SOURCES}) + set_target_properties(mdhotdata_crossgen PROPERTIES CROSSGEN_COMPONENT TRUE) +diff --git a/src/coreclr/src/md/runtime/CMakeLists.txt b/src/coreclr/src/md/runtime/CMakeLists.txt +index 6dc193e14a7..7e0e83f1114 100644 +--- a/src/coreclr/src/md/runtime/CMakeLists.txt ++++ b/src/coreclr/src/md/runtime/CMakeLists.txt +@@ -47,9 +47,11 @@ add_library_clr(mdruntime_dac ${MDRUNTIME_SOURCES}) + set_target_properties(mdruntime_dac PROPERTIES DAC_COMPONENT TRUE) + target_precompile_header(TARGET mdruntime_dac HEADER stdafx.h) + +-add_library_clr(mdruntime_wks ${MDRUNTIME_SOURCES}) +-target_compile_definitions(mdruntime_wks PRIVATE FEATURE_METADATA_EMIT_ALL) +-target_precompile_header(TARGET mdruntime_wks HEADER stdafx.h) ++add_library_clr(mdruntime_wks_obj OBJECT ${MDRUNTIME_SOURCES}) ++target_compile_definitions(mdruntime_wks_obj PRIVATE FEATURE_METADATA_EMIT_ALL) ++target_precompile_header(TARGET mdruntime_wks_obj HEADER stdafx.h) ++add_library(mdruntime_wks INTERFACE) ++target_sources(mdruntime_wks INTERFACE $) + + add_library_clr(mdruntime-dbi ${MDRUNTIME_SOURCES}) + set_target_properties(mdruntime-dbi PROPERTIES DBI_COMPONENT TRUE) +diff --git a/src/coreclr/src/pal/src/CMakeLists.txt b/src/coreclr/src/pal/src/CMakeLists.txt +index e7c1629d5b2..7818deef050 100644 +--- a/src/coreclr/src/pal/src/CMakeLists.txt ++++ b/src/coreclr/src/pal/src/CMakeLists.txt +@@ -256,10 +256,12 @@ add_library(coreclrpal + # > warning for library: libtracepointprovider.a the table of contents is empty (no object file members in the library define global symbols) + # + if(CLR_CMAKE_TARGET_LINUX) +- add_library(tracepointprovider +- STATIC ++ add_library(tracepointprovider_obj ++ OBJECT + misc/tracepointprovider.cpp + ) ++ add_library(tracepointprovider INTERFACE) ++ target_sources(tracepointprovider INTERFACE $) + endif(CLR_CMAKE_TARGET_LINUX) + + if(CLR_CMAKE_TARGET_OSX) +diff --git a/src/coreclr/src/pal/src/eventprovider/dummyprovider/CMakeLists.txt b/src/coreclr/src/pal/src/eventprovider/dummyprovider/CMakeLists.txt +index 39b9826d1ab..8e6968cf783 100644 +--- a/src/coreclr/src/pal/src/eventprovider/dummyprovider/CMakeLists.txt ++++ b/src/coreclr/src/pal/src/eventprovider/dummyprovider/CMakeLists.txt +@@ -1,8 +1,8 @@ +-include(FindPython) ++include(FindPythonInterp) + + set (GENERATE_SCRIPT ${CLR_DIR}/src/scripts/genDummyProvider.py) + +-set(GENERATE_COMMAND ${Python_EXECUTABLE} ${GENERATE_SCRIPT} --man ${EVENT_MANIFEST} --intermediate ${CMAKE_CURRENT_BINARY_DIR}) ++set(GENERATE_COMMAND ${PYTHON_EXECUTABLE} ${GENERATE_SCRIPT} --man ${EVENT_MANIFEST} --intermediate ${CMAKE_CURRENT_BINARY_DIR}) + + execute_process( + COMMAND ${GENERATE_COMMAND} --dry-run +diff --git a/src/coreclr/src/pal/src/eventprovider/lttngprovider/CMakeLists.txt b/src/coreclr/src/pal/src/eventprovider/lttngprovider/CMakeLists.txt +index 234dea19b75..d55dab3557f 100644 +--- a/src/coreclr/src/pal/src/eventprovider/lttngprovider/CMakeLists.txt ++++ b/src/coreclr/src/pal/src/eventprovider/lttngprovider/CMakeLists.txt +@@ -1,7 +1,7 @@ +-include(FindPython) ++include(FindPythonInterp) + set (GENERATE_SCRIPT ${CLR_DIR}/src/scripts/genLttngProvider.py) + +-set(GENERATE_COMMAND ${Python_EXECUTABLE} ${GENERATE_SCRIPT} --man ${EVENT_MANIFEST} --intermediate ${CMAKE_CURRENT_BINARY_DIR}) ++set(GENERATE_COMMAND ${PYTHON_EXECUTABLE} ${GENERATE_SCRIPT} --man ${EVENT_MANIFEST} --intermediate ${CMAKE_CURRENT_BINARY_DIR}) + + execute_process( + COMMAND ${GENERATE_COMMAND} --dry-run +diff --git a/src/coreclr/src/pal/tests/palsuite/eventprovider/CMakeLists.txt b/src/coreclr/src/pal/tests/palsuite/eventprovider/CMakeLists.txt +index 000ee2d2fb0..845fae656be 100644 +--- a/src/coreclr/src/pal/tests/palsuite/eventprovider/CMakeLists.txt ++++ b/src/coreclr/src/pal/tests/palsuite/eventprovider/CMakeLists.txt +@@ -5,10 +5,10 @@ set(SOURCES + set(EVENT_MANIFEST ${VM_DIR}/ClrEtwAll.man) + set(TEST_GENERATOR ${CLR_DIR}/src/scripts/genEventingTests.py) + +-include(FindPython) ++include(FindPythonInterp) + + add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/clralltestevents.cpp +- COMMAND ${Python_EXECUTABLE} ${TEST_GENERATOR} --testdir "${CMAKE_CURRENT_BINARY_DIR}" --man "${EVENT_MANIFEST}" ++ COMMAND ${PYTHON_EXECUTABLE} ${TEST_GENERATOR} --testdir "${CMAKE_CURRENT_BINARY_DIR}" --man "${EVENT_MANIFEST}" + DEPENDS ${EVENT_MANIFEST} ${TEST_GENERATOR} + COMMENT "Updating clralltestevents.cpp" + ) +diff --git a/src/coreclr/src/unwinder/CMakeLists.txt b/src/coreclr/src/unwinder/CMakeLists.txt +index 4421ea9f6f6..41a0219bbf7 100644 +--- a/src/coreclr/src/unwinder/CMakeLists.txt ++++ b/src/coreclr/src/unwinder/CMakeLists.txt +@@ -20,8 +20,10 @@ list(APPEND UNWINDER_SOURCES + convert_to_absolute_path(UNWINDER_SOURCES ${UNWINDER_SOURCES}) + + if(CLR_CMAKE_HOST_UNIX) +- add_library_clr(unwinder_wks ${UNWINDER_SOURCES}) +- add_dependencies(unwinder_wks eventing_headers) ++ add_library_clr(unwinder_wks_obj OBJECT ${UNWINDER_SOURCES}) ++ add_dependencies(unwinder_wks_obj eventing_headers) ++ add_library(unwinder_wks INTERFACE) ++ target_sources(unwinder_wks INTERFACE $) + endif(CLR_CMAKE_HOST_UNIX) + + add_library_clr(unwinder_dac ${UNWINDER_SOURCES}) +diff --git a/src/coreclr/src/utilcode/CMakeLists.txt b/src/coreclr/src/utilcode/CMakeLists.txt +index aa28b2db603..f8082fc9076 100644 +--- a/src/coreclr/src/utilcode/CMakeLists.txt ++++ b/src/coreclr/src/utilcode/CMakeLists.txt +@@ -98,7 +98,9 @@ convert_to_absolute_path(UTILCODE_CROSSGEN_SOURCES ${UTILCODE_CROSSGEN_SOURCES}) + convert_to_absolute_path(UTILCODE_STATICNOHOST_SOURCES ${UTILCODE_STATICNOHOST_SOURCES}) + + add_library_clr(utilcode_dac STATIC ${UTILCODE_DAC_SOURCES}) +-add_library_clr(utilcode STATIC ${UTILCODE_SOURCES}) ++add_library_clr(utilcode_obj OBJECT ${UTILCODE_SOURCES}) ++add_library(utilcode INTERFACE) ++target_sources(utilcode INTERFACE $) + add_library_clr(utilcodestaticnohost STATIC ${UTILCODE_STATICNOHOST_SOURCES}) + add_library_clr(utilcode_crossgen STATIC ${UTILCODE_CROSSGEN_SOURCES}) + +@@ -106,9 +108,9 @@ if(CLR_CMAKE_HOST_UNIX) + target_link_libraries(utilcodestaticnohost nativeresourcestring) + target_link_libraries(utilcode_crossgen nativeresourcestring) + target_link_libraries(utilcode_dac nativeresourcestring) +- target_link_libraries(utilcode nativeresourcestring) ++ target_link_libraries(utilcode INTERFACE nativeresourcestring) + add_dependencies(utilcode_dac coreclrpal) +- add_dependencies(utilcode coreclrpal) ++ add_dependencies(utilcode_obj coreclrpal) + endif(CLR_CMAKE_HOST_UNIX) + + +@@ -121,10 +123,10 @@ set_target_properties(utilcode_crossgen PROPERTIES CROSSGEN_COMPONENT TRUE) + target_compile_definitions(utilcode_dac PRIVATE SELF_NO_HOST) + target_compile_definitions(utilcodestaticnohost PRIVATE SELF_NO_HOST) + add_dependencies(utilcode_dac ${UTILCODE_DEPENDENCIES}) +-add_dependencies(utilcode ${UTILCODE_DEPENDENCIES}) ++add_dependencies(utilcode_obj ${UTILCODE_DEPENDENCIES}) + add_dependencies(utilcode_crossgen ${UTILCODE_DEPENDENCIES}) + add_dependencies(utilcodestaticnohost ${UTILCODE_DEPENDENCIES}) + target_precompile_header(TARGET utilcode_dac HEADER stdafx.h) +-target_precompile_header(TARGET utilcode HEADER stdafx.h) ++target_precompile_header(TARGET utilcode_obj HEADER stdafx.h) + target_precompile_header(TARGET utilcode_crossgen HEADER stdafx.h) + target_precompile_header(TARGET utilcodestaticnohost HEADER stdafx.h) +diff --git a/src/coreclr/src/vm/CMakeLists.txt b/src/coreclr/src/vm/CMakeLists.txt +index 3e37cebdc10..2b20d7d910a 100644 +--- a/src/coreclr/src/vm/CMakeLists.txt ++++ b/src/coreclr/src/vm/CMakeLists.txt +@@ -923,7 +923,7 @@ list(APPEND VM_HEADERS_DAC + + if (CLR_CMAKE_TARGET_WIN32) + list(APPEND VM_SOURCES_WKS ${VM_HEADERS_WKS}) +- list(APPEND VM_SOURCES_WKS_ARCH_ASM ${VM_HEADERS_WKS_ARCH_ASM}) ++ list(APPEND VM_SOURCES_WKS ${VM_HEADERS_WKS_ARCH_ASM}) + list(APPEND VM_SOURCES_DAC ${VM_HEADERS_DAC}) + endif(CLR_CMAKE_TARGET_WIN32) + +diff --git a/src/coreclr/src/vm/eventing/CMakeLists.txt b/src/coreclr/src/vm/eventing/CMakeLists.txt +index 98dd158df54..e2bf024fc59 100644 +--- a/src/coreclr/src/vm/eventing/CMakeLists.txt ++++ b/src/coreclr/src/vm/eventing/CMakeLists.txt +@@ -8,12 +8,13 @@ else() + set(NEED_XPLAT_HEADER ON) + endif() + +-include(FindPython) ++include(FindPythonInterp) + + set (EventingHeaders + ${GENERATED_INCLUDE_DIR}/etmdummy.h + ${GENERATED_INCLUDE_DIR}/clretwallmain.h + ${GENERATED_INCLUDE_DIR}/clreventpipewriteevents.h ++ ${GENERATED_INCLUDE_DIR}/clrproviders.h + ) + + if (NEED_XPLAT_HEADER) +@@ -24,7 +25,7 @@ endif() + set(GENEVENTING_SCRIPT ${CLR_DIR}/src/scripts/genEventing.py) + + add_custom_target(eventing_headers +- ${Python_EXECUTABLE} ${GENEVENTING_SCRIPT} --man ${EVENT_MANIFEST} --inc ${GENERATED_INCLUDE_DIR} --dummy ${GENERATED_INCLUDE_DIR}/etmdummy.h ${NONEXTERN_ARG} ${NOXPLATHEADER_ARG} ++ ${PYTHON_EXECUTABLE} ${GENEVENTING_SCRIPT} --man ${EVENT_MANIFEST} --inc ${GENERATED_INCLUDE_DIR} --dummy ${GENERATED_INCLUDE_DIR}/etmdummy.h ${NONEXTERN_ARG} ${NOXPLATHEADER_ARG} + DEPENDS ${EVENT_MANIFEST} ${GENEVENTING_SCRIPT} + VERBATIM + ) +diff --git a/src/coreclr/src/vm/eventing/EtwProvider/CMakeLists.txt b/src/coreclr/src/vm/eventing/EtwProvider/CMakeLists.txt +index 34a067e1ec5..4c7df2fbb3c 100644 +--- a/src/coreclr/src/vm/eventing/EtwProvider/CMakeLists.txt ++++ b/src/coreclr/src/vm/eventing/EtwProvider/CMakeLists.txt +@@ -1,4 +1,4 @@ +-include(FindPython) ++include(FindPythonInterp) + + set(ETW_PROVIDER_SCRIPT ${CLR_DIR}/src/scripts/genEtwProvider.py) + +@@ -14,5 +14,5 @@ set (ETW_PROVIDER_OUTPUTS + set_source_files_properties(${ETW_PROVIDER_OUTPUTS} PROPERTIES GENERATED TRUE) + + add_custom_target(eventprovider +- ${Python_EXECUTABLE} ${ETW_PROVIDER_SCRIPT} --man ${EVENT_MANIFEST} --exc ${EVENT_EXCLUSIONS} --intermediate ${GENERATED_INCLUDE_DIR} ++ ${PYTHON_EXECUTABLE} ${ETW_PROVIDER_SCRIPT} --man ${EVENT_MANIFEST} --exc ${EVENT_EXCLUSIONS} --intermediate ${GENERATED_INCLUDE_DIR} + DEPENDS ${EVENT_MANIFEST} ${EVENT_EXCLUSIONS} ${ETW_PROVIDER_SCRIPT}) +diff --git a/src/coreclr/src/vm/eventing/eventpipe/CMakeLists.txt b/src/coreclr/src/vm/eventing/eventpipe/CMakeLists.txt +index 00b3f6f386f..00d79737e54 100644 +--- a/src/coreclr/src/vm/eventing/eventpipe/CMakeLists.txt ++++ b/src/coreclr/src/vm/eventing/eventpipe/CMakeLists.txt +@@ -1,9 +1,9 @@ +-include(FindPython) ++include(FindPythonInterp) + + set(CMAKE_INCLUDE_CURRENT_DIR ON) + + set(GENERATE_SCRIPT ${CLR_DIR}/src/scripts/genEventPipe.py) +-set(GENERATE_COMMAND ${Python_EXECUTABLE} ${GENERATE_SCRIPT} --man ${EVENT_MANIFEST} --exc ${EVENT_EXCLUSIONS} --intermediate ${CMAKE_CURRENT_BINARY_DIR} ${NONEXTERN_ARG}) ++set(GENERATE_COMMAND ${PYTHON_EXECUTABLE} ${GENERATE_SCRIPT} --man ${EVENT_MANIFEST} --exc ${EVENT_EXCLUSIONS} --intermediate ${CMAKE_CURRENT_BINARY_DIR} ${NONEXTERN_ARG}) + + execute_process( + COMMAND ${GENERATE_COMMAND} --dry-run +@@ -28,10 +28,8 @@ add_custom_command(OUTPUT ${EVENTPIPE_SOURCES} + COMMAND ${GENERATE_COMMAND} + DEPENDS ${GENERATE_SCRIPT} ${EVENT_MANIFEST} ${EVENT_EXCLUSIONS}) + +-add_library_clr(eventpipe STATIC ${EVENTPIPE_SOURCES}) +-set_target_properties(eventpipe PROPERTIES LINKER_LANGUAGE CXX) +-add_dependencies(eventpipe eventing_headers) +- +-if (NOT CLR_CMAKE_TARGET_WIN32) +- _install(TARGETS eventpipe DESTINATION lib) +-endif() ++add_library_clr(eventpipe_obj OBJECT ${EVENTPIPE_SOURCES}) ++set_target_properties(eventpipe_obj PROPERTIES LINKER_LANGUAGE CXX) ++add_dependencies(eventpipe_obj eventing_headers) ++add_library(eventpipe INTERFACE) ++target_sources(eventpipe INTERFACE $) +diff --git a/src/coreclr/src/vm/wks/CMakeLists.txt b/src/coreclr/src/vm/wks/CMakeLists.txt +index 1e94b575fd6..5d355f6adcb 100644 +--- a/src/coreclr/src/vm/wks/CMakeLists.txt ++++ b/src/coreclr/src/vm/wks/CMakeLists.txt +@@ -7,13 +7,19 @@ if (CLR_CMAKE_TARGET_WIN32) + + endif (CLR_CMAKE_TARGET_WIN32) + +-add_library_clr(cee_wks ${VM_SOURCES_WKS} ${VM_SOURCES_WKS_ARCH_ASM}) +-target_precompile_header(TARGET cee_wks HEADER common.h) ++add_library_clr(cee_wks_core OBJECT ${VM_SOURCES_WKS} ${VM_SOURCES_WKS_ARCH_ASM}) ++add_library_clr(cee_wks_obj OBJECT ${VM_SOURCES_WKS_SPECIAL}) ++ ++target_precompile_header(TARGET cee_wks_core HEADER common.h) ++target_precompile_header(TARGET cee_wks_obj HEADER common.h) ++ + if (MSVC) + # mscorlib.cpp does not compile with precompiled header file + set_source_files_properties(../mscorlib.cpp PROPERTIES COMPILE_FLAGS "/Y-") + endif() +-add_dependencies(cee_wks eventing_headers) ++ ++add_dependencies(cee_wks_core eventing_headers) ++add_dependencies(cee_wks_obj eventing_headers) + + if (CLR_CMAKE_TARGET_WIN32) + +@@ -45,8 +51,16 @@ if (CLR_CMAKE_TARGET_WIN32) + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/AsmConstants.inc + ) + +- add_dependencies(cee_wks asmconstants_inc) ++ add_dependencies(cee_wks_core asmconstants_inc) ++ add_dependencies(cee_wks_obj asmconstants_inc) + + endif(NOT CLR_CMAKE_HOST_ARCH_ARM AND NOT CLR_CMAKE_HOST_ARCH_ARM64) + + endif (CLR_CMAKE_TARGET_WIN32) ++ ++add_custom_target(preprocessd_asm DEPENDS ${VM_WKS_ARCH_ASM_OBJECTS}) ++add_dependencies(cee_wks_core preprocessd_asm) ++add_dependencies(cee_wks_obj preprocessd_asm) ++ ++add_library(cee_wks INTERFACE) ++target_sources(cee_wks INTERFACE $ ${VM_WKS_ARCH_ASM_OBJECTS}) +diff --git a/src/coreclr/tests/CMakeLists.txt b/src/coreclr/tests/CMakeLists.txt +index 53dbb85a58b..c5417cba7d0 100644 +--- a/src/coreclr/tests/CMakeLists.txt ++++ b/src/coreclr/tests/CMakeLists.txt +@@ -1,4 +1,4 @@ +-cmake_minimum_required(VERSION 3.14.2) ++cmake_minimum_required(VERSION 3.6.2) + + cmake_policy(SET CMP0042 NEW) + project(Tests) +diff --git a/src/installer/corehost/CMakeLists.txt b/src/installer/corehost/CMakeLists.txt +index 43a59a1a695..dff0496cdd8 100644 +--- a/src/installer/corehost/CMakeLists.txt ++++ b/src/installer/corehost/CMakeLists.txt +@@ -1,4 +1,4 @@ +-cmake_minimum_required(VERSION 3.14.2) ++cmake_minimum_required(VERSION 3.6.2) + + project(corehost) + +diff --git a/src/installer/corehost/cli/exe.cmake b/src/installer/corehost/cli/exe.cmake +index de8cd49396b..732faf97ff9 100644 +--- a/src/installer/corehost/cli/exe.cmake ++++ b/src/installer/corehost/cli/exe.cmake +@@ -5,7 +5,6 @@ + project (${DOTNET_PROJECT_NAME}) + + cmake_policy(SET CMP0011 NEW) +-cmake_policy(SET CMP0083 NEW) + + include(${CMAKE_CURRENT_LIST_DIR}/common.cmake) + +diff --git a/src/installer/corehost/cli/test/mockhostfxr/CMakeLists.txt b/src/installer/corehost/cli/test/mockhostfxr/CMakeLists.txt +index bcf6a051229..8572a6318ec 100644 +--- a/src/installer/corehost/cli/test/mockhostfxr/CMakeLists.txt ++++ b/src/installer/corehost/cli/test/mockhostfxr/CMakeLists.txt +@@ -2,7 +2,6 @@ + # The .NET Foundation licenses this file to you under the MIT license. + # See the LICENSE file in the project root for more information. + +-cmake_minimum_required (VERSION 2.6) + project(mockhostfxr_2_2) + + set(DOTNET_PROJECT_NAME "mockhostfxr_2_2") +diff --git a/src/libraries/Native/Unix/CMakeLists.txt b/src/libraries/Native/Unix/CMakeLists.txt +index f14ada69fee..cb174fe5013 100644 +--- a/src/libraries/Native/Unix/CMakeLists.txt ++++ b/src/libraries/Native/Unix/CMakeLists.txt +@@ -1,19 +1,14 @@ +-cmake_minimum_required(VERSION 3.14.2) ++cmake_minimum_required(VERSION 3.6.2) ++if(CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS) ++ # CMake 3.14.5 contains bug fixes for iOS ++ cmake_minimum_required(VERSION 3.14.5) ++ endif() + cmake_policy(SET CMP0042 NEW) + + project(CoreFX C) + + include(${CLR_ENG_NATIVE_DIR}/configuretools.cmake) + +-if(CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS) +- # CMake 3.14.5 contains bug fixes for iOS +- cmake_minimum_required(VERSION 3.14.5) +-endif() +- +-if(NOT CLR_CMAKE_TARGET_ARCH_WASM) +- cmake_policy(SET CMP0083 NEW) +-endif(NOT CLR_CMAKE_TARGET_ARCH_WASM) +- + set(CMAKE_MACOSX_RPATH ON) + set(CMAKE_INSTALL_PREFIX $ENV{__CMakeBinDir}) + set(CMAKE_INCLUDE_CURRENT_DIR ON) +@@ -167,7 +162,8 @@ if(CLR_CMAKE_TARGET_UNIX) + if(NOT CLR_CMAKE_TARGET_ARCH_WASM AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS) + if(CLR_CMAKE_TARGET_OSX) + add_definitions(-DTARGET_OSX) +- add_link_options(-Wl,-bind_at_load) ++ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-bind_at_load") ++ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-bind_at_load" ) + else() + add_compile_options($<$:-Wa,--noexecstack>) + if(CLR_CMAKE_TARGET_SUNOS) +@@ -175,7 +171,8 @@ if(CLR_CMAKE_TARGET_UNIX) + else() + # -z,now is required for full relro. + # see https://www.redhat.com/en/blog/hardening-elf-binaries-using-relocation-read-only-relro +- add_link_options(-Wl,--build-id=sha1 -Wl,-z,relro,-z,now) ++ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--build-id=sha1 -Wl,-z,relro,-z,now") ++ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--build-id=sha1 -Wl,-z,relro,-z,now" ) + endif() + endif() + endif() +diff --git a/src/libraries/Native/Unix/System.Globalization.Native/CMakeLists.txt b/src/libraries/Native/Unix/System.Globalization.Native/CMakeLists.txt +index bcfc5dd106a..ebcb5a02b3f 100644 +--- a/src/libraries/Native/Unix/System.Globalization.Native/CMakeLists.txt ++++ b/src/libraries/Native/Unix/System.Globalization.Native/CMakeLists.txt +@@ -79,14 +79,15 @@ if (GEN_SHARED_LIB) + install_with_stripped_symbols (System.Globalization.Native PROGRAMS .) + endif() + +-add_library(System.Globalization.Native-Static +- STATIC ++add_library(System.Globalization.Native-obj ++ OBJECT + ${NATIVEGLOBALIZATION_SOURCES} + ) + +-set_target_properties(System.Globalization.Native-Static PROPERTIES OUTPUT_NAME System.Globalization.Native CLEAN_DIRECT_OUTPUT 1) ++set_target_properties(System.Globalization.Native-obj PROPERTIES OUTPUT_NAME System.Globalization.Native CLEAN_DIRECT_OUTPUT 1) + +-install (TARGETS System.Globalization.Native-Static DESTINATION .) ++add_library(System.Globalization.Native-static INTERFACE) ++target_sources(System.Globalization.Native-static INTERFACE $) + + if(NOT CLR_CMAKE_TARGET_OSX AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND NOT CLR_CMAKE_TARGET_ANDROID) + if (GEN_SHARED_LIB) diff --git a/SOURCES/runtime-dont-strip.patch b/SOURCES/runtime-dont-strip.patch new file mode 100644 index 0000000..694face --- /dev/null +++ b/SOURCES/runtime-dont-strip.patch @@ -0,0 +1,47 @@ +Do not strip native/unmanaged symbols from binaries + +This is a hack. It rips out the calls to strip directly. + +The correct/upstreamable fix is to add a configure/build option to +keep symbols for some builds, such as those needed by upstream. + +diff --git a/eng/native/functions.cmake b/eng/native/functions.cmake +index 8b73581ed14..7697908425e 100644 +--- a/eng/native/functions.cmake ++++ b/eng/native/functions.cmake +@@ -282,7 +282,7 @@ function(target_precompile_header) + endif(MSVC) + endfunction() + +-function(strip_symbols targetName outputFilename) ++function(strip_symbols_renamed targetName outputFilename) + if (CLR_CMAKE_HOST_UNIX) + set(strip_source_file $) + +@@ -336,8 +336,8 @@ function(strip_symbols targetName outputFilename) + endfunction() + + function(install_with_stripped_symbols targetName kind destination) +- strip_symbols(${targetName} symbol_file) +- install_symbols(${symbol_file} ${destination}) ++ # strip_symbols_renamed(${targetName} symbol_file) ++ # install_symbols(${symbol_file} ${destination}) + if ("${kind}" STREQUAL "TARGETS") + set(install_source ${targetName}) + elseif("${kind}" STREQUAL "PROGRAMS") +@@ -375,13 +375,13 @@ function(install_clr) + foreach(targetName ${INSTALL_CLR_TARGETS}) + list(FIND CLR_CROSS_COMPONENTS_LIST ${targetName} INDEX) + if (NOT DEFINED CLR_CROSS_COMPONENTS_LIST OR NOT ${INDEX} EQUAL -1) +- strip_symbols(${targetName} symbol_file) ++ # strip_symbols_renamed(${targetName} symbol_file) + + foreach(destination ${destinations}) + # We don't need to install the export libraries for our DLLs + # since they won't be directly linked against. + install(PROGRAMS $ DESTINATION ${destination}) +- install_symbols(${symbol_file} ${destination}) ++ # install_symbols(${symbol_file} ${destination}) + + if(CLR_CMAKE_PGO_INSTRUMENT) + if(WIN32) diff --git a/SOURCES/runtime-flags-support.patch b/SOURCES/runtime-flags-support.patch new file mode 100644 index 0000000..921e483 --- /dev/null +++ b/SOURCES/runtime-flags-support.patch @@ -0,0 +1,30 @@ +diff --git a/eng/native/build-commons.sh b/eng/native/build-commons.sh +index b976f5fdc6c..853580b1c7a 100755 +--- a/eng/native/build-commons.sh ++++ b/eng/native/build-commons.sh +@@ -163,6 +163,14 @@ EOF + return + fi + ++ SAVED_CFLAGS="${CFLAGS}" ++ SAVED_CXXFLAGS="${CXXFLAGS}" ++ SAVED_LDFLAGS="${LDFLAGS}" ++ ++ export CFLAGS="${CFLAGS} ${EXTRA_CFLAGS}" ++ export CXXFLAGS="${CXXFLAGS} ${EXTRA_CXXFLAGS}" ++ export LDFLAGS="${LDFLAGS} ${EXTRA_LDFLAGS}" ++ + if [[ "$__StaticAnalyzer" == 1 ]]; then + pushd "$intermediatesDir" + +@@ -181,6 +189,10 @@ EOF + $cmake_command --build "$intermediatesDir" --target install -- -j "$__NumProc" + fi + ++ CFLAGS="${SAVED_CFLAGS}" ++ CXXFLAGS="${SAVED_CXXFLAGS}" ++ LDFLAGS="${SAVED_LDFLAGS}" ++ + local exit_code="$?" + if [[ "$exit_code" != 0 ]]; then + echo "${__ErrMsgPrefix}Failed to build \"$message\"." diff --git a/SOURCES/sdk-telemetry-optout.patch b/SOURCES/sdk-telemetry-optout.patch new file mode 100644 index 0000000..9b92f33 --- /dev/null +++ b/SOURCES/sdk-telemetry-optout.patch @@ -0,0 +1,18 @@ +diff --git a/src/Cli/dotnet/Program.cs b/src/Cli/dotnet/Program.cs +index de1ebb9e6..6bbf479de 100644 +--- a/src/Cli/dotnet/Program.cs ++++ b/src/Cli/dotnet/Program.cs +@@ -28,6 +28,13 @@ public class Program + + public static int Main(string[] args) + { ++ // opt out of telemetry by default if the env var is unset ++ string telemetryValue = Environment.GetEnvironmentVariable("DOTNET_CLI_TELEMETRY_OPTOUT"); ++ if (String.IsNullOrEmpty(telemetryValue)) ++ { ++ Environment.SetEnvironmentVariable("DOTNET_CLI_TELEMETRY_OPTOUT", "1"); ++ } ++ + DebugHelper.HandleDebugSwitch(ref args); + + new MulticoreJitActivator().TryActivateMulticoreJit(); diff --git a/SPECS/dotnet5.0.spec b/SPECS/dotnet5.0.spec new file mode 100644 index 0000000..db44b65 --- /dev/null +++ b/SPECS/dotnet5.0.spec @@ -0,0 +1,738 @@ +%bcond_without bootstrap + +# Avoid provides/requires from private libraries +%global privlibs libhostfxr +%global privlibs %{privlibs}|libclrjit +%global privlibs %{privlibs}|libcoreclr +%global privlibs %{privlibs}|libcoreclrtraceptprovider +%global privlibs %{privlibs}|libdbgshim +%global privlibs %{privlibs}|libhostpolicy +%global privlibs %{privlibs}|libmscordaccore +%global privlibs %{privlibs}|libmscordbi +%global privlibs %{privlibs}|libsos +%global privlibs %{privlibs}|libsosplugin +%global __provides_exclude ^(%{privlibs})\\.so +%global __requires_exclude ^(%{privlibs})\\.so + +# Filter flags not supported by clang +# -fstack-clash-protection +# -specs= +%global dotnet_cflags %(echo %optflags | sed -e 's/-fstack-clash-protection//' | sed -re 's/-specs=[^ ]*//g') +%global dotnet_ldflags %(echo %{__global_ldflags} | sed -re 's/-specs=[^ ]*//g') + +%global host_version 5.0.0-preview.4.20251.6 +%global runtime_version 5.0.0-preview.4.20251.6 +%global aspnetcore_runtime_version 5.0.0-preview.4.20257.10 +%global sdk_version 5.0.100-preview.4.20161.13 +%global templates_version 5.0.0-preview.4.20161.13 +#%%global templates_version %%(echo %%{runtime_version} | awk 'BEGIN { FS="."; OFS="." } {print $1, $2, $3+1 }') + +%global host_rpm_version 5.0.0 +%global aspnetcore_runtime_rpm_version 5.0.0 +%global runtime_rpm_version 5.0.0 +%global sdk_rpm_version 5.0.100 + +# upstream can update releases without revving the SDK version so these don't always match +%global src_version %{sdk_rpm_version} + +%if 0%{?fedora} || 0%{?rhel} < 8 +%global use_bundled_libunwind 0 +%else +%global use_bundled_libunwind 1 +%endif + +%ifarch aarch64 +%global use_bundled_libunwind 1 +%endif + +%ifarch x86_64 +%global runtime_arch x64 +%endif +%ifarch aarch64 +%global runtime_arch arm64 +%endif + +%if 0%{?fedora} +%global runtime_id fedora.%{fedora}-%{runtime_arch} +%else +%if 0%{?centos} +%global runtime_id centos.%{centos}-%{runtime_arch} +%else +%global runtime_id rhel.%{rhel}-%{runtime_arch} +%endif +%endif + +Name: dotnet5.0 +Version: %{sdk_rpm_version} +Release: 0.2.preview4%{?dist} +Summary: .NET Core Runtime and SDK +License: MIT and ASL 2.0 and BSD and LGPLv2+ and CC-BY and CC0 and MS-PL and EPL-1.0 and GPL+ and GPLv2 and ISC and OFL and zlib +URL: https://github.com/dotnet/ + +# The source is generated on a Fedora box via: +# ./build-dotnet-tarball v%%{src_version}-SDK +Source0: dotnet-v%{src_version}-preview4-SDK.tar.gz +Source1: check-debug-symbols.py +Source2: dotnet.sh.in + +# dotnet/runtime PR 39044 +Patch100: runtime-39044-cmake-downgrade.patch + +# https://github.com/dotnet/runtime/pull/39203 +# Do not strip debuginfo from (native/unmanaged) binaries +Patch101: runtime-dont-strip.patch + +# https://github.com/dotnet/runtime/pull/39191 +# Fix building with our additional CFLAGS/CXXFLAGS/LDFLAGS +Patch102: runtime-flags-support.patch + +# Disable telemetry by default; make it opt-in +Patch500: sdk-telemetry-optout.patch + +# ExclusiveArch: aarch64 x86_64 +ExclusiveArch: x86_64 + +BuildRequires: clang +BuildRequires: cmake +BuildRequires: coreutils +%if %{without bootstrap} +BuildRequires: dotnet-build-reference-packages +BuildRequires: dotnet-sdk-5.0 +BuildRequires: dotnet-sdk-5.0-source-built-artifacts +%endif +BuildRequires: findutils +BuildRequires: git +%if 0%{?fedora} || 0%{?rhel} > 7 +BuildRequires: glibc-langpack-en +%endif +BuildRequires: hostname +BuildRequires: krb5-devel +BuildRequires: libcurl-devel +BuildRequires: libicu-devel +%if ! %{use_bundled_libunwind} +BuildRequires: libunwind-devel +%endif +BuildRequires: lldb-devel +BuildRequires: llvm +BuildRequires: lttng-ust-devel +BuildRequires: make +BuildRequires: openssl-devel +BuildRequires: python3 +BuildRequires: systemtap-sdt-devel +BuildRequires: tar +BuildRequires: zlib-devel + +%description +.NET Core is a fast, lightweight and modular platform for creating +cross platform applications that work on Linux, macOS and Windows. + +It particularly focuses on creating console applications, web +applications and micro-services. + +.NET Core contains a runtime conforming to .NET Standards a set of +framework libraries, an SDK containing compilers and a 'dotnet' +application to drive everything. + + +%package -n dotnet + +Version: %{sdk_rpm_version} +Summary: .NET Core CLI tools and runtime + +Requires: dotnet-sdk-5.0%{?_isa} >= %{sdk_rpm_version}-%{release} + +%description -n dotnet +.NET Core is a fast, lightweight and modular platform for creating +cross platform applications that work on Linux, macOS and Windows. + +It particularly focuses on creating console applications, web +applications and micro-services. + +.NET Core contains a runtime conforming to .NET Standards a set of +framework libraries, an SDK containing compilers and a 'dotnet' +application to drive everything. + + +%package -n dotnet-host + +Version: %{host_rpm_version} +Summary: .NET command line launcher + +%description -n dotnet-host +The .NET Core host is a command line program that runs a standalone +.NET core application or launches the SDK. + +.NET Core is a fast, lightweight and modular platform for creating +cross platform applications that work on Linux, Mac and Windows. + +It particularly focuses on creating console applications, web +applications and micro-services. + + +%package -n dotnet-hostfxr-5.0 + +Version: %{host_rpm_version} +Summary: .NET Core command line host resolver + +# Theoretically any version of the host should work. But lets aim for the one +# provided by this package, or from a newer version of .NET Core +Requires: dotnet-host%{?_isa} >= %{host_rpm_version}-%{release} + +%description -n dotnet-hostfxr-5.0 +The .NET Core host resolver contains the logic to resolve and select +the right version of the .NET Core SDK or runtime to use. + +.NET Core is a fast, lightweight and modular platform for creating +cross platform applications that work on Linux, Mac and Windows. + +It particularly focuses on creating console applications, web +applications and micro-services. + + +%package -n dotnet-runtime-5.0 + +Version: %{runtime_rpm_version} +Summary: NET Core 5.0 runtime + +Requires: dotnet-hostfxr-5.0%{?_isa} >= %{host_rpm_version}-%{release} + +# libicu is dlopen()ed +Requires: libicu%{?_isa} + +%if %{use_bundled_libunwind} +Provides: bundled(libunwind) = 1.3 +%endif + +%description -n dotnet-runtime-5.0 +The .NET Core runtime contains everything needed to run .NET Core applications. +It includes a high performance Virtual Machine as well as the framework +libraries used by .NET Core applications. + +.NET Core is a fast, lightweight and modular platform for creating +cross platform applications that work on Linux, Mac and Windows. + +It particularly focuses on creating console applications, web +applications and micro-services. + + +%package -n aspnetcore-runtime-5.0 + +Version: %{aspnetcore_runtime_rpm_version} +Summary: ASP.NET Core 5.0 runtime + +Requires: dotnet-runtime-5.0%{?_isa} >= %{runtime_rpm_version}-%{release} + +%description -n aspnetcore-runtime-5.0 +The ASP.NET Core runtime contains everything needed to run .NET Core +web applications. It includes a high performance Virtual Machine as +well as the framework libraries used by .NET Core applications. + +ASP.NET Core is a fast, lightweight and modular platform for creating +cross platform web applications that work on Linux, Mac and Windows. + +It particularly focuses on creating console applications, web +applications and micro-services. + + +%package -n dotnet-templates-5.0 + +Version: %{sdk_rpm_version} +Summary: .NET Core 5.0 templates + +# Theoretically any version of the host should work. But lets aim for the one +# provided by this package, or from a newer version of .NET Core +Requires: dotnet-host%{?_isa} >= %{host_rpm_version}-%{release} + +%description -n dotnet-templates-5.0 +This package contains templates used by the .NET Core SDK. + +ASP.NET Core is a fast, lightweight and modular platform for creating +cross platform web applications that work on Linux, Mac and Windows. + +It particularly focuses on creating console applications, web +applications and micro-services. + + +%package -n dotnet-sdk-5.0 + +Version: %{sdk_rpm_version} +Summary: .NET Core 5.0 Software Development Kit + +Provides: bundled(js-jquery) +Provides: bundled(npm) + +Requires: dotnet-runtime-5.0%{?_isa} >= %{runtime_rpm_version}-%{release} +Requires: aspnetcore-runtime-5.0%{?_isa} >= %{aspnetcore_runtime_rpm_version}-%{release} + +Requires: dotnet-apphost-pack-5.0%{?_isa} >= %{runtime_rpm_version}-%{release} +Requires: dotnet-targeting-pack-5.0%{?_isa} >= %{runtime_rpm_version}-%{release} +Requires: aspnetcore-targeting-pack-5.0%{?_isa} >= %{aspnetcore_runtime_rpm_version}-%{release} +Requires: netstandard-targeting-pack-2.1%{?_isa} >= %{sdk_rpm_version}-%{release} + +Requires: dotnet-templates-5.0%{?_isa} >= %{sdk_rpm_version}-%{release} + +%description -n dotnet-sdk-5.0 +The .NET Core SDK is a collection of command line applications to +create, build, publish and run .NET Core applications. + +.NET Core is a fast, lightweight and modular platform for creating +cross platform applications that work on Linux, Mac and Windows. + +It particularly focuses on creating console applications, web +applications and micro-services. + + +%global dotnet_targeting_pack() %{expand: +%package -n %{1} + +Version: %{2} +Summary: Targeting Pack for %{3} %{4} + +Requires: dotnet-host%{?_isa} + +%description -n %{1} +This package provides a targeting pack for %{3} %{4} +that allows developers to compile against and target %{3} %{4} +applications using the .NET Core SDK. + +%files -n %{1} +%dir %{_libdir}/dotnet/packs +%{_libdir}/dotnet/packs/%{5} +} + +%dotnet_targeting_pack dotnet-apphost-pack-5.0 %{runtime_rpm_version} Microsoft.NETCore.App 5.0 Microsoft.NETCore.App.Host.%{runtime_id} +%dotnet_targeting_pack dotnet-targeting-pack-5.0 %{runtime_rpm_version} Microsoft.NETCore.App 5.0 Microsoft.NETCore.App.Ref +%dotnet_targeting_pack aspnetcore-targeting-pack-5.0 %{aspnetcore_runtime_rpm_version} Microsoft.AspNetCore.App 5.0 Microsoft.AspNetCore.App.Ref +%dotnet_targeting_pack netstandard-targeting-pack-2.1 %{sdk_rpm_version} NETStandard.Library 2.1 NETStandard.Library.Ref + + +%package -n dotnet-sdk-5.0-source-built-artifacts + +Version: %{sdk_rpm_version} +Summary: Internal package for building .NET Core 5.0 Software Development Kit + +%description -n dotnet-sdk-5.0-source-built-artifacts +The .NET Core source-built archive is a collection of packages needed +to build the .NET Core SDK itself. + +These are not meant for general use. + + +%prep +%setup -q -n dotnet-v%{src_version}-preview4-SDK + +%if %{without bootstrap} +# Remove all prebuilts +find -iname '*.dll' -type f -delete +find -iname '*.so' -type f -delete +find -iname '*.tar.gz' -type f -delete +find -iname '*.nupkg' -type f -delete +find -iname '*.zip' -type f -delete +rm -rf .dotnet/ +rm -rf packages/source-built +%endif + +%if %{without bootstrap} +sed -i -e 's|5.0.100-preview1-014459|5.0.103|' global.json +mkdir -p packages/archive +ln -s %{_libdir}/dotnet/source-built-artifacts/*.tar.gz packages/archive/ +ln -s %{_libdir}/dotnet/reference-packages/Private.SourceBuild.ReferencePackages*.tar.gz packages/archive +%endif + +# Fix bad hardcoded path in build +sed -i 's|/usr/share/dotnet|%{_libdir}/dotnet|' src/runtime.*/src/installer/corehost/cli/hostmisc/pal.unix.cpp + +# Disable warnings +sed -i 's|skiptests|skiptests ignorewarnings|' repos/runtime.common.props + +pushd src/runtime.* +%patch100 -p1 +%patch101 -p1 +%patch102 -p1 +popd + +pushd src/sdk.* +%patch500 -p1 +popd + +# If CLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE is misisng, add it back +grep CLR_CMAKE_USE_SYSTEM_LIBUNWIND repos/runtime.common.props || \ + sed -i 's|\$(BuildArguments) |$(BuildArguments) cmakeargs -DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE|' repos/runtime.common.props + +%if %{use_bundled_libunwind} +sed -i 's|-DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE|-DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=FALSE|' repos/runtime.common.props +%endif + +%ifnarch x86_64 +mkdir -p artifacts/obj/%{runtime_arch}/Release +cp artifacts/obj/x64/Release/PackageVersions.props artifacts/obj/%{runtime_arch}/Release/PackageVersions.props +%endif + +cat source-build-info.txt + +find -iname 'nuget.config' -exec echo {}: \; -exec cat {} \; -exec echo \; + + +%build +cat /etc/os-release + +%if %{without bootstrap} +# We need to create a copy because we will mutate this +cp -a %{_libdir}/dotnet previously-built-dotnet +%endif + +export EXTRA_CFLAGS="%{dotnet_cflags}" +export EXTRA_CXXFLAGS="%{dotnet_cflags}" +export EXTRA_LDFLAGS="%%{dotnet_ldflags}" + +#%%if %%{without bootstrap} +# --with-ref-packages %%{_libdir}/dotnet/reference-packages/ \ +# --with-packages %%{_libdir}/dotnet/source-built-artifacts/*.tar.gz \ +# --with-sdk %%{_libdir}/dotnet \ +#%%endif + +VERBOSE=1 ./build.sh \ +%if %{without bootstrap} + --with-sdk previously-built-dotnet \ +%endif + -- \ + /v:n \ + /p:SkipPortableRuntimeBuild=true \ + /p:LogVerbosity=n \ + /p:MinimalConsoleLogOutput=false \ + /p:ContinueOnPrebuiltBaselineError=true \ + + +sed -e 's|[@]LIBDIR[@]|%{_libdir}|g' %{SOURCE2} > dotnet.sh + + +%install +install -dm 0755 %{buildroot}%{_libdir}/dotnet +ls artifacts/%{runtime_arch}/Release +tar xf artifacts/%{runtime_arch}/Release/dotnet-sdk-%{sdk_rpm_version}-preview.4.20161.13-%{runtime_id}.tar.gz -C %{buildroot}%{_libdir}/dotnet/ + +# Install managed symbols +tar xf artifacts/%{runtime_arch}/Release/runtime/dotnet-runtime-symbols-%{runtime_version}-%{runtime_id}.tar.gz \ + -C %{buildroot}/%{_libdir}/dotnet/shared/Microsoft.NETCore.App/%{runtime_version}/ + +# Fix executable permissions on files +find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.dll' -exec chmod -x {} \; +find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.pdb' -exec chmod -x {} \; +find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.props' -exec chmod -x {} \; +find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.pubxml' -exec chmod -x {} \; +find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.targets' -exec chmod -x {} \; +chmod 0755 %{buildroot}/%{_libdir}/dotnet/sdk/%{sdk_version}/AppHostTemplate/apphost +chmod 0755 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/libnethost.so +chmod 0755 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/apphost +chmod 0644 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/nethost.h + +install -dm 0755 %{buildroot}%{_sysconfdir}/profile.d/ +install dotnet.sh %{buildroot}%{_sysconfdir}/profile.d/ + +install -dm 0755 %{buildroot}/%{_datadir}/bash-completion/completions +# dynamic completion needs the file to be named the same as the base command +install src/sdk.*/scripts/register-completions.bash %{buildroot}/%{_datadir}/bash-completion/completions/dotnet + +# TODO: the zsh completion script needs to be ported to use #compdef +#install -dm 755 %%{buildroot}/%%{_datadir}/zsh/site-functions +#install src/cli/scripts/register-completions.zsh %%{buildroot}/%%{_datadir}/zsh/site-functions/_dotnet + +install -dm 0755 %{buildroot}%{_bindir} +ln -s ../../%{_libdir}/dotnet/dotnet %{buildroot}%{_bindir}/ + +install -dm 0755 %{buildroot}%{_mandir}/man1/ +find -iname 'dotnet*.1' -type f -exec cp {} %{buildroot}%{_mandir}/man1/ \; + +echo "%{_libdir}/dotnet" >> install_location +install -dm 0755 %{buildroot}%{_sysconfdir}/dotnet +install install_location %{buildroot}%{_sysconfdir}/dotnet/ + +#install -dm 0755 %%{buildroot}%%{_libdir}/dotnet/source-built-artifacts +#install artifacts/%%{runtime_arch}/Release/Private.SourceBuilt.Artifacts.*.tar.gz %%{buildroot}/%%{_libdir}/dotnet/source-built-artifacts/ + +# Check debug symbols in all elf objects. This is not in %%check +# because native binaries are stripped by rpm-build after %%install. +# So we need to do this check earlier. +echo "Testing build results for debug symbols..." +%{SOURCE1} -v %{buildroot}%{_libdir}/dotnet/ + + +%check +%{buildroot}%{_libdir}/dotnet/dotnet --info + + +%files -n dotnet +# empty package useful for dependencies + +%files -n dotnet-host +%dir %{_libdir}/dotnet +%{_libdir}/dotnet/dotnet +%dir %{_libdir}/dotnet/host +%dir %{_libdir}/dotnet/host/fxr +%{_bindir}/dotnet +%license %{_libdir}/dotnet/LICENSE.txt +%license %{_libdir}/dotnet/ThirdPartyNotices.txt +%doc %{_mandir}/man1/dotnet*.1.gz +%{_sysconfdir}/profile.d/dotnet.sh +%{_sysconfdir}/dotnet +%dir %{_datadir}/bash-completion +%dir %{_datadir}/bash-completion/completions +%{_datadir}/bash-completion/completions/dotnet + +%files -n dotnet-hostfxr-5.0 +%dir %{_libdir}/dotnet/host/fxr +%{_libdir}/dotnet/host/fxr/%{host_version} + +%files -n dotnet-runtime-5.0 +%dir %{_libdir}/dotnet/shared +%dir %{_libdir}/dotnet/shared/Microsoft.NETCore.App +%{_libdir}/dotnet/shared/Microsoft.NETCore.App/%{runtime_version} + +%files -n aspnetcore-runtime-5.0 +%dir %{_libdir}/dotnet/shared +%dir %{_libdir}/dotnet/shared/Microsoft.AspNetCore.App +%{_libdir}/dotnet/shared/Microsoft.AspNetCore.App/%{aspnetcore_runtime_version} + +%files -n dotnet-templates-5.0 +%dir %{_libdir}/dotnet/templates +%{_libdir}/dotnet/templates/%{templates_version} + +%files -n dotnet-sdk-5.0 +%dir %{_libdir}/dotnet/sdk +%{_libdir}/dotnet/sdk/%{sdk_version} +%dir %{_libdir}/dotnet/packs + +#%%files -n dotnet-sdk-5.0-source-built-artifacts +#%%dir %%{_libdir}/dotnet +#%%{_libdir}/dotnet/source-built-artifacts + + +%changelog +* Thu Aug 06 2020 Omair Majid - 5.0.100-0.2.preview4 +- Backport cmake compatiblity fix + +* Fri Jul 10 2020 Omair Majid - 5.0.100-0.2.preview4 +- Fix building with custom CFLAGS/CXXFLAGS/LDFLAGS +- Clean up patches + +* Mon Jul 06 2020 Omair Majid - 5.0.100-0.1.preview4 +- Initial build + +* Sat Jun 27 2020 Omair Majid - 3.1.105-4 +- Disable bootstrap + +* Fri Jun 26 2020 Omair Majid - 3.1.105-3 +- Re-bootstrap aarch64 + +* Fri Jun 19 2020 Omair Majid - 3.1.105-3 +- Disable bootstrap + +* Thu Jun 18 2020 Omair Majid - 3.1.105-1 +- Bootstrap aarch64 + +* Tue Jun 16 2020 Chris Rummel - 3.1.105-1 +- Update to .NET Core Runtime 3.1.5 and SDK 3.1.105 + +* Fri Jun 05 2020 Chris Rummel - 3.1.104-1 +- Update to .NET Core Runtime 3.1.4 and SDK 3.1.104 + +* Thu Apr 09 2020 Chris Rummel - 3.1.103-1 +- Update to .NET Core Runtime 3.1.3 and SDK 3.1.103 + +* Mon Mar 16 2020 Omair Majid - 3.1.102-1 +- Update to .NET Core Runtime 3.1.2 and SDK 3.1.102 + +* Fri Feb 28 2020 Omair Majid - 3.1.101-4 +- Disable bootstrap + +* Fri Feb 28 2020 Omair Majid - 3.1.101-3 +- Enable bootstrap +- Add Fedora 33 runtime ids + +* Thu Feb 27 2020 Omair Majid - 3.1.101-2 +- Disable bootstrap + +* Tue Jan 21 2020 Omair Majid - 3.1.101-1 +- Update to .NET Core Runtime 3.1.1 and SDK 3.1.101 + +* Thu Dec 05 2019 Omair Majid - 3.1.100-1 +- Update to .NET Core Runtime 3.1.0 and SDK 3.1.100 + +* Mon Nov 18 2019 Omair Majid - 3.1.100-0.4.preview3 +- Fix apphost permissions + +* Fri Nov 15 2019 Omair Majid - 3.1.100-0.3.preview3 +- Update to .NET Core Runtime 3.1.0-preview3.19553.2 and SDK + 3.1.100-preview3-014645 + +* Wed Nov 06 2019 Omair Majid - 3.1.100-0.2 +- Update to .NET Core 3.1 Preview 2 + +* Wed Oct 30 2019 Omair Majid - 3.1.100-0.1 +- Update to .NET Core 3.1 Preview 1 + +* Thu Oct 24 2019 Omair Majid - 3.0.100-5 +- Add cgroupv2 support to .NET Core + +* Wed Oct 16 2019 Omair Majid - 3.0.100-4 +- Include fix from coreclr for building on Fedora 32 + +* Wed Oct 16 2019 Omair Majid - 3.0.100-3 +- Harden built binaries to pass annocheck + +* Fri Oct 11 2019 Omair Majid - 3.0.100-2 +- Export DOTNET_ROOT in profile to make apphost lookup work + +* Fri Sep 27 2019 Omair Majid - 3.0.100-1 +- Update to .NET Core Runtime 3.0.0 and SDK 3.0.100 + +* Wed Sep 25 2019 Omair Majid - 3.0.100-0.18.rc1 +- Update to .NET Core Runtime 3.0.0-rc1-19456-20 and SDK 3.0.100-rc1-014190 + +* Tue Sep 17 2019 Omair Majid - 3.0.100-0.16.preview9 +- Fix files duplicated between dotnet-apphost-pack-3.0 and dotnet-targeting-pack-3.0 +- Fix dependencies between .NET SDK and the targeting packs + +* Mon Sep 16 2019 Omair Majid - 3.0.100-0.15.preview9 +- Update to .NET Core Runtime 3.0.0-preview 9 and SDK 3.0.100-preview9 + +* Mon Aug 19 2019 Omair Majid - 3.0.100-0.11.preview8 +- Update to .NET Core Runtime 3.0.0-preview8-28405-07 and SDK + 3.0.100-preview8-013656 + +* Tue Jul 30 2019 Omair Majid - 3.0.100-0.9.preview7 +- Update to .NET Core Runtime 3.0.0-preview7-27912-14 and SDK + 3.0.100-preview7-012821 + +* Fri Jul 26 2019 Omair Majid - 3.0.100-0.8.preview7 +- Update to .NET Core Runtime 3.0.0-preview7-27902-19 and SDK + 3.0.100-preview7-012802 + +* Wed Jun 26 2019 Omair Majid - 3.0.0-0.7.preview6 +- Obsolete dotnet-sdk-3.0.1xx +- Add supackages for targeting packs +- Add -fcf-protection to CFLAGS + +* Wed Jun 26 2019 Omair Majid - 3.0.0-0.6.preview6 +- Update to .NET Core Runtime 3.0.0-preview6-27804-01 and SDK 3.0.100-preview6-012264 +- Set dotnet installation location in /etc/dotnet/install_location +- Update targeting packs +- Install managed symbols +- Completely conditionalize libunwind bundling + +* Tue May 07 2019 Omair Majid - 3.0.0-0.3.preview4 +- Update to .NET Core 3.0 preview 4 + +* Tue Dec 18 2018 Omair Majid - 3.0.0-0.1.preview1 +- Update to .NET Core 3.0 preview 1 + +* Fri Dec 07 2018 Omair Majid - 2.2.100 +- Update to .NET Core 2.2.0 + +* Wed Nov 07 2018 Omair Majid - 2.2.100-0.2.preview3 +- Update to .NET Core 2.2.0-preview3 + +* Fri Nov 02 2018 Omair Majid - 2.1.403-3 +- Add host-fxr-2.1 subpackage + +* Mon Oct 15 2018 Omair Majid - 2.1.403-2 +- Disable telemetry by default +- Users have to manually export DOTNET_CLI_TELEMETRY_OPTOUT=0 to enable + +* Tue Oct 02 2018 Omair Majid - 2.1.403-1 +- Update to .NET Core Runtime 2.1.5 and SDK 2.1.403 + +* Wed Sep 26 2018 Omair Majid - 2.1.402-2 +- Add ~/.dotnet/tools to $PATH to make it easier to use dotnet tools + +* Thu Sep 13 2018 Omair Majid - 2.1.402-1 +- Update to .NET Core Runtime 2.1.4 and SDK 2.1.402 + +* Wed Sep 05 2018 Omair Majid - 2.1.401-2 +- Use distro-standard flags when building .NET Core + +* Tue Aug 21 2018 Omair Majid - 2.1.401-1 +- Update to .NET Core Runtime 2.1.3 and SDK 2.1.401 + +* Mon Aug 20 2018 Omair Majid - 2.1.302-1 +- Update to .NET Core Runtime 2.1.2 and SDK 2.1.302 + +* Fri Jul 20 2018 Omair Majid - 2.1.301-1 +- Update to .NET Core 2.1 + +* Thu May 03 2018 Omair Majid - 2.0.7-1 +- Update to .NET Core 2.0.7 + +* Wed Mar 28 2018 Omair Majid - 2.0.6-2 +- Enable bash completion for dotnet +- Remove redundant buildrequires and requires + +* Wed Mar 14 2018 Omair Majid - 2.0.6-1 +- Update to .NET Core 2.0.6 + +* Fri Feb 23 2018 Omair Majid - 2.0.5-1 +- Update to .NET Core 2.0.5 + +* Wed Jan 24 2018 Omair Majid - 2.0.3-5 +- Don't apply corefx clang warnings fix on clang < 5 + +* Fri Jan 19 2018 Omair Majid - 2.0.3-4 +- Add a test script to sanity check debug and symbol info. +- Build with clang 5.0 +- Make main package real instead of using a virtual provides (see RHBZ 1519325) + +* Wed Nov 29 2017 Omair Majid - 2.0.3-3 +- Add a Provides for 'dotnet' +- Fix conditional macro + +* Tue Nov 28 2017 Omair Majid - 2.0.3-2 +- Fix build on Fedora 27 + +* Fri Nov 17 2017 Omair Majid - 2.0.3-1 +- Update to .NET Core 2.0.3 + +* Thu Oct 19 2017 Omair Majid - 2.0.0-4 +- Add a hack to let omnisharp work + +* Wed Aug 30 2017 Omair Majid - 2.0.0-3 +- Add a patch for building coreclr and core-setup correctly on Fedora >= 27 + +* Fri Aug 25 2017 Omair Majid - 2.0.0-2 +- Move libicu/libcurl/libunwind requires to runtime package +- Make sdk depend on the exact version of the runtime package + +* Thu Aug 24 2017 Omair Majid - 2.0.0-1 +- Update to 2.0.0 final release + +* Wed Jul 26 2017 Omair Majid - 2.0.0-0.3.preview2 +- Add man pages + +* Tue Jul 25 2017 Omair Majid - 2.0.0-0.2.preview2 +- Add Requires on libicu +- Split into multiple packages +- Do not repeat first-run message + +* Fri Jul 21 2017 Omair Majid - 2.0.0-0.1.preview2 +- Update to .NET Core 2.0 Preview 2 + +* Thu Mar 16 2017 Nemanja Milošević - 1.1.0-7 +- rebuilt with latest libldb +* Wed Feb 22 2017 Nemanja Milosevic - 1.1.0-6 +- compat-openssl 1.0 for F26 for now +* Sun Feb 19 2017 Nemanja Milosevic - 1.1.0-5 +- Fix wrong commit id's +* Sat Feb 18 2017 Nemanja Milosevic - 1.1.0-4 +- Use commit id's instead of branch names +* Sat Feb 18 2017 Nemanja Milosevic - 1.1.0-3 +- Improper patch5 fix +* Sat Feb 18 2017 Nemanja Milosevic - 1.1.0-2 +- SPEC cleanup +- git removal (using all tarballs for reproducible builds) +- more reasonable versioning +* Thu Feb 09 2017 Nemanja Milosevic - 1.1.0-1 +- Fixed debuginfo going to separate package (Patch1) +- Added F25/F26 RIL and fixed the version info (Patch2) +- Added F25/F26 RIL in Microsoft.NETCore.App suported runtime graph (Patch3) +- SPEC file cleanup +* Wed Jan 11 2017 Nemanja Milosevic - 1.1.0-0 +- Initial RPM for Fedora 25/26.