1 Commits

Author SHA1 Message Date
2ee35c89c1 Native arm64 compilation for Linux 2025-07-03 10:26:16 -05:00
11 changed files with 35 additions and 555 deletions

View File

@ -42,7 +42,7 @@ jobs:
- name: Setup build environment - name: Setup build environment
run: | run: |
sudo apt -y update sudo apt -y update
sudo apt -y install build-essential cmake wget 7zip git flex libfl-dev nasm libslang2-dev pkg-config libslang2-modules gcc-multilib dosbox sudo apt -y install build-essential cmake wget 7zip git flex libfl-dev nasm libslang2-dev pkg-config libslang2-modules gcc-multilib
- name: Download and Setup DJGPP Toolchain - name: Download and Setup DJGPP Toolchain
run: | run: |
@ -59,16 +59,7 @@ jobs:
make -f djgpp.mak make -f djgpp.mak
ln -s ${WATT_ROOT}/lib/libwatt.a ${{ github.workspace }}/djgpp/lib ln -s ${WATT_ROOT}/lib/libwatt.a ${{ github.workspace }}/djgpp/lib
- name: Cache OpenSSL 3.1.2
uses: actions/cache/restore@v4
id: cache-openssl
with:
path: |
${{ github.workspace }}/djgpp
key: openssl-3.1.2-${{ hashFiles('**/CMakeLists.txt') }}
- name: Checkout and Cross Compile OpenSSL 3.1.2 - name: Checkout and Cross Compile OpenSSL 3.1.2
if: steps.cache-openssl.outputs.cache-hit != 'true'
run: | run: |
git clone https://github.com/UMSKT/openssl.git openssl git clone https://github.com/UMSKT/openssl.git openssl
pushd openssl pushd openssl
@ -77,14 +68,6 @@ jobs:
make && make install_sw make && make install_sw
popd popd
- name: Save OpenSSL 3.1.2
if: steps.cache-openssl.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: |
${{ github.workspace }}/djgpp
key: openssl-3.1.2-${{ hashFiles('**/CMakeLists.txt') }}
- name: Build - name: Build
run: | run: |
source ${{ github.workspace }}/djgpp/setenv source ${{ github.workspace }}/djgpp/setenv
@ -92,84 +75,6 @@ jobs:
cmake ../ -D DJGPP_WATT32=${WATT_ROOT}/lib/libwatt.a -D CMAKE_FIND_ROOT_PATH=${CMAKE_FIND_ROOT_PATH} cmake ../ -D DJGPP_WATT32=${WATT_ROOT}/lib/libwatt.a -D CMAKE_FIND_ROOT_PATH=${CMAKE_FIND_ROOT_PATH}
make make
- name: Setup DOSBox test environment
run: |
mkdir -p dosbox_test
cp build/umskt.exe dosbox_test/
# Download DPMI server directly
wget https://github.com/UMSKT/winactiontest/raw/refs/heads/main/CWSDPMI.EXE -O dosbox_test/CWSDPMI.EXE
# Create test batch file
cat > dosbox_test/test.bat << EOL
@echo off
echo Running test 1...
umskt.exe -b 2C -c 365 -s 069420 > TEST1.TXT
if errorlevel 1 goto error
echo Running test 2...
umskt.exe -i 253286028742154311079061239762245184619981623171292574 > TEST2.TXT
if errorlevel 1 goto error
echo Tests completed > DONE.TXT
goto end
:error
echo Test failed > ERROR.TXT
:end
exit
EOL
# Create DOSBox configuration
cat > dosbox_test/dosbox.conf << EOL
[sdl]
nosound=true
[cpu]
core=dynamic
cycles=max
[autoexec]
mount c .
c:
test.bat
exit
EOL
- name: Run tests in DOSBox
run: |
cd dosbox_test
timeout 30s dosbox -conf dosbox.conf -nogui -exit
# Check if the test completed successfully
if [ ! -f DONE.TXT ]; then
echo "Tests did not complete successfully"
if [ -f ERROR.TXT ]; then
echo "Test execution failed"
fi
if [ -f TEST1.TXT ]; then
echo "Test 1 output:"
cat TEST1.TXT
fi
if [ -f TEST2.TXT ]; then
echo "Test 2 output:"
cat TEST2.TXT
fi
exit 1
fi
# Verify test outputs
if [ ! -f TEST1.TXT ] || [ ! -f TEST2.TXT ]; then
echo "Test output files missing"
exit 1
fi
# Check test results - looking for key format patterns
if ! grep -qE '[A-Z0-9]{5}-[A-Z0-9]{5}-[A-Z0-9]{5}-[A-Z0-9]{5}-[A-Z0-9]{5}' TEST1.TXT || \
! grep -qE '[0-9]{6}-[0-9]{6}-[0-9]{6}-[0-9]{6}-[0-9]{6}-[0-9]{6}-[0-9]{6}' TEST2.TXT; then
echo "Tests failed - unexpected output format"
echo "Test 1 output:"
cat TEST1.TXT
echo "Test 2 output:"
cat TEST2.TXT
exit 1
else
echo "All tests passed successfully"
echo "Test 1 output:"
cat TEST1.TXT
echo "Test 2 output:"
cat TEST2.TXT
fi
- name: Move executable to upload directory - name: Move executable to upload directory
run: | run: |
mkdir build/actions_upload mkdir build/actions_upload
@ -178,5 +83,5 @@ jobs:
- name: Upload build artifact - name: Upload build artifact
uses: actions/upload-artifact@v4.6.2 uses: actions/upload-artifact@v4.6.2
with: with:
name: UMSKT-DOS-x86 name: UMSKT-DOS
path: build/actions_upload path: build/actions_upload

