Skip to content

Commit

Permalink
Fixes for arm64-uefi and x86-windows (#131)
Browse files Browse the repository at this point in the history
  • Loading branch information
MichalStrehovsky committed Nov 21, 2023
1 parent 57749b2 commit 497aa97
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 19 deletions.
18 changes: 17 additions & 1 deletion src/bflat/BuildCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -345,6 +345,8 @@ public override int Handle(ParseResult result)
}

string libc = result.GetValueForOption(TargetLibcOption);
if (targetOS == TargetOS.Windows && targetArchitecture == TargetArchitecture.X86)
libc ??= "none"; // don't have shcrt for Windows x86 because that one's hacked up

string homePath = CommonOptions.HomePath;
string libPath = Environment.GetEnvironmentVariable("BFLAT_LIB");
Expand Down Expand Up @@ -834,10 +836,19 @@ public override int Handle(ParseResult result)
else
{
ldArgs.Append("/merge:.modules=.rdata ");
ldArgs.Append("/merge:.managedcode=.text ");

if (stdlib == StandardLibType.Zero)
{
if (targetArchitecture == TargetArchitecture.ARM64)
ldArgs.Append("zerolibnative.obj ");
}
}
if (targetOS == TargetOS.Windows)
{
ldArgs.Append("sokol.lib advapi32.lib bcrypt.lib crypt32.lib iphlpapi.lib kernel32.lib mswsock.lib ncrypt.lib normaliz.lib ntdll.lib ole32.lib oleaut32.lib user32.lib version.lib ws2_32.lib shell32.lib Secur32.Lib ");
if (targetArchitecture != TargetArchitecture.X86)
ldArgs.Append("sokol.lib ");
ldArgs.Append("advapi32.lib bcrypt.lib crypt32.lib iphlpapi.lib kernel32.lib mswsock.lib ncrypt.lib normaliz.lib ntdll.lib ole32.lib oleaut32.lib user32.lib version.lib ws2_32.lib shell32.lib Secur32.Lib ");

if (libc != "none")
{
Expand Down Expand Up @@ -941,6 +952,11 @@ public override int Handle(ParseResult result)
if (libc != "bionic")
ldArgs.Append("-lSystem.Globalization.Native -lSystem.Net.Security.Native ");
}
else if (stdlib == StandardLibType.Zero)
{
if (targetArchitecture == TargetArchitecture.ARM64)
ldArgs.Append($"\"{firstLib}/libzerolibnative.o\" ");
}
}


Expand Down
41 changes: 26 additions & 15 deletions src/bflat/bflat.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@
</PropertyGroup>

<PropertyGroup>
<RuntimeVersion>8.0.0-rtm.23551.1</RuntimeVersion>
<RuntimeVersion>8.0.0-rtm.23570.1</RuntimeVersion>
<RuntimeUri>https://github.com/bflattened/runtime/releases/download/</RuntimeUri>

<BlobsVersion>1.3</BlobsVersion>
<BlobsUri>https://github.com/bflattened/blobs/releases/download/</BlobsUri>

<MicrosoftCodeAnalysisCSharpVersion>4.8.0-2.final</MicrosoftCodeAnalysisCSharpVersion>
<MicrosoftCodeAnalysisCSharpVersion>4.8.0-3.final</MicrosoftCodeAnalysisCSharpVersion>
</PropertyGroup>

<ItemGroup>
Expand Down Expand Up @@ -86,8 +86,11 @@
</ItemGroup>

<ItemGroup>
<Blob Include="compiler-$(CompilerHost)" />
<Blob Include="@(SupportedTarget->'libs-%(Identity)')" />
<CompilerBlob Include="compiler-$(CompilerHost)" />
<SdkBlob Include="@(SupportedTarget->'libs-%(Identity)')" />
<SdkBlob Include="libs-windows-x86" />

<Blob Include="@(CompilerBlob);@(SdkBlob)" />
</ItemGroup>

