Statically linking coreclr and clrjit in single file host (#43556)
authorVladimir Sadov <vsadov@microsoft.com>
Mon, 26 Oct 2020 22:52:10 +0000 (15:52 -0700)
committerGitHub <noreply@github.com>
Mon, 26 Oct 2020 22:52:10 +0000 (15:52 -0700)
* Statically linking coreclr and clrjit in single file host.

* setting g_hmodCoreCLR on Unix

* System.Globalization.Native.lib must build with coreclr to be linkable with it

* Always use system unwind libs on FREEBSD

* no DllMain when coreclr is statically linked

* Handle cases when coreclr configuration is different from libraries

* Adding and using PAL_GetPalHostModule

24 files changed:
src/coreclr/src/dlls/mscoree/coreclr/CMakeLists.txt
src/coreclr/src/dlls/mscoree/mscoree.cpp
src/coreclr/src/pal/inc/pal.h
src/coreclr/src/pal/src/loader/module.cpp
src/coreclr/src/vm/ceemain.cpp
src/coreclr/src/vm/threads.cpp
src/installer/corehost/Windows/gen-buildsys-win.bat
src/installer/corehost/build.cmd
src/installer/corehost/cli/apphost/static/CMakeLists.txt
src/installer/corehost/cli/common.cmake
src/installer/corehost/cli/fxr/CMakeLists.txt
src/installer/corehost/cli/fxr/files.cmake [new file with mode: 0644]
src/installer/corehost/cli/fxr/standalone/CMakeLists.txt
src/installer/corehost/cli/fxr/static/CMakeLists.txt [deleted file]
src/installer/corehost/cli/hostcommon/CMakeLists.txt
src/installer/corehost/cli/hostcommon/files.cmake [new file with mode: 0644]
src/installer/corehost/cli/hostpolicy/CMakeLists.txt
src/installer/corehost/cli/hostpolicy/files.cmake [new file with mode: 0644]
src/installer/corehost/cli/hostpolicy/standalone/CMakeLists.txt
src/installer/corehost/cli/hostpolicy/static/CMakeLists.txt [deleted file]
src/installer/corehost/cli/hostpolicy/static/coreclr_resolver.cpp
src/installer/corehost/corehost.proj
src/installer/pkg/projects/netcoreapp/pkg/Directory.Build.props
src/libraries/Native/Unix/System.Globalization.Native/CMakeLists.txt

index 75ebe97..a8f9a2c 100644 (file)
@@ -170,6 +170,7 @@ target_sources(coreclr PUBLIC $<TARGET_OBJECTS:cee_wks_core>)
 target_link_libraries(coreclr PUBLIC ${CORECLR_LIBRARIES} ${CLRJIT_STATIC} cee_wks)
 target_sources(coreclr_static PUBLIC $<TARGET_OBJECTS:cee_wks_core>)
 target_link_libraries(coreclr_static PUBLIC ${CORECLR_LIBRARIES} clrjit_static cee_wks_mergeable)
+target_compile_definitions(coreclr_static PUBLIC CORECLR_EMBEDDED)
 
 # Create the runtime module index header file containing the coreclr build id
 # for xplat and the timestamp/size on Windows.
index e32041c..c610e9e 100644 (file)
 
 #include <dbgenginemetrics.h>
 
-// Globals
-extern HINSTANCE g_hThisInst;
+#if !defined(CROSSGEN_COMPILE) && !defined(CORECLR_EMBEDDED)
 
-// Locals.
 BOOL STDMETHODCALLTYPE EEDllMain( // TRUE on success, FALSE on error.
                        HINSTANCE    hInst,                  // Instance handle of the loaded module.
                        DWORD        dwReason,               // Reason for loading.
-                       LPVOID       lpReserved);                // Unused.
+                       LPVOID       lpReserved);            // Unused.
 
-#ifndef CROSSGEN_COMPILE
 //*****************************************************************************
 // Handle lifetime of loaded library.
 //*****************************************************************************
@@ -48,7 +45,10 @@ BOOL WINAPI DllMain(HANDLE hInstance, DWORD dwReason, LPVOID lpReserved)
     return EEDllMain((HINSTANCE)hInstance, dwReason, lpReserved);
 }
 