View File

@ -51,10 +51,7 @@
cd build cd build
cmake .. cmake ..
make make
echo Test 1 - generating key ./umskt # Execute the test here
./umskt -b 2C -c 365 -s 069420 -v
echo Test 2 - generating confid
./umskt -i 253286028742154311079061239762245184619981623171292574
- name: Move files to correct directory - name: Move files to correct directory
run: | run: |

View File

@ -33,20 +33,16 @@ jobs:
include: include:
- arch: x86 - arch: x86
runner: ubuntu-latest runner: ubuntu-latest
use_alpine: true
- arch: x86_64 - arch: x86_64
runner: ubuntu-latest runner: ubuntu-latest
use_alpine: true
- arch: aarch64 - arch: aarch64
runner: ubuntu-24.04-arm runner: ubuntu-24.04-arm
use_alpine: false runs-on: ${{matrix.runner}}
runs-on: ${{ matrix.runner }}
steps: steps:
- name: Checkout Source Tree - name: Checkout Source Tree
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Setup latest Alpine Linux - name: Setup latest Alpine Linux for ${{ matrix.arch }}
if: ${{ matrix.use_alpine }}
uses: jirutka/setup-alpine@v1 uses: jirutka/setup-alpine@v1
with: with:
packages: > packages: >
@ -61,46 +57,13 @@ jobs:
arch: ${{ matrix.arch }} arch: ${{ matrix.arch }}
shell-name: alpine-target.sh shell-name: alpine-target.sh
- name: Install Dependencies (Ubuntu ARM64) - name: Configure and build UMSKT
if: ${{ !matrix.use_alpine }}
run: |
sudo apt-get update
sudo apt-get install -y build-essential cmake git libssl-dev zlib1g-dev
- name: Configure and build UMSKT (Alpine)
if: ${{ matrix.use_alpine }}
uses: threeal/cmake-action@7ef2eb8da6e5ec0a6de6b1ddc96987080bed06e8 uses: threeal/cmake-action@7ef2eb8da6e5ec0a6de6b1ddc96987080bed06e8
with: with:
options: MUSL_STATIC=ON options: MUSL_STATIC=ON
run-build: true run-build: true
shell: alpine-target.sh {0} shell: alpine-target.sh {0}
- name: Configure and build UMSKT (Ubuntu)
if: ${{ !matrix.use_alpine }}
uses: threeal/cmake-action@7ef2eb8da6e5ec0a6de6b1ddc96987080bed06e8
with:
options: MUSL_STATIC=ON
run-build: true
- name: Test UMSKT (Alpine)
if: ${{ matrix.use_alpine }}
run: |
cd build
echo Test 1 - generating key
./umskt -b 2C -c 365 -s 069420 -v
echo Test 2 - generating confid
./umskt -i 253286028742154311079061239762245184619981623171292574
shell: alpine-target.sh {0}
- name: Test UMSKT (Ubuntu)
if: ${{ !matrix.use_alpine }}
run: |
cd build
echo Test 1 - generating key
./umskt -b 2C -c 365 -s 069420 -v
echo Test 2 - generating confid
./umskt -i 253286028742154311079061239762245184619981623171292574
- name: Move files to correct directory - name: Move files to correct directory
run: | run: |
mkdir -p build/actions_upload mkdir -p build/actions_upload
@ -109,73 +72,19 @@ jobs:
- name: Upload build artifact - name: Upload build artifact
uses: actions/upload-artifact@v4.6.2 uses: actions/upload-artifact@v4.6.2
with: with:
name: UMSKT-Linux-${{ matrix.arch }}-static name: UMSKT-linux-${{ matrix.arch }}-static
path: build/actions_upload path: build/actions_upload
- name: Configure and build static internal deps UMSKT (Alpine) - name: Configure and build static internal deps UMSKT
if: ${{ matrix.use_alpine }}
uses: threeal/cmake-action@7ef2eb8da6e5ec0a6de6b1ddc96987080bed06e8 uses: threeal/cmake-action@7ef2eb8da6e5ec0a6de6b1ddc96987080bed06e8
with: with:
options: MUSL_STATIC=OFF BUILD_SHARED_LIBS=OFF options: MUSL_STATIC=OFF BUILD_SHARED_LIBS=OFF
run-build: true run-build: true
shell: alpine-target.sh {0} shell: alpine-target.sh {0}
- name: Configure and build static internal deps UMSKT (Ubuntu) - name: Configure and build shared deps UMSKT
if: ${{ !matrix.use_alpine }}
uses: threeal/cmake-action@7ef2eb8da6e5ec0a6de6b1ddc96987080bed06e8
with:
options: MUSL_STATIC=OFF BUILD_SHARED_LIBS=OFF
run-build: true
- name: Test static internal deps UMSKT (Alpine)
if: ${{ matrix.use_alpine }}
run: |
cd build
echo Test 1 - generating key
./umskt -b 2C -c 365 -s 069420 -v
echo Test 2 - generating confid
./umskt -i 253286028742154311079061239762245184619981623171292574
shell: alpine-target.sh {0}
- name: Test static internal deps UMSKT (Ubuntu)
if: ${{ !matrix.use_alpine }}
run: |
cd build
echo Test 1 - generating key
./umskt -b 2C -c 365 -s 069420 -v
echo Test 2 - generating confid
./umskt -i 253286028742154311079061239762245184619981623171292574
- name: Configure and build shared deps UMSKT (Alpine)
if: ${{ matrix.use_alpine }}
uses: threeal/cmake-action@7ef2eb8da6e5ec0a6de6b1ddc96987080bed06e8 uses: threeal/cmake-action@7ef2eb8da6e5ec0a6de6b1ddc96987080bed06e8
with: with:
options: MUSL_STATIC=OFF BUILD_SHARED_LIBS=ON options: MUSL_STATIC=OFF BUILD_SHARED_LIBS=ON
run-build: true run-build: true
shell: alpine-target.sh {0} shell: alpine-target.sh {0}
- name: Configure and build shared deps UMSKT (Ubuntu)
if: ${{ !matrix.use_alpine }}
uses: threeal/cmake-action@7ef2eb8da6e5ec0a6de6b1ddc96987080bed06e8
with:
options: MUSL_STATIC=OFF BUILD_SHARED_LIBS=ON
run-build: true
- name: Test shared deps UMSKT (Alpine)
if: ${{ matrix.use_alpine }}
run: |
cd build
echo Test 1 - generating key
./umskt -b 2C -c 365 -s 069420 -v
echo Test 2 - generating confid
./umskt -i 253286028742154311079061239762245184619981623171292574
shell: alpine-target.sh {0}
- name: Test shared deps UMSKT (Ubuntu)
if: ${{ !matrix.use_alpine }}
run: |
cd build
echo Test 1 - generating key
./umskt -b 2C -c 365 -s 069420 -v
echo Test 2 - generating confid
./umskt -i 253286028742154311079061239762245184619981623171292574

