diff --git a/eng/liveBuilds.targets b/eng/liveBuilds.targets
index ba99b07a34017f..5f7dcb8c43b47c 100644
--- a/eng/liveBuilds.targets
+++ b/eng/liveBuilds.targets
@@ -177,6 +177,7 @@
-
-
+
diff --git a/src/coreclr/runtime.proj b/src/coreclr/runtime.proj
index 7f8edcc93a7813..8d5410c4eab667 100644
--- a/src/coreclr/runtime.proj
+++ b/src/coreclr/runtime.proj
@@ -2,12 +2,17 @@
ClrFullNativeBuild;ClrRuntimeSubset;ClrJitSubset;ClrPalTestsSubset;ClrAllJitsSubset;ClrILToolsSubset;ClrNativeAotSubset;ClrSpmiSubset;ClrCrossComponentsSubset;HostArchitecture;PgoInstrument;NativeOptimizationDataSupported;CMakeArgs
+ <_IcuDir Condition="'$(PkgMicrosoft_NETCore_Runtime_ICU_Transport)' != ''">$(PkgMicrosoft_NETCore_Runtime_ICU_Transport)/runtimes/$(TargetOS)-$(TargetArchitecture)$(_RuntimeVariant)/native
+
+
+
+
+
+ <_CoreClrBuildArg Include="-cmakeargs -DCMAKE_ICU_DIR="$(_IcuDir)"" />
+
+
<_CoreClrBuildScript Condition="$([MSBuild]::IsOsPlatform(Windows))">build-runtime.cmd
<_CoreClrBuildScript Condition="!$([MSBuild]::IsOsPlatform(Windows))">build-runtime.sh
diff --git a/src/installer/pkg/sfx/Microsoft.NETCore.App/Directory.Build.props b/src/installer/pkg/sfx/Microsoft.NETCore.App/Directory.Build.props
index b60635b8674af0..bac17f28db4828 100644
--- a/src/installer/pkg/sfx/Microsoft.NETCore.App/Directory.Build.props
+++ b/src/installer/pkg/sfx/Microsoft.NETCore.App/Directory.Build.props
@@ -77,6 +77,7 @@
+
diff --git a/src/libraries/native-binplace.proj b/src/libraries/native-binplace.proj
index 867fadd3c4637e..b6d10ef00c6d98 100644
--- a/src/libraries/native-binplace.proj
+++ b/src/libraries/native-binplace.proj
@@ -24,6 +24,7 @@
+
diff --git a/src/mono/mono.proj b/src/mono/mono.proj
index 310ee34cbda7a8..802958d72163b6 100644
--- a/src/mono/mono.proj
+++ b/src/mono/mono.proj
@@ -916,7 +916,6 @@
<_MonoRuntimeFilePath>$(MonoObjDir)out\lib\$(MonoFileName)
<_MonoRuntimeStaticFilePath Condition="'$(TargetsMacCatalyst)' == 'true' or '$(TargetsiOS)' == 'true' or '$(TargetstvOS)' == 'true' or '$(TargetsAndroid)' == 'true' or '$(TargetsLinuxBionic)' == 'true'">$(MonoObjDir)out\lib\$(MonoStaticLibFileName)
<_MonoIncludeInterpStaticFiles Condition="'$(TargetsBrowser)' == 'true' or '$(TargetsWasi)' == 'true'">true
- <_MonoIncludeIcuFiles Condition="'$(TargetsiOS)' == 'true' or '$(TargetstvOS)' == 'true' or '$(TargetsMacCatalyst)' == 'true'">true
<_MonoAotCrossFilePath>$(MonoObjCrossDir)out\bin\$(MonoAotCrossFileName)
@@ -1039,19 +1038,8 @@
<_MonoICorDebugArtifacts Condition="'$(MonoMsCorDbi)' == 'true'" Include="$(MonoObjDir)out\lib\$(LibPrefix)mscordbi$(LibSuffix)">
$(RuntimeBinDir)$(LibPrefix)mscordbi$(LibSuffix)
-
- <_IcuArtifacts Condition="'$(_MonoIncludeIcuFiles)' == 'true'"
- Include="$(_IcuLibdir)\libicuuc.a;
- $(_IcuLibdir)\libicui18n.a;
- $(_IcuLibdir)\libicudata.a;
- $(_IcuLibdir)\*.dat" />
-
-
)
target_compile_definitions(${frameworkconfig} PRIVATE -DMONO_DLL_EXPORT)
target_link_libraries(${frameworkconfig} PRIVATE monoapi eglib_objects utils_objects sgen_objects metadata_objects)
+ if(HAVE_ICU_SHIM)
+ target_link_libraries(${frameworkconfig} PRIVATE icu_shim_objects)
+ endif()
target_link_libraries(${frameworkconfig} PRIVATE ${OS_LIBS} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS})
if(ICU_LDFLAGS)
@@ -538,7 +547,11 @@ if(NOT DISABLE_EXECUTABLES)
if(MONO_CROSS_COMPILE_EXECUTABLE_NAME)
set_target_properties(mono-sgen PROPERTIES OUTPUT_NAME mono-aot-cross)
endif()
- target_link_libraries(mono-sgen PRIVATE monoapi eglib_api monosgen-static ${OS_LIBS} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS})
+ target_link_libraries(mono-sgen PRIVATE monoapi eglib_api monosgen-static)
+ if(HAVE_ICU_SHIM)
+ target_link_libraries(mono-sgen PRIVATE icu_shim_objects)
+ endif()
+ target_link_libraries(mono-sgen PRIVATE ${OS_LIBS} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS})
# Alpine Linux implements ucontext in a different library
if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X)
target_link_libraries(mono-sgen PRIVATE ucontext)
diff --git a/src/mono/wasi/runtime/CMakeLists.txt b/src/mono/wasi/runtime/CMakeLists.txt
index 8f1bc6679c47c3..2ae7cb2e97986e 100644
--- a/src/mono/wasi/runtime/CMakeLists.txt
+++ b/src/mono/wasi/runtime/CMakeLists.txt
@@ -29,6 +29,7 @@ target_link_libraries(dotnet
${MONO_ARTIFACTS_DIR}/libmono-icall-table.a
${NATIVE_BIN_DIR}/wasm-bundled-timezones.a
${NATIVE_BIN_DIR}/libSystem.Native.a
+ ${NATIVE_BIN_DIR}/libSystem.Globalization.Native.a
${NATIVE_BIN_DIR}/libSystem.IO.Compression.Native.a
)
diff --git a/src/mono/wasm/runtime/CMakeLists.txt b/src/mono/wasm/runtime/CMakeLists.txt
index 4fcf86852c715a..81b17cf63f6acd 100644
--- a/src/mono/wasm/runtime/CMakeLists.txt
+++ b/src/mono/wasm/runtime/CMakeLists.txt
@@ -30,6 +30,7 @@ target_link_libraries(dotnet
${MONO_ARTIFACTS_DIR}/libmono-profiler-browser.a
${NATIVE_BIN_DIR}/wasm-bundled-timezones.a
${NATIVE_BIN_DIR}/libSystem.Native.a
+ ${NATIVE_BIN_DIR}/libSystem.Globalization.Native.a
${NATIVE_BIN_DIR}/libSystem.IO.Compression.Native.a)
set_target_properties(dotnet PROPERTIES
diff --git a/src/native/libs/CMakeLists.txt b/src/native/libs/CMakeLists.txt
index 12ba766e530a32..8a81b64349147c 100644
--- a/src/native/libs/CMakeLists.txt
+++ b/src/native/libs/CMakeLists.txt
@@ -163,6 +163,7 @@ if (CLR_CMAKE_TARGET_UNIX OR CLR_CMAKE_TARGET_BROWSER OR CLR_CMAKE_TARGET_WASI)
endif ()
add_subdirectory(System.Native)
+ add_subdirectory(System.Globalization.Native)
if (CLR_CMAKE_TARGET_BROWSER OR CLR_CMAKE_TARGET_WASI)
# skip for now
@@ -183,7 +184,6 @@ if (CLR_CMAKE_TARGET_UNIX OR CLR_CMAKE_TARGET_BROWSER OR CLR_CMAKE_TARGET_WASI)
elseif (FORCE_ANDROID_OPENSSL)
add_subdirectory(System.Security.Cryptography.Native)
else ()
- add_subdirectory(System.Globalization.Native)
add_subdirectory(System.Net.Security.Native)
add_subdirectory(System.Security.Cryptography.Native)
endif ()
diff --git a/src/native/libs/Common/pal_atomic.h b/src/native/libs/Common/pal_atomic.h
index 8cf75c665dc9e2..90cb312c559adf 100644
--- a/src/native/libs/Common/pal_atomic.h
+++ b/src/native/libs/Common/pal_atomic.h
@@ -4,7 +4,7 @@
#pragma once
-#if defined(TARGET_UNIX)
+#if defined(TARGET_UNIX) || defined(TARGET_WASI)
#include
#elif defined(TARGET_WINDOWS)
#include "windows.h"
@@ -13,7 +13,7 @@
// The args passed in should match InterlockedCompareExchangePointer Windows API
static int pal_atomic_cas_ptr(void* volatile* dest, void* exchange, void* comparand)
{
-#if defined(TARGET_UNIX)
+#if defined(TARGET_UNIX) || defined(TARGET_WASI)
return __atomic_compare_exchange_n(dest, &comparand, exchange, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
#elif defined(TARGET_WINDOWS)
return InterlockedCompareExchangePointer(dest, exchange, comparand) == comparand;
diff --git a/src/native/libs/System.Globalization.Native/CMakeLists.txt b/src/native/libs/System.Globalization.Native/CMakeLists.txt
index 1614fa62b22e60..37191a7123affd 100644
--- a/src/native/libs/System.Globalization.Native/CMakeLists.txt
+++ b/src/native/libs/System.Globalization.Native/CMakeLists.txt
@@ -1,6 +1,6 @@
project(System.Globalization.Native C)
-if(CLR_CMAKE_TARGET_UNIX)
+if(CLR_CMAKE_TARGET_UNIX OR CLR_CMAKE_TARGET_WASI)
add_compile_options(-Wno-switch-enum)
add_compile_options(-Wno-covered-switch-default)
@@ -8,13 +8,14 @@ if(CLR_CMAKE_TARGET_UNIX)
add_compile_options(-Wno-reserved-id-macro)
add_compile_options(-Wno-documentation)
add_compile_options(-Wno-documentation-unknown-command)
+ add_compile_options(-Wno-reserved-identifier)
# Workaround for https://unicode-org.atlassian.net/browse/ICU-20601
add_compile_options(-Wno-extra-semi-stmt)
add_compile_options(-Wno-unknown-warning-option)
- if (NOT CLR_CMAKE_TARGET_ANDROID)
- if (CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST)
+ if (NOT CLR_CMAKE_TARGET_ANDROID AND NOT DEFINED CMAKE_ICU_DIR)
+ if (CLR_CMAKE_TARGET_OSX)
execute_process(COMMAND brew --prefix OUTPUT_VARIABLE brew_prefix OUTPUT_STRIP_TRAILING_WHITESPACE)
set(ICU_HOMEBREW_INC_PATH "${brew_prefix}/opt/icu4c/include")
endif()
@@ -25,7 +26,7 @@ if(CLR_CMAKE_TARGET_UNIX)
return()
endif()
- if(CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST)
+ if(CLR_CMAKE_TARGET_OSX)
add_definitions(-DOSX_ICU_LIBRARY_PATH="/usr/lib/libicucore.dylib")
add_definitions(-DU_DISABLE_RENAMING)
else()
@@ -59,6 +60,17 @@ set(NATIVEGLOBALIZATION_SOURCES
pal_normalization.c
)
+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++)
+endif()
+
+if (CMAKE_USE_PTHREADS)
+ add_compile_options(-pthread)
+ add_linker_flag(-pthread)
+endif()
+
if (LOCAL_BUILD)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(NATIVEGLOBALIZATION_SOURCES ${NATIVEGLOBALIZATION_SOURCES} pal_icushim_static.c)
@@ -69,6 +81,9 @@ if (LOCAL_BUILD)
# For minipal files
include_directories(../../)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
+elseif (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS OR CLR_CMAKE_TARGET_BROWSER OR CLR_CMAKE_TARGET_WASI)
+ add_definitions(-DSTATIC_ICU)
+ set(NATIVEGLOBALIZATION_SOURCES ${NATIVEGLOBALIZATION_SOURCES} pal_icushim_static.c)
else()
set(NATIVEGLOBALIZATION_SOURCES ${NATIVEGLOBALIZATION_SOURCES} pal_icushim.c)
endif()
@@ -82,10 +97,6 @@ if (NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI)
set(NATIVEGLOBALIZATION_SOURCES ${NATIVEGLOBALIZATION_SOURCES} pal_timeZoneInfo.c)
endif()
-if (NOT GEN_SHARED_LIB AND NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI)
- set(NATIVEGLOBALIZATION_SOURCES ${NATIVEGLOBALIZATION_SOURCES} entrypoints.c)
-endif()
-
if (MSVC)
set_source_files_properties(${NATIVEGLOBALIZATION_SOURCES} PROPERTIES LANGUAGE CXX)
endif()
@@ -116,9 +127,10 @@ endif()
add_library(System.Globalization.Native-Static
STATIC
${NATIVEGLOBALIZATION_SOURCES}
+ entrypoints.c
)
-if(CLR_CMAKE_TARGET_UNIX)
+if(CLR_CMAKE_TARGET_UNIX OR CLR_CMAKE_TARGET_WASI)
set_target_properties(System.Globalization.Native-Static PROPERTIES OUTPUT_NAME System.Globalization.Native CLEAN_DIRECT_OUTPUT 1)
endif()
diff --git a/src/native/libs/System.Globalization.Native/config.h.in b/src/native/libs/System.Globalization.Native/config.h.in
index 89399903e8ddac..933a3d0c5c419d 100644
--- a/src/native/libs/System.Globalization.Native/config.h.in
+++ b/src/native/libs/System.Globalization.Native/config.h.in
@@ -1,4 +1,5 @@
#pragma once
#cmakedefine01 HAVE_UDAT_STANDALONE_SHORTER_WEEKDAYS
-#cmakedefine01 HAVE_SET_MAX_VARIABLE
\ No newline at end of file
+#cmakedefine01 HAVE_SET_MAX_VARIABLE
+#cmakedefine01 HAVE_UCOL_CLONE
\ No newline at end of file
diff --git a/src/native/libs/System.Globalization.Native/configure.cmake b/src/native/libs/System.Globalization.Native/configure.cmake
index adf3f49afbd60d..8163745c4c20ae 100644
--- a/src/native/libs/System.Globalization.Native/configure.cmake
+++ b/src/native/libs/System.Globalization.Native/configure.cmake
@@ -1,6 +1,7 @@
-if(CLR_CMAKE_TARGET_ANDROID OR CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST)
+if(CLR_CMAKE_TARGET_ANDROID OR CLR_CMAKE_TARGET_APPLE OR CLR_CMAKE_TARGET_BROWSER OR CLR_CMAKE_TARGET_WASI)
set(HAVE_SET_MAX_VARIABLE 1)
set(HAVE_UDAT_STANDALONE_SHORTER_WEEKDAYS 1)
+ set(HAVE_UCOL_CLONE 0)
else()
include(CheckCSourceCompiles)
include(CheckSymbolExists)
diff --git a/src/native/libs/System.Globalization.Native/pal_calendarData.c b/src/native/libs/System.Globalization.Native/pal_calendarData.c
index bc47e3326aff3a..ba4070252bdcd8 100644
--- a/src/native/libs/System.Globalization.Native/pal_calendarData.c
+++ b/src/native/libs/System.Globalization.Native/pal_calendarData.c
@@ -9,7 +9,7 @@
#include "pal_errors_internal.h"
#include "pal_calendarData.h"
-#if defined(TARGET_UNIX)
+#if defined(TARGET_UNIX) || defined(TARGET_WASI)
#include
#define STRING_COPY(destination, numberOfElements, source) \
diff --git a/src/native/libs/System.Globalization.Native/pal_icushim.c b/src/native/libs/System.Globalization.Native/pal_icushim.c
index a9388786e79460..e8e6382f086036 100644
--- a/src/native/libs/System.Globalization.Native/pal_icushim.c
+++ b/src/native/libs/System.Globalization.Native/pal_icushim.c
@@ -436,6 +436,7 @@ static void InitializeVariableMaxAndTopPointers(char* symbolVersion)
#if defined(TARGET_OSX) || defined(TARGET_ANDROID)
// OSX and Android always run against ICU version which has ucol_setMaxVariable.
// We shouldn't come here.
+ (void)symbolVersion;
assert(false);
#elif defined(TARGET_WINDOWS)
char symbolName[SYMBOL_NAME_SIZE];
diff --git a/src/native/libs/System.Globalization.Native/pal_icushim_internal.h b/src/native/libs/System.Globalization.Native/pal_icushim_internal.h
index 77f7a82350e263..9c981541277e61 100644
--- a/src/native/libs/System.Globalization.Native/pal_icushim_internal.h
+++ b/src/native/libs/System.Globalization.Native/pal_icushim_internal.h
@@ -7,7 +7,7 @@
#pragma once
-#if defined(TARGET_UNIX)
+#if defined(TARGET_UNIX) || defined(TARGET_WASI)
#include "config.h"
diff --git a/src/native/libs/System.Globalization.Native/pal_icushim_static.c b/src/native/libs/System.Globalization.Native/pal_icushim_static.c
index 34d49a0be32330..6d2f5ce9bdeb92 100644
--- a/src/native/libs/System.Globalization.Native/pal_icushim_static.c
+++ b/src/native/libs/System.Globalization.Native/pal_icushim_static.c
@@ -38,12 +38,14 @@ static void log_icu_error(const char* name, UErrorCode status)
log_shim_error("ICU call %s failed with error #%d '%s'.", name, status, statusText);
}
+#if defined(ICU_TRACING)
static void U_CALLCONV icu_trace_data(const void* context, int32_t fnNumber, int32_t level, const char* fmt, va_list args)
{
char buf[1000];
utrace_vformat(buf, sizeof(buf), 0, fmt, args);
printf("[ICUDT] %s: %s\n", utrace_functionName(fnNumber), buf);
}
+#endif
static int32_t load_icu_data(const void* pData);
@@ -127,7 +129,7 @@ cstdlib_load_icu_data(const char *path)
goto error;
}
- file_buf = malloc(sizeof(char) * (file_buf_size + 1));
+ file_buf = malloc(sizeof(char) * (unsigned long)(file_buf_size + 1));
if (file_buf == NULL)
{
@@ -141,7 +143,7 @@ cstdlib_load_icu_data(const char *path)
goto error;
}
- fread(file_buf, sizeof(char), file_buf_size, fp);
+ fread(file_buf, sizeof(char), (unsigned long)file_buf_size, fp);
if (ferror( fp ) != 0)
{
log_shim_error("Unable to read ICU dat file");
diff --git a/src/native/libs/build-native.cmd b/src/native/libs/build-native.cmd
index af8a4178675f5b..9f81985c0ea0a7 100644
--- a/src/native/libs/build-native.cmd
+++ b/src/native/libs/build-native.cmd
@@ -18,6 +18,8 @@ set __BuildTarget="build"
set __TargetOS=windows
set CMAKE_BUILD_TYPE=Debug
set __Ninja=1
+set __icuDir=""
+set __usePThreads=0
:Arg_Loop
:: Since the native build requires some configuration information before msbuild is called, we have to do some manual args parsing
@@ -42,6 +44,9 @@ if /i [%1] == [rebuild] ( set __BuildTarget=rebuild&&shift&goto Arg_Loop)
if /i [%1] == [msbuild] ( set __Ninja=0&&shift&goto Arg_Loop)
+if /i [%1] == [icudir] ( set __icuDir=%2&&shift&&shift&goto Arg_Loop)
+if /i [%1] == [usepthreads] ( set __usePThreads=1&&shift&goto Arg_Loop)
+
shift
goto :Arg_Loop
@@ -60,6 +65,12 @@ set __cmakeRepoRoot=%__repoRoot:\=/%
set __ExtraCmakeParams="-DCMAKE_REPO_ROOT=%__cmakeRepoRoot%"
set __ExtraCmakeParams=%__ExtraCmakeParams% "-DCMAKE_BUILD_TYPE=%CMAKE_BUILD_TYPE%"
+if NOT %__icuDir% == "" (
+ set __ExtraCmakeParams=%__ExtraCmakeParams% "-DCMAKE_ICU_DIR=%__icuDir%"
+)
+set __ExtraCmakeParams=%__ExtraCmakeParams% "-DCMAKE_USE_PTHREADS=%__usePThreads%"
+
+
if [%__outConfig%] == [] set __outConfig=%__TargetOS%-%__BuildArch%-%CMAKE_BUILD_TYPE%
if %__CMakeBinDir% == "" (
diff --git a/src/native/libs/build-native.proj b/src/native/libs/build-native.proj
index c909e3041ce60c..92fa2ee3c5846b 100644
--- a/src/native/libs/build-native.proj
+++ b/src/native/libs/build-native.proj
@@ -9,12 +9,26 @@
<_BuildNativeOutConfig>$(NetCoreAppCurrent)-$(TargetOS)-$(Configuration)-$(TargetArchitecture)
<_BuildNativeArgs>$(TargetArchitecture) $(Configuration) outconfig $(_BuildNativeOutConfig) -os $(_BuildNativeTargetOS)
<_BuildNativeArgs Condition="'$(OfficialBuildId)' != ''">$(_BuildNativeArgs) /p:OfficialBuildId="$(OfficialBuildId)"
+
+ <_RuntimeVariant />
+ <_RuntimeVariant Condition="'$(MonoWasmBuildVariant)' == 'multithread' or '$(MonoWasmBuildVariant)' == 'perftrace'">-threads
+ <_UsePThreads />
+ <_UsePThreads Condition="'$(MonoWasmBuildVariant)' == 'multithread' or '$(MonoWasmBuildVariant)' == 'perftrace'"> usepthreads
+
+ <_IcuDir Condition="'$(PkgMicrosoft_NETCore_Runtime_ICU_Transport)' != ''">$(PkgMicrosoft_NETCore_Runtime_ICU_Transport)/runtimes/$(TargetOS)-$(TargetArchitecture)$(_RuntimeVariant)/native
+ <_IcuDirArg Condition="'$(_IcuDir)' != ''"> icudir "$(_IcuDir)"
+
+ <_BuildNativeArgs>$(_BuildNativeArgs)$(_IcuDirArg)$(_UsePThreads)
+
+
+
+
$(_BuildNativeArgs)$(_ProcessorCountArg)$(_PortableBuildArg)$(_CrossBuildArg)$(_BuildNativeCompilerArg)$(_KeepNativeSymbolsBuildArg)$(_CMakeArgs) $(Compiler)
+
+ <_IcuArtifacts Condition="'$(_IcuDir)' != ''"
+ Include="$(_IcuDir)/lib/libicuuc.a;
+ $(_IcuDir)/lib/libicui18n.a;
+ $(_IcuDir)/lib/libicudata.a;
+ $(_IcuDir)/lib/*.dat" />
+
+
+
diff --git a/src/native/libs/build-native.sh b/src/native/libs/build-native.sh
index 934070b69357cf..36722763f69bc2 100755
--- a/src/native/libs/build-native.sh
+++ b/src/native/libs/build-native.sh
@@ -16,6 +16,15 @@ handle_arguments() {
__ShiftArgs=1
;;
+ icudir|-icudir)
+ __icuDir="$2"
+ __ShiftArgs=1
+ ;;
+
+ usepthreads|-usepthreads)
+ __usePThreads=1
+ ;;
+
staticliblink|-staticliblink)
__StaticLibLink=1
;;
@@ -38,6 +47,8 @@ __SkipConfigure=0
__StaticLibLink=0
__UnprocessedBuildArgs=
__VerboseBuild=false
+__icuDir=""
+__usePThreads=0
source "$__RepoRootDir"/eng/native/build-commons.sh
@@ -65,7 +76,7 @@ elif [[ "$__TargetOS" == wasi ]]; then
export WASI_SDK_PATH="${WASI_SDK_PATH%/}/"
export CLR_CC="$WASI_SDK_PATH"bin/clang
export TARGET_BUILD_ARCH=wasm
- __CMakeArgs="-DCLR_CMAKE_TARGET_OS=wasi -DCLR_CMAKE_TARGET_ARCH=wasm -DWASI_SDK_PREFIX=$WASI_SDK_PATH -DCMAKE_TOOLCHAIN_FILE=$WASI_SDK_PATH/share/cmake/wasi-sdk.cmake"
+ __CMakeArgs="-DCLR_CMAKE_TARGET_OS=wasi -DCLR_CMAKE_TARGET_ARCH=wasm -DWASI_SDK_PREFIX=$WASI_SDK_PATH -DCMAKE_TOOLCHAIN_FILE=$WASI_SDK_PATH/share/cmake/wasi-sdk.cmake $__CMakeArgs"
elif [[ "$__TargetOS" == ios || "$__TargetOS" == iossimulator ]]; then
# nothing to do here
true
@@ -141,6 +152,11 @@ elif [[ "$__TargetOS" == tvos ]]; then
fi
fi
+if [[ -n "$__icuDir" ]]; then
+ __CMakeArgs="-DCMAKE_ICU_DIR=\"$__icuDir\" $__CMakeArgs"
+fi
+__CMakeArgs="-DCMAKE_USE_PTHREADS=$__usePThreads $__CMakeArgs"
+
# Set the remaining variables based upon the determined build configuration
__outConfig="${__outConfig:-"$__TargetOS-$__TargetArch-$__BuildType"}"
__IntermediatesDir="$__RootBinDir/obj/native/$__outConfig"