diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 729a67a..c9bac01 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -7,6 +7,9 @@ on:
- public-main
pull_request:
+permissions:
+ contents: read
+
jobs:
build-linux:
name: Build Linux core
@@ -61,6 +64,62 @@ jobs:
dotnet build Fiberish.X86/Fiberish.X86.csproj -c Debug -r win-x64
shell: pwsh
+ publish-windows:
+ name: Publish Windows PodishCli NativeAOT
+ runs-on: windows-latest
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: 10.0.x
+
+ - name: Setup Rust
+ uses: dtolnay/rust-toolchain@stable
+
+ - name: Publish Windows PodishCli NativeAOT
+ run: dotnet publish Podish.Cli/Podish.Cli.csproj -c Release -r win-x64 -p:PublishAot=true -m:1
+ shell: pwsh
+
+ - name: Upload Windows publish artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: podishcli-win-x64-nativeaot-publish
+ path: Podish.Cli/bin/Release/net10.0/win-x64/publish/**
+
+ publish-linux:
+ name: Publish Linux PodishCli NativeAOT
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: 10.0.x
+
+ - name: Setup Rust
+ uses: dtolnay/rust-toolchain@stable
+
+ - name: Install native build dependencies
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y clang cmake ninja-build libc++-dev libc++abi-dev
+
+ - name: Publish Linux PodishCli NativeAOT
+ run: dotnet publish Podish.Cli/Podish.Cli.csproj -c Release -r linux-x64 -p:PublishAot=true -m:1
+
+ - name: Upload Linux publish artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: podishcli-linux-x64-nativeaot-publish
+ path: Podish.Cli/bin/Release/net10.0/linux-x64/publish/**
+
build-macos:
name: Build macOS full solution
runs-on: macos-latest
@@ -135,3 +194,32 @@ jobs:
- name: Build full solution
run: dotnet build Podish.slnx -c Debug -p:EmscriptenToolchainFile="$EMSCRIPTEN_TOOLCHAIN_FILE" -p:BrowserWasmNodeExecutable="$BROWSER_WASM_NODE_EXECUTABLE"
+
+ publish-macos:
+ name: Publish macOS PodishCli NativeAOT
+ runs-on: macos-latest
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: 10.0.x
+
+ - name: Setup Rust
+ uses: dtolnay/rust-toolchain@stable
+
+ - name: Install native build dependencies
+ run: |
+ brew install cmake ninja
+
+ - name: Publish macOS PodishCli NativeAOT
+ run: dotnet publish Podish.Cli/Podish.Cli.csproj -c Release -r osx-arm64 -p:PublishAot=true -m:1
+
+ - name: Upload macOS publish artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: podishcli-osx-arm64-nativeaot-publish
+ path: Podish.Cli/bin/Release/net10.0/osx-arm64/publish/**
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index d9b9ea1..0098c63 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -19,9 +19,9 @@ concurrency:
cancel-in-progress: false
jobs:
- build-macos:
- name: Build macOS PodishCli NativeAOT
- runs-on: macos-latest
+ publish-linux:
+ name: Publish Linux PodishCli NativeAOT
+ runs-on: ubuntu-latest
steps:
- name: Checkout
@@ -40,42 +40,52 @@ jobs:
- name: Install native build dependencies
run: |
- brew install cmake ninja
+ sudo apt-get update
+ sudo apt-get install -y clang cmake ninja-build libc++-dev libc++abi-dev
- - name: Publish PodishCli NativeAOT
- run: dotnet publish Podish.Cli/Podish.Cli.csproj -c Release -r osx-arm64 -p:PublishAot=true -m:1
+ - name: Publish Linux PodishCli NativeAOT
+ run: dotnet publish Podish.Cli/Podish.Cli.csproj -c Release -r linux-x64 -p:PublishAot=true -m:1
- - name: Package release artifacts
- shell: bash
- env:
- RELEASE_TAG: ${{ github.event_name == 'workflow_dispatch' && inputs.tag || github.ref_name }}
- run: |
- set -euo pipefail
- tag="${RELEASE_TAG}"
- version="${tag#v}"
- publish_dir="Podish.Cli/bin/Release/net10.0/osx-arm64/publish"
- staging_dir="$RUNNER_TEMP/PodishCli-$version-osx-arm64"
- archive_name="PodishCli-$version-osx-arm64-nativeaot.tar.gz"
- checksum_name="${archive_name}.sha256"
+ - name: Upload Linux publish artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: podishcli-linux-x64-nativeaot-publish
+ path: Podish.Cli/bin/Release/net10.0/linux-x64/publish/**
- rm -rf "$staging_dir"
- mkdir -p "$staging_dir"
- cp "$publish_dir/Podish.Cli" "$staging_dir/"
- chmod +x "$staging_dir/Podish.Cli"
+ publish-macos:
+ name: Publish macOS PodishCli NativeAOT
+ runs-on: macos-latest
- tar -C "$RUNNER_TEMP" -czf "$archive_name" "$(basename "$staging_dir")"
- shasum -a 256 "$archive_name" > "$checksum_name"
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ ref: ${{ github.event_name == 'workflow_dispatch' && inputs.tag || github.ref }}
+
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: 10.0.x
- - name: Upload workflow artifacts
+ - name: Setup Rust
+ uses: dtolnay/rust-toolchain@stable
+
+ - name: Install native build dependencies
+ run: |
+ brew install cmake ninja
+
+ - name: Publish macOS PodishCli NativeAOT
+ run: dotnet publish Podish.Cli/Podish.Cli.csproj -c Release -r osx-arm64 -p:PublishAot=true -m:1
+
+ - name: Upload macOS publish artifact
uses: actions/upload-artifact@v4
with:
- name: podishcli-osx-arm64-nativeaot
- path: |
- PodishCli-*-osx-arm64-nativeaot.tar.gz
- PodishCli-*-osx-arm64-nativeaot.tar.gz.sha256
+ name: podishcli-osx-arm64-nativeaot-publish
+ path: Podish.Cli/bin/Release/net10.0/osx-arm64/publish/**
- build-windows:
- name: Build Windows PodishCli NativeAOT
+ publish-windows:
+ name: Publish Windows PodishCli NativeAOT
runs-on: windows-latest
steps:
@@ -93,61 +103,83 @@ jobs:
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
- - name: Publish PodishCli NativeAOT
+ - name: Publish Windows PodishCli NativeAOT
run: dotnet publish Podish.Cli/Podish.Cli.csproj -c Release -r win-x64 -p:PublishAot=true -m:1
shell: pwsh
- - name: Package release artifacts
- shell: pwsh
- env:
- RELEASE_TAG: ${{ github.event_name == 'workflow_dispatch' && inputs.tag || github.ref_name }}
- run: |
- $ErrorActionPreference = "Stop"
- $tag = $env:RELEASE_TAG
- $version = $tag.Substring(1)
- $publishDir = "Podish.Cli/bin/Release/net10.0/win-x64/publish"
- $stagingDir = Join-Path $env:RUNNER_TEMP "PodishCli-$version-win-x64"
- $archiveName = "PodishCli-$version-win-x64-nativeaot.zip"
- $checksumName = "$archiveName.sha256"
-
- if (Test-Path $stagingDir) {
- Remove-Item $stagingDir -Recurse -Force
- }
- New-Item -ItemType Directory -Path $stagingDir | Out-Null
- Copy-Item (Join-Path $publishDir "Podish.Cli.exe") $stagingDir
-
- if (Test-Path $archiveName) {
- Remove-Item $archiveName -Force
- }
- Compress-Archive -Path "$stagingDir/*" -DestinationPath $archiveName -CompressionLevel Optimal
- $hash = (Get-FileHash $archiveName -Algorithm SHA256).Hash.ToLowerInvariant()
- "$hash $archiveName" | Out-File -FilePath $checksumName -Encoding ascii
-
- - name: Upload workflow artifacts
+ - name: Upload Windows publish artifact
uses: actions/upload-artifact@v4
with:
- name: podishcli-win-x64-nativeaot
- path: |
- PodishCli-*-win-x64-nativeaot.zip
- PodishCli-*-win-x64-nativeaot.zip.sha256
+ name: podishcli-win-x64-nativeaot-publish
+ path: Podish.Cli/bin/Release/net10.0/win-x64/publish/**
publish-release:
name: Publish GitHub Release
runs-on: ubuntu-latest
needs:
- - build-macos
- - build-windows
+ - publish-linux
+ - publish-macos
+ - publish-windows
steps:
- - name: Download macOS artifacts
+ - name: Download Linux publish artifact
uses: actions/download-artifact@v4
with:
- name: podishcli-osx-arm64-nativeaot
+ name: podishcli-linux-x64-nativeaot-publish
+ path: publish/linux-x64
- - name: Download Windows artifacts
+ - name: Download macOS publish artifact
uses: actions/download-artifact@v4
with:
- name: podishcli-win-x64-nativeaot
+ name: podishcli-osx-arm64-nativeaot-publish
+ path: publish/osx-arm64
+
+ - name: Download Windows publish artifact
+ uses: actions/download-artifact@v4
+ with:
+ name: podishcli-win-x64-nativeaot-publish
+ path: publish/win-x64
+
+ - name: Package release artifacts
+ shell: bash
+ env:
+ RELEASE_TAG: ${{ github.event_name == 'workflow_dispatch' && inputs.tag || github.ref_name }}
+ run: |
+ set -euo pipefail
+ version="${RELEASE_TAG#v}"
+ rm -rf release-artifacts
+ mkdir -p release-artifacts
+
+ package_tarball() {
+ local rid="$1"
+ local source_dir="publish/$rid"
+ local staging_dir="release-artifacts/podishcli-$version-$rid-nativeaot-publish"
+ local archive="release-artifacts/podishcli-$version-$rid-nativeaot-publish.tar.gz"
+ rm -rf "$staging_dir"
+ mkdir -p "$staging_dir"
+ cp -a "$source_dir"/. "$staging_dir"/
+ if [[ -f "$staging_dir/Podish.Cli" ]]; then
+ chmod +x "$staging_dir/Podish.Cli"
+ fi
+ tar -C release-artifacts -czf "$archive" "$(basename "$staging_dir")"
+ (cd release-artifacts && sha256sum "$(basename "$archive")" > "$(basename "$archive").sha256")
+ }
+
+ package_zip() {
+ local rid="$1"
+ local source_dir="publish/$rid"
+ local staging_dir="release-artifacts/podishcli-$version-$rid-nativeaot-publish"
+ local archive="release-artifacts/podishcli-$version-$rid-nativeaot-publish.zip"
+ rm -rf "$staging_dir" "$archive"
+ mkdir -p "$staging_dir"
+ cp -a "$source_dir"/. "$staging_dir"/
+ python -m zipfile -c "$archive" "$staging_dir"
+ (cd release-artifacts && sha256sum "$(basename "$archive")" > "$(basename "$archive").sha256")
+ }
+
+ package_tarball linux-x64
+ package_tarball osx-arm64
+ package_zip win-x64
- name: Create or update GitHub Release
env:
@@ -161,8 +193,10 @@ jobs:
gh release create "$tag" --title "$tag" --generate-notes
fi
gh release upload "$tag" \
- PodishCli-*-osx-arm64-nativeaot.tar.gz \
- PodishCli-*-osx-arm64-nativeaot.tar.gz.sha256 \
- PodishCli-*-win-x64-nativeaot.zip \
- PodishCli-*-win-x64-nativeaot.zip.sha256 \
+ release-artifacts/podishcli-*-linux-x64-nativeaot-publish.tar.gz \
+ release-artifacts/podishcli-*-linux-x64-nativeaot-publish.tar.gz.sha256 \
+ release-artifacts/podishcli-*-osx-arm64-nativeaot-publish.tar.gz \
+ release-artifacts/podishcli-*-osx-arm64-nativeaot-publish.tar.gz.sha256 \
+ release-artifacts/podishcli-*-win-x64-nativeaot-publish.zip \
+ release-artifacts/podishcli-*-win-x64-nativeaot-publish.zip.sha256 \
--clobber
diff --git a/Podish.Cli/Podish.Cli.csproj b/Podish.Cli/Podish.Cli.csproj
index 5c0c0cd..3b750d4 100644
--- a/Podish.Cli/Podish.Cli.csproj
+++ b/Podish.Cli/Podish.Cli.csproj
@@ -33,8 +33,7 @@
true
false
true
- ..\Fiberish.X86\build_native\host
- ..\Fiberish.X86\build_native\$(RuntimeIdentifier)
+ ..\Fiberish.X86\build_native\$(RuntimeIdentifier)
..\Fiberish.X86\build_native\host
aarch64-apple-darwin
aarch64-apple-ios
@@ -48,6 +47,19 @@
..\Fiberish.Netstack\target\release\$(PodishNetstackLibName)
+
+
+
+
+
@@ -56,8 +68,16 @@
-
+
+
+
+
+
+
+
+
+
diff --git a/libfibercpu/CMakeLists.txt b/libfibercpu/CMakeLists.txt
index d6dc04d..39f3ac8 100644
--- a/libfibercpu/CMakeLists.txt
+++ b/libfibercpu/CMakeLists.txt
@@ -40,6 +40,10 @@ option(FIBERCPU_ENABLE_BLOCK_PROFILE "Enable lightweight per-block execution cou
option(FIBERCPU_ENABLE_HANDLER_PROFILE "Enable approximate per-handler execution profiling" OFF)
option(FIBERCPU_ENABLE_SUPEROPCODES "Enable generated SuperOpcode matching and handlers" ON)
+if(MSVC AND FIBERCPU_BUILD_STATIC)
+ set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>" CACHE STRING "MSVC runtime library" FORCE)
+endif()
+
set(FIBERCPU_GENERATED_SUPEROPCODES_FILE
"${CMAKE_CURRENT_SOURCE_DIR}/src/generated/superopcodes.generated.cpp")