-#endif // CROSSGEN_COMPILE
+#endif // !defined(CROSSGEN_COMPILE) && !defined(CORECLR_EMBEDDED)
+
+// Globals
+extern HINSTANCE g_hThisInst;
 
 HINSTANCE GetModuleInst()
 {
index cfd012b..19e6409 100644 (file)
@@ -2491,6 +2491,11 @@ PAL_FreeLibraryDirect(
         IN NATIVE_LIBRARY_HANDLE dl_handle);
 
 PALIMPORT
+HMODULE
+PALAPI
+PAL_GetPalHostModule();
+
+PALIMPORT
 FARPROC
 PALAPI
 PAL_GetProcAddressDirect(
index 8e75999..9f29ebd 100644 (file)
@@ -655,6 +655,22 @@ PAL_FreeLibraryDirect(
     return retValue;
 }
 
+/*++
+Function:
+  PAL_GetPalHostModule
+
+  Returns the module that hosts the PAL.
+  That is typically:
+      - coreclr.dll when coreclr is dynamically linked
+      - containing executable in the statically linked case
+--*/
+HMODULE
+PALAPI
+PAL_GetPalHostModule()
+{
+    return (HMODULE)LOADGetPalLibrary();
+}
+
 /*
 Function:
   PAL_GetProcAddressDirect
index d731c6d..e975195 100644 (file)
@@ -637,6 +637,18 @@ void EEStartupHelper()
     {
         g_fEEInit = true;
 
+#if CORECLR_EMBEDDED
+
+#ifdef TARGET_WINDOWS
+        HINSTANCE curModule = WszGetModuleHandle(NULL);
+#else
+        HINSTANCE curModule = PAL_GetPalHostModule();
+#endif
+
+        g_hmodCoreCLR = curModule;
+        g_hThisInst = curModule;
+#endif
+
 #ifndef CROSSGEN_COMPILE
 
         // We cache the SystemInfo for anyone to use throughout the life of the EE.
@@ -1798,6 +1810,8 @@ LONG DllMainFilter(PEXCEPTION_POINTERS p, PVOID pv)
     return EXCEPTION_EXECUTE_HANDLER;
 }
 
+#if !defined(CORECLR_EMBEDDED)
+
 //*****************************************************************************
 // This is the part of the old-style DllMain that initializes the
 // stuff that the EE team works on. It's called from the real DllMain
@@ -1878,6 +1892,8 @@ BOOL STDMETHODCALLTYPE EEDllMain( // TRUE on success, FALSE on error.
     return TRUE;
 }
 
+#endif // !defined(CORECLR_EMBEDDED)
+
 struct TlsDestructionMonitor
 {
     ~TlsDestructionMonitor()
index 588de0e..63e60f8 100644 (file)
@@ -1137,6 +1137,7 @@ void InitThreadManager()
 
     // All patched helpers should fit into one page.
     // If you hit this assert on retail build, there is most likely problem with BBT script.
+    _ASSERTE_ALL_BUILDS("clr/src/VM/threads.cpp", (BYTE*)JIT_PatchedCodeLast - (BYTE*)JIT_PatchedCodeStart > (ptrdiff_t)0);
     _ASSERTE_ALL_BUILDS("clr/src/VM/threads.cpp", (BYTE*)JIT_PatchedCodeLast - (BYTE*)JIT_PatchedCodeStart < (ptrdiff_t)GetOsPageSize());
 
 #ifdef FEATURE_WRITEBARRIER_COPY
index d5cea94..ec29912 100644 (file)
@@ -43,7 +43,7 @@ popd
 :DoGen
 set __ExtraCmakeParams=%__ExtraCmakeParams% "-DCMAKE_SYSTEM_VERSION=10.0" "-DCLI_CMAKE_HOST_VER=%__HostVersion%" "-DCLI_CMAKE_COMMON_HOST_VER=%__AppHostVersion%" "-DCLI_CMAKE_HOST_FXR_VER=%__HostFxrVersion%"
 set __ExtraCmakeParams=%__ExtraCmakeParams% "-DCLI_CMAKE_HOST_POLICY_VER=%__HostPolicyVersion%" "-DCLI_CMAKE_PKG_RID=%cm_BaseRid%" "-DCLI_CMAKE_COMMIT_HASH=%__LatestCommit%" "-DCLR_CMAKE_HOST_ARCH=%__Arch%"
-set __ExtraCmakeParams=%__ExtraCmakeParams% "-DCORECLR_ARTIFACTS=%__CoreClrArtifacts% " "-DNATIVE_LIBS_ARTIFACTS=%__NativeLibsArtifacts%" 
+set __ExtraCmakeParams=%__ExtraCmakeParams% "-DCORECLR_ARTIFACTS=%__CoreClrArtifacts% " "-DRUNTIME_CONFIG=%__RuntimeConfiguration%" "-DNATIVE_LIBS_ARTIFACTS=%__NativeLibsArtifacts%" 
 set __ExtraCmakeParams=%__ExtraCmakeParams% "-DRUNTIME_FLAVOR=%__RuntimeFlavor% " 
 set __ExtraCmakeParams=%__ExtraCmakeParams% "-DCMAKE_INSTALL_PREFIX=%__CMakeBinDir%" "-DCLI_CMAKE_RESOURCE_DIR=%__ResourcesDir%" "-DCLR_ENG_NATIVE_DIR=%__sourceDir%\..\..\..\eng\native"
 
index 26b6115..5983277 100644 (file)
@@ -41,6 +41,7 @@ if /i [%1] == [rootDir]     ( set __rootDir=%2&&shift&&shift&goto Arg_Loop)
 if /i [%1] == [coreclrartifacts]  (set __CoreClrArtifacts=%2&&shift&&shift&goto Arg_Loop)
 if /i [%1] == [nativelibsartifacts]  (set __NativeLibsArtifacts=%2&&shift&&shift&goto Arg_Loop)
 if /i [%1] == [runtimeflavor]  (set __RuntimeFlavor=%2&&shift&&shift&goto Arg_Loop)
+if /i [%1] == [runtimeconfiguration]  (set __RuntimeConfiguration=%2&&shift&&shift&goto Arg_Loop)
 
 
 shift
index 0542a11..e1275f3 100644 (file)
@@ -23,6 +23,7 @@ set(SOURCES
     ../bundle_marker.cpp
     ./hostfxr_resolver.cpp
     ./hostpolicy_resolver.cpp
+    ../../hostpolicy/static/coreclr_resolver.cpp
 )
 
 set(HEADERS
@@ -30,7 +31,15 @@ set(HEADERS
     ../../../hostfxr_resolver.h
 )
 
-list(APPEND SOURCES $<TARGET_OBJECTS:libhostfxr_static> $<TARGET_OBJECTS:libhostpolicy_static>)
+add_definitions(-D_NO_ASYNCRTIMP)
+add_definitions(-D_NO_PPLXIMP)
+add_definitions(-DEXPORT_SHARED_API=1)
+add_definitions(-DHOSTPOLICY_EMBEDDED)
+
+
+include(../../fxr/files.cmake)
+include(../../hostpolicy/files.cmake)
+include(../../hostcommon/files.cmake)
 
 if(CLR_CMAKE_TARGET_WIN32)
     list(APPEND SOURCES
@@ -46,11 +55,50 @@ include(configure.cmake)
 add_definitions(-DFEATURE_APPHOST=1)
 add_definitions(-DFEATURE_STATIC_HOST=1)
 
-# Disable manifest generation into the file .exe on Windows
 if(CLR_CMAKE_TARGET_WIN32)
-    set_property(TARGET ${PROJECT_NAME} PROPERTY
-            LINK_FLAGS "/MANIFEST:NO"
+    # Disable manifest generation into the file .exe on Windows
+    add_linker_flag("/MANIFEST:NO")
+       
+    get_property(ALL_COMPILE_OPTIONS TARGET ${PROJECT_NAME} PROPERTY COMPILE_OPTIONS)
+    string(TOUPPER ${RUNTIME_CONFIG} UPPERCASE_RUNTIME_CONFIG)
+
+    # make sure that certain compiler and linker settings match the runtime config
+    # we need to ensure that to be able to link with coreclr in mixed builds (ex: Debug with Release runtime)
+    if(UPPERCASE_RUNTIME_CONFIG STREQUAL DEBUG OR UPPERCASE_RUNTIME_CONFIG STREQUAL CHECKED)
+        # add_compile_options(/MTd)
+        # per-config options will win, so we have to use this syntax to override
+        set_property(TARGET ${PROJECT_NAME} PROPERTY
+            COMPILE_OPTIONS "${ALL_COMPILE_OPTIONS};$<$<CONFIG:DEBUG>:/MTd>"
+        )
+
+        remove_definitions(-DNDEBUG)
+        add_definitions(-DDEBUG -D_DEBUG -D_DBG)
+
+        # ignore runtime libraries that could have been added so far based on the config
+        add_linker_flag("/NODEFAULTLIB:ucrt.lib")
+        add_linker_flag("/NODEFAULTLIB:libucrt.lib")
+        add_linker_flag("/NODEFAULTLIB:libcmt.lib")
+
+        # make sure we use statically linked crt
+        add_linker_flag("/DEFAULTLIB:libucrtd.lib")
+    else()
+        # add_compile_options(/MT)
+        # per-config options will win, so we have to use this syntax to override
+        set_property(TARGET ${PROJECT_NAME} PROPERTY
+            COMPILE_OPTIONS "${ALL_COMPILE_OPTIONS};$<$<CONFIG:DEBUG>:/MT>"
         )
+
+        remove_definitions(-DDEBUG -D_DEBUG -D_DBG)
+        add_definitions(-DNDEBUG)
+
+        # Force uCRT to be dynamically linked for Release build
+        add_linker_flag("/NODEFAULTLIB:libucrt.lib")
+        add_linker_flag("/DEFAULTLIB:ucrt.lib")
+    endif()
+
+    # 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_linker_flag("/INCREMENTAL:NO")
 endif()
 
 # Specify non-default Windows libs to be used for Arm/Arm64 builds
@@ -66,10 +114,8 @@ message ("Looking for coreclr_static lib at location: '${CORECLR_STATIC_LIB_LOCA
 
 if(CLR_CMAKE_TARGET_WIN32)
     set(CORECLR_LIBRARIES
-        # Disable superhost on Win32 for now.
-        # ${CORECLR_STATIC_LIB_LOCATION}/coreclr_static.lib
-        ${STATIC_MT_CRT_LIB}
-        ${STATIC_MT_VCRT_LIB}
+        ${CORECLR_STATIC_LIB_LOCATION}/coreclr_static.lib
+        ${CORECLR_STATIC_LIB_LOCATION}/System.Globalization.Native.lib
         kernel32.lib
         advapi32.lib
         ole32.lib
@@ -81,46 +127,44 @@ if(CLR_CMAKE_TARGET_WIN32)
         bcrypt.lib
         RuntimeObject.lib
     )
-elseif(CLR_CMAKE_TARGET_LINUX)
+else()
     set(CORECLR_LIBRARIES
         ${CORECLR_STATIC_LIB_LOCATION}/libcoreclr_static.a
+        ${CORECLR_STATIC_LIB_LOCATION}/libSystem.Globalization.Native.a
         ${CORECLR_STATIC_LIB_LOCATION}/libcoreclrpal.a
         ${CORECLR_STATIC_LIB_LOCATION}/libpalrt.a
         ${CORECLR_STATIC_LIB_LOCATION}/libeventprovider.a
         ${CORECLR_STATIC_LIB_LOCATION}/libnativeresourcestring.a
     )
+endif()
 
-    # currently linking coreclr into the singlefilehost is only supported on linux
-    # the following code here would be needed if/when BSD and OSX are supported too
-    #
-    # if(CLR_CMAKE_TARGET_OSX)
-    #   find_library(COREFOUNDATION CoreFoundation)
-    #   find_library(CORESERVICES CoreServices)
-    #   find_library(SECURITY Security)
-    #   find_library(SYSTEM System)
-    # 
-    #   LIST(APPEND CORECLR_LIBRARIES
-    #     ${COREFOUNDATION}
-    #     ${CORESERVICES}
-    #     ${SECURITY}
-    #     ${SYSTEM}
-    #   )
-    # endif(CLR_CMAKE_TARGET_OSX)
-    # 
-    # if(CLR_CMAKE_TARGET_NETBSD)
-    #     find_library(KVM kvm)
-    # 
-    #     LIST(APPEND CORECLR_LIBRARIES
-    #       ${KVM}
-    #     )
-    # endif(CLR_CMAKE_TARGET_NETBSD)
-endif(CLR_CMAKE_TARGET_WIN32)
+if(CLR_CMAKE_TARGET_OSX)
+   find_library(COREFOUNDATION CoreFoundation)
+   find_library(CORESERVICES CoreServices)
+   find_library(SECURITY Security)
+   find_library(SYSTEM System)
+   LIST(APPEND CORECLR_LIBRARIES
+     ${COREFOUNDATION}
+     ${CORESERVICES}
+     ${SECURITY}
+     ${SYSTEM}
+   )
+endif(CLR_CMAKE_TARGET_OSX)
+if(CLR_CMAKE_TARGET_NETBSD)
+     find_library(KVM kvm)
+     LIST(APPEND CORECLR_LIBRARIES
+       ${KVM}
+     )
+endif(CLR_CMAKE_TARGET_NETBSD)
 
-# Path like: artifacts/bin/native/net5.0-Linux-Release-arm/
-set(NATIVE_LIBS_LOCATION "${NATIVE_LIBS_ARTIFACTS}")
-message ("Looking for native libs at location: '${NATIVE_LIBS_LOCATION}'.")
+# On *BSD, we always use the libunwind that's part of the OS
+if(CLR_CMAKE_TARGET_FREEBSD)
+  set(CLR_CMAKE_USE_SYSTEM_LIBUNWIND 1)
+endif()
 
-# If/when OSX and *BSD are supported, they should also use the libunwind that's part of the OS
 if(CLR_CMAKE_USE_SYSTEM_LIBUNWIND)
     find_unwind_libs(UNWIND_LIBS)
 
@@ -129,6 +173,10 @@ if(CLR_CMAKE_USE_SYSTEM_LIBUNWIND)
     )
 endif()
 
+# Path like: artifacts/bin/native/net5.0-Linux-Release-arm/
+set(NATIVE_LIBS_LOCATION "${NATIVE_LIBS_ARTIFACTS}")
+message ("Looking for native libs at location: '${NATIVE_LIBS_LOCATION}'.")
+
 if(NOT CLR_CMAKE_TARGET_LINUX)
     set(NATIVE_LIBS
         # Native libs linked into singlefilehost is supported only on Linux for now.
@@ -136,7 +184,6 @@ if(NOT CLR_CMAKE_TARGET_LINUX)
     )
 else()
     set(NATIVE_LIBS
-      ${NATIVE_LIBS_LOCATION}/libSystem.Globalization.Native.a
       ${NATIVE_LIBS_LOCATION}/libSystem.IO.Compression.Native.a
       ${NATIVE_LIBS_LOCATION}/libSystem.Native.a
       ${NATIVE_LIBS_LOCATION}/libSystem.Net.Security.Native.a
@@ -207,7 +254,6 @@ endif(NOT CLR_CMAKE_TARGET_LINUX)
 set_property(TARGET singlefilehost PROPERTY ENABLE_EXPORTS 1)
 
 target_link_libraries(singlefilehost
-    libhostcommon
     ${CORECLR_LIBRARIES}
 
     ${START_WHOLE_ARCHIVE}
index 2c131d9..e54e47e 100644 (file)
@@ -3,14 +3,6 @@
 
 project(${DOTNET_PROJECT_NAME})
 
-if(CLR_CMAKE_HOST_WIN32)
-    add_compile_options($<$<CONFIG:RelWithDebInfo>:/MT>)
-    add_compile_options($<$<CONFIG:Release>:/MT>)
-    add_compile_options($<$<CONFIG:Debug>:/MTd>)
-else()
-    add_compile_options(-fvisibility=hidden)
-endif()
-
 include(${CMAKE_CURRENT_LIST_DIR}/setup.cmake)
 
 # Include directories
index dbd0bc5..61ff7bc 100644 (file)
@@ -1,5 +1,4 @@
 # Licensed to the .NET Foundation under one or more agreements.
 # The .NET Foundation licenses this file to you under the MIT license.
 
-add_subdirectory(static)
 add_subdirectory(standalone)
diff --git a/src/installer/corehost/cli/fxr/files.cmake b/src/installer/corehost/cli/fxr/files.cmake
new file mode 100644 (file)
index 0000000..1d46688
--- /dev/null
@@ -0,0 +1,37 @@
+# Licensed to the .NET Foundation under one or more agreements.
+# The .NET Foundation licenses this file to you under the MIT license.
+
+# Include directories
+include_directories(${CMAKE_CURRENT_LIST_DIR}/../json)
+include_directories(${CMAKE_CURRENT_LIST_DIR}/../fxr)
+
+# CMake does not recommend using globbing since it messes with the freshness checks
+list(APPEND SOURCES
+    ${CMAKE_CURRENT_LIST_DIR}/command_line.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/corehost_init.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/hostfxr.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/fx_muxer.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/fx_resolver.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/fx_resolver.messages.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/framework_info.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/host_context.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/sdk_info.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/sdk_resolver.cpp
+)
+
+list(APPEND HEADERS
+    ${CMAKE_CURRENT_LIST_DIR}/../corehost_context_contract.h
+    ${CMAKE_CURRENT_LIST_DIR}/../hostpolicy.h
+    ${CMAKE_CURRENT_LIST_DIR}/../fx_definition.h
+    ${CMAKE_CURRENT_LIST_DIR}/../fx_reference.h
+    ${CMAKE_CURRENT_LIST_DIR}/../roll_fwd_on_no_candidate_fx_option.h
+    ${CMAKE_CURRENT_LIST_DIR}/command_line.h
+    ${CMAKE_CURRENT_LIST_DIR}/corehost_init.h
+    ${CMAKE_CURRENT_LIST_DIR}/fx_muxer.h
+    ${CMAKE_CURRENT_LIST_DIR}/fx_resolver.h
+    ${CMAKE_CURRENT_LIST_DIR}/framework_info.h
+    ${CMAKE_CURRENT_LIST_DIR}/host_context.h
+    ${CMAKE_CURRENT_LIST_DIR}/sdk_info.h
+    ${CMAKE_CURRENT_LIST_DIR}/sdk_resolver.h
+)
+
index c6b07eb..78f4392 100644 (file)
@@ -5,28 +5,17 @@ project(hostfxr)
 
 set(DOTNET_PROJECT_NAME "hostfxr")
 
-# Include directories
-include_directories(../../json)
-include_directories(../../fxr)
-
 # CMake does not recommend using globbing since it messes with the freshness checks
 set(SOURCES
     ./hostpolicy_resolver.cpp
-    $<TARGET_OBJECTS:libhostfxr_static>
 )
 
 set(HEADERS
-    ../command_line.h
-    ../corehost_init.h
-    ../fx_muxer.h
-    ../fx_resolver.h
-    ../framework_info.h
-    ../host_context.h
-    ../sdk_info.h
-    ../sdk_resolver.h
     ../hostpolicy_resolver.h
 )
 
+include(../files.cmake)
+
 if(CLR_CMAKE_TARGET_WIN32)
     list(APPEND SOURCES
         hostfxr.def)
diff --git a/src/installer/corehost/cli/fxr/static/CMakeLists.txt b/src/installer/corehost/cli/fxr/static/CMakeLists.txt
deleted file mode 100644 (file)
index 1092873..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-# Licensed to the .NET Foundation under one or more agreements.
-# The .NET Foundation licenses this file to you under the MIT license.
-
-project(hostfxr_static)
-
-set(DOTNET_PROJECT_NAME "hostfxr_static")
-
-# Include directories
-include_directories(../../json)
-include_directories(../../fxr)
-
-# CMake does not recommend using globbing since it messes with the freshness checks
-set(SOURCES
-    ../command_line.cpp
-    ../corehost_init.cpp
-    ../hostfxr.cpp
-    ../fx_muxer.cpp
-    ../fx_resolver.cpp
-    ../fx_resolver.messages.cpp
-    ../framework_info.cpp
-    ../host_context.cpp
-    ../sdk_info.cpp
-    ../sdk_resolver.cpp
-)
-
-set(HEADERS
-    ../../corehost_context_contract.h
-    ../../hostpolicy.h
-    ../../fx_definition.h
-    ../../fx_reference.h
-    ../../roll_fwd_on_no_candidate_fx_option.h
-    ../command_line.h
-    ../corehost_init.h
-    ../fx_muxer.h
-    ../fx_resolver.h
-    ../framework_info.h
-    ../host_context.h
-    ../sdk_info.h
-    ../sdk_resolver.h
-)
-
-set(SKIP_VERSIONING 1)
-set(BUILD_OBJECT_LIBRARY 1)
-include(../../lib_static.cmake)
index d2e6162..36b9d14 100644 (file)
@@ -5,44 +5,7 @@ project(hostcommon)
 
 set(DOTNET_PROJECT_NAME "hostcommon")
 
-# Include directories
-include_directories(../fxr)
-include_directories(../json)
-
-# CMake does not recommend using globbing since it messes with the freshness checks
-set(SOURCES
-    ../json_parser.cpp
-    ../deps_format.cpp
-    ../deps_entry.cpp
-    ../host_startup_info.cpp
-    ../roll_forward_option.cpp
-    ../fx_definition.cpp
-    ../fx_reference.cpp
-    ../fxr/fx_ver.cpp
-    ../version.cpp
-    ../version_compatibility_range.cpp
-    ../runtime_config.cpp
-    ../bundle/info.cpp
-    ../bundle/reader.cpp
-    ../bundle/header.cpp
-)
-
-set(HEADERS
-    ../json_parser.h
-    ../deps_format.h
-    ../deps_entry.h
-    ../host_startup_info.h
-    ../roll_forward_option.h
-    ../fx_definition.h
-    ../fx_reference.h
-    ../fxr/fx_ver.h
-    ../version.h
-    ../version_compatibility_range.h
-    ../runtime_config.h
-    ../bundle/info.h
-    ../bundle/reader.h
-    ../bundle/header.h
-)
+include(files.cmake)
 
 set(SKIP_VERSIONING 1)
 include(../lib_static.cmake)
diff --git a/src/installer/corehost/cli/hostcommon/files.cmake b/src/installer/corehost/cli/hostcommon/files.cmake
new file mode 100644 (file)
index 0000000..b838cc2
--- /dev/null
@@ -0,0 +1,43 @@
+# Licensed to the .NET Foundation under one or more agreements.
+# The .NET Foundation licenses this file to you under the MIT license.
+
+# Include directories
+include_directories(${CMAKE_CURRENT_LIST_DIR}/../fxr)
+include_directories(${CMAKE_CURRENT_LIST_DIR}/../json)
+
+# CMake does not recommend using globbing since it messes with the freshness checks
+list(APPEND SOURCES
+    ${CMAKE_CURRENT_LIST_DIR}/../json_parser.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../deps_format.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../deps_entry.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../host_startup_info.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../roll_forward_option.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../fx_definition.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../fx_reference.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../fxr/fx_ver.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../version.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../version_compatibility_range.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../runtime_config.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../bundle/info.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../bundle/reader.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../bundle/header.cpp
+)
+
+list(APPEND HEADERS
+    ${CMAKE_CURRENT_LIST_DIR}/../json_parser.h
+    ${CMAKE_CURRENT_LIST_DIR}/../deps_format.h
+    ${CMAKE_CURRENT_LIST_DIR}/../deps_entry.h
+    ${CMAKE_CURRENT_LIST_DIR}/../host_startup_info.h
+    ${CMAKE_CURRENT_LIST_DIR}/../roll_forward_option.h
+    ${CMAKE_CURRENT_LIST_DIR}/../fx_definition.h
+    ${CMAKE_CURRENT_LIST_DIR}/../fx_reference.h
+    ${CMAKE_CURRENT_LIST_DIR}/../fxr/fx_ver.h
+    ${CMAKE_CURRENT_LIST_DIR}/../version.h
+    ${CMAKE_CURRENT_LIST_DIR}/../version_compatibility_range.h
+    ${CMAKE_CURRENT_LIST_DIR}/../runtime_config.h
+    ${CMAKE_CURRENT_LIST_DIR}/../bundle/info.h
+    ${CMAKE_CURRENT_LIST_DIR}/../bundle/reader.h
+    ${CMAKE_CURRENT_LIST_DIR}/../bundle/header.h
+)
+
+
index dbd0bc5..61ff7bc 100644 (file)
@@ -1,5 +1,4 @@
 # Licensed to the .NET Foundation under one or more agreements.
 # The .NET Foundation licenses this file to you under the MIT license.
 
-add_subdirectory(static)
 add_subdirectory(standalone)
diff --git a/src/installer/corehost/cli/hostpolicy/files.cmake b/src/installer/corehost/cli/hostpolicy/files.cmake
new file mode 100644 (file)
index 0000000..0dfabb5
--- /dev/null
@@ -0,0 +1,40 @@
+# Licensed to the .NET Foundation under one or more agreements.
+# The .NET Foundation licenses this file to you under the MIT license.
+
+# Include directories
+include_directories(${CMAKE_CURRENT_LIST_DIR}/../fxr)
+include_directories(${CMAKE_CURRENT_LIST_DIR}/../json)
+
+# CMake does not recommend using globbing since it messes with the freshness checks
+list(APPEND SOURCES
+    ${CMAKE_CURRENT_LIST_DIR}/args.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/breadcrumbs.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/coreclr.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/deps_resolver.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/hostpolicy_context.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/hostpolicy.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/hostpolicy_init.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../bundle/dir_utils.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../bundle/extractor.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../bundle/file_entry.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../bundle/manifest.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../bundle/runner.cpp
+)
+
+list(APPEND HEADERS
+    ${CMAKE_CURRENT_LIST_DIR}/args.h
+    ${CMAKE_CURRENT_LIST_DIR}/breadcrumbs.h
+    ${CMAKE_CURRENT_LIST_DIR}/coreclr.h
+    ${CMAKE_CURRENT_LIST_DIR}/deps_resolver.h
+    ${CMAKE_CURRENT_LIST_DIR}/hostpolicy_context.h
+    ${CMAKE_CURRENT_LIST_DIR}/hostpolicy_init.h
+    ${CMAKE_CURRENT_LIST_DIR}/../hostpolicy.h
+    ${CMAKE_CURRENT_LIST_DIR}/../corehost_context_contract.h
+    ${CMAKE_CURRENT_LIST_DIR}/../bundle/dir_utils.h
+    ${CMAKE_CURRENT_LIST_DIR}/../bundle/extractor.h
+    ${CMAKE_CURRENT_LIST_DIR}/../bundle/file_entry.h
+    ${CMAKE_CURRENT_LIST_DIR}/../bundle/manifest.h
+    ${CMAKE_CURRENT_LIST_DIR}/../bundle/runner.h
+    ${CMAKE_CURRENT_LIST_DIR}/../../coreclr_resolver.h
+)
+
index cca4648..a0cbbe8 100644 (file)
@@ -5,44 +5,11 @@ project(hostpolicy)
 
 set(DOTNET_PROJECT_NAME "hostpolicy")
 
-# Include directories
-include_directories(../../fxr)
-include_directories(../../json)
-
-# CMake does not recommend using globbing since it messes with the freshness checks
 set(SOURCES
-    ../args.cpp
-    ../breadcrumbs.cpp
-    ../coreclr.cpp
-    ../deps_resolver.cpp
-    ../hostpolicy_context.cpp
-    ../hostpolicy.cpp
-    ../hostpolicy_init.cpp
-    ../../bundle/dir_utils.cpp
-    ../../bundle/extractor.cpp
-    ../../bundle/file_entry.cpp
-    ../../bundle/manifest.cpp
-    ../../bundle/runner.cpp
     ./coreclr_resolver.cpp
 )
 
-set(HEADERS
-    ../args.h
-    ../breadcrumbs.h
-    ../coreclr.h
-    ../deps_resolver.h
-    ../hostpolicy_context.h
-    ../hostpolicy_init.h
-    ../../hostpolicy.h
-    ../../corehost_context_contract.h
-    ../../bundle/dir_utils.h
-    ../../bundle/extractor.h
-    ../../bundle/file_entry.h
-    ../../bundle/manifest.h
-    ../../bundle/runner.h
-    ../../../coreclr_resolver.h
-)
-
+include(../files.cmake)
 
 if(CLR_CMAKE_TARGET_WIN32)
     list(APPEND SOURCES
diff --git a/src/installer/corehost/cli/hostpolicy/static/CMakeLists.txt b/src/installer/corehost/cli/hostpolicy/static/CMakeLists.txt
deleted file mode 100644 (file)
index fcf9565..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-# Licensed to the .NET Foundation under one or more agreements.
-# The .NET Foundation licenses this file to you under the MIT license.
-
-project(hostpolicy_static)
-
-set(DOTNET_PROJECT_NAME "hostpolicy_static")
-
-# Include directories
-include_directories(../../fxr)
-include_directories(../../json)
-
-# CMake does not recommend using globbing since it messes with the freshness checks
-set(SOURCES
-    ../args.cpp
-    ../breadcrumbs.cpp
-    ../coreclr.cpp
-    ../deps_resolver.cpp
-    ../hostpolicy_context.cpp
-    ../hostpolicy.cpp
-    ../hostpolicy_init.cpp
-    ../../bundle/dir_utils.cpp
-    ../../bundle/extractor.cpp
-    ../../bundle/file_entry.cpp
-    ../../bundle/manifest.cpp
-    ../../bundle/runner.cpp
-    ./coreclr_resolver.cpp
-)
-
-set(HEADERS
-    ../args.h
-    ../breadcrumbs.h
-    ../coreclr.h
-    ../deps_resolver.h
-    ../hostpolicy_context.h
-    ../hostpolicy_init.h
-    ../../hostpolicy.h
-    ../../corehost_context_contract.h
-    ../../bundle/dir_utils.h
-    ../../bundle/extractor.h
-    ../../bundle/file_entry.h
-    ../../bundle/manifest.h
-    ../../bundle/runner.h
-    ../../../coreclr_resolver.h
-)
-
-set(SKIP_VERSIONING 1)
-set(BUILD_OBJECT_LIBRARY 1)
-include(../../lib_static.cmake)
-
-add_definitions(-DHOSTPOLICY_EMBEDDED)
index 66d3544..bc3f913 100644 (file)
@@ -42,33 +42,6 @@ extern "C"
 }
 
 
-#if !defined(TARGET_LINUX)
-
-bool coreclr_resolver_t::resolve_coreclr(const pal::string_t& libcoreclr_path, coreclr_resolver_contract_t& coreclr_resolver_contract)
-{
-    pal::string_t coreclr_dll_path(libcoreclr_path);
-    append_path(&coreclr_dll_path, LIBCORECLR_NAME);
-
-    if (!pal::load_library(&coreclr_dll_path, &coreclr_resolver_contract.coreclr))
-    {
-        return false;
-    }
-
-    coreclr_resolver_contract.coreclr_initialize = reinterpret_cast<coreclr_initialize_fn>(pal::get_symbol(coreclr_resolver_contract.coreclr, "coreclr_initialize"));
-    coreclr_resolver_contract.coreclr_shutdown = reinterpret_cast<coreclr_shutdown_fn>(pal::get_symbol(coreclr_resolver_contract.coreclr, "coreclr_shutdown_2"));
-    coreclr_resolver_contract.coreclr_execute_assembly = reinterpret_cast<coreclr_execute_assembly_fn>(pal::get_symbol(coreclr_resolver_contract.coreclr, "coreclr_execute_assembly"));
-    coreclr_resolver_contract.coreclr_create_delegate = reinterpret_cast<coreclr_create_delegate_fn>(pal::get_symbol(coreclr_resolver_contract.coreclr, "coreclr_create_delegate"));
-
-    assert(coreclr_resolver_contract.coreclr_initialize != nullptr
-        && coreclr_resolver_contract.coreclr_shutdown != nullptr
-        && coreclr_resolver_contract.coreclr_execute_assembly != nullptr
-        && coreclr_resolver_contract.coreclr_create_delegate != nullptr);
-
-    return true;
-}
-
-#else
-
 bool coreclr_resolver_t::resolve_coreclr(const pal::string_t& libcoreclr_path, coreclr_resolver_contract_t& coreclr_resolver_contract)
 {
     coreclr_resolver_contract.coreclr = nullptr;
@@ -79,5 +52,3 @@ bool coreclr_resolver_t::resolve_coreclr(const pal::string_t& libcoreclr_path, c
 
     return true;
 }
-
-#endif
index de52644..385036b 100644 (file)
@@ -92,6 +92,7 @@
       <BuildArgs>$(BuildArgs) coreclrartifacts $(CoreCLRArtifactsPath)</BuildArgs>
       <BuildArgs>$(BuildArgs) nativelibsartifacts $(LibrariesArtifactsPath)/bin/native/$(NetCoreAppCurrent)-$(TargetOS)-$(LibrariesConfiguration)-$(TargetArchitecture)</BuildArgs>
       <BuildArgs>$(BuildArgs) runtimeflavor $(RuntimeFlavor)</BuildArgs>
+      <BuildArgs>$(BuildArgs) runtimeconfiguration $(RuntimeConfiguration)</BuildArgs>
     </PropertyGroup>
 
     <!--
index 8a3887e..40e6a6f 100644 (file)
     <SingleFileHostIncludeFilename Include="libSystem.Net.Security.Native.dylib" />
     <SingleFileHostIncludeFilename Include="libSystem.Security.Cryptography.Native.Apple.dylib" />
     <SingleFileHostIncludeFilename Include="libSystem.Security.Cryptography.Native.OpenSsl.dylib" />
-    <SingleFileHostIncludeFilename Include="libclrjit.dylib" />
-    <SingleFileHostIncludeFilename Include="libcoreclr.dylib" />
     
     <!-- Windows -->
     <SingleFileHostIncludeFilename Include="clrcompression.dll" />
-    <SingleFileHostIncludeFilename Include="clrjit.dll" />
-    <SingleFileHostIncludeFilename Include="coreclr.dll" />
     <SingleFileHostIncludeFilename Include="mscordaccore.dll" />
   </ItemGroup>
   
index c21d79f..834a86e 100644 (file)
@@ -91,7 +91,16 @@ add_library(System.Globalization.Native-Static
 
 set_target_properties(System.Globalization.Native-Static PROPERTIES OUTPUT_NAME System.Globalization.Native  CLEAN_DIRECT_OUTPUT 1)
 
-install (TARGETS System.Globalization.Native-Static DESTINATION .)
+if (GEN_SHARED_LIB)
+    # this builds with libs to check for libs-level warnings
+    install (TARGETS System.Globalization.Native-Static DESTINATION .)
+else()
+    # this one builds with coreclr and used by singlefilehost.
+    # it needs to build with coreclr in order to be linkable with it on Windows
+    # coreclr and static libraries must match because linker does not permit mixing modules
+    # with different C runtimes (i.e. Debug vs. Release)
+    install (TARGETS System.Globalization.Native-Static DESTINATION lib)
+endif()
 
 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)