View File

@ -27,97 +27,34 @@ on:
workflow_dispatch: workflow_dispatch:
jobs: jobs:
build: build-x86:
runs-on: macos-latest runs-on: macos-latest
strategy: strategy:
matrix: matrix:
include: include:
- arch: x86_64 - arch: x86_64
- arch: arm64
steps: steps:
- name: Checkout Source Tree - name: Checkout Source Tree
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Install Rosetta
if: matrix.arch == 'x86_64'
run: |
sudo softwareupdate --install-rosetta --agree-to-license || true
- name: Install Homebrew for x86_64
if: matrix.arch == 'x86_64'
env: { NONINTERACTIVE: 1 }
run: |
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- name: Install x86_64 OpenSSL
if: matrix.arch == 'x86_64'
run: |
arch -x86_64 /usr/local/bin/brew install openssl@3
echo "OPENSSL_ROOT_DIR=/usr/local/opt/openssl@3" >> $GITHUB_ENV
echo "OPENSSL_INCLUDE_DIR=/usr/local/opt/openssl@3/include" >> $GITHUB_ENV
echo "PKG_CONFIG_PATH=/usr/local/opt/openssl@3/lib/pkgconfig" >> $GITHUB_ENV
- name: Install arm64 OpenSSL
if: matrix.arch == 'arm64'
run: |
brew install openssl@3
echo "OPENSSL_ROOT_DIR=/opt/homebrew/opt/openssl@3" >> $GITHUB_ENV
echo "OPENSSL_INCLUDE_DIR=/opt/homebrew/opt/openssl@3/include" >> $GITHUB_ENV
echo "PKG_CONFIG_PATH=/opt/homebrew/opt/openssl@3/lib/pkgconfig" >> $GITHUB_ENV
- name: Configure and build UMSKT - name: Configure and build UMSKT
run: | run: |
cd build cd build
cmake -DCMAKE_BUILD_TYPE=Release .. \ cmake -DCMAKE_BUILD_TYPE=Release ..
-DCMAKE_OSX_ARCHITECTURES=${{matrix.arch}} \
-DOPENSSL_ROOT_DIR=$OPENSSL_ROOT_DIR \
-DOPENSSL_INCLUDE_DIR=$OPENSSL_INCLUDE_DIR \
-DOPENSSL_USE_STATIC_LIBS=TRUE \
-DBUILD_SHARED_LIBS=OFF
make make
- name: Move files to correct directory - name: Move files to correct directory
run: | run: |
ls -a build
mkdir -p build/actions_upload mkdir -p build/actions_upload
mv build/umskt build/actions_upload/umskt mv build/umskt build/actions_upload/umskt
- name: Run tests - name: Run tests
run: | run: |
cd build/actions_upload cd build/actions_upload
echo Test 1 - generating key ./umskt
./umskt -b 2C -c 365 -s 069420 -v
echo Test 2 - generating confid
./umskt -i 253286028742154311079061239762245184619981623171292574
- name: Upload platform-specific build - name: Upload build artifact
uses: actions/upload-artifact@v4.6.2 uses: actions/upload-artifact@v4.6.2
with: with:
name: UMSKT-macOS-${{ matrix.arch }} name: UMSKT-macOS-${{ matrix.arch }}
path: build/actions_upload path: build/actions_upload
universal:
needs: build
runs-on: macos-latest
steps:
- name: Download x86_64 slice
uses: actions/download-artifact@v4
with:
name: UMSKT-macOS-x86_64
path: x86
- name: Download arm64 slice
uses: actions/download-artifact@v4
with:
name: UMSKT-macOS-arm64
path: arm
- name: Create universal binary
shell: bash
run: |
mkdir fat
lipo -create x86/umskt arm/umskt -output fat/umskt
lipo -info fat/umskt
- name: Upload universal build
uses: actions/upload-artifact@v4
with:
name: UMSKT-macOS-universal
path: fat

