Skip to content

Commit

Permalink
[mono] Linking statically ICU shim on mono (dotnet#35790)
Browse files Browse the repository at this point in the history
Linking statically ICU shim on mono for windows, linux, macOs and android.
  • Loading branch information
thaystg authored May 18, 2020
1 parent 2962ded commit 0ac0666
Show file tree
Hide file tree
Showing 23 changed files with 324 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,16 @@ internal Assembly LoadFromInMemoryModule(IntPtr moduleHandle)
}
#endif

// This method is invoked by the VM to resolve a satellite assembly reference
// after trying assembly resolution via Load override without success.
private static Assembly? ResolveSatelliteAssembly(IntPtr gchManagedAssemblyLoadContext, AssemblyName assemblyName)
{
AssemblyLoadContext context = (AssemblyLoadContext)(GCHandle.FromIntPtr(gchManagedAssemblyLoadContext).Target)!;

// Invoke the ResolveSatelliteAssembly method
return context.ResolveSatelliteAssembly(assemblyName);
}

// This method is invoked by the VM when using the host-provided assembly load context
// implementation.
private static IntPtr ResolveUnmanagedDll(string unmanagedDllName, IntPtr gchManagedAssemblyLoadContext)
Expand Down
4 changes: 4 additions & 0 deletions src/libraries/Common/src/Interop/Interop.Libraries.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ internal static partial class Interop
{
internal static partial class Libraries
{
#if MONO
internal const string GlobalizationNative = "__Internal";
#else
internal const string GlobalizationNative = "libSystem.Globalization.Native";
#endif
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,20 @@
// See the LICENSE file in the project root for more information.
//

#include <stdlib.h>
#include "pal_icushim_internal.h"

#if defined(TARGET_UNIX)
#include <dlfcn.h>
#elif defined(TARGET_WINDOWS)
#include <windows.h>
#include <libloaderapi.h>
#include <errhandlingapi.h>
#endif
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>

#include "pal_icushim_internal.h"
#include "pal_icushim.h"

// Define pointers to all the used ICU functions
Expand Down
3 changes: 1 addition & 2 deletions src/libraries/System.Globalization/tests/IcuTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@ namespace System.Globalization.Tests
public class IcuTests
{
private static bool IsIcuCompatiblePlatform => PlatformDetection.IsNotWindows ||
(!PlatformDetection.IsMonoRuntime &&
PlatformDetection.IsWindows10Version1903OrGreater);
PlatformDetection.IsWindows10Version1903OrGreater;

[ConditionalFact(nameof(IsIcuCompatiblePlatform))]
public static void IcuShouldBeUsedByDefault()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -564,16 +564,6 @@ public void Dispose()
return context.ResolveUsingLoad(assemblyName);
}

// This method is invoked by the VM to resolve a satellite assembly reference
// after trying assembly resolution via Load override without success.
private static Assembly? ResolveSatelliteAssembly(IntPtr gchManagedAssemblyLoadContext, AssemblyName assemblyName)
{
AssemblyLoadContext context = (AssemblyLoadContext)(GCHandle.FromIntPtr(gchManagedAssemblyLoadContext).Target)!;

// Invoke the ResolveSatelliteAssembly method
return context.ResolveSatelliteAssembly(assemblyName);
}

private Assembly? GetFirstResolvedAssemblyFromResolvingEvent(AssemblyName assemblyName)
{
Assembly? resolvedAssembly = null;
Expand Down
40 changes: 40 additions & 0 deletions src/mono/configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -6795,6 +6795,46 @@ AC_COMPILE_IFELSE(
AC_MSG_RESULT(no)
])

# for icu shim
ICU_SHIM_PATH=.
if test x$with_core = xonly; then
if test x$cross_compiling = xno; then
AC_CHECK_FILE($srcdir/../libraries/Native/Unix/System.Globalization.Native/pal_icushim.h, [have_shim_globalization=yes], [have_shim_globalization=no])
fi
if test x$have_shim_globalization = xyes || test x$cross_compiling = xyes; then
ICU_SHIM_PATH=../../../libraries/Native/Unix/System.Globalization.Native
if test x$target_osx = xyes; then
ORIG_CPPFLAGS=$CPPFLAGS
# adding icu path to pkg_config_path
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig:/usr/local/opt/icu4c/lib/pkgconfig
export PKG_CONFIG_PATH
CPPFLAGS="`pkg-config --cflags-only-I icu-uc`"
AC_CHECK_LIB(icucore, ucol_open, LIBS=$LIBS,
[AC_MSG_ERROR([Cannot find libicucore, skipping build for System.Globalization.Native. .NET globalization is not expected to function.])])
AC_CHECK_HEADER(unicode/utypes.h, [have_sys_icu=yes], [have_sys_icu=no])
if test x$have_sys_icu = xyes; then
ICU_CFLAGS="$CPPFLAGS -DOSX_ICU_LIBRARY_PATH=AS_ESCAPE(\"/usr/lib/libicucore.dylib\", '\"') -DTARGET_UNIX -DU_DISABLE_RENAMING -Wno-reserved-id-macro -Wno-documentation -Wno-documentation-unknown-command -Wno-switch-enum -Wno-covered-switch-default -Wno-covered-switch-default -Wno-extra-semi-stmt -Wno-unknown-warning-option -Wno-deprecated-declarations"
fi
CPPFLAGS=$ORIG_CPPFLAGS
elif test x$platform_android = xyes; then
ICU_CFLAGS="-DHAVE_UDAT_STANDALONE_SHORTER_WEEKDAYS -DHAVE_SET_MAX_VARIABLE -DTARGET_UNIX -DTARGET_ANDROID -Wno-reserved-id-macro -Wno-documentation -Wno-documentation-unknown-command -Wno-switch-enum -Wno-covered-switch-default -Wno-covered-switch-default -Wno-extra-semi-stmt -Wno-unknown-warning-option"
have_sys_icu=yes
elif test x$host_linux = xyes; then
AC_CHECK_LIB(icuuc, main, LIBS=$LIBS,
[AC_MSG_ERROR([Cannot find libicuuc, try installing libicu-dev (or the appropriate package for your platform).])])
AC_CHECK_LIB(icui18n, main, LIBS=$LIBS,
[AC_MSG_ERROR([Cannot find libicui18n, try installing libicu-dev (or the appropriate package for your platform).])])
AC_CHECK_HEADER(unicode/utypes.h, [have_sys_icu=yes], [have_sys_icu=no])
if test x$have_sys_icu = xyes; then
ICU_CFLAGS="-DTARGET_UNIX -Wno-reserved-id-macro -Wno-documentation -Wno-documentation-unknown-command -Wno-switch-enum -Wno-covered-switch-default -Wno-covered-switch-default -Wno-extra-semi-stmt -Wno-unknown-warning-option"
fi
fi
AC_SUBST(ICU_CFLAGS)
fi
fi
AC_SUBST(ICU_SHIM_PATH)
AM_CONDITIONAL(HAVE_SYS_ICU, test x$have_sys_icu = xyes)

AC_SUBST(CFLAGS)
AC_SUBST(CPPFLAGS)
AC_SUBST(LDFLAGS)
Expand Down
26 changes: 23 additions & 3 deletions src/mono/mono/metadata/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ Z_LIBS=$(BUNDLE_ZLIB_PATH)
endif
endif

noinst_LTLIBRARIES = libmonoruntime-config.la $(support_libraries) $(boehm_libraries) $(sgen_libraries)
noinst_LTLIBRARIES = libmonoruntime-config.la $(support_libraries) $(boehm_libraries) $(sgen_libraries) $(shim_libraries)

lib_LTLIBRARIES = $(icall_table_libraries) $(ilgen_libraries)

Expand Down Expand Up @@ -136,6 +136,26 @@ libmonoruntime_support_la_SOURCES = support.c
libmonoruntime_support_la_LDFLAGS = $(Z_LIBS)
libmonoruntime_support_la_CFLAGS = $(filter-out @CXX_REMOVE_CFLAGS@, @CFLAGS@) @ZLIB_CFLAGS@

if ENABLE_NETCORE
if HAVE_SYS_ICU
shim_libraries = libmonoruntime-shimglobalization.la

libmonoruntime_shimglobalization_la_SOURCES = \
@ICU_SHIM_PATH@/pal_calendarData.c \
@ICU_SHIM_PATH@/pal_casing.c \
@ICU_SHIM_PATH@/pal_collation.c \
@ICU_SHIM_PATH@/pal_idna.c \
@ICU_SHIM_PATH@/pal_locale.c \
@ICU_SHIM_PATH@/pal_localeNumberData.c \
@ICU_SHIM_PATH@/pal_localeStringData.c \
@ICU_SHIM_PATH@/pal_normalization.c \
@ICU_SHIM_PATH@/pal_timeZoneInfo.c \
@ICU_SHIM_PATH@/pal_icushim.c

libmonoruntime_shimglobalization_la_CFLAGS = @ICU_CFLAGS@ -I$(top_srcdir)/../libraries/Native/Unix/Common/
endif
endif

#
# This library contains the icall tables if the runtime was configured with --disable-icall-tables
#
Expand Down Expand Up @@ -424,12 +444,12 @@ if !ENABLE_MSVC_ONLY
libmonoruntime_la_SOURCES = $(common_sources) $(icall_tables_sources) $(ilgen_sources) $(gc_dependent_sources) $(null_gc_sources) $(boehm_sources)
# Add CXX_ADD_CFLAGS per-library until/unless https://github.com/dotnet/corefx/pull/31342.
libmonoruntime_la_CFLAGS = $(BOEHM_DEFINES) @CXX_ADD_CFLAGS@
libmonoruntime_la_LIBADD = libmonoruntime-config.la $(support_libraries)
libmonoruntime_la_LIBADD = libmonoruntime-config.la $(support_libraries) $(shim_libraries)

libmonoruntimesgen_la_SOURCES = $(common_sources) $(icall_tables_sources) $(ilgen_sources) $(gc_dependent_sources) $(sgen_sources)
# Add CXX_ADD_CFLAGS per-library until/unless https://github.com/dotnet/corefx/pull/31342.
libmonoruntimesgen_la_CFLAGS = $(SGEN_DEFINES) @CXX_ADD_CFLAGS@
libmonoruntimesgen_la_LIBADD = libmonoruntime-config.la $(support_libraries)
libmonoruntimesgen_la_LIBADD = libmonoruntime-config.la $(support_libraries) $(shim_libraries)

endif # !ENABLE_MSVC_ONLY

Expand Down
20 changes: 19 additions & 1 deletion src/mono/mono/metadata/native-library.c
Original file line number Diff line number Diff line change
Expand Up @@ -758,7 +758,7 @@ netcore_lookup_native_library (MonoAssemblyLoadContext *alc, MonoImage *image, c
// We allow a special name to dlopen from the running process namespace, which is not present in CoreCLR
if (strcmp (scope, "__Internal") == 0) {
if (!internal_module)
internal_module = mono_dl_open (NULL, MONO_DL_LAZY, &error_msg);
internal_module = mono_dl_open_self (&error_msg);
module = internal_module;

if (!module) {
Expand Down Expand Up @@ -1240,6 +1240,9 @@ lookup_pinvoke_call_impl (MonoMethod *method, MonoLookupPInvokeStatus *status_ou
#endif

#ifdef ENABLE_NETCORE
#ifndef HOST_WIN32
retry_with_libcoreclr:
#endif
// FIXME: these flags are not getting passed correctly
module = netcore_lookup_native_library (alc, image, new_scope, 0);
#else
Expand All @@ -1262,6 +1265,21 @@ lookup_pinvoke_call_impl (MonoMethod *method, MonoLookupPInvokeStatus *status_ou
addr = pinvoke_probe_for_symbol (module, piinfo, new_import, &error_msg);

if (!addr) {
#if defined(ENABLE_NETCORE) && !defined(HOST_WIN32)
if (strcmp (new_scope, "__Internal") == 0) {
g_free ((char *)new_scope);
#if defined(TARGET_OSX)
new_scope = g_strdup ("libcoreclr.dylib");
#else
#if defined(TARGET_ANDROID)
new_scope = g_strdup ("libmonosgen-2.0.so");
#else
new_scope = g_strdup ("libcoreclr.so");
#endif
#endif
goto retry_with_libcoreclr;
}
#endif
status_out->err_code = LOOKUP_PINVOKE_ERR_NO_SYM;
status_out->err_arg = g_strdup (new_import);
goto exit;
Expand Down
3 changes: 3 additions & 0 deletions src/mono/mono/mini/monovm.c
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,9 @@ parse_properties (int propertyCount, const char **propertyKeys, const char **pro
} else if (prop_len == 30 && !strncmp (propertyKeys [i], "System.Globalization.Invariant", 30)) {
// TODO: Ideally we should propagate this through AppContext options
g_setenv ("DOTNET_SYSTEM_GLOBALIZATION_INVARIANT", propertyValues [i], TRUE);
} else if (prop_len == 27 && !strncmp (propertyKeys [i], "System.Globalization.UseNls", 27)) {
// TODO: Ideally we should propagate this through AppContext options
g_setenv ("DOTNET_SYSTEM_GLOBALIZATION_USENLS", propertyValues [i], TRUE);
} else {
#if 0
// can't use mono logger, it's not initialized yet.
Expand Down
6 changes: 3 additions & 3 deletions src/mono/mono/utils/mono-dl-posix.c
Original file line number Diff line number Diff line change
Expand Up @@ -136,10 +136,10 @@ mono_dl_convert_flags (int flags)

#ifdef ENABLE_NETCORE
// Specifying both will default to LOCAL
if (flags & MONO_DL_LOCAL)
lflags |= RTLD_LOCAL;
else if (flags & MONO_DL_GLOBAL)
if (flags & MONO_DL_GLOBAL && !(flags & MONO_DL_LOCAL))
lflags |= RTLD_GLOBAL;
else
lflags |= RTLD_LOCAL;
#else
lflags = flags & MONO_DL_LOCAL ? RTLD_LOCAL : RTLD_GLOBAL;
#endif
Expand Down
34 changes: 34 additions & 0 deletions src/mono/mono/utils/mono-dl.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@
#include <ctype.h>
#include <string.h>
#include <glib.h>
#if defined(ENABLE_NETCORE) && defined(TARGET_ANDROID)
#include <dlfcn.h>
#endif

// Contains LIBC_SO definition
#ifdef HAVE_GNU_LIB_NAMES_H
Expand Down Expand Up @@ -168,6 +171,37 @@ fix_libc_name (const char *name)
}
#endif

/**
* mono_dl_open_self:
* \param error_msg pointer for error message on failure
*
* Returns a handle to the main program, on android x86 it's not possible to
* call dl_open(null), it returns a null handle, so this function returns RTLD_DEFAULT
* handle in this platform.
*/
MonoDl*
mono_dl_open_self (char **error_msg)
{
#if defined(ENABLE_NETCORE) && defined(TARGET_ANDROID)
MonoDl *module;
if (error_msg)
*error_msg = NULL;
module = (MonoDl *) g_malloc (sizeof (MonoDl));
if (!module) {
if (error_msg)
*error_msg = g_strdup ("Out of memory");
return NULL;
}
mono_refcount_init (module, NULL);
module->handle = RTLD_DEFAULT;
module->dl_fallback = NULL;
module->full_name = NULL;
return module;
#else
return mono_dl_open (NULL, MONO_DL_LAZY, error_msg);
#endif
}

/**
* mono_dl_open:
* \param name name of file containing shared module
Expand Down
2 changes: 2 additions & 0 deletions src/mono/mono/utils/mono-dl.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ char* mono_dl_build_path (const char *directory, const char *name, void **

MonoDl* mono_dl_open_runtime_lib (const char *lib_name, int flags, char **error_msg);

MonoDl* mono_dl_open_self (char **error_msg);


//Platform API for mono_dl
const char* mono_dl_get_so_prefix (void);
Expand Down
16 changes: 8 additions & 8 deletions src/mono/msvc/libmono-dynamic.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,8 @@
<ClCompile>
<AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);$(MONO_LLVM_DEFAULT_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(GC_DEFINES);MONO_DLL_EXPORT;LLVM_API_VERSION=$(MONO_LLVM_DEFAULT_API_VERSION);_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);$(MONO_LLVM_DEFAULT_INCLUDE_DIR);$(SHIM_GLOBALIZATION_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(GC_DEFINES);MONO_DLL_EXPORT;LLVM_API_VERSION=$(MONO_LLVM_DEFAULT_API_VERSION);$(SHIM_GLOBALIZATION_DEFINES);_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<WarningLevel>Level3</WarningLevel>
</ClCompile>
Expand All @@ -123,8 +123,8 @@
<ClCompile>
<AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);$(MONO_LLVM_DEFAULT_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(GC_DEFINES);MONO_DLL_EXPORT;LLVM_API_VERSION=$(MONO_LLVM_DEFAULT_API_VERSION);WIN64;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);$(MONO_LLVM_DEFAULT_INCLUDE_DIR);$(SHIM_GLOBALIZATION_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(GC_DEFINES);MONO_DLL_EXPORT;LLVM_API_VERSION=$(MONO_LLVM_DEFAULT_API_VERSION);$(SHIM_GLOBALIZATION_DEFINES);WIN64;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<DisableSpecificWarnings>4996;4018;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<WarningLevel>Level3</WarningLevel>
</ClCompile>
Expand All @@ -147,8 +147,8 @@
<ClCompile>
<AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);$(MONO_LLVM_DEFAULT_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(GC_DEFINES);MONO_DLL_EXPORT;LLVM_API_VERSION=$(MONO_LLVM_DEFAULT_API_VERSION);NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);$(MONO_LLVM_DEFAULT_INCLUDE_DIR);$(SHIM_GLOBALIZATION_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(GC_DEFINES);MONO_DLL_EXPORT;LLVM_API_VERSION=$(MONO_LLVM_DEFAULT_API_VERSION);$(SHIM_GLOBALIZATION_DEFINES);NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<WarningLevel>Level3</WarningLevel>
<WholeProgramOptimization>true</WholeProgramOptimization>
Expand Down Expand Up @@ -176,8 +176,8 @@
<ClCompile>
<AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);$(MONO_LLVM_DEFAULT_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(GC_DEFINES);MONO_DLL_EXPORT;LLVM_API_VERSION=$(MONO_LLVM_DEFAULT_API_VERSION);WIN64;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);$(MONO_LLVM_DEFAULT_INCLUDE_DIR);$(SHIM_GLOBALIZATION_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(GC_DEFINES);MONO_DLL_EXPORT;LLVM_API_VERSION=$(MONO_LLVM_DEFAULT_API_VERSION);$(SHIM_GLOBALIZATION_DEFINES);WIN64;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<WarningLevel>Level3</WarningLevel>
<WholeProgramOptimization>true</WholeProgramOptimization>
Expand Down
1 change: 1 addition & 0 deletions src/mono/msvc/libmonoruntime.targets
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildThisFileDirectory)monozlib.targets" />
<Import Project="$(MSBuildThisFileDirectory)shimglobalization.targets" Condition="'$(MONO_ENABLE_NETCORE)'=='true'"/>
<Import Project="$(MSBuildThisFileDirectory)libmonoruntime-common.targets" />
<Import Project="$(MSBuildThisFileDirectory)libmonoruntime-win32.targets" />
<Import Project="$(MSBuildThisFileDirectory)libmonoruntime-posix.targets" />
Expand Down
1 change: 1 addition & 0 deletions src/mono/msvc/libmonoruntime.targets.filters
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildThisFileDirectory)monozlib.targets.filters" />
<Import Project="$(MSBuildThisFileDirectory)shimglobalization.targets.filters"/>
<Import Project="$(MSBuildThisFileDirectory)libmonoruntime-common.targets.filters" />
<Import Project="$(MSBuildThisFileDirectory)libmonoruntime-win32.targets.filters" />
<Import Project="$(MSBuildThisFileDirectory)libmonoruntime-posix.targets.filters" />
Expand Down
Loading

0 comments on commit 0ac0666

Please sign in to comment.