From 7f026fb318c1fe6d5554b716e749cf8114144707 Mon Sep 17 00:00:00 2001 From: Matous Kozak Date: Thu, 7 Mar 2024 17:17:21 +0100 Subject: [PATCH 1/5] do not export ICU symbols --- src/native/libs/System.Globalization.Native/CMakeLists.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/native/libs/System.Globalization.Native/CMakeLists.txt b/src/native/libs/System.Globalization.Native/CMakeLists.txt index 0545ace30f4dd7..1dd884cf157bc2 100644 --- a/src/native/libs/System.Globalization.Native/CMakeLists.txt +++ b/src/native/libs/System.Globalization.Native/CMakeLists.txt @@ -68,6 +68,13 @@ if (DEFINED CMAKE_ICU_DIR) include_directories(${CMAKE_ICU_DIR}/include) link_libraries(${CMAKE_ICU_DIR}/lib/libicuuc.a ${CMAKE_ICU_DIR}/lib/libicui18n.a ${CMAKE_ICU_DIR}/lib/libicudata.a) link_libraries(stdc++) + + if (CLR_CMAKE_TARGET_IOS) + add_linker_flag(-Wl,-L${CMAKE_ICU_DIR}/lib) + add_linker_flag(-Wl,-hidden-licuuc) + add_linker_flag(-Wl,-hidden-licui18n) + add_linker_flag(-Wl,-hidden-licudata) + endif() endif() if (CMAKE_USE_PTHREADS) From 7ffeabed4dc466e3fdf543fa0502c2d542ff55be Mon Sep 17 00:00:00 2001 From: Matous Kozak Date: Fri, 8 Mar 2024 14:14:44 +0100 Subject: [PATCH 2/5] do not export ICU symbols from libmonosgen-2.0 --- src/mono/mono/mini/CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/mono/mono/mini/CMakeLists.txt b/src/mono/mono/mini/CMakeLists.txt index 5d6ef3dfa3c31e..07868b246fdfa1 100644 --- a/src/mono/mono/mini/CMakeLists.txt +++ b/src/mono/mono/mini/CMakeLists.txt @@ -421,7 +421,13 @@ if(NOT DISABLE_SHARED_LIBS) # to avoid a conflict we rename the import library with the .import.lib suffix set_target_properties(monosgen-shared PROPERTIES IMPORT_SUFFIX ".import.lib") endif() - target_link_libraries(monosgen-shared PRIVATE ${OS_LIBS} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS}) + target_link_libraries(monosgen-shared PRIVATE ${OS_LIBS} ${LLVM_LIBS} ${Z_LIBS}) + if (CLR_CMAKE_TARGET_IOS) + add_linker_flag(-Wl,-L${ICU_LIBDIR}) + add_linker_flag(-Wl,-hidden-licuuc) + add_linker_flag(-Wl,-hidden-licui18n) + add_linker_flag(-Wl,-hidden-licudata) + endif() if(ICU_LDFLAGS) set_property(TARGET monosgen-shared APPEND_STRING PROPERTY LINK_FLAGS " ${ICU_LDFLAGS}") endif() From 0b865a8f95775cda4d59e9b89c1908f721fc6807 Mon Sep 17 00:00:00 2001 From: Matous Kozak <55735845+matouskozak@users.noreply.github.com> Date: Fri, 8 Mar 2024 17:49:51 +0100 Subject: [PATCH 3/5] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Alexander Köplinger --- src/mono/mono/mini/CMakeLists.txt | 2 +- src/native/libs/System.Globalization.Native/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mono/mono/mini/CMakeLists.txt b/src/mono/mono/mini/CMakeLists.txt index 07868b246fdfa1..bb2b47bdbeaf3b 100644 --- a/src/mono/mono/mini/CMakeLists.txt +++ b/src/mono/mono/mini/CMakeLists.txt @@ -422,7 +422,7 @@ if(NOT DISABLE_SHARED_LIBS) set_target_properties(monosgen-shared PROPERTIES IMPORT_SUFFIX ".import.lib") endif() target_link_libraries(monosgen-shared PRIVATE ${OS_LIBS} ${LLVM_LIBS} ${Z_LIBS}) - if (CLR_CMAKE_TARGET_IOS) + if (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS) add_linker_flag(-Wl,-L${ICU_LIBDIR}) add_linker_flag(-Wl,-hidden-licuuc) add_linker_flag(-Wl,-hidden-licui18n) diff --git a/src/native/libs/System.Globalization.Native/CMakeLists.txt b/src/native/libs/System.Globalization.Native/CMakeLists.txt index 1dd884cf157bc2..d838b1695d9ca4 100644 --- a/src/native/libs/System.Globalization.Native/CMakeLists.txt +++ b/src/native/libs/System.Globalization.Native/CMakeLists.txt @@ -69,7 +69,7 @@ if (DEFINED CMAKE_ICU_DIR) link_libraries(${CMAKE_ICU_DIR}/lib/libicuuc.a ${CMAKE_ICU_DIR}/lib/libicui18n.a ${CMAKE_ICU_DIR}/lib/libicudata.a) link_libraries(stdc++) - if (CLR_CMAKE_TARGET_IOS) + if (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS) add_linker_flag(-Wl,-L${CMAKE_ICU_DIR}/lib) add_linker_flag(-Wl,-hidden-licuuc) add_linker_flag(-Wl,-hidden-licui18n) From 4f1fc7ffa902085e044419aa33f22df30d61bf25 Mon Sep 17 00:00:00 2001 From: Matous Kozak Date: Fri, 8 Mar 2024 17:54:58 +0100 Subject: [PATCH 4/5] hidden linking for apple mobile, other left as is --- src/mono/mono/mini/CMakeLists.txt | 4 +++- src/native/libs/System.Globalization.Native/CMakeLists.txt | 7 ++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/mono/mono/mini/CMakeLists.txt b/src/mono/mono/mini/CMakeLists.txt index bb2b47bdbeaf3b..08b90567eb288b 100644 --- a/src/mono/mono/mini/CMakeLists.txt +++ b/src/mono/mono/mini/CMakeLists.txt @@ -421,12 +421,14 @@ if(NOT DISABLE_SHARED_LIBS) # to avoid a conflict we rename the import library with the .import.lib suffix set_target_properties(monosgen-shared PROPERTIES IMPORT_SUFFIX ".import.lib") endif() - target_link_libraries(monosgen-shared PRIVATE ${OS_LIBS} ${LLVM_LIBS} ${Z_LIBS}) if (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS) + target_link_libraries(monosgen-shared PRIVATE ${OS_LIBS} ${LLVM_LIBS} ${Z_LIBS}) add_linker_flag(-Wl,-L${ICU_LIBDIR}) add_linker_flag(-Wl,-hidden-licuuc) add_linker_flag(-Wl,-hidden-licui18n) add_linker_flag(-Wl,-hidden-licudata) + else() + target_link_libraries(monosgen-shared PRIVATE ${OS_LIBS} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS}) endif() if(ICU_LDFLAGS) set_property(TARGET monosgen-shared APPEND_STRING PROPERTY LINK_FLAGS " ${ICU_LDFLAGS}") diff --git a/src/native/libs/System.Globalization.Native/CMakeLists.txt b/src/native/libs/System.Globalization.Native/CMakeLists.txt index d838b1695d9ca4..1fcaf0b6bd583c 100644 --- a/src/native/libs/System.Globalization.Native/CMakeLists.txt +++ b/src/native/libs/System.Globalization.Native/CMakeLists.txt @@ -66,15 +66,16 @@ set(NATIVEGLOBALIZATION_SOURCES if (DEFINED CMAKE_ICU_DIR) include_directories(${CMAKE_ICU_DIR}/include) - link_libraries(${CMAKE_ICU_DIR}/lib/libicuuc.a ${CMAKE_ICU_DIR}/lib/libicui18n.a ${CMAKE_ICU_DIR}/lib/libicudata.a) - link_libraries(stdc++) - if (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS) add_linker_flag(-Wl,-L${CMAKE_ICU_DIR}/lib) add_linker_flag(-Wl,-hidden-licuuc) add_linker_flag(-Wl,-hidden-licui18n) add_linker_flag(-Wl,-hidden-licudata) + else() + link_libraries(${CMAKE_ICU_DIR}/lib/libicuuc.a ${CMAKE_ICU_DIR}/lib/libicui18n.a ${CMAKE_ICU_DIR}/lib/libicudata.a) endif() + + link_libraries(stdc++) endif() if (CMAKE_USE_PTHREADS) From 4d7a49819b7607d676ca2f50f853af61338340a7 Mon Sep 17 00:00:00 2001 From: Matous Kozak Date: Thu, 14 Mar 2024 14:09:56 +0100 Subject: [PATCH 5/5] fix System.Globalization.IOS.Tests --- src/tasks/AppleAppBuilder/Xcode.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/tasks/AppleAppBuilder/Xcode.cs b/src/tasks/AppleAppBuilder/Xcode.cs index 0e05d9168423e0..f253b41a2b188e 100644 --- a/src/tasks/AppleAppBuilder/Xcode.cs +++ b/src/tasks/AppleAppBuilder/Xcode.cs @@ -396,9 +396,14 @@ public string GenerateCMake( } else if (forceAOT || !(preferDylibs && dylibExists)) { - // these libraries are pinvoked - // -force_load will be removed once we enable direct-pinvokes for AOT - toLink += $" \"-force_load {lib}\"{Environment.NewLine}"; + // do not export symbols from ICU libraries + if (libName == "libicui18n" || libName == "libicudata" || libName == "libicuuc") { + toLink += $" \"-load_hidden {lib}\"{Environment.NewLine}"; + } else { + // these libraries are pinvoked + // -force_load will be removed once we enable direct-pinvokes for AOT + toLink += $" \"-force_load {lib}\"{Environment.NewLine}"; + } } }