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

/builders/cproc-0985a7893a4b5de63a67ebab445892d9fffe275b/builder.sh (4f7e23f6b4fba5dad1277024bf319e69f9d3d7d0) (4152 bytes) (mode 100644) (type blob)

#XXX not yet in a toolchain
src_name=cproc
git_commit=${pkg_name##*-}
slot=$git_commit
git_url0=https://git.sr.ht/~mcf/cproc

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

tcc_path=/nyan/toolchains/binutils-tinycc/current

PATH_SAVED=$PATH
export PATH="\
$tcc_path/bin:\
/nyan/make/current/bin:\
/nyan/git/current/bin:\
$PATH\
"
target_gnu_triple=$(basename "$(ls -d $tcc_path/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/$src_name-$slot
rm -Rf $build_dir
mkdir -p $build_dir
cd $build_dir

# XXX we don't run the configure script and genereate config.h and config.mk ourself
# XXX we are trying to make it work with a 0-driver tcc
defines=
cat >config.h <<EOF
static const char target[]               = "$target_gnu_triple";
static const char *const startfiles[]    = {"",""}; /* XXX: EMPTY FOR NOW */
static const char *const endfiles[]      = {"",""}; /* XXX: EMPTY FOR NOW */
static const char *const preprocesscmd[] = {
	"/nyan/cproc/$slot/bin/cpp",

	/* clear preprocessor GNU C version */
	"-U", "__TINYC__",
	"-U", "__TCC_PP__",

	/* we don't yet support these optional features */
	"-D", "__STDC_NO_ATOMICS__",
	"-D", "__STDC_NO_COMPLEX__",
	"-D", "__STDC_NO_VLA__",
	"-U", "__SIZEOF_INT128__",

	/* we don't generate position-independent code */
	"-U", "__PIC__",

	/* ignore attributes and extension markers */
	"-D", "__attribute__(x)=",
	"-D", "__extension__=",
$defines};
static const char *const codegencmd[]    = {"/nyan/qbe/current/bin/qbe"};
static const char *const assemblecmd[]   = {"$tcc_path/bin/$target_gnu_triple-as"};
static const char *const linkcmd[]       = {"$tcc_path/bin/$target_gnu_triple-ld", "-B/nyan/glibc/current/lib --dynamic-linker '/lib64/ld-linux-x86-64.so.2'"};
EOF

# makefile syntax (hence variable syntax)
cat >config.mk <<EOF
PREFIX=/nyan/cproc/$slot
BINDIR=\$(PREFIX)/bin
CC=$target_gnu_triple-tcc
CFLAGS=
LDFLAGS=
EOF

qbe_src_files="\
decl.c \
eval.c \
expr.c \
init.c \
main.c \
map.c \
pp.c \
scan.c \
scope.c \
siphash.c \
stmt.c \
targ.c \
token.c \
tree.c \
type.c \
utf.c \
util.c \
qbe.c \
"

driver_src_files="\
driver.c \
util.c \
"

for f in $driver_src_files $qbe_src_files
do
	cpp=$build_dir/$(basename $f .c).cpp.c

	printf "CPP $pkg_dir/$f-->$cpp\n"
	$target_gnu_triple-tcc \
		-E -nostdinc \
		-I$tcc_path/lib/tcc/include \
		-I/nyan/linux-headers/current/include \
		-I/nyan/glibc/current/include \
\
		-I$build_dir \
		-I$pkg_dir \
		-o $cpp \
		$pkg_dir/$f &
done 

wait

for f in $qbe_src_files
do
	cpp=$build_dir/$(basename $f .c).cpp.c
	o=$build_dir/$(basename $f .c).o
	qbe_os="$qbe_os $o"

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

for f in $driver_src_files
do
	cpp=$build_dir/$(basename $f .c).cpp.c
	o=$build_dir/$(basename $f .c).o
	driver_os="$driver_os $o"

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

wait

mkdir -p /nyan/cproc/$slot/bin

# XXX: too much conflict between gcc/glibc and tcc to build static binaries :(
printf "LDDBIN /nyan/cproc/$slot/bin/cproc\n"
$target_gnu_triple-ld \
	-pie -s \
	--dynamic-linker=/lib64/ld-linux-x86-64.so.2 \
	/nyan/glibc/current/lib/crt1.o \
	/nyan/glibc/current/lib/crti.o \
	$driver_os \
	-L/nyan/glibc/current/lib \
	-lc \
	/nyan/glibc/current/lib/crtn.o \
	-o /nyan/cproc/$slot/bin/cproc &

# XXX: too much conflict between gcc/glibc and tcc to build static binaries :(
printf "LDDBIN /nyan/cproc/$slot/bin/cproc-qbe\n"
$target_gnu_triple-ld \
	-pie -s \
	--dynamic-linker=/lib64/ld-linux-x86-64.so.2 \
	/nyan/glibc/current/lib/crt1.o \
	/nyan/glibc/current/lib/crti.o \
	$qbe_os \
	-L/nyan/glibc/current/lib \
	-lc \
	-L$tcc_path/lib/tcc \
	-ltcc1 \
	/nyan/glibc/current/lib/crtn.o \
	-o /nyan/cproc/$slot/bin/cproc-qbe

cat >/nyan/cproc/$slot/bin/cpp <<EOF
#!/bin/sh
exec $tcc_path/bin/$target_gnu_triple-tcc -E "\$@"
EOF
chmod +x /nyan/cproc/$slot/bin/cpp

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


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 - c7884518cf713dbbf4da7a0170f636fad7fac8d1 builders
100644 blob 1773 ef1551089a803bde37e36edc8d61bb819d06f793 conf.bootstrap.sh
100644 blob 479 8cc15efe46965ac7750fe304460f5a2b0aa4201c conf.sh
040000 tree - 592318e6ef1254b47b763ed8ec896098afeb7a8c 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