@@ -833,6 +833,176 @@ jobs:
833833 md5.sum
834834 sha256.sum
835835
836+ # Build LLVM toolchain
837+ build-llvm-toolchain :
838+ name : LLVM Toolchain (${{ matrix.host.name }})
839+ needs : setup
840+ runs-on :
841+ group : ${{ matrix.host.runner }}
842+ container : ${{ matrix.host.container }}
843+
844+ defaults :
845+ run :
846+ shell : bash
847+
848+ strategy :
849+ fail-fast : false
850+ matrix :
851+ host : ${{ fromJSON(needs.setup.outputs.hosts) }}
852+
853+ steps :
854+ - name : Set up build environment (Linux)
855+ if : ${{ runner.os == 'Linux' }}
856+ run : |
857+ # Create workspace directory
858+ WORKSPACE="${RUNNER_TEMP}/workspace"
859+ sudo mkdir -p ${WORKSPACE}
860+
861+ # Allow non-root access to the working directories
862+ sudo chmod -R 777 ${GITHUB_WORKSPACE}
863+ sudo chmod -R 777 ${RUNNER_TEMP}
864+
865+ # Install common dependencies
866+ sudo apt-get update
867+ sudo apt-get install -y qemu-system
868+
869+ # Install dependencies for cross compilation
870+ if [ "${{ matrix.host.name }}" == "windows-x86_64" ]; then
871+ # Install MinGW-w64 cross toolchain
872+ sudo apt-get install -y binutils-mingw-w64 gcc-mingw-w64 \
873+ g++-mingw-w64
874+ fi
875+
876+ # Set environment variables
877+ echo "TAR=tar" >> $GITHUB_ENV
878+ echo "WORKSPACE=${WORKSPACE}" >> $GITHUB_ENV
879+
880+ - name : Set up build environment (macOS)
881+ if : ${{ runner.os == 'macOS' }}
882+ run : |
883+ # Create case-sensitive workspace volume for macOS
884+ WORKSPACE="/Volumes/Workspace"
885+ hdiutil create ${RUNNER_TEMP}/Workspace.sparseimage \
886+ -volname Workspace -type SPARSE -size 150g -fs HFSX
887+ hdiutil mount ${RUNNER_TEMP}/Workspace.sparseimage -mountpoint ${WORKSPACE}
888+
889+ # Install dependencies
890+ brew install qemu
891+
892+ # Install dependencies for cross compilation
893+ if [ "${{ matrix.host.name }}" == "macos-x86_64" ]; then
894+ # Install x86 Homebrew
895+ arch -x86_64 /bin/bash -c \
896+ "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
897+
898+ # Install x86 dependencies
899+ arch -x86_64 /usr/local/bin/brew install zstd
900+ fi
901+
902+ # Set environment variables
903+ echo "TAR=gtar" >> $GITHUB_ENV
904+ echo "WORKSPACE=${WORKSPACE}" >> $GITHUB_ENV
905+
906+ - name : Check out source code
907+ if : ${{ github.event_name != 'pull_request_target' }}
908+ uses : actions/checkout@v4
909+ with :
910+ submodules : recursive
911+ persist-credentials : false
912+
913+ - name : Check out source code (pull request)
914+ if : ${{ github.event_name == 'pull_request_target' }}
915+ uses : actions/checkout@v4
916+ with :
917+ ref : ${{ github.event.pull_request.head.sha }}
918+ submodules : recursive
919+ persist-credentials : false
920+
921+ - name : Setup debug session (pre)
922+ if : always() && needs.setup.outputs.debug == 'toolchain-pre'
923+ uses : mxschmitt/action-tmate@v3
924+ with :
925+ limit-access-to-actor : true
926+
927+ - name : Build LLVM toolchain
928+ run : |
929+ # Set x86 Homebrew environment if cross compiling
930+ if [ "${{ matrix.host.name }}" == "macos-x86_64" ]; then
931+ eval "$(/usr/local/bin/brew shellenv)"
932+ fi
933+
934+ # Create build directory
935+ pushd ${WORKSPACE}
936+ mkdir -p llvm
937+ mkdir -p llvm-build
938+ cd llvm-build
939+
940+ # Configure and generate LLVM build scripts
941+ if [ "${{ matrix.host.name }}" == "windows-x86_64" ]; then
942+ LLVM_CMAKE_ARGS+="-DLLVM_TOOLCHAIN_CROSS_BUILD_MINGW=ON "
943+ elif [ "${{ matrix.host.name }}" == "macos-aarch64" ]; then
944+ LLVM_CMAKE_ARGS+="-DCMAKE_OSX_ARCHITECTURES=arm64 "
945+ elif [ "${{ matrix.host.name }}" == "macos-x86_64" ]; then
946+ LLVM_CMAKE_ARGS+="-DCMAKE_OSX_ARCHITECTURES=x86_64 "
947+ fi
948+
949+ cmake \
950+ -GNinja \
951+ --install-prefix ${WORKSPACE}/llvm \
952+ ${LLVM_CMAKE_ARGS} \
953+ ${GITHUB_WORKSPACE}/scripts/llvm \
954+ |& tee ${GITHUB_WORKSPACE}/llvm-cmake.log
955+
956+ # Build LLVM toolchain
957+ ninja llvm-toolchain |& tee ${GITHUB_WORKSPACE}/llvm-build.log
958+
959+ # Run LLVM tests
960+ ninja check-llvm-toolchain |& tee ${GITHUB_WORKSPACE}/llvm-test.log
961+
962+ # Install LLVM toolchain
963+ ninja install-llvm-toolchain |& tee ${GITHUB_WORKSPACE}/llvm-install.log
964+ popd
965+
966+ # Create archive
967+ ARCHIVE_NAME=toolchain_llvm_${{ matrix.host.name }}
968+ ARCHIVE_FILE=${ARCHIVE_NAME}.${{ matrix.host.archive }}
969+
970+ if [ "${{ matrix.host.archive }}" == "tar.xz" ]; then
971+ XZ_OPT="-T0" \
972+ ${TAR} -Jcvf ${ARCHIVE_FILE} \
973+ --owner=0 --group=0 -C ${WORKSPACE} llvm
974+ elif [ "${{ matrix.host.archive }}" == "7z" ]; then
975+ pushd ${WORKSPACE}
976+ 7z a -t7z -l ${GITHUB_WORKSPACE}/${ARCHIVE_FILE} llvm
977+ popd
978+ fi
979+
980+ # Compute checksum
981+ md5sum ${ARCHIVE_FILE} > md5.sum
982+ sha256sum ${ARCHIVE_FILE} > sha256.sum
983+
984+ - name : Setup debug session (post)
985+ if : always() && needs.setup.outputs.debug == 'toolchain-post'
986+ uses : mxschmitt/action-tmate@v3
987+ with :
988+ limit-access-to-actor : true
989+
990+ - name : Upload toolchain build log
991+ if : always()
992+ uses : actions/upload-artifact@v4
993+ with :
994+ name : log_toolchain_llvm_${{ matrix.host.name }}
995+ path : ' *.log'
996+
997+ - name : Upload toolchain build artifact
998+ uses : actions/upload-artifact@v4
999+ with :
1000+ name : toolchain_llvm_${{ matrix.host.name }}
1001+ path : |
1002+ toolchain_llvm_${{ matrix.host.name }}.${{ matrix.host.archive }}
1003+ md5.sum
1004+ sha256.sum
1005+
8361006 # Build host tools
8371007 build-hosttools :
8381008 name : Host Tools (${{ matrix.host.name }})
@@ -1075,7 +1245,7 @@ jobs:
10751245 # Build distribution bundle
10761246 build-dist-bundle :
10771247 name : Distribution Bundle (${{ matrix.host.name }})
1078- needs : [ setup, build-gnu-toolchain, build-hosttools, build-cmake-pkg ]
1248+ needs : [ setup, build-gnu-toolchain, build-llvm-toolchain, build- hosttools, build-cmake-pkg ]
10791249 runs-on :
10801250 group : ${{ matrix.host.runner }}
10811251 container : ${{ matrix.host.container }}
0 commit comments