diff --git a/.ci/ps4/make-toolchain.sh b/.ci/ps4/make-toolchain.sh deleted file mode 100755 index 2b4f994b79..0000000000 --- a/.ci/ps4/make-toolchain.sh +++ /dev/null @@ -1,176 +0,0 @@ -#!/usr/local/bin/bash -ex - -# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project -# SPDX-License-Identifier: GPL-3.0-or-later - -# Define global vars -# These flags are used everywhere, so let's reuse them. -export OO_PS4_TOOLCHAIN="$PWD/prefix" -export PREFIX="$OO_PS4_TOOLCHAIN" -export CC="clang" -export CXX="clang++" -export AR="llvm-ar" -export CFLAGS="-fPIC -DPS4 -D_LIBUNWIND_IS_BAREMETAL=1" -export CXXFLAGS="$CFLAGS -D__STDC_VERSION__=0" -export TARGET="x86_64-scei-ps4" -export LLVM_ROOT="$PWD/llvm-project" -export LLVM_PATH="$PWD/llvm-project/llvm" -export WORK_PATH="$PWD" - -prepare_prefix() { - [ -d OpenOrbis-PS4-Toolchain ] || git clone --depth=1 https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain - [ -d musl ] || git clone --depth=1 https://github.com/OpenOrbis/musl - [ -d llvm-project ] || git clone --depth=1 --branch openorbis/20.x https://github.com/seuros/llvm-project - [ -d create-fself ] || git clone --depth=1 https://github.com/OpenOrbis/create-fself - [ -d create-gp4 ] || git clone --depth=1 https://github.com/OpenOrbis/create-gp4 - [ -d readoelf ] || git clone --depth=1 https://github.com/OpenOrbis/readoelf - [ -d LibOrbisPkg ] || git clone --depth=1 https://github.com/maxton/LibOrbisPkg - - mkdir -p $PREFIX "$PREFIX/bin" "$PREFIX/include" - [ -f "$PREFIX/include/orbis/libkernel.h" ] || cp -r OpenOrbis-PS4-Toolchain/include/* "$PREFIX/include/" - mkdir -p $PREFIX/usr - [ -L "$PREFIX/usr/include" ] || ln -s $PREFIX/include $PREFIX/usr/include || echo 1 - [ -L "$PREFIX/usr/share" ] || ln -s $PREFIX/share $PREFIX/usr/share || echo 1 - [ -L "$PREFIX/usr/lib" ] || ln -s $PREFIX/lib $PREFIX/usr/lib || echo 1 - [ -L "$PREFIX/usr/bin" ] || ln -s $PREFIX/bin $PREFIX/usr/bin || echo 1 -} - -build_musl() { - mkdir -p musl-build - cd musl-build - ../musl/configure --target=$TARGET --disable-shared CC="$CC" CFLAGS="$CFLAGS" --prefix=$PREFIX - gmake -j8 && gmake install - cd .. -} - -build_llvm() { - # Build compiler-rt - cmake "$LLVM_ROOT/compiler-rt" -B "$WORK_PATH/llvm-build/compiler-rt" \ - -DCMAKE_INSTALL_PREFIX="$PREFIX" \ - -DCMAKE_C_COMPILER="$CC" -DCMAKE_CXX_COMPILER="$CXX" \ - -DCMAKE_C_FLAGS="$CFLAGS" -DCMAKE_CXX_FLAGS="$CXXFLAGS" \ - -DCMAKE_ASM_COMPILER="$CC" -DCMAKE_ASM_FLAGS="$CFLAGS -x assembler-with-cpp" \ - -DLLVM_PATH="$LLVM_PATH" -DCOMPILER_RT_DEFAULT_TARGET_TRIPLE="$TARGET" \ - -DCOMPILER_RT_BAREMETAL_BUILD=YES -DCOMPILER_RT_BUILD_BUILTINS=ON \ - -DCOMPILER_RT_BUILD_CRT=OFF -DCOMPILER_RT_BUILD_SANITIZERS=OFF \ - -DCOMPILER_RT_BUILD_XRAY=OFF -DCOMPILER_RT_BUILD_LIBFUZZER=OFF \ - -DCOMPILER_RT_BUILD_PROFILE=OFF -DCOMPILER_RT_STANDALONE_BUILD=ON - # Build libunwind - cmake "$LLVM_ROOT/libunwind" -B "$WORK_PATH/llvm-build/libunwind" \ - -DCMAKE_INSTALL_PREFIX="$PREFIX" \ - -DCMAKE_C_COMPILER="$CC" -DCMAKE_CXX_COMPILER="$CXX" \ - -DCMAKE_C_FLAGS="$CFLAGS -fcxx-exceptions" -DCMAKE_CXX_FLAGS="$CXXFLAGS -fcxx-exceptions" \ - -DCMAKE_ASM_COMPILER="$CC" -DCMAKE_ASM_FLAGS="$CFLAGS -x assembler-with-cpp" \ - -DLLVM_PATH="$LLVM_PATH" -DLIBUNWIND_USE_COMPILER_RT=YES \ - -DLIBUNWIND_BUILD_32_BITS=NO -DLIBUNWIND_ENABLE_STATIC=ON \ - -DLIBUNWIND_ENABLE_SHARED=OFF -DLIBUNWIND_IS_BAREMETAL=ON - # Build libcxxabi - cmake "$LLVM_ROOT/libcxxabi" -B "$WORK_PATH/llvm-build/libcxxabi" \ - -DCMAKE_INSTALL_PREFIX="$PREFIX" \ - -DCMAKE_C_COMPILER="$CC" -DCMAKE_CXX_COMPILER="$CXX" \ - -DCMAKE_C_FLAGS="$CFLAGS -D_GNU_SOURCE=1 -isysroot $PREFIX -isystem $LLVM_ROOT/libcxx/include -isystem $PREFIX/include -isystem $WORK_PATH/llvm-build/libcxx/include/c++/v1" \ - -DCMAKE_CXX_FLAGS="$CXXFLAGS -D_GNU_SOURCE=1 -isysroot $PREFIX -isystem $LLVM_ROOT/libcxx/include -isystem $PREFIX/include -isystem $WORK_PATH/llvm-build/libcxx/include/c++/v1" \ - -DCMAKE_ASM_COMPILER="$CC" -DCMAKE_ASM_FLAGS="$CFLAGS -x assembler-with-cpp" \ - -DLLVM_PATH="$LLVM_PATH" -DLIBCXXABI_ENABLE_SHARED=NO \ - -DLLVM_ENABLE_RUNTIMES="rt;libunwind" \ - -DLIBCXXABI_ENABLE_STATIC=YES -DLIBCXXABI_ENABLE_EXCEPTIONS=YES \ - -DLIBCXXABI_USE_COMPILER_RT=YES -DLIBCXXABI_USE_LLVM_UNWINDER=YES \ - -DLIBCXXABI_LIBUNWIND_PATH="$LLVM_ROOT/libunwind" \ - -DLIBCXXABI_LIBCXX_INCLUDES="$LLVM_ROOT/libcxx/include" \ - -DLIBCXXABI_ENABLE_PIC=YES - # Build libcxx - cmake "$LLVM_ROOT/libcxx" -B "$WORK_PATH/llvm-build/libcxx" \ - -DCMAKE_INSTALL_PREFIX="$PREFIX" \ - -DCMAKE_C_COMPILER="$CC" -DCMAKE_CXX_COMPILER="$CXX" \ - -DCMAKE_C_FLAGS="$CFLAGS -D_LIBCPP_HAS_MUSL_LIBC=1 -D_GNU_SOURCE=1 -isysroot $PREFIX -isystem $PREFIX/include/c++/v1 -isystem $PREFIX/include" \ - -DCMAKE_CXX_FLAGS="$CXXFLAGS -D_LIBCPP_HAS_MUSL_LIBC=1 -D_GNU_SOURCE=1 -isysroot $PREFIX -isystem $PREFIX/include/c++/v1 -isystem $PREFIX/include" \ - -DCMAKE_ASM_COMPILER="$CC" -DCMAKE_ASM_FLAGS="$CFLAGS -x assembler-with-cpp" \ - -DLLVM_PATH="$LLVM_PATH" -DLIBCXX_ENABLE_RTTI=YES \ - -DLIBCXX_HAS_MUSL_LIBC=YES -DLIBCXX_ENABLE_SHARED=NO \ - -DLIBCXX_CXX_ABI=libcxxabi -DLIBCXX_CXX_ABI_INCLUDE_PATHS="$LLVM_ROOT/libcxxabi/include" \ - -DLIBCXX_CXX_ABI_LIBRARY_PATH="$LLVM_ROOT/libcxxabi/build/lib" - - cmake --build "$WORK_PATH/llvm-build/compiler-rt" --parallel - cmake --install "$WORK_PATH/llvm-build/compiler-rt" - - cmake --build "$WORK_PATH/llvm-build/libunwind" --parallel - cmake --install "$WORK_PATH/llvm-build/libunwind" - - cmake --build "$WORK_PATH/llvm-build/libcxxabi" --parallel - cmake --install "$WORK_PATH/llvm-build/libcxxabi" - - touch "$WORK_PATH/llvm-build/libcxx/include/c++/v1/libcxx.imp" - cmake --build "$WORK_PATH/llvm-build/libcxx" --parallel - cmake --install "$WORK_PATH/llvm-build/libcxx" -} - -build_tools() { - - # Build create-fself - cd create-fself/cmd/create-fself - cp go-linux.mod go.mod - go build -ldflags "-linkmode external -extldflags -static" -o create-fself - mv ./create-fself $PREFIX/bin/create-fself - cd ../../../ - - # Build create-gp4 - cd create-gp4/cmd/create-gp4 - go build -ldflags "-linkmode external -extldflags -static" -o create-gp4 - mv ./create-gp4 $PREFIX/bin/create-gp4 - cd ../../../ - - # Build readoelf - cd readoelf/cmd/readoelf - go build -ldflags "-linkmode external -extldflags -static" -o readoelf - mv ./readoelf $PREFIX/bin/readoelf - cd ../../../ - - # # Pull maxton's publishing tools (<3) - # # Sadly maxton has passed on, we have forked the repository and will continue to update it in the future. RIP <3 - # cd $PREFIX/bin - # [ -f PkgTool.Core-linux-x64-0.2.231.zip ] || wget https://github.com/maxton/LibOrbisPkg/releases/download/v0.2/PkgTool.Core-linux-x64-0.2.231.zip - # [ -f PkgTool.Core ] || unzip PkgTool.Core-linux-x64-0.2.231.zip - # chmod +x PkgTool.Core -} - -finish_prefix() { - as $WORK_PATH/OpenOrbis-PS4-Toolchain/src/crt/crtlib.S -o $PREFIX/lib/crtlib.o - cp -a $WORK_PATH/OpenOrbis-PS4-Toolchain/link.x $PREFIX/ - - cp -a ~/OpenOrbis/PS4Toolchain/lib/libkernel* $PREFIX/lib/ - cp -a ~/OpenOrbis/PS4Toolchain/lib/libSce* $PREFIX/lib/ - - cp -a ~/OpenOrbis/PS4Toolchain/lib/libSDL* $PREFIX/lib/ - cp -r ~/OpenOrbis/PS4Toolchain/include/SDL2 $PREFIX/include/SDL2 - - cp $WORK_PATH/llvm-build/compiler-rt/lib/freebsd/libclang_rt.builtins-x86_64.a $PREFIX/lib/ - - # Combine libc++, libc++abi and libunwind into a single archive - cat << EOF >"mri.txt" -CREATE $PREFIX/lib/libc++M.a -ADDLIB $PREFIX/lib/libunwind.a -ADDLIB $PREFIX/lib/libc++abi.a -ADDLIB $PREFIX/lib/libc++.a -SAVE -END -EOF - $AR -M < mri.txt - cp $PREFIX/lib/libc++M.a $PREFIX/lib/libc++.a - # Merge compiler-rt into libc - cat << EOF >"mri.txt" -CREATE $PREFIX/lib/libcM.a -ADDLIB $PREFIX/lib/libc.a -ADDLIB $PREFIX/lib/libclang_rt.builtins-x86_64.a -SAVE -END -EOF - $AR -M < mri.txt - cp $PREFIX/lib/libcM.a $PREFIX/lib/libc.a - rm mri.txt -} - -prepare_prefix -build_musl -build_llvm -build_tools -finish_prefix