/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 |
- |
b2f9205e1ca688ebdc08741a5fa512fbbd37de94 |
builders |
100644 |
blob |
1773 |
ef1551089a803bde37e36edc8d61bb819d06f793 |
conf.bootstrap.sh |
100644 |
blob |
479 |
8cc15efe46965ac7750fe304460f5a2b0aa4201c |
conf.sh |
040000 |
tree |
- |
37fb4df620fed5aaca7f238f575dacc41ad90178 |
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