diff options
-rw-r--r-- | Documentation/DotnetCore-Bin.md | 2 | ||||
-rw-r--r-- | Documentation/DotnetCore-Src.md | 120 | ||||
-rw-r--r-- | readme.md | 1 |
3 files changed, 122 insertions, 1 deletions
diff --git a/Documentation/DotnetCore-Bin.md b/Documentation/DotnetCore-Bin.md index d6b95ba..5176851 100644 --- a/Documentation/DotnetCore-Bin.md +++ b/Documentation/DotnetCore-Bin.md @@ -1,4 +1,4 @@ -# DotNet Core +# DotNet Core Binary Builds ## Binary Packages diff --git a/Documentation/DotnetCore-Src.md b/Documentation/DotnetCore-Src.md new file mode 100644 index 0000000..096fb60 --- /dev/null +++ b/Documentation/DotnetCore-Src.md @@ -0,0 +1,120 @@ +# DotNet Core Source Builds + +I've experimented with building .net core from source and put some notes together below for trying to build under gentoo. +Hopefully these might be useful for a future source based ebuild. + +make sure to use llvm/clang 4.0.1 not 5.0.1 which causes issues with the latest stable 2.0 release. +Although I think this has been fixed within master + +## Dotnet core sandbox issues + +One of the issues currently with dotnet core is that applications seem to fail when run from within the sandbox. +This includes dotnet restore or build + + * https://github.com/dotnet/cli/issues/8305 + * https://wiki.gentoo.org/wiki/Knowledge_Base:Overriding_environment_variables_per_package + +To exclude a particular package from the sandbox we can use the following + +First we use this to create a setting called nosandbox +``` +mkdir -p /etc/portage/env +echo 'FEATURES="-sandbox -usersandbox"' >> /etc/portage/env/nosandbox +``` + +Next we apply this to any ebuilds that need it +``` +echo 'dev-dotnet/dotnetcore-runtime nosandbox' >> /etc/portage/package.env +``` + +I should probably mention that as of writing the current source build of dotnetcore-runtime +doesn't use the dotnet restore command so it currently doesn't need this. But future versions may. + + +## CoreSetup + +Coresetup seems to be a set of scripts used to generate the runtime tar.gz +However I don't think these can be used currently to generate the sdk. + +I'm not sure core-setup actually builds source or just partially builds source and partially copies pre-compiled libraries in + +To clone the source +``` +git clone https://github.com/dotnet/core-setup.git +cd core-setup/ +git checkout v2.0.4 +``` + +To trigger the build +``` +./init-tools.sh +./build.sh -ConfigurationGroup=Release -SkipTests +``` + +The place to look for .tar.gz files is + + * Bin/gentoo-x64.Release/packages + * Bin/linux-x64.Release/packages + +From the looks of things the tarball gz is generated by the below target +``` +./Tools/msbuild.sh src/pkg/packaging/dir.proj /p:UsePrebuiltPortableBinariesForInstallers=true /flp:v=diag /p:TargetArchitecture=x64 /p:PortableBuild=false /p:ConfigurationGroup=Release /p:OSGroup=Linux /p:SharedFrameworkPublishDir=/root/test1/core-setup/Bin/obj/linux-x64.Release/sharedFrameworkPublish/ /target:GenerateTarBall +``` + +It's also worth checking out the commands under **buildpipeline/Core-Setup-Linux-BT.json** to see what's being run inside there + + +## Source Build + +Source build seems to be a set of scripts that sits on top of everything else including CoreSetup +But I've not managed to get it to work fully yet. + +``` +git clone https://github.com/dotnet/source-build.git +cd source-build +git checkout dev/release/2.0 +git submodule update --init --recursive +``` + +I've found you may need to edit **tools-local/tasks/Microsoft.DotNet.SourceBuild.Tasks/GetHostInformation.cs** +So that it always returns true and sets the OS to Linux + +To experiment building some stuff +``` +./build.sh /p:RootRepo=coreclr +./build.sh /p:RootRepo=sdk +``` + + +## Building CoreCLR / CoreFX directly + +If you want to try compiling the CoreCLR / CoreFX repo's directly + +In order to build the libraries a version of the dotnet cli / sdk is needed as part of a boostrap process +These typically end up un Tools/ +usually build.sh will call these scripts at the beginning +``` +./init_tools +./sync.sh +``` + +I've found that RuntimeOS needs to be specified for corefx to work right + +coreclr: +``` +./clean.sh -all +./build.sh -release -buildArch=x64 -SkipTests +``` + +corefx: +``` +./clean.sh -all +./build.sh -release -buildArch=x64 -SkipTests -RuntimeOS=rhel.7 +``` + +I've found that for some reason the build defaults to strict mode which treats warnings as errors +If this happens then one way around it is to add the following to the .csproj file +``` +<NoWarn>CS8073</NoWarn> +``` + @@ -35,4 +35,5 @@ Dotnet Core For using dotnet core see - [Dotnet Core Binary packages](Documentation/DotnetCore-Bin.md) + - [Dotnet Core Source Build Notes](Documentation/DotnetCore-Src.md) |