diff --git a/.github/workflows/swiftshader.yml b/.github/workflows/swiftshader.yml index dcea5e2921..0ed7653084 100644 --- a/.github/workflows/swiftshader.yml +++ b/.github/workflows/swiftshader.yml @@ -21,32 +21,6 @@ jobs: - os: ubuntu-22.04 name: Linux nuke_invoke: ./build.sh - extras: | - # We need to adjust APT sources for multiarch. Use the ones corresponding to - # Ubuntu 22.04 with appropriate `arch` values. ports.ubuntu.com is required - # for armhf and arm64. - sudo tee /etc/apt/sources.list << EOF - deb [arch=amd64] http://archive.ubuntu.com/ubuntu jammy main multiverse restricted universe - deb [arch=amd64] http://archive.ubuntu.com/ubuntu jammy-backports main multiverse restricted universe - deb [arch=amd64] http://archive.ubuntu.com/ubuntu jammy-security main multiverse restricted universe - deb [arch=amd64] http://archive.ubuntu.com/ubuntu jammy-updates main multiverse restricted universe - deb [arch=arm64,armhf] http://ports.ubuntu.com jammy main multiverse restricted universe - deb [arch=arm64,armhf] http://ports.ubuntu.com jammy-backports main multiverse restricted universe - deb [arch=arm64,armhf] http://ports.ubuntu.com jammy-security main multiverse restricted universe - deb [arch=arm64,armhf] http://ports.ubuntu.com jammy-updates main multiverse restricted universe - deb [arch=amd64] http://security.ubuntu.com/ubuntu jammy main multiverse restricted universe - deb [arch=amd64] http://security.ubuntu.com/ubuntu jammy-backports main multiverse restricted universe - deb [arch=amd64] http://security.ubuntu.com/ubuntu jammy-security main multiverse restricted universe - deb [arch=amd64] http://security.ubuntu.com/ubuntu jammy-updates main multiverse restricted universe - EOF - sudo dpkg --add-architecture arm64 - sudo dpkg --add-architecture armhf - sudo apt update - sudo apt install -y gcc-aarch64-linux-gnu gcc-arm-linux-gnueabihf - sudo apt install -y g++-aarch64-linux-gnu g++-arm-linux-gnueabihf - for arch in amd64 arm64 armhf; do - sudo apt install -y libx11-xcb-dev:$arch - done - os: windows-2022 name: Windows nuke_invoke: ./build.cmd @@ -83,6 +57,9 @@ jobs: dotnet-version: | 6.0.201 7.0.* + - name: Install Zig + if: ${{ matrix.env.name == 'Linux' }} + uses: goto-bus-stop/setup-zig@v2 - name: Build SwiftShader run: ${{ matrix.env.nuke_invoke }} SwiftShader env: diff --git a/build/cmake/fudge.sh b/build/cmake/fudge.sh new file mode 100755 index 0000000000..4f616cf2fb --- /dev/null +++ b/build/cmake/fudge.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +# Origignal script from https://github.com/ziglang/zig/issues/4911 +# Modified to add SILKDOTNET_ paths in response to some issues with SwiftShader + +args="" +for arg in "$@" +do + parg="$arg" + + option=${arg%=*} + target=${arg#*=} + if [[ $option == "-march" || $option == "-mcpu" || $option == "-mtune" ]]; then + moveon=0 + for replace in $SILKDOTNET_ReplaceArchitectureZigCcFlags + do + replacetarget=${replace%=*} + replacement=${replace#*=} + # echo $replacetarget A $replacement B $target END + if [[ $replacetarget == $target ]]; then + if [[ "$replacement" == "" ]]; then + moveon=1 + else + target="$replacement" + fi + fi + done + if [[ $moveon == 1 || "$SILKDOTNET_RemoveAllPotentiallyProblematicZigCcFlags" == "1" ]]; then + continue + else + fixedTarget=${target//-/_} + parg="$option=$fixedTarget" + fi + fi + args="$args $parg" +done diff --git a/build/cmake/zig-ar.cmd b/build/cmake/zig-ar.cmd new file mode 100755 index 0000000000..a97e9bd772 --- /dev/null +++ b/build/cmake/zig-ar.cmd @@ -0,0 +1,2 @@ +@echo off +zig ar %* \ No newline at end of file diff --git a/build/cmake/zig-ar.sh b/build/cmake/zig-ar.sh new file mode 100755 index 0000000000..3d69448482 --- /dev/null +++ b/build/cmake/zig-ar.sh @@ -0,0 +1,2 @@ +#!/bin/sh +zig ar "$@" diff --git a/build/cmake/zig-c++.cmd b/build/cmake/zig-c++.cmd new file mode 100755 index 0000000000..2b066177e4 --- /dev/null +++ b/build/cmake/zig-c++.cmd @@ -0,0 +1,3 @@ +@echo off +: TODO add -march/-mtune handling if necessary +zig c++ %* \ No newline at end of file diff --git a/build/cmake/zig-c++.sh b/build/cmake/zig-c++.sh new file mode 100755 index 0000000000..fafec74d0c --- /dev/null +++ b/build/cmake/zig-c++.sh @@ -0,0 +1,3 @@ +#!/bin/bash +. "$(dirname ${BASH_SOURCE[0]})/fudge.sh" $args +zig c++ $args diff --git a/build/cmake/zig-cc.cmd b/build/cmake/zig-cc.cmd new file mode 100755 index 0000000000..b22d092542 --- /dev/null +++ b/build/cmake/zig-cc.cmd @@ -0,0 +1,3 @@ +@echo off +: TODO add -march/-mtune handling if necessary +zig cc %* \ No newline at end of file diff --git a/build/cmake/zig-cc.sh b/build/cmake/zig-cc.sh new file mode 100755 index 0000000000..a49268a952 --- /dev/null +++ b/build/cmake/zig-cc.sh @@ -0,0 +1,3 @@ +#!/bin/bash +. "$(dirname ${BASH_SOURCE[0]})/fudge.sh" $args +zig cc $args diff --git a/build/cmake/zig-ranlib.cmd b/build/cmake/zig-ranlib.cmd new file mode 100755 index 0000000000..e0c5da410a --- /dev/null +++ b/build/cmake/zig-ranlib.cmd @@ -0,0 +1,2 @@ +@echo off +zig ranlib %* \ No newline at end of file diff --git a/build/cmake/zig-ranlib.sh b/build/cmake/zig-ranlib.sh new file mode 100755 index 0000000000..5caa38e278 --- /dev/null +++ b/build/cmake/zig-ranlib.sh @@ -0,0 +1,2 @@ +#!/bin/sh +zig ranlib "$@" diff --git a/build/cmake/zig-rc.cmd b/build/cmake/zig-rc.cmd new file mode 100755 index 0000000000..5c4482c8d6 --- /dev/null +++ b/build/cmake/zig-rc.cmd @@ -0,0 +1,2 @@ +@echo off +zig rc %* \ No newline at end of file diff --git a/build/cmake/zig-rc.sh b/build/cmake/zig-rc.sh new file mode 100755 index 0000000000..4be7275e01 --- /dev/null +++ b/build/cmake/zig-rc.sh @@ -0,0 +1,2 @@ +#!/bin/sh +zig rc "$@" diff --git a/build/cmake/zig-toolchain-aarch64-linux-gnu.2.17.cmake b/build/cmake/zig-toolchain-aarch64-linux-gnu.2.17.cmake new file mode 100755 index 0000000000..3569631dda --- /dev/null +++ b/build/cmake/zig-toolchain-aarch64-linux-gnu.2.17.cmake @@ -0,0 +1,2 @@ +set(ZIG_TARGET "aarch64-linux-gnu.2.17") +include(${CMAKE_CURRENT_LIST_DIR}/zig-toolchain.cmake) diff --git a/build/cmake/zig-toolchain-arm-linux-gnueabihf.2.17.cmake b/build/cmake/zig-toolchain-arm-linux-gnueabihf.2.17.cmake new file mode 100755 index 0000000000..74be23e020 --- /dev/null +++ b/build/cmake/zig-toolchain-arm-linux-gnueabihf.2.17.cmake @@ -0,0 +1,2 @@ +set(ZIG_TARGET "arm-linux-gnueabihf.2.17") +include(${CMAKE_CURRENT_LIST_DIR}/zig-toolchain.cmake) diff --git a/build/cmake/zig-toolchain-x86_64-linux-gnu.2.17.cmake b/build/cmake/zig-toolchain-x86_64-linux-gnu.2.17.cmake new file mode 100755 index 0000000000..3810041742 --- /dev/null +++ b/build/cmake/zig-toolchain-x86_64-linux-gnu.2.17.cmake @@ -0,0 +1,2 @@ +set(ZIG_TARGET "x86_64-linux-gnu.2.17") +include(${CMAKE_CURRENT_LIST_DIR}/zig-toolchain.cmake) diff --git a/build/cmake/zig-toolchain.cmake b/build/cmake/zig-toolchain.cmake new file mode 100755 index 0000000000..94ed03c2e6 --- /dev/null +++ b/build/cmake/zig-toolchain.cmake @@ -0,0 +1,40 @@ +include_guard() + +if(CMAKE_GENERATOR MATCHES "Visual Studio") + message(FATAL_ERROR "Visual Studio generator not supported, use: cmake -G Ninja") +endif() + +if(NOT ZIG_TARGET MATCHES "^([a-zZ-Z0-9_]+)-([a-zZ-Z0-9_]+)-([a-zZ-Z0-9_.]+)$") + message(FATAL_ERROR "Expected -DZIG_TARGET=--") +endif() + +set(ZIG_ARCH ${CMAKE_MATCH_1}) +set(ZIG_OS ${CMAKE_MATCH_2}) +set(ZIG_ABI ${CMAKE_MATCH_3}) + +if(ZIG_OS STREQUAL "linux") + set(CMAKE_SYSTEM_NAME "Linux") +elseif(ZIG_OS STREQUAL "windows") + set(CMAKE_SYSTEM_NAME "Windows") +elseif(ZIG_OS STREQUAL "macos") + set(CMAKE_SYSTEM_NAME "Darwin") +else() + message(WARNING "Unknown OS: ${ZIG_OS}") +endif() + +set(CMAKE_SYSTEM_VERSION 1) +set(CMAKE_SYSTEM_PROCESSOR ${ZIG_ARCH}) + +if(WIN32) + set(SCRIPT_SUFFIX ".cmd") +else() + set(SCRIPT_SUFFIX ".sh") +endif() + +# This is working (thanks to Simon for finding this trick) +set(CMAKE_AR "${CMAKE_CURRENT_LIST_DIR}/zig-ar${SCRIPT_SUFFIX}") +set(CMAKE_RANLIB "${CMAKE_CURRENT_LIST_DIR}/zig-ranlib${SCRIPT_SUFFIX}") +set(CMAKE_RC_COMPILER "${CMAKE_CURRENT_LIST_DIR}/zig-rc${SCRIPT_SUFFIX}") +set(CMAKE_ASM_COMPILER "${CMAKE_CURRENT_LIST_DIR}/zig-cc${SCRIPT_SUFFIX}" -target ${ZIG_TARGET}) +set(CMAKE_C_COMPILER "${CMAKE_CURRENT_LIST_DIR}/zig-cc${SCRIPT_SUFFIX}" -target ${ZIG_TARGET}) +set(CMAKE_CXX_COMPILER "${CMAKE_CURRENT_LIST_DIR}/zig-c++${SCRIPT_SUFFIX}" -target ${ZIG_TARGET})