sylware / nyanlinux (public) (License: AFFERO GPLv3) (since 2019-09-09) (hash sha1)
scripts for a lean, from scratch, amd hardware, linux distro

/builders/qbe-d41d91ddd851798349f37d9bb75ed2718bbe28f5/builder.sh (cbb7986ac8b223ed948b8affa21061f2a82f3926) (2658 bytes) (mode 100644) (type blob)

#XXX not yet in a toochain
src_name=qbe
git_commit=${pkg_name##*-}
slot=$git_commit
git_url0=git://c9x.me/qbe.git

pkg_dir=/run/pkgs/$src_name
src_dir=$src_dir_root/$src_name
rm -Rf $pkg_dir
mkdir -p /run/pkgs
cp -r $src_dir $pkg_dir

PATH_SAVED=$PATH
export PATH="\
/nyan/toolchains/binutils-tinycc/current/bin:\
/nyan/make/current/bin:\
/nyan/git/current/bin:\
$PATH\
"
toolchain_dir=/nyan/toolchains/binutils-tinycc/current
# XXX: we need libgccS with what wants the target glibc.
libgcc_dir=/opt/toolchains/x64/elf/binutils-gcc/current/lib/gcc/x86_64-pc-linux-gnu/13.2.0
target_gnu_triple=$(basename "$(ls -d $toolchain_dir/bin/*-tcc)")
target_gnu_triple=${target_gnu_triple%-tcc}

cd $pkg_dir

if test x$git_commit != x; then
	git checkout --force $git_commit
	git reset --hard
fi

build_dir=$builds_dir_root/$pkg_name
rm -Rf $build_dir
mkdir -p $build_dir
cd $build_dir

# XXX: we use our own build system.

printf "#define Deftgt T_amd64_sysv\n" >$build_dir/config.h

CPP="$target_gnu_triple-tcc -nostdinc -E -x c"
CC="$target_gnu_triple-tcc -nostdinc -nostdlib -x c -c"
LDBIN="$target_gnu_triple-ld"

src_files=" \
main.c \
util.c \
parse.c \
abi.c \
cfg.c \
mem.c \
ssa.c \
alias.c \
load.c \
copy.c \
fold.c \
simpl.c \
live.c \
spill.c \
rega.c \
emit.c \
\
amd64/targ.c \
amd64/sysv.c \
amd64/isel.c \
amd64/emit.c \
\
arm64/targ.c \
arm64/abi.c \
arm64/isel.c \
arm64/emit.c \
\
rv64/targ.c \
rv64/abi.c \
rv64/isel.c \
rv64/emit.c \
"

mkdir -p $build_dir/amd64
mkdir -p $build_dir/arm64
mkdir -p $build_dir/rv64

for src_file in $src_files
do
	cpp=$build_dir/$(dirname $src_file)/$(basename $src_file .c).cpp.c

	printf "CPP $src_dir/$src_file-->$cpp\n"
	$CPP -o $cpp \
		-I$build_dir \
		-I/nyan/linux-headers/current/include \
		-I/nyan/glibc/current/include \
		-I$toolchain_dir/lib/tcc/include \
		$src_dir/$src_file &
done

wait

for src_file in $src_files
do
	cpp=$build_dir/$(dirname $src_file)/$(basename $src_file .c).cpp.c
	o=$build_dir/$(dirname $src_file)/$(basename $src_file .c).o
	os="$os $o"

	printf "CC $cpp-->$o\n"
	$CC -o $o $cpp &
done

wait

# XXX: trying to build a static pie or even a static executable is full of conflicts
# don't try unless with brand new build of the glibc.
printf "LDDBIN qbe\n"
$LDBIN -o $build_dir/qbe \
	-s \
	--dynamic-linker=/lib64/ld-linux-x86-64.so.2 \
	/nyan/glibc/current/lib/crt1.o \
	/nyan/glibc/current/lib/crti.o \
	$os \
	-L/nyan/glibc/current/lib \
	-lc \
	-L$toolchain_dir/lib/tcc \
	-ltcc1 \
	/nyan/glibc/current/lib/crtn.o

mkdir -p /nyan/qbe/$slot/bin
cp -f ./qbe //nyan/qbe/$slot/bin

export PATH=$PATH_SAVED
unset PATH_SAVED
unset target_gnu_triple
rm -Rf $pkg_dir $build_dir


Mode Type Size Ref File
100644 blob 5 8eba6c8dd4dcaf6166bd22285ed34625f38a84ff .gitignore
100755 blob 1587 57fa4264b9ee0ae0a6f678f2527a05d3b22dda78 00-bootstrap-build.sh
100755 blob 848 a30f443bf405d56682efe3b4c5d3a19d5f7eb45d 01-re-bootstrap-build.sh
100644 blob 2142 f19c2d6b293244bb11a3f74ee77c10675cadc7d6 INSTALL
100644 blob 30 c9b735fa1332286f4b3f5f81fa10527fd7506b6e LICENSE
040000 tree - ec18cec5a18b12379c13e068413b4ca5d689bf28 builders
100644 blob 1773 ef1551089a803bde37e36edc8d61bb819d06f793 conf.bootstrap.sh
100644 blob 479 8cc15efe46965ac7750fe304460f5a2b0aa4201c conf.sh
040000 tree - 7736496abef80608f40188d3f4425ef67a16375e files
100755 blob 356 8fb8be28ac72f7214b59934b9f74a682665f2d32 pkg-build
100644 blob 22800641 e9e6291054c857401f6835c728f31541dae4311e steam.tar.bz2
100644 blob 173 2047af328b22f9d146585cd9e759edbc18122250 utils.sh
040000 tree - 8e23f551092a35f82b37129dd08c35c4d313c17b x64
040000 tree - b7a22de7f5cbd97650dd45412ef7d4246e395eb8 x86
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/sylware/nyanlinux

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/sylware/nyanlinux

Clone this repository using git:
git clone git://git.rocketgit.com/user/sylware/nyanlinux

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main