Add local build for System.Globalization shim (#72896)
* Add local build for System.Globalization shim Bundle the System.Globalization.Native shim sources into the native AOT toolchain package and compile them automatically using C/C++ compiler on the target machine. Compiling of the shim sources using C/C++ compiler is done during dotnet publish as follows: dotnet publish /p:LocalSystemGlobalizationNative=1 -bl -r linux-x64 This change is 'opt-in', it is enabled only by using /p:LocalSystemGlobalizationNative=1 * Incorporate review feedback * Copy shim source code into users Obj directory at IntermediateOutputPath and compile ** $ ls -al obj/Debug/net7.0/linux-x64/shim_source_code/libs/System.Globalization.Native/build/libSystem.Globalization.Native-Static.a * Add shell script for readability * Add copyright headers * Fix IlCompilerPackagePath Add change that was part of previous commit * Address review feedback * Include existing pal_icushim_static.c by using STATIC_ICU define * Use IlcSdkPath to copy shim source code * Incorporate review feedback * Remove USE_ICUSHIM_STATIC_BUILD in pal_icushim.c * Rename shim_source_code to source_code in Microsoft.DotNet.ILCompiler.pkgproj and script * Regular config is used, config-standalone.h is removed * IlcPath/.. is replaced to make the ".." go away * Address feedback from 08/04 * Rename option to ICUStaticLinking * Remove <Message .. * Compile without copying sources * Trim list of defines * Emit error when run on Linux in CMakeLists.txt * Move StaticICULibs to near licucore on Mac * Use only IlcHostPackagePath * Fix DirectPInvoke for library built by user * Feedback on 08/25: rename static-build, "source_code" and cleanup compile defs * Remove IlcHostPackagePath check * StaticICULinking property is true/false * Remove -g and -fPIC from definitions * Use minimal warning level * Remove -DHOST_AMD64 * Remove -O0 * Remove -fms-extensions -fwrapv * Standardize on "local build" * Rename build-nativeaot-shim-standalone.sh to build.sh * Script name in the error message should match the actual script name * Rename source_code to native/src Test code: $ cat Program.cs using System.Globalization; namespace CurrentCulture { class Program { static void Main(string[] args) { double val = 1235.56; Console.WriteLine($"Current culture: {CultureInfo.CurrentCulture.Name}"); Console.WriteLine(val); CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US"); Console.WriteLine($"Current culture: {CultureInfo.CurrentCulture.Name}"); Console.WriteLine(val); } } } $ cat hello-4.csproj <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net7.0</TargetFramework> <RootNamespace>hello_4</RootNamespace> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> $ cat nuget.config <?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <!--To inherit the global NuGet package sources remove the <clear/> line below --> <clear /> <add key="repositoryPath" value="/home/ubuntu/runtime/artifacts/packages/Debug/Shipping" /> <add key="dotnet7" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet7/nuget/v3/index.json" /> </packageSources> </configuration> Test code build: rm ./bin/Debug/net7.0/linux-arm64/native/hello-4 ~/dotnet-sdk/dotnet clean ~/dotnet-sdk/dotnet publish /p:PublishAot=true /p:StaticICULinking=true -bl -r linux-arm64 --self-contained -v d 2>&1 > log ./bin/Debug/net7.0/linux-arm64/native/hello-4 Tested on x86-64 and arm64 * Feedback on 09/02 * Incorporated change to use only src/native/libs/System.Globalization.Native/CMakeLists.txt * Conditionalized CMakeLists.txt for local build * Moved the build.sh into parent as local_build.sh and removed local-build directory. * Rename STATIC_SHIM_COMPILE to LOCAL_BUILD * Move file includes to previous itemgroup Move the includes in Microsoft.DotNet.ILCompiler.pkgproj to <ItemGroup Condition="'$(PackageTargetRuntime)' != ''"> * Move file includes to previous itemgroup Move the includes in Microsoft.DotNet.ILCompiler.pkgproj to <ItemGroup Condition="'$(PackageTargetRuntime)' != ''"> * Update section in compiling.md * Add "Using statically linked ICU" to compiling.md * Remove define check for LOCAL_BUILD in CMakeLists.txt * Update src/coreclr/nativeaot/docs/compiling.md * Update src/coreclr/nativeaot/docs/compiling.md * Update src/coreclr/nativeaot/docs/compiling.md * Update src/coreclr/nativeaot/docs/compiling.md Co-authored-by: NMichal Strehovský <MichalStrehovsky@users.noreply.github.com> * Update src/installer/pkg/projects/Microsoft.DotNet.ILCompiler/Microsoft.DotNet.ILCompiler.pkgproj Co-authored-by: NMichal Strehovský <MichalStrehovsky@users.noreply.github.com> Co-authored-by: NSamiullah Mohammed <ubuntu@ip-172-31-24-113> Co-authored-by: NUbuntu <ubuntu@ip-10-0-0-223.us-west-1.compute.internal> Co-authored-by: NJan Kotas <jkotas@microsoft.com> Co-authored-by: NMichal Strehovský <MichalStrehovsky@users.noreply.github.com>
Showing
想要评论请 注册 或 登录