Skip to content

Commit 0fc8978

Browse files
[mono][NativeAOT] System.Globalization.Native build improvements (#82393)
Fixes #82389 - Fixes build of System.Globalization.Native for iOS-like, browser, and wasi platforms - Removes ICU shim from static builds of Mono runtime and builds it as part of libs.native subset - Switches browser/wasi to use the static libraries Co-authored-by: Alexander Köplinger <[email protected]>
1 parent 21001dc commit 0fc8978

File tree

21 files changed

+116
-35
lines changed

21 files changed

+116
-35
lines changed

eng/liveBuilds.targets

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@
177177
<ExcludeNativeLibrariesRuntimeFiles Condition="'$(IncludeOOBLibraries)' != 'true'"
178178
Include="$(LibrariesNativeArtifactsPath)libSystem.IO.Ports.Native.*" />
179179
<LibrariesRuntimeFiles Include="
180+
$(LibrariesNativeArtifactsPath)*.dat;
180181
$(LibrariesNativeArtifactsPath)*.dll;
181182
$(LibrariesNativeArtifactsPath)*.dylib;
182183
$(LibrariesNativeArtifactsPath)*.a;

src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.Unix.targets

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,7 @@ The .NET Foundation licenses this file to you under the MIT license.
6262

6363
<ItemGroup>
6464
<NetCoreAppNativeLibrary Include="System.Native" />
65-
<!-- FIXME: The library is currently not available for iOS-like platforms -->
66-
<NetCoreAppNativeLibrary Include="System.Globalization.Native" Condition="'$(StaticICULinking)' != 'true' and '$(_IsiOSLikePlatform)' != 'true'" />
65+
<NetCoreAppNativeLibrary Include="System.Globalization.Native" Condition="'$(StaticICULinking)' != 'true'" />
6766
<NetCoreAppNativeLibrary Include="System.IO.Compression.Native" />
6867
<NetCoreAppNativeLibrary Include="System.Net.Security.Native" />
6968
<NetCoreAppNativeLibrary Include="System.Security.Cryptography.Native.Apple" Condition="'$(_IsApplePlatform)' == 'true'" />

src/coreclr/runtime.proj

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,17 @@
22

33
<PropertyGroup>
44
<NativeBuildPartitionPropertiesToRemove>ClrFullNativeBuild;ClrRuntimeSubset;ClrJitSubset;ClrPalTestsSubset;ClrAllJitsSubset;ClrILToolsSubset;ClrNativeAotSubset;ClrSpmiSubset;ClrCrossComponentsSubset;HostArchitecture;PgoInstrument;NativeOptimizationDataSupported;CMakeArgs</NativeBuildPartitionPropertiesToRemove>
5+
<_IcuDir Condition="'$(PkgMicrosoft_NETCore_Runtime_ICU_Transport)' != ''">$(PkgMicrosoft_NETCore_Runtime_ICU_Transport)/runtimes/$(TargetOS)-$(TargetArchitecture)$(_RuntimeVariant)/native</_IcuDir>
56
</PropertyGroup>
67

78
<ItemGroup>
89
<ProjectReference Include="runtime-prereqs.proj" GlobalPropertiesToRemove="$(NativeBuildPartitionPropertiesToRemove)" />
910
</ItemGroup>
1011

12+
<ItemGroup Condition="'$(TargetsAppleMobile)' == 'true'">
13+
<PackageReference Include="Microsoft.NETCore.Runtime.ICU.Transport" PrivateAssets="all" Version="$(MicrosoftNETCoreRuntimeICUTransportVersion)" GeneratePathProperty="true" />
14+
</ItemGroup>
15+
1116
<Import Project="$(RepositoryEngineeringDir)nativepgo.targets" />
1217

1318
<Target Name="BuildRuntime"
@@ -52,6 +57,10 @@
5257
<_CoreClrBuildArg Condition="'$(ClrCrossComponentsSubset)' == 'true'" Include="-component crosscomponents" />
5358
</ItemGroup>
5459

60+
<ItemGroup Condition="'$(TargetsAppleMobile)' == 'true'">
61+
<_CoreClrBuildArg Include="-cmakeargs -DCMAKE_ICU_DIR=&quot;$(_IcuDir)&quot;" />
62+
</ItemGroup>
63+
5564
<PropertyGroup>
5665
<_CoreClrBuildScript Condition="$([MSBuild]::IsOsPlatform(Windows))">build-runtime.cmd</_CoreClrBuildScript>
5766
<_CoreClrBuildScript Condition="!$([MSBuild]::IsOsPlatform(Windows))">build-runtime.sh</_CoreClrBuildScript>

src/installer/pkg/sfx/Microsoft.NETCore.App/Directory.Build.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
<PlatformManifestFileEntry Include="System.Private.Xml.dll" />
7878
<PlatformManifestFileEntry Include="System.Private.Xml.Linq.dll" />
7979
<!-- Native libraries -->
80+
<PlatformManifestFileEntry Include="libSystem.Globalization.Native.a" IsNative="true" />
8081
<PlatformManifestFileEntry Include="libSystem.Globalization.Native.dylib" IsNative="true" />
8182
<PlatformManifestFileEntry Include="libSystem.Globalization.Native.so" IsNative="true" />
8283
<PlatformManifestFileEntry Include="libSystem.IO.Compression.Native.a" IsNative="true" />

src/libraries/native-binplace.proj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
<BinPlaceItem Include="$(NativeBinDir)*.dwarf" />
2525
<BinPlaceItem Include="$(NativeBinDir)*.dex" />
2626
<BinPlaceItem Include="$(NativeBinDir)*.jar" />
27+
<BinPlaceItem Include="$(NativeBinDir)*.dat" />
2728
<FileWrites Include="@(BinPlaceItem)" />
2829
</ItemGroup>
2930
</Target>

src/mono/mono.proj

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -916,7 +916,6 @@
916916
<_MonoRuntimeFilePath>$(MonoObjDir)out\lib\$(MonoFileName)</_MonoRuntimeFilePath>
917917
<_MonoRuntimeStaticFilePath Condition="'$(TargetsMacCatalyst)' == 'true' or '$(TargetsiOS)' == 'true' or '$(TargetstvOS)' == 'true' or '$(TargetsAndroid)' == 'true' or '$(TargetsLinuxBionic)' == 'true'">$(MonoObjDir)out\lib\$(MonoStaticLibFileName)</_MonoRuntimeStaticFilePath>
918918
<_MonoIncludeInterpStaticFiles Condition="'$(TargetsBrowser)' == 'true' or '$(TargetsWasi)' == 'true'">true</_MonoIncludeInterpStaticFiles>
919-
<_MonoIncludeIcuFiles Condition="'$(TargetsiOS)' == 'true' or '$(TargetstvOS)' == 'true' or '$(TargetsMacCatalyst)' == 'true'">true</_MonoIncludeIcuFiles>
920919
</PropertyGroup>
921920
<PropertyGroup Condition="'$(BuildMonoAOTCrossCompiler)' == 'true'">
922921
<_MonoAotCrossFilePath>$(MonoObjCrossDir)out\bin\$(MonoAotCrossFileName)</_MonoAotCrossFilePath>
@@ -1039,19 +1038,8 @@
10391038
<_MonoICorDebugArtifacts Condition="'$(MonoMsCorDbi)' == 'true'" Include="$(MonoObjDir)out\lib\$(LibPrefix)mscordbi$(LibSuffix)">
10401039
<Destination>$(RuntimeBinDir)$(LibPrefix)mscordbi$(LibSuffix)</Destination>
10411040
</_MonoICorDebugArtifacts>
1042-
1043-
<_IcuArtifacts Condition="'$(_MonoIncludeIcuFiles)' == 'true'"
1044-
Include="$(_IcuLibdir)\libicuuc.a;
1045-
$(_IcuLibdir)\libicui18n.a;
1046-
$(_IcuLibdir)\libicudata.a;
1047-
$(_IcuLibdir)\*.dat" />
10481041
</ItemGroup>
10491042

1050-
<Copy Condition="'$(_MonoIncludeIcuFiles)' == 'true'"
1051-
SourceFiles="@(_IcuArtifacts)"
1052-
DestinationFolder="$(RuntimeBinDir)"
1053-
SkipUnchangedFiles="true" />
1054-
10551043
<Copy SourceFiles="@(_MonoRuntimeArtifacts)"
10561044
DestinationFiles="%(_MonoRuntimeArtifacts.Destination)"
10571045
Condition="'$(MonoGenerateOffsetsOSGroups)' == ''"

src/mono/mono/mini/CMakeLists.txt

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ if(HAVE_SYS_ICU)
8282
if(ICU_LIBDIR)
8383
set(ICU_LDFLAGS "-L${ICU_LIBDIR}")
8484
endif()
85+
86+
add_library(icu_shim_objects OBJECT "${icu_shim_sources}")
87+
set(HAVE_ICU_SHIM 1)
8588
endif()
8689

8790
#
@@ -350,7 +353,7 @@ if(HOST_WIN32)
350353
set_source_files_properties(${ZLIB_SOURCES} PROPERTIES COMPILE_OPTIONS "/wd4005;/wd4127;/wd4131;/wd4244")
351354
endif()
352355

353-
set(monosgen-sources "${icu_shim_sources};${mini_sources};${ZLIB_SOURCES}")
356+
set(monosgen-sources "${mini_sources};${ZLIB_SOURCES}")
354357

355358
add_library(monosgen-objects OBJECT "${monosgen-sources}")
356359
target_link_libraries (monosgen-objects PRIVATE monoapi eglib_api utils_objects sgen_objects metadata_objects)
@@ -379,6 +382,9 @@ if(NOT DISABLE_SHARED_LIBS)
379382
endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X)
380383
set_target_properties(monosgen-shared PROPERTIES OUTPUT_NAME ${MONO_SHARED_LIB_NAME})
381384
target_link_libraries(monosgen-shared PRIVATE monoapi eglib_objects utils_objects sgen_objects metadata_objects)
385+
if(HAVE_ICU_SHIM)
386+
target_link_libraries(monosgen-shared PRIVATE icu_shim_objects)
387+
endif()
382388
target_include_directories (monosgen-shared PRIVATE monoapi)
383389
if(TARGET_WIN32)
384390
# on Windows the import library for the shared mono library will have the same name as the static library,
@@ -436,6 +442,9 @@ if(NOT DISABLE_SHARED_LIBS)
436442
add_library(${frameworkconfig} SHARED $<TARGET_OBJECTS:monosgen-objects>)
437443
target_compile_definitions(${frameworkconfig} PRIVATE -DMONO_DLL_EXPORT)
438444
target_link_libraries(${frameworkconfig} PRIVATE monoapi eglib_objects utils_objects sgen_objects metadata_objects)
445+
if(HAVE_ICU_SHIM)
446+
target_link_libraries(${frameworkconfig} PRIVATE icu_shim_objects)
447+
endif()
439448
target_link_libraries(${frameworkconfig} PRIVATE ${OS_LIBS} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS})
440449

