preliminary gcc11 stuff for recent upstream changes

This commit is contained in:
Connor Olding 2023-06-14 07:26:14 +02:00
parent 48a94cf064
commit f24af56772
5 changed files with 371 additions and 0 deletions

119
notwa-util/cosmo-kuroko11 Executable file
View File

@ -0,0 +1,119 @@
#!/usr/bin/false
if [ ! -e /cosmo-kuroko.done ]; then
: \
&& cd /root \
&& acquire from=github repo=kuroko-lang/kuroko dest=/root/kuroko env=KUROKO \
&& cd /root/kuroko \
&& cp -r . ../kuroko.orig \
&& shed src/os.c \
's@.*char \*\* environ.*@#ifndef COSMOPOLITAN_LIBC_RUNTIME_RUNTIME_H_\n&\n#endif@' \
\
&& shed src/vm.c \
'/static.*cache/c\\static KrkClassCacheEntry * cache = 0;' \
$'/define CACHE_SIZE/,/nextCount/{N;w /temp\nd}' \
$'/void krk_initVM/{r /temp\nN}' \
$'/Reset current thread/i\\\tcache = calloc(CACHE_SIZE, sizeof(KrkClassCacheEntry));' \
$'/krk_freeMemoryDebugger();/a\\\tcache = (free(cache), NULL);' \
\
&& shed src/threads.c '/define gettid/d' \
&& shed src/vm.c '/"initial-exec"/d' \
\
&& shed src/vm.c \
$'/Ensure we don\'t have a macro/i\\
\\#ifdef KRK_DISABLE_DYNAMIC\\
KrkValue krk_module_onload_math(void);\\
KrkValue krk_module_onload_random(void);\\
KrkValue krk_module_onload_socket(void);\\
KrkValue krk_module_onload_timeit(void);\\
KrkValue krk_module_onload_wcwidth(void);\\
\\#endif\\
\\
\\#define BUILTIN_MODULE(name, init) { \\\\\\
\tKrkInstance * module = (KrkInstance*)AS_OBJECT(init()); \\\\\\
\tkrk_attachNamedObject(&vm.modules, name, (KrkObj*)module); \\\\\\
\tkrk_attachNamedObject(&module->fields, "__name__", (KrkObj*)S(name)); \\\\\\
\tkrk_attachNamedValue(&module->fields, "__file__", NONE_VAL()); \\\\\\
}\\
' \
$'/krk_module_init_dis/a\\
\\#endif\\
\\#ifdef KRK_DISABLE_DYNAMIC\\
\t\tBUILTIN_MODULE("math", krk_module_onload_math)\\
\t\tBUILTIN_MODULE("random", krk_module_onload_random)\\
\t\tBUILTIN_MODULE("socket", krk_module_onload_socket)\\
\t\tBUILTIN_MODULE("timeit", krk_module_onload_timeit)\\
\t\tBUILTIN_MODULE("wcwidth", krk_module_onload_wcwidth)\\
' \
\
&& shed src/modules/module_socket.c \
'/netdb\.h/a\#include <netinet/in.h>' \
$'/switch (afval)/{i\\
\tif (afval == AF_INET) return "AF_INET";\\
\tif (afval == AF_INET6) return "AF_INET6";\\
\tif (afval == AF_UNIX) return "AF_UNIX";\\
\tsnprintf(tmp,30,"%d",afval);\\
\treturn tmp;
}
/switch (afval)/,/}/d' \
\
&& shed src/kuroko.c \
$'/strlen(buf)-1/{
s/if .*/if (buf[buflen-1] == \'\\\\n\') {/
i\\
\t\t\t\tsize_t buflen = strlen(buf);
a\\
\t\t\t\t\t\\if (buflen >= 2 && buf[buflen-2] == \'\\\\r\') buf[buflen-2] = \'\\\\n\', buf[buflen-1] = \'\\0\';\\
\t\t\t\t} else {
}' \
\
&& shed Makefile \
$'/ifdef KRK_DISABLE_THREADS/i\\
ifdef KRK_DISABLE_DYNAMIC\\
BIN_OBJS += src/modules/module_math.o src/modules/module_random.o src/modules/module_socket.o src/modules/module_timeit.o src/modules/module_wcwidth.o\\
CFLAGS += -DKRK_DISABLE_DYNAMIC -DSTATIC_ONLY\\
endif\\
' \
$'/CFLAGS += -DKRK_DISABLE_THREADS/a\\
else\\
CFLAGS += -DKRK_MEDIOCRE_TLS\\
' \
'/shell tools\/can-floor-without-libm\.sh/,/endif/d' \
\
&& cd /root \
&& { diff -NrU3 kuroko.orig/ kuroko/ > kuroko.patch; [ $? -le 1 ]; } \
|| exit $?
# diff exit status is normally 0 or 1, anything greater is an error.
# this isn't included in the patch because it's super specific to cosmopolitan. \
: \
&& cd /root/kuroko \
&& shed src/kuroko.c 's/int main/dontinline int _main/' \
&& printf %s >>src/kuroko.c $'
STATIC_YOINK("__die");
void ShowCrashReports(void);
int LoadZipArgs(int *, char ***);
int main(int argc, char * argv[]) {
\tShowCrashReports();
\tLoadZipArgs(&argc, &argv);
\treturn _main(argc, argv);
}
' \
|| exit $?
: \
&& cd /root/kuroko \
&& CC=cosmocc CFLAGS="-Os -g" AR=ar.com ARFLAGS=rcsD \
make.com kuroko modules/codecs/sbencs.krk modules/codecs/dbdata.krk \
-j2 KRK_DISABLE_RLINE=1 KRK_DISABLE_DYNAMIC=1 \
&& cp kuroko kuroko.com.dbg \
&& `#objcopy -S -O binary kuroko.com.dbg kuroko.com` \
&& x86_64-linux-musl-objcopy -S -O binary kuroko.com.dbg kuroko.com \
&& zipcopy.com kuroko.com.dbg kuroko.com \
\
&& rm test/day23.krk \
&& rm test/testAnnotations.krk \
&& rm test/testSubclassPropertySuperCall.krk \
&& make.com test \
&& touch /cosmo-kuroko.done \
|| exit $?
fi

View File

@ -0,0 +1,54 @@
#!/usr/bin/false
if [ ! -e /cosmopolitan-bootstrap.done ]; then
: \
&& cd /root \
&& acquire from=github repo=jart/cosmopolitan dest=/root/cosmopolitan env=COSMO \
&& printf '%s\n' /tmp/tmp.*/cosmopolitan-* \
| while read -r d; do [ ! -d "$d" ] || rm -r "$d"; done \
&& cd /root/cosmopolitan \
&& export V=0 COLUMNS=80 TMPDIR=/tmp \
&& shed build/config.mk 's/-march=native/-march=haswell -mno-pclmul -mtune=generic/' \
&& sed -i 's/skip=" 76" count=" 128"/skip=76 count=128 /' build/bootstrap/*.com \
&& install -m0755 build/bootstrap/ape.elf /usr/bin/ape \
&& shed Makefile \
'/\bNET_HTTP\b/i\\tTHIRD_PARTY_LINENOISE\t\t\\' \
'/\bNET_HTTP\b/i\\tTOOL_ARGS\t\t\\' \
&& shed libc/elf/elf.h '/"libc\/elf\/struct\/ehdr.h"/i\\#include "libc/elf/struct/dyn.h"' \
&& shed third_party/awk/main.c '/pledge.*{/,/}/d' \
&& shed libc/calls/unveil.c \
'/^ if (landlock_abi_version == -1) {/i\
landlock_abi_version = landlock_create_ruleset(0, 0, LANDLOCK_CREATE_RULESET_VERSION);' \
&& patch -p1 -i /vagrant/notwa-util/zipfile-unfuckery.patch \
&& sed -i '/#\t/d' third_party/third_party.mk \
&& { [ "$COSMO_FLAVOR" != def ] && mode="$COSMO_FLAVOR" || mode= ;} \
&& printf '%s="%s"\n' >env \
commit "$COSMO_COMMIT" \
flavor "$COSMO_FLAVOR" \
mode "$mode" \
&& printf '%s\n' >makeit '#!/usr/bin/env sh' \
"build/bootstrap/make.com -j2 MODE='$mode'"' "$@"' \
&& printf '%s\n' >expand '#!/usr/bin/env sh' \
"o='o/$mode' once=false" \
'for f; do g="${f#?//}"; case "$f" in' \
'(a//*) f="$o/ape/$g";;' \
'(b//*) f="$o/tool/build/$g";;' \
'(e//*) f="$o/examples/$g";;' \
'(o//*) f="$o/$g";;' \
'(t//*) f="$o/third_party/$g";;' \
'(T//*) f="third_party/$g";;' \
'esac; $once && set -- "$@" "$f" || set -- "$f"; once=true; done' \
'"$@"' \
&& chmod +x makeit expand \
&& ./expand ./makeit a//ape.elf \
&& rebuild() { ./expand ./makeit "$@" && ./expand cp -int build/bootstrap "$@" ;} \
&& rebuild \
t//make/make.com b//ar.com b//chmod.com \
b//cocmd.com b//compile.com b//cp.com \
b//echo.com b//fixupobj.com b//gzip.com \
b//mkdeps.com b//mkdir.com b//package.com \
b//pwd.com b//rm.com b//touch.com \
b//unbundle.com b//zipcopy.com b//zipobj.com \
&& ./expand install -m0755 a//ape.elf /usr/bin/ape \
&& touch /cosmopolitan-bootstrap.done \
|| exit $?
fi

View File

@ -0,0 +1,51 @@
#!/usr/bin/false
# TODO: include these headers? https://0x0.st/Hcdi.c
if [ ! -e /cosmopolitan-install.done ]; then
: \
&& cd /root/cosmopolitan \
&& . ./env \
\
&& { [ ! -d dist ] || rm -r dist ;} \
&& mkdir -p "dist/$flavor/public" \
&& ./expand cp -int "dist/$flavor" \
a//ape-copy-self.o a//ape-no-modify-self.o a//ape.elf \
a//ape.lds a//ape.macho a//ape.o \
o//cosmopolitan.a o//libc/crt/crt.o o/cosmopolitan.h \
&& cp -int "dist/$flavor/public" "o/$mode/ape/public/ape.lds" \
\
&& install -m0755 "dist/$flavor/ape.elf" /usr/bin/ape \
&& install -m0755 -t /usr/bin tool/scripts/cosmocc tool/scripts/cosmoc++ \
&& find libc -name '*.h' >headers.txt \
&& ./expand tar zcf /tmp/headers.tar.gz -T headers.txt \
libc/integral T//gdtoa/gdtoa.h T//getopt/getopt.h \
T//linenoise/linenoise.h T//musl/crypt.h T//musl/fnmatch.h \
T//musl/lockf.h T//musl/passwd.h T//musl/rand48.h \
T//musl/tempnam.h T//regex/regex.h T//zlib/zconf.h \
T//zlib/zlib.h \
&& { ! [ -d "$COSMO" ] || rm -r "$COSMO" ;} \
&& mkdir -p "$COSMO" /tmp/bin \
&& find o -name '*.sym' -delete \
&& find o -name 'aarch64-linux-musl*' -exec rm -r '{}' + \
&& dedupe o/third_party/gcc "$COSMO/gcc/" \
bin/x86_64-linux-musl-gcc \
bin/x86_64-linux-musl-g++ \
bin/x86_64-linux-musl-ld.bfd \
&& dedupe dist "$COSMO/dist/" "$flavor/cosmopolitan.h" \
&& ./expand cp -int /tmp/bin \
t//make/make.com t//unzip/unzip.com t//zip/zip.com \
b//ar.com b//chmod.com b//cocmd.com \
b//compile.com b//cp.com b//echo.com \
b//fixupobj.com b//gzip.com b//mkdeps.com \
b//mkdir.com b//package.com b//pwd.com \
b//rm.com b//rollup.com b//symtab.com \
b//touch.com b//unbundle.com b//zipcopy.com \
b//zipobj.com \
&& dedupe /tmp/bin "$COSMO/bin/" \
&& cp "dist/$flavor/ape.elf" "$COSMO/bin/ape" \
&& cp /root/cosmopolitan/env "$COSMO/env" \
\
&& rm -r /root/cosmopolitan/dist \
&& tar zxf "/tmp/headers.tar.gz" -C "$COSMO" \
&& touch /cosmopolitan-install.done \
|| exit $?
fi

33
notwa-util/cosmopolitan11 Executable file
View File

@ -0,0 +1,33 @@
#!/usr/bin/false
if [ ! -e /cosmopolitan.done ]; then
: \
&& cd /root/cosmopolitan \
&& export V=0 COLUMNS=80 TMPDIR=/tmp \
&& export COSMO_FLAVOR=opt \
&& . ./env \
&& { [ "$COSMO_FLAVOR" != def ] && mode="$COSMO_FLAVOR" || mode= ;} \
&& printf '%s="%s"\n' >env \
commit "$commit" \
flavor "$COSMO_FLAVOR" \
mode "$mode" \
COSMO "/opt/cosmo" \
COSMO_DIST "/opt/cosmo/dist/$COSMO_FLAVOR" \
\
&& . ./env \
&& sed -i -e "s_MODE='[^']*'_MODE='$mode'_g" makeit \
&& sed -i -e "s_o='o/[^']*'_o='o/$mode'_g" expand \
\
&& { ./makeit depend || find o -name '*.o' -delete ;} \
&& ./makeit "o/$mode/third_party/make/make.com" \
&& cp -int build/bootstrap "o/$mode/third_party/make/make.com" \
\
&& skip() { mkdir -p "${1%/*}" && touch -d @2222222222 "$1" ;} \
&& `#skip "o/$mode/test/libc/calls/getgroups_test.com.runs"` \
&& `#skip "o/$mode/test/libc/calls/getpriority_test.com.runs"` \
&& `#skip "o/$mode/test/libc/stdio/tmpfile_test.com.runs"` \
&& `#skip "o/$mode/third_party/python/Lib/test/test_ioctl.py.runs"` `# SIGSEGV` \
&& `#skip "o/$mode/third_party/python/Lib/test/test_tarfile.py.runs"` \
&& ./makeit all \
&& touch /cosmopolitan.done \
|| exit $?
fi

114
notwa-util/doit11 Executable file
View File

@ -0,0 +1,114 @@
#!/usr/bin/env sh
if ! [ -d /vagrant ]; then
printf '%s\n' 'THIS FILE IS ONLY MEANT TO BE RUN BY VAGRANT.' >&2
exit 78 # EX_CONFIG
fi
# don't leak local IPs (i'm sure it's fine though)
unset SSH_CLIENT SSH_CONNECTION
export \
BUSYBOX_SHA256=b8cc24c9574d809e7279c3be349795c5d5ceb6fdf19ca709f80cde50e47de314 \
BUSYBOX_VERSION=1.36.1 \
COSMO_COMMIT=50d8d953ce498de24a52dbeca06ed9b61ff5760a \
COSMO_FLAVOR=fastbuild \
COSMO_SHA256=53941091c9bbfd455048a7cf3ab5179ce09d6e6542fa33135e79a28248c15348 \
ENDLESSH_COMMIT=dfe44eb2c5b6fc3c48a39ed826fe0e4459cdf6ef \
ENDLESSH_SHA256=c8989988af0a8c848d1a4979962f008c504a12ed6fe6a12e032c37feaa0ae5f8 \
GMP_SHA256=fd4829912cddd12f84181c3451cc752be224643e87fac497b69edddadc49b4f2 \
GMP_VERSION=6.2.1 \
HEATSHRINK_COMMIT=7d419e1fa4830d0b919b9b6a91fe2fb786cf3280 \
HEATSHRINK_SHA256=b18a1b7ad6f51eac7ac1a81ca072703bd21d6d8727c05cd505843643705af65d \
KISSAT_COMMIT=315cd3227fd2321d29d10f7d8572011bf00174a5 \
KISSAT_SHA256=031fca7efcb17c6f1921dd056052bd373de724e445fc2ed37bfdd5954148119f \
KUROKO_COMMIT=ed2405f46b2a86267508c645a31c081b12288320 \
KUROKO_SHA256=a0bf97bf1b7cb5aee47a9b7cde099ff419eea993c53429b2e9744f1dc785087a \
LR_COMMIT=5af9b79e4ecd07a600ded1a801023536cde97f95 \
LR_SHA256=3901287cdcf09d0d8f77f8aaa19ca24e9a873d904e201ab8e7bf102426607dcc \
MUON_COMMIT=34953adc6bd14851fe6fa5f5d469f7ef28ee3b32 \
MUON_SHA256=ba3ed8c9883a4a378a4cbcaf877d21d9574541b40c89215d1d21c72d616ed4db \
SELFIE_COMMIT=9d5cf9caac9b00ac48b96c527ddda6c550f652fa \
SELFIE_SHA256=5ea9e9cd7df6e6e67e3757cd8483e8e653fa4d7469275f3fdf89483c2744d4a9 \
XE_COMMIT=8a2a4899769335bc14c62aef12cdf26f2f487f2a \
XE_SHA256=f1ac997912c9be92a74a67a766dde74d1f9b6b20e48d7c7e71598ad4b787b37d \
YICES_COMMIT=d6448c122270684ffb308fd8d6f3ca09266f50df \
YICES_SHA256=d4aa3bedbc143516f8db57f189f96e09a1771f31215c16b4c13bcdca38f592e3 \
;
if [ ! -e /notwa-util.done ]; then
: \
&& cd /vagrant/notwa-util \
&& install -p -m 0755 -t /usr/local/bin/ acquire dedupe ofc quickconf shed \
&& touch /notwa-util.done \
|| exit $?
fi
. /vagrant/notwa-util/cosmopolitan-bootstrap11 || exit $?
. /vagrant/notwa-util/cosmopolitan11 || exit $?
cd /root/cosmopolitan && . ./env || exit $?
export COSMO COSMO_DIST
export COSMOS="$COSMO" MODE="$mode"
. /vagrant/notwa-util/cosmopolitan-install11 || exit $?
# TODO: make this less of a hot mess:
sed \
-e 's,/o/third_party/gcc/,/gcc/,g' \
-e 's,/o/$MODE/tool/build/,/bin/,g' \
-e 's,/o/$MODE/cosmopolitan.a,/dist/$MODE/cosmopolitan.a,g' \
-e 's,/libc/crt/,/dist/$MODE/,g' \
-e 's,/o/$MODE/,/,g' \
-e 's,/ape/,/dist/$MODE/,g' \
-i /usr/bin/cosmocc
cd /root && export PATH="$COSMO/bin:$COSMO/gcc/bin:$PATH" || exit $?
unset V COLUMNS TMPDIR
. /vagrant/notwa-util/cosmo-kuroko11 || exit $?
# . /vagrant/notwa-util/cosmo-mini11 || exit $?
# . /vagrant/notwa-util/cosmo-muon11 || exit $?
unset CC CFLAGS
# . /vagrant/notwa-util/cosmo-yices11 || exit $?
unset local_fn remote_url dest sha256
: \
&& cd /root \
&& . ./cosmopolitan/env \
&& export \
&& echo \
&& mkdir -p /vagrant/out/vagrant \
&& for com in \
`# endlessh/endlessh.com` \
`# heatshrink/heatshrink.com` \
`# kissat/build/kissat.com` \
kuroko/kuroko.com \
`#lr/lr.com` \
`#muon/build/muon.com` \
`#selfie/selfie.com` \
`#xe/xe.com` \
`#yices/dist/bin/yices-sat.com` \
`#yices/dist/bin/yices-smt.com` \
`#yices/dist/bin/yices-smt2.com` \
`#yices/dist/bin/yices.com` \
;do : \
&& du -k "$com" \
&& install -p -m 0755 -t /vagrant/out/vagrant "$com" \
;done \
&& echo \
&& d=/vagrant/out/vagrant/examples \
&& mkdir -p "$d" \
&& find "cosmopolitan/o/$mode/examples" -type f -name '*.com' \
-exec install -p -m 0755 -t "$d" {} + \
&& echo \
&& d=/vagrant/out/vagrant/third_party \
&& mkdir -p "$d" \
&& find "cosmopolitan/o/$mode/third_party" -type f -name '*.com' \
-exec install -p -m 0755 -t "$d" {} + \
&& echo \
&& d=/vagrant/out/vagrant/tool \
&& mkdir -p "$d" \
&& find "cosmopolitan/o/$mode/tool" -type f -name '*.com' \
-exec install -p -m 0755 -t "$d" {} + \
&& echo \
&& find -type f -name '*.com' | sort \
&& echo \
&& ls -1 /*.done \
|| exit $?