Skip to content

Commit

Permalink
Build Senna with OBGGCC
Browse files Browse the repository at this point in the history
  • Loading branch information
Kartatz committed Jul 5, 2023
1 parent f6ad577 commit b01cb1e
Show file tree
Hide file tree
Showing 6 changed files with 110 additions and 6 deletions.
35 changes: 32 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,42 @@ on:
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
target: [
alpha-unknown-linux-gnu,
x86_64-unknown-linux-gnu,
i386-unknown-linux-gnu,
arm-unknown-linux-gnueabi,
arm-unknown-linux-gnueabihf,
hppa-unknown-linux-gnu,
aarch64-unknown-linux-gnu,
mips-unknown-linux-gnu,
mipsel-unknown-linux-gnu,
powerpc-unknown-linux-gnu,
s390-unknown-linux-gnu,
s390x-unknown-linux-gnu,
sparc-unknown-linux-gnu,
powerpc64le-unknown-linux-gnu
]
steps:
- uses: actions/checkout@main
with:
submodules: true
- name: Run build script
run: bash ./build.sh
- name: Build Senna with OBGGCC
run: |
source './submodules/obggcc/tools/setup_toolchain.sh'
source './tools/setup_toolchain.sh'
bash './build.sh' '${{ matrix.target }}'
- name: Generate tarball
run: |
declare tarball_filename='${{ matrix.target }}.tar.xz'
tar --directory='/tmp' --create --file=- 'senna' | xz --threads=0 --compress -9 > "${tarball_filename}"
sha256sum "${tarball_filename}" > "${tarball_filename}.sha256"
- name: Upload artifact
uses: actions/upload-artifact@main
with:
path: ./serenity-cross.tar.xz
path: |
${{ matrix.target }}.tar.xz
${{ matrix.target }}.tar.xz.sha256
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "submodules/obggcc"]
path = submodules/obggcc
url = https://github.com/AmanoTeam/obggcc
11 changes: 8 additions & 3 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ declare -r serenity_directory='/tmp/serenity-a627c15b077f6d11e160b4ec5995e2984fc
declare -r optflags='-Os'
declare -r linkflags='-Wl,-s'

source "./submodules/obggcc/toolchains/${1}.sh"