441450
if(ICU_LDFLAGS)
@@ -538,7 +547,11 @@ if(NOT DISABLE_EXECUTABLES)
538547
if(MONO_CROSS_COMPILE_EXECUTABLE_NAME)
539548
set_target_properties(mono-sgen PROPERTIES OUTPUT_NAME mono-aot-cross)
540549
endif()
541-
target_link_libraries(mono-sgen PRIVATE monoapi eglib_api monosgen-static ${OS_LIBS} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS})
550+
target_link_libraries(mono-sgen PRIVATE monoapi eglib_api monosgen-static)
551+
if(HAVE_ICU_SHIM)
552+
target_link_libraries(mono-sgen PRIVATE icu_shim_objects)
553+
endif()
554+
target_link_libraries(mono-sgen PRIVATE ${OS_LIBS} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS})
542555
# Alpine Linux implements ucontext in a different library
543556
if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X)
544557
target_link_libraries(mono-sgen PRIVATE ucontext)

src/mono/wasi/runtime/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ target_link_libraries(dotnet
2929
${MONO_ARTIFACTS_DIR}/libmono-icall-table.a
3030
${NATIVE_BIN_DIR}/wasm-bundled-timezones.a
3131
${NATIVE_BIN_DIR}/libSystem.Native.a
32+
${NATIVE_BIN_DIR}/libSystem.Globalization.Native.a
3233
${NATIVE_BIN_DIR}/libSystem.IO.Compression.Native.a
3334
)
3435

src/mono/wasm/runtime/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ target_link_libraries(dotnet
3030
${MONO_ARTIFACTS_DIR}/libmono-profiler-browser.a
3131
${NATIVE_BIN_DIR}/wasm-bundled-timezones.a
3232
${NATIVE_BIN_DIR}/libSystem.Native.a
33+
${NATIVE_BIN_DIR}/libSystem.Globalization.Native.a
3334
${NATIVE_BIN_DIR}/libSystem.IO.Compression.Native.a)
3435

3536
set_target_properties(dotnet PROPERTIES

src/native/libs/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ if (CLR_CMAKE_TARGET_UNIX OR CLR_CMAKE_TARGET_BROWSER OR CLR_CMAKE_TARGET_WASI)
163163
endif ()
164164

165165
add_subdirectory(System.Native)
166+
add_subdirectory(System.Globalization.Native)
166167

167168
if (CLR_CMAKE_TARGET_BROWSER OR CLR_CMAKE_TARGET_WASI)
168169
# skip for now
@@ -183,7 +184,6 @@ if (CLR_CMAKE_TARGET_UNIX OR CLR_CMAKE_TARGET_BROWSER OR CLR_CMAKE_TARGET_WASI)
183184
elseif (FORCE_ANDROID_OPENSSL)
184185
add_subdirectory(System.Security.Cryptography.Native)
185186
else ()
186-
add_subdirectory(System.Globalization.Native)
187187
add_subdirectory(System.Net.Security.Native)
188188
add_subdirectory(System.Security.Cryptography.Native)
189189
endif ()

0 commit comments

Comments
 (0)