View File

@ -27,18 +27,13 @@ on:
workflow_dispatch: workflow_dispatch:
jobs: jobs:
build: build-tdm:
runs-on: windows-latest runs-on: windows-latest
strategy: strategy:
matrix: matrix:
arch: [x64, x86, arm64] arch: [x64, x86]
binary_type: [static, shared]
outputs:
binary_type: ${{ matrix.binary_type }}
arch: ${{ matrix.arch }}
steps: steps:
- name: Setup TDM-GCC - name: Setup TDM-GCC
if: matrix.arch != 'arm64'
run: | run: |
Write-Host Downloading TDM-GCC v10.3.0... Write-Host Downloading TDM-GCC v10.3.0...
Invoke-WebRequest -Uri 'https://github.com/jmeubank/tdm-gcc/releases/download/v10.3.0-tdm64-2/tdm64-gcc-10.3.0-2.exe' -OutFile 'C:\Windows\temp\TDM-GCC-64.exe' Invoke-WebRequest -Uri 'https://github.com/jmeubank/tdm-gcc/releases/download/v10.3.0-tdm64-2/tdm64-gcc-10.3.0-2.exe' -OutFile 'C:\Windows\temp\TDM-GCC-64.exe'
@ -54,17 +49,10 @@ jobs:
$env:PATH = 'C:\TDM-GCC-64\bin;' + $env:PATH $env:PATH = 'C:\TDM-GCC-64\bin;' + $env:PATH
[Environment]::SetEnvironmentVariable('PATH', $env:PATH, [EnvironmentVariableTarget]::Machine) [Environment]::SetEnvironmentVariable('PATH', $env:PATH, [EnvironmentVariableTarget]::Machine)
- name: Setup MSVC for ARM64
if: matrix.arch == 'arm64'
uses: ilammy/msvc-dev-cmd@v1
with:
arch: arm64
- name: Checkout Source Tree - name: Checkout Source Tree
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Download OpenSSL-TDM release asset - name: Download OpenSSL-TDM release asset
if: matrix.arch != 'arm64'
shell: pwsh shell: pwsh
run: | run: |
if ('${{ matrix.arch }}' -eq 'x64') { if ('${{ matrix.arch }}' -eq 'x64') {
@ -86,47 +74,13 @@ jobs:
echo "OPENSSL_LIBDIR=$libdir" | Out-File -FilePath $env:GITHUB_ENV -Append echo "OPENSSL_LIBDIR=$libdir" | Out-File -FilePath $env:GITHUB_ENV -Append
echo "CMAKE_FLAGS=$cmake_flags" | Out-File -FilePath $env:GITHUB_ENV -Append echo "CMAKE_FLAGS=$cmake_flags" | Out-File -FilePath $env:GITHUB_ENV -Append
- name: Setup vcpkg for ARM64
if: matrix.arch == 'arm64'
shell: pwsh
run: |
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
.\bootstrap-vcpkg.bat
echo "VCPKG_ROOT=$env:GITHUB_WORKSPACE/vcpkg" | Out-File -FilePath $env:GITHUB_ENV -Append
echo "VCPKG_DEFAULT_BINARY_CACHE=$env:GITHUB_WORKSPACE/vcpkg/bincache" | Out-File -FilePath $env:GITHUB_ENV -Append
echo "VCPKG_BINARY_SOURCES=clear;default,readwrite" | Out-File -FilePath $env:GITHUB_ENV -Append
- name: Cache vcpkg packages
if: matrix.arch == 'arm64'
uses: actions/cache@v4
with:
path: |
${{ github.workspace }}/vcpkg/bincache
${{ github.workspace }}/vcpkg/installed
${{ github.workspace }}/vcpkg/packages
key: vcpkg-arm64-${{ hashFiles('**/CMakeLists.txt') }}-${{ hashFiles('**/*.cmake') }}
restore-keys: |
vcpkg-arm64-${{ hashFiles('**/CMakeLists.txt') }}-
vcpkg-arm64-
- name: Install OpenSSL for ARM64
if: matrix.arch == 'arm64'
shell: pwsh
run: |
New-Item -ItemType Directory -Force -Path $env:VCPKG_DEFAULT_BINARY_CACHE
& "$env:VCPKG_ROOT\vcpkg.exe" install openssl:arm64-windows-static --clean-after-build
& "$env:VCPKG_ROOT\vcpkg.exe" install fmt:arm64-windows-${{ matrix.binary_type }} --clean-after-build
- name: Configure UMSKT (TDM-GCC ${{ matrix.arch }}) - name: Configure UMSKT (TDM-GCC ${{ matrix.arch }})
if: matrix.arch != 'arm64'
shell: pwsh shell: pwsh
run: | run: |
$env:PATH = 'C:\TDM-GCC-64\bin;' + $env:PATH $env:PATH = 'C:\TDM-GCC-64\bin;' + $env:PATH
$OPENSSL_ROOT = "$env:OPENSSL_ROOT" $OPENSSL_ROOT = "$env:OPENSSL_ROOT"
$OPENSSL_LIB = "$OPENSSL_ROOT/$env:OPENSSL_LIBDIR" $OPENSSL_LIB = "$OPENSSL_ROOT/$env:OPENSSL_LIBDIR"
$OPENSSL_INC = "$OPENSSL_ROOT/include" $OPENSSL_INC = "$OPENSSL_ROOT/include"
$SHARED = if ('${{ matrix.binary_type }}' -eq 'shared') { 'ON' } else { 'OFF' }
cmake -G "MinGW Makefiles" ` cmake -G "MinGW Makefiles" `
-DCMAKE_C_COMPILER="gcc" ` -DCMAKE_C_COMPILER="gcc" `
-DCMAKE_CXX_COMPILER="g++" ` -DCMAKE_CXX_COMPILER="g++" `
@ -136,92 +90,16 @@ jobs:
-DOPENSSL_SSL_LIBRARY="$OPENSSL_LIB/libssl.a" ` -DOPENSSL_SSL_LIBRARY="$OPENSSL_LIB/libssl.a" `
-DCMAKE_C_FLAGS="$env:CMAKE_FLAGS" ` -DCMAKE_C_FLAGS="$env:CMAKE_FLAGS" `
-DCMAKE_CXX_FLAGS="$env:CMAKE_FLAGS" ` -DCMAKE_CXX_FLAGS="$env:CMAKE_FLAGS" `
-DBUILD_SHARED_LIBS="$SHARED" `
.
- name: Configure UMSKT (MSVC ARM64)
if: matrix.arch == 'arm64'
shell: pwsh
run: |
$SHARED = if ('${{ matrix.binary_type }}' -eq 'shared') { 'ON' } else { 'OFF' }
cmake -G "Visual Studio 17 2022" `
-A ARM64 `
-DWINDOWS_ARM=ON `
-DCMAKE_TOOLCHAIN_FILE="$env:VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" `
-DVCPKG_TARGET_TRIPLET=arm64-windows-${{ matrix.binary_type }} `
-DBUILD_SHARED_LIBS="$SHARED" `
. .
- name: Build UMSKT (TDM-GCC ${{ matrix.arch }}) - name: Build UMSKT (TDM-GCC ${{ matrix.arch }})
if: matrix.arch != 'arm64'
shell: pwsh shell: pwsh
run: | run: |
$env:PATH = 'C:\TDM-GCC-64\bin;' + $env:PATH $env:PATH = 'C:\TDM-GCC-64\bin;' + $env:PATH
mingw32-make mingw32-make
- name: Build UMSKT (MSVC ARM64)
if: matrix.arch == 'arm64'
shell: pwsh
run: |
cmake --build . --config Release
- name: Run tests (x86/x64)
if: matrix.arch != 'arm64'
shell: pwsh
run: |
Write-Host Test 1 - generating key
.\umskt.exe -b 2C -c 365 -s 069420 -v
Write-Host Test 2 - generatng confid
.\umskt.exe -i 253286028742154311079061239762245184619981623171292574
- name: Upload build artifact - name: Upload build artifact
uses: actions/upload-artifact@v4.6.2 uses: actions/upload-artifact@v4.6.2
with: with:
name: UMSKT-WinNT-${{ matrix.arch }}-${{ matrix.binary_type }} name: UMSKT-TDM${{ matrix.arch }}
path: | path: umskt.exe
${{ matrix.arch == 'arm64' && 'Release/umskt.exe' || 'umskt.exe' }}
${{ matrix.binary_type == 'shared' && (matrix.arch == 'arm64' && 'Release/*.dll' || '*.dll') || '' }}
test-arm64:
needs: build
if: success() && needs.build.outputs.binary_type == 'static' && needs.build.outputs.arch == 'arm64'
runs-on: windows-11-arm
steps:
- name: Download ARM64 artifact
uses: actions/download-artifact@v4
with:
name: UMSKT-WinNT-arm64-static
path: .
- name: Run tests (ARM64)
shell: pwsh
run: |
Write-Host Test 1 - generating key
.\umskt.exe -b 2C -c 365 -s 069420 -v
Write-Host Test 2 - generatng confid
.\umskt.exe -i 253286028742154311079061239762245184619981623171292574
test-arm64-shared:
needs: build
if: success() && needs.build.outputs.binary_type == 'shared' && needs.build.outputs.arch == 'arm64'
runs-on: windows-11-arm
steps:
- name: Download ARM64 shared artifact
uses: actions/download-artifact@v4
with:
name: UMSKT-WinNT-arm64-shared
path: .
- name: Setup shared library environment
shell: pwsh
run: |
# Add current directory to PATH so Windows can find the DLLs
$env:PATH = "$pwd;" + $env:PATH
- name: Run tests (ARM64 Shared)
shell: pwsh
run: |
Write-Host Test 1 - generating key
.\umskt.exe -b 2C -c 365 -s 069420 -v
Write-Host Test 2 - generatng confid
.\umskt.exe -i 253286028742154311079061239762245184619981623171292574

6
.gitignore vendored
View File

@ -258,8 +258,4 @@ CPM_modules
CPM_*.cmake CPM_*.cmake
cpm-package-lock.cmake cpm-package-lock.cmake
*.a *.a
*_cmrc* *_cmrc*
fmt_install/
fmt_external-prefix/
*.dll
*.o

View File

@ -1,10 +0,0 @@
# Stub so pre-commit can shut up until the refactor
repos:
- repo: local
hooks:
- id: no-op
name: Noop hook (always passes)
entry: "true" # `/usr/bin/true` returns 0 and does nothing
language: system
pass_filenames: false # dont bother passing any file paths

View File

@ -26,32 +26,6 @@ if (WIN32 AND NOT MSVC)
set(CMAKE_C_COMPILER "C:/TDM-GCC-64/bin/gcc.exe" CACHE FILEPATH "C Compiler" FORCE) set(CMAKE_C_COMPILER "C:/TDM-GCC-64/bin/gcc.exe" CACHE FILEPATH "C Compiler" FORCE)
set(CMAKE_CXX_COMPILER "C:/TDM-GCC-64/bin/g++.exe" CACHE FILEPATH "C++ Compiler" FORCE) set(CMAKE_CXX_COMPILER "C:/TDM-GCC-64/bin/g++.exe" CACHE FILEPATH "C++ Compiler" FORCE)
message(STATUS "[UMSKT] Forcing use of TDM-GCC in C:/TDM-GCC-64") message(STATUS "[UMSKT] Forcing use of TDM-GCC in C:/TDM-GCC-64")
# Set up resource compilation for Windows
set(RC_COMPILER "C:/TDM-GCC-64/bin/windres.exe")
set(RC_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/umskt_res.o")
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
set(RC_TARGET "pe-i386")
else()
set(RC_TARGET "pe-x86-64")
endif()
add_custom_command(
OUTPUT ${RC_OUTPUT}
COMMAND ${RC_COMPILER}
ARGS --input-format=rc
--output-format=coff
--target=${RC_TARGET}
-I${CMAKE_CURRENT_SOURCE_DIR}/src/windows
-i${CMAKE_CURRENT_SOURCE_DIR}/src/windows/umskt.rc
-o${RC_OUTPUT}
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/windows/umskt.rc
COMMENT "Compiling Windows resources"
)
# Set the Windows resource file for GCC builds
set(UMSKT_EXE_WINDOWS_EXTRA ${RC_OUTPUT})
endif() endif()
SET(CMAKE_CXX_STANDARD 17) SET(CMAKE_CXX_STANDARD 17)
@ -62,14 +36,13 @@ OPTION(UMSKT_USE_SHARED_OPENSSL "Force linking against the system-wide OpenSSL l
OPTION(MUSL_STATIC "Enable fully static builds in a muslc environment (i.e. Alpine Linux)" OFF) OPTION(MUSL_STATIC "Enable fully static builds in a muslc environment (i.e. Alpine Linux)" OFF)
OPTION(DJGPP_WATT32 "Enable compilation and linking with DJGPP/WATT32/OpenSSL" OFF) OPTION(DJGPP_WATT32 "Enable compilation and linking with DJGPP/WATT32/OpenSSL" OFF)
OPTION(MSVC_MSDOS_STUB "Specify a custom MS-DOS stub for a 32-bit MSVC compilation" OFF) OPTION(MSVC_MSDOS_STUB "Specify a custom MS-DOS stub for a 32-bit MSVC compilation" OFF)
OPTION(WINDOWS_ARM "Enable compilation for Windows on ARM (requires appropriate toolchain)" OFF)
SET(UMSKT_LINK_LIBS ${UMSKT_LINK_LIBS}) SET(UMSKT_LINK_LIBS ${UMSKT_LINK_LIBS})
SET(UMSKT_LINK_DIRS ${UMSKT_LINK_DIRS}) SET(UMSKT_LINK_DIRS ${UMSKT_LINK_DIRS})
# macOS does not support static build
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") SET(UMSKT_USE_SHARED_OPENSSL ON)
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-dead_strip")
endif() endif()
# neither does dos idk i'm trying random stuff # neither does dos idk i'm trying random stuff
@ -87,22 +60,7 @@ ELSE()
MESSAGE(STATUS "[UMSKT] Requesting static version of OpenSSL") MESSAGE(STATUS "[UMSKT] Requesting static version of OpenSSL")
ENDIF() ENDIF()
# Configure ARM-specific settings if enabled
if (WINDOWS_ARM)
if (MSVC)
# MSVC ARM64 settings
set(CMAKE_SYSTEM_PROCESSOR ARM64)
set(CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE ARM64)
else()
# MinGW/GCC ARM settings
set(CMAKE_SYSTEM_PROCESSOR arm)
if (CMAKE_CROSSCOMPILING)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv8-a")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8-a")
endif()
endif()
message(STATUS "[UMSKT] Configuring for Windows on ARM")
endif()
IF(DJGPP_WATT32) IF(DJGPP_WATT32)
SET(CMAKE_SYSTEM_NAME MSDOS) SET(CMAKE_SYSTEM_NAME MSDOS)
@ -119,10 +77,10 @@ IF(DJGPP_WATT32)
MESSAGE(STATUS "[UMSKT] Using i386 target for DOS DGJPP") MESSAGE(STATUS "[UMSKT] Using i386 target for DOS DGJPP")
ENDIF() ENDIF()
##if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
## SET(BUILD_SHARED_LIBS ON) SET(BUILD_SHARED_LIBS ON)
## MESSAGE(STATUS "[UMSKT] macOS has no static library - Shared library forced on") MESSAGE(STATUS "[UMSKT] macOS has no static library - Shared library forced on")
##endif() endif()
# if we're compiling with MSVC, respect the DEBUG compile option # if we're compiling with MSVC, respect the DEBUG compile option
IF(MSVC) IF(MSVC)
@ -203,55 +161,13 @@ CPMAddPackage(
VERSION 3.11.2 VERSION 3.11.2
) )
# Build fmt separately first if we're building shared libraries, CPM doesn't include shared
if(BUILD_SHARED_LIBS AND NOT (WINDOWS_ARM AND MSVC))
include(ExternalProject)
set(FMT_INSTALL_DIR ${CMAKE_BINARY_DIR}/fmt_install)
ExternalProject_Add(fmt_external
GIT_REPOSITORY https://github.com/fmtlib/fmt.git
GIT_TAG 10.0.0
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${FMT_INSTALL_DIR}
-DBUILD_SHARED_LIBS=ON
-DFMT_TEST=OFF
-DFMT_DOC=OFF
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
INSTALL_DIR ${FMT_INSTALL_DIR}
)
endif()
# Include fmt development library # Include fmt development library
if(BUILD_SHARED_LIBS) CPMAddPackage(
if(WINDOWS_ARM AND MSVC)
# For ARM64 MSVC shared builds, use vcpkg's fmt
find_package(fmt CONFIG REQUIRED)
else()
# For other shared builds, use our custom build
ExternalProject_Get_Property(fmt_external INSTALL_DIR)
add_library(fmt::fmt SHARED IMPORTED GLOBAL)
file(MAKE_DIRECTORY ${INSTALL_DIR}/include)
if(WIN32)
set_target_properties(fmt::fmt PROPERTIES
IMPORTED_IMPLIB ${INSTALL_DIR}/lib/libfmt.dll.a
IMPORTED_LOCATION ${INSTALL_DIR}/bin/libfmt.dll
INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include
)
else()
set_target_properties(fmt::fmt PROPERTIES
IMPORTED_LOCATION ${INSTALL_DIR}/lib/libfmt.so
INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include
)
endif()
add_dependencies(fmt::fmt fmt_external)
endif()
else()
CPMAddPackage(
NAME fmt NAME fmt
GITHUB_REPOSITORY fmtlib/fmt GITHUB_REPOSITORY fmtlib/fmt
GIT_TAG 10.0.0 GIT_TAG 10.0.0
VERSION 10.0.0 VERSION 10.0.0
) )
endif()
# Include cmrc resource compiler # Include cmrc resource compiler
CPMAddPackage( CPMAddPackage(
@ -293,54 +209,16 @@ IF (EMSCRIPTEN)
SET_TARGET_PROPERTIES(umskt PROPERTIES COMPILE_FLAGS "-Os -sEXPORTED_RUNTIME_METHODS=ccall,cwrap") SET_TARGET_PROPERTIES(umskt PROPERTIES COMPILE_FLAGS "-Os -sEXPORTED_RUNTIME_METHODS=ccall,cwrap")
SET_TARGET_PROPERTIES(umskt PROPERTIES LINK_FLAGS "-Os -sWASM=1 -sEXPORT_ALL=1 -sEXPORTED_RUNTIME_METHODS=ccall,cwrap --no-entry") SET_TARGET_PROPERTIES(umskt PROPERTIES LINK_FLAGS "-Os -sWASM=1 -sEXPORT_ALL=1 -sEXPORTED_RUNTIME_METHODS=ccall,cwrap --no-entry")
ELSE() ELSE()
# Library target - no resource file needed here ADD_LIBRARY(_umskt ${LIBUMSKT_SRC} ${UMSKT_EXE_WINDOWS_EXTRA} ${UMSKT_EXE_WINDOWS_DLL})
ADD_LIBRARY(_umskt ${LIBUMSKT_SRC} ${UMSKT_EXE_WINDOWS_DLL}) TARGET_INCLUDE_DIRECTORIES(_umskt PUBLIC ${OPENSSL_INCLUDE_DIR})
TARGET_INCLUDE_DIRECTORIES(_umskt PUBLIC
${OPENSSL_INCLUDE_DIR}
$<$<BOOL:${BUILD_SHARED_LIBS}>:${FMT_INSTALL_DIR}/include>
)
TARGET_LINK_DIRECTORIES(_umskt PUBLIC ${UMSKT_LINK_DIRS}) TARGET_LINK_DIRECTORIES(_umskt PUBLIC ${UMSKT_LINK_DIRS})
if(BUILD_SHARED_LIBS) TARGET_LINK_LIBRARIES(_umskt ${OPENSSL_CRYPTO_LIBRARIES} fmt ${UMSKT_LINK_LIBS})
TARGET_LINK_LIBRARIES(_umskt ${OPENSSL_CRYPTO_LIBRARIES} fmt::fmt ${UMSKT_LINK_LIBS})
else()
TARGET_LINK_LIBRARIES(_umskt ${OPENSSL_CRYPTO_LIBRARIES} fmt ${UMSKT_LINK_LIBS})
endif()
# Add Windows system libraries for shared library builds ### UMSKT executable compilation
if (WIN32)
if (BUILD_SHARED_LIBS)
target_link_libraries(_umskt ws2_32 crypt32 wsock32 advapi32)
endif()
endif()
### UMSKT executable compilation - include resource file here
ADD_EXECUTABLE(umskt src/main.cpp src/cli.cpp ${UMSKT_EXE_WINDOWS_EXTRA}) ADD_EXECUTABLE(umskt src/main.cpp src/cli.cpp ${UMSKT_EXE_WINDOWS_EXTRA})
TARGET_INCLUDE_DIRECTORIES(umskt PUBLIC TARGET_INCLUDE_DIRECTORIES(umskt PUBLIC ${OPENSSL_INCLUDE_DIR})
${OPENSSL_INCLUDE_DIR} TARGET_LINK_LIBRARIES(umskt _umskt ${OPENSSL_CRYPTO_LIBRARIES} ${ZLIB_LIBRARIES} fmt nlohmann_json::nlohmann_json umskt::rc ${UMSKT_LINK_LIBS})
$<$<BOOL:${BUILD_SHARED_LIBS}>:${FMT_INSTALL_DIR}/include> TARGET_LINK_DIRECTORIES(umskt PUBLIC ${UMSKT_LINK_DIRS})
)
if(BUILD_SHARED_LIBS)
TARGET_LINK_LIBRARIES(umskt _umskt ${OPENSSL_CRYPTO_LIBRARIES} ${ZLIB_LIBRARIES} fmt::fmt nlohmann_json::nlohmann_json umskt::rc ${UMSKT_LINK_LIBS})
# Copy shared libraries to build directory
if(WIN32)
add_custom_command(TARGET umskt POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${FMT_INSTALL_DIR}/bin/libfmt.dll"
"${CMAKE_BINARY_DIR}/libfmt.dll"
COMMENT "Copying fmt DLL to build directory"
)
else()
add_custom_command(TARGET umskt POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${FMT_INSTALL_DIR}/lib/libfmt.so"
"${CMAKE_BINARY_DIR}/libfmt.so"
COMMENT "Copying fmt shared library to build directory"
)
endif()
else()
TARGET_LINK_LIBRARIES(umskt _umskt ${OPENSSL_CRYPTO_LIBRARIES} ${ZLIB_LIBRARIES} fmt nlohmann_json::nlohmann_json umskt::rc ${UMSKT_LINK_LIBS})
endif()
# Link required Windows system libraries for OpenSSL # Link required Windows system libraries for OpenSSL
if (WIN32) if (WIN32)

View File

@ -61,7 +61,7 @@ For Windows, click [here](https://slproweb.com/products/Win32OpenSSL.html) and c
*Note: This only applies if the build you download has OpenSSL embedded (static library) or not. You can usually tell if the download size is measured in KB or MB. If it's MB, you don't need this.* *Note: This only applies if the build you download has OpenSSL embedded (static library) or not. You can usually tell if the download size is measured in KB or MB. If it's MB, you don't need this.*
#### 3. Run `umskt` to generate a key, or add `--help` or `-h` to see more options. #### 3. Run `umskt` to generate a key, or add `--help` or `-h` to see more options.
*Note: on macOS, like all unsigned executables, you'll need to hold Ctrl while right clicking and selecting Open to actually open it.*
#### 4. *(Activation step for `Retail` and `OEM` only)* #### 4. *(Activation step for `Retail` and `OEM` only)*
* After installation, you will be prompted to activate Windows. * After installation, you will be prompted to activate Windows.

View File

@ -29,10 +29,6 @@
#include "confid.h" #include "confid.h"
#if defined(_MSC_VER)
#include <intrin.h>
#endif
QWORD MOD = 0; QWORD MOD = 0;
QWORD NON_RESIDUE = 0; QWORD NON_RESIDUE = 0;
QWORD f[6] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }; QWORD f[6] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 };
@ -79,12 +75,6 @@ inline QWORD ConfirmationID::__umul128(QWORD a, QWORD b, QWORD* hi)
#else #else
#define __umul128 _umul128 #define __umul128 _umul128
#endif #endif
#elif defined(_M_ARM64) // Microsoft implementation of ARM64
inline QWORD ConfirmationID::__umul128(QWORD a, QWORD b, QWORD* hi)
{
*hi = __umulh(a, b);
return a * b;
}
#elif defined(__i386__) || defined(_M_IX86) || defined(__arm__) || defined(__EMSCRIPTEN__) #elif defined(__i386__) || defined(_M_IX86) || defined(__arm__) || defined(__EMSCRIPTEN__)
inline QWORD ConfirmationID::__umul128(QWORD multiplier, QWORD multiplicand, QWORD *product_hi) { inline QWORD ConfirmationID::__umul128(QWORD multiplier, QWORD multiplicand, QWORD *product_hi) {
// multiplier = ab = a * 2^32 + b // multiplier = ab = a * 2^32 + b

Binary file not shown.