<Target Name="CreateCompilerLayout"
Expand Down Expand Up @@ -158,18 +161,22 @@
<Unzip SourceFiles="$(DownloadCachePath)bflat-libs-%(SupportedTarget.Identity)-$(RuntimeVersion).zip"
DestinationFolder="$(OutputPath)lib\%(SupportedTarget.LibPath)" />

<Copy SourceFiles="$(OutputPath)lib\%(SupportedTarget.LibPath)\zerolibnative.obj"
DestinationFolder="$(OutputPath)lib\uefi\arm64\"
Condition="'%(SupportedTarget.Identity)' == 'windows-arm64'" />

<Touch Files="$(IntermediateOutputPath)\bflat-libs-%(SupportedTarget.Identity)-$(RuntimeVersion).semaphore"
AlwaysCreate="true" />
</Target>

<Target Name="ExtractSdkBlobs"
Inputs="@(SupportedTarget->'$(DownloadCachePath)libs-%(Identity)-$(BlobsVersion).zip')"
Outputs="@(SupportedTarget->'$(IntermediateOutputPath)\libs-%(Identity)-$(BlobsVersion).semaphore')">
Inputs="@(SdkBlob->'$(DownloadCachePath)%(Identity)-$(BlobsVersion).zip')"
Outputs="@(SdkBlob->'$(IntermediateOutputPath)\%(Identity)-$(BlobsVersion).semaphore')">

<Unzip SourceFiles="$(DownloadCachePath)libs-%(SupportedTarget.Identity)-$(BlobsVersion).zip"
<Unzip SourceFiles="$(DownloadCachePath)%(SdkBlob.Identity)-$(BlobsVersion).zip"
DestinationFolder="$(OutputPath)" />

<Touch Files="$(IntermediateOutputPath)\libs-%(SupportedTarget.Identity)-$(BlobsVersion).semaphore"
<Touch Files="$(IntermediateOutputPath)\%(SdkBlob.Identity)-$(BlobsVersion).semaphore"
AlwaysCreate="true" />
</Target>

Expand Down Expand Up @@ -217,22 +224,26 @@

<MakeDir Directories="$(LayoutsDirectory)%(SupportedHost.Identity)\lib\uefi\x64"
Condition="!Exists('$(LayoutsDirectory)%(SupportedHost.Identity)\lib\uefi\x64')" />
<MakeDir Directories="$(LayoutsDirectory)%(SupportedHost.Identity)\lib\uefi\arm64"
Condition="!Exists('$(LayoutsDirectory)%(SupportedHost.Identity)\lib\uefi\arm64')" />
<MakeDir Directories="$(LayoutsDirectory)%(SupportedHost.Identity)\lib\windows\x86"
Condition="!Exists('$(LayoutsDirectory)%(SupportedHost.Identity)\lib\windows\x86')" />

<Exec Command="&quot;$(RunCommand)&quot; build-il --stdlib:none -d LINUX -d X64 -o:&quot;$(LayoutsDirectory)%(SupportedHost.Identity)\lib\linux\x64\zerolib.dll&quot;"
<Exec Command="&quot;$(RunCommand)&quot; build-il --deterministic --stdlib:none -d LINUX -d X64 -o:&quot;$(LayoutsDirectory)%(SupportedHost.Identity)\lib\linux\x64\zerolib.dll&quot;"
WorkingDirectory="$(MSBuildThisFileDirectory)..\zerolib" />
<Exec Command="&quot;$(RunCommand)&quot; build-il --deterministic --stdlib:none -d LINUX -d ARM64 -o:&quot;$(LayoutsDirectory)%(SupportedHost.Identity)\lib\linux\arm64\zerolib.dll&quot;"
WorkingDirectory="$(MSBuildThisFileDirectory)..\zerolib" />
<Exec Command="&quot;$(RunCommand)&quot; build-il --stdlib:none -d LINUX -d ARM64 -o:&quot;$(LayoutsDirectory)%(SupportedHost.Identity)\lib\linux\arm64\zerolib.dll&quot;"
<Exec Command="&quot;$(RunCommand)&quot; build-il --deterministic --stdlib:none -d WINDOWS -d X64 -o:&quot;$(LayoutsDirectory)%(SupportedHost.Identity)\lib\windows\x64\zerolib.dll&quot;"
WorkingDirectory="$(MSBuildThisFileDirectory)..\zerolib" />
<Exec Command="&quot;$(RunCommand)&quot; build-il --stdlib:none -d WINDOWS -d X64 -o:&quot;$(LayoutsDirectory)%(SupportedHost.Identity)\lib\windows\x64\zerolib.dll&quot;"
<Exec Command="&quot;$(RunCommand)&quot; build-il --deterministic --stdlib:none -d WINDOWS -d ARM64 -o:&quot;$(LayoutsDirectory)%(SupportedHost.Identity)\lib\windows\arm64\zerolib.dll&quot;"
WorkingDirectory="$(MSBuildThisFileDirectory)..\zerolib" />
<Exec Command="&quot;$(RunCommand)&quot; build-il --stdlib:none -d WINDOWS -d ARM64 -o:&quot;$(LayoutsDirectory)%(SupportedHost.Identity)\lib\windows\arm64\zerolib.dll&quot;"
<Exec Command="&quot;$(RunCommand)&quot; build-il --deterministic --stdlib:none -d WINDOWS -d X86 -o:&quot;$(LayoutsDirectory)%(SupportedHost.Identity)\lib\windows\x86\zerolib.dll&quot;"
WorkingDirectory="$(MSBuildThisFileDirectory)..\zerolib" />
<Exec Command="&quot;$(RunCommand)&quot; build-il --stdlib:none -d WINDOWS -d X86 -o:&quot;$(LayoutsDirectory)%(SupportedHost.Identity)\lib\windows\x86\zerolib.dll&quot;"
<Exec Command="&quot;$(RunCommand)&quot; build-il --deterministic --stdlib:none -d UEFI -d X64 -o:&quot;$(LayoutsDirectory)%(SupportedHost.Identity)\lib\uefi\x64\zerolib.dll&quot;"
WorkingDirectory="$(MSBuildThisFileDirectory)..\zerolib" />
<Exec Command="&quot;$(RunCommand)&quot; build-il --stdlib:none -d UEFI -d X64 -o:&quot;$(LayoutsDirectory)%(SupportedHost.Identity)\lib\uefi\zerolib.dll&quot;"
<Exec Command="&quot;$(RunCommand)&quot; build-il --deterministic --stdlib:none -d UEFI -d ARM64 -o:&quot;$(LayoutsDirectory)%(SupportedHost.Identity)\lib\uefi\arm64\zerolib.dll&quot;"
WorkingDirectory="$(MSBuildThisFileDirectory)..\zerolib" />
<Exec Command="&quot;$(RunCommand)&quot; build-il --stdlib:none -d LINUX -d X64 -o:&quot;$(LayoutsDirectory)%(SupportedHost.Identity)\ref\zerolib.dll&quot;"
<Exec Command="&quot;$(RunCommand)&quot; build-il --deterministic --stdlib:none -d LINUX -d X64 -o:&quot;$(LayoutsDirectory)%(SupportedHost.Identity)\ref\zerolib.dll&quot;"
WorkingDirectory="$(MSBuildThisFileDirectory)..\zerolib" />
</Target>

Expand Down
3 changes: 0 additions & 3 deletions src/zerolib/Internal/Stubs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,6 @@ class ThrowHelpers
// but the class itself being absent is unhandled. Let's add an empty class.
unsafe partial class StartupCodeHelpers
{
// Calling convention is wrong on x86 Windows so ifdeffing out
#if !X86 || !WINDOWS
// A couple symbols the generated code will need we park them in this class
// for no particular reason. These aid in transitioning to/from managed code.
// Since we don't have a GC, the transition is a no-op.
Expand Down Expand Up @@ -158,6 +156,5 @@ public static unsafe void RhpAssignRef(void** dst, void* r)

return result;
}
#endif // !X86 || !WINDOWS
}
}

0 comments on commit 497aa97

Please sign in to comment.