if ! [ -f "${gmp_tarball}" ]; then
wget --no-verbose 'https://mirrors.kernel.org/gnu/gmp/gmp-6.2.1.tar.xz' --output-document="${gmp_tarball}"
tar --directory="$(dirname "${gmp_directory}")" --extract --file="${gmp_tarball}"
Expand Down Expand Up @@ -74,6 +76,7 @@ cd "${gmp_directory}/build"
rm --force --recursive ./*

../configure \
--host="${CROSS_COMPILE_TRIPLET}" \
--prefix="${toolchain_directory}" \
--enable-shared \
--enable-static \
Expand All @@ -90,6 +93,7 @@ cd "${mpfr_directory}/build"
rm --force --recursive ./*

../configure \
--host="${CROSS_COMPILE_TRIPLET}" \
--prefix="${toolchain_directory}" \
--with-gmp="${toolchain_directory}" \
--enable-shared \
Expand All @@ -107,6 +111,7 @@ cd "${mpc_directory}/build"
rm --force --recursive ./*

../configure \
--host="${CROSS_COMPILE_TRIPLET}" \
--prefix="${toolchain_directory}" \
--with-gmp="${toolchain_directory}" \
--enable-shared \
Expand Down Expand Up @@ -139,6 +144,7 @@ for target in "${targets[@]}"; do
rm --force --recursive ./*

../configure \
--host="${CROSS_COMPILE_TRIPLET}" \
--target="${target}" \
--prefix="${toolchain_directory}" \
--enable-gold \
Expand All @@ -159,6 +165,7 @@ for target in "${targets[@]}"; do
rm --force --recursive ./*

../configure \
--host="${CROSS_COMPILE_TRIPLET}" \
--target="${target}" \
--prefix="${toolchain_directory}" \
--with-linker-hash-style='gnu' \
Expand Down Expand Up @@ -198,7 +205,7 @@ for target in "${targets[@]}"; do
--disable-nls \
CFLAGS="${optflags}" \
CXXFLAGS="${optflags}" \
LDFLAGS="${linkflags}"
LDFLAGS="-Wl,-rpath-link,${OBGGCC_TOOLCHAIN}/${CROSS_COMPILE_TRIPLET}/lib"

LD_LIBRARY_PATH="${toolchain_directory}/lib" PATH="${PATH}:${toolchain_directory}/bin" make \
CFLAGS_FOR_TARGET="${optflags} ${linkflags}" \
Expand All @@ -220,5 +227,3 @@ for target in "${targets[@]}"; do
patchelf --add-rpath '$ORIGIN/../../../../lib' "${toolchain_directory}/libexec/gcc/${target}/"*'/cc1plus'
patchelf --add-rpath '$ORIGIN/../../../../lib' "${toolchain_directory}/libexec/gcc/${target}/"*'/lto1'
done

tar --directory="$(dirname "${toolchain_directory}")" --create --file=- "$(basename "${toolchain_directory}")" | xz --threads=0 --compress -9 > "${toolchain_tarball}"
38 changes: 38 additions & 0 deletions build_all.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/bin/bash

set -eu

declare -ra targets=(
'alpha-unknown-linux-gnu'
'x86_64-unknown-linux-gnu'
'i386-unknown-linux-gnu'
'arm-unknown-linux-gnueabi'
'arm-unknown-linux-gnueabihf'
'hppa-unknown-linux-gnu'
'aarch64-unknown-linux-gnu'
'mips-unknown-linux-gnu'
'mipsel-unknown-linux-gnu'
'powerpc-unknown-linux-gnu'
's390-unknown-linux-gnu'
's390x-unknown-linux-gnu'
'sparc-unknown-linux-gnu'
'powerpc64le-unknown-linux-gnu'
'mips64el-unknown-linux-gnuabi64'
)

declare -r tarballs_directory="${PWD}/senna-tarballs"

[ -d "${tarballs_directory}" ] || mkdir "${tarballs_directory}"

source './tools/setup_toolchain.sh'

for target in "${targets[@]}"; do
bash './build.sh' "${target}"

declare tarball_filename="${tarballs_directory}/${target}.tar.xz"

tar --directory='/tmp' --create --file=- 'senna' | xz --threads=0 --compress -9 > "${tarball_filename}"
sha256sum "${tarball_filename}" > "${tarball_filename}.sha256"

rm --recursive '/tmp/senna'
done
1 change: 1 addition & 0 deletions submodules/obggcc
Submodule obggcc added at 0820ee
28 changes: 28 additions & 0 deletions tools/setup_toolchain.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/bin/bash

set -eu

declare -r SENNA_TOOLCHAIN='/tmp/senna-toolchain'

if [ -d "${SENNA_TOOLCHAIN}" ]; then
PATH+=":${SENNA_TOOLCHAIN}/bin"
export SENNA_TOOLCHAIN \
PATH
return 0
fi

declare -r SENNA_CROSS_TAG="$(jq --raw-output '.tag_name' <<< "$(curl --retry 10 --retry-delay 3 --silent --url 'https://api.github.com/repos/AmanoTeam/Senna/releases/latest')")"
declare -r SENNA_CROSS_TARBALL='/tmp/senna.tar.xz'
declare -r SENNA_CROSS_URL="https://github.com/AmanoTeam/Senna/releases/download/${SENNA_CROSS_TAG}/x86_64-linux-gnu.tar.xz"

curl --retry 10 --retry-delay 3 --silent --location --url "${SENNA_CROSS_URL}" --output "${SENNA_CROSS_TARBALL}"
tar --directory="$(dirname "${SENNA_CROSS_TARBALL}")" --extract --file="${SENNA_CROSS_TARBALL}"

rm "${SENNA_CROSS_TARBALL}"

mv '/tmp/senna' "${SENNA_TOOLCHAIN}"

PATH+=":${SENNA_TOOLCHAIN}/bin"

export SENNA_TOOLCHAIN \
PATH

0 comments on commit b01cb1e

Please sign in to comment.