mirror of
https://github.com/jart/cosmopolitan.git
synced 2024-05-18 03:22:40 +00:00
d53c335a45
This new script is an alternative to the `cosmocc` command. It's still a work in progress. It abstracts all the gory details of building separate copies of your executable and then running the apelink.com program.
57 lines
1.6 KiB
Bash
Executable file
57 lines
1.6 KiB
Bash
Executable file
#!/bin/sh
|
|
# amd64 backend compiler for fatcosmocc
|
|
|
|
CC="$COSMO/o/third_party/gcc/bin/x86_64-linux-musl-gcc"
|
|
CCFLAGS="-mno-tls-direct-seg-refs -mno-red-zone"
|
|
LDFLAGS="-static -nostdlib -no-pie -Wl,-melf_x86_64"
|
|
APEFLAGS="-L$COSMOS/lib -Wl,--gc-sections -Wl,-T,$COSMO/o/$MODE/ape/public/ape.lds $COSMO/o/$MODE/ape/ape.o $COSMO/o/$MODE/libc/crt/crt.o"
|
|
LDLIBS="$COSMO/o/$MODE/cosmopolitan.a"
|
|
|
|
if [ x"$PROG" != x"${PROG%++}" ]; then
|
|
CC="$COSMO/o/third_party/gcc/bin/x86_64-linux-musl-g++"
|
|
CCFLAGS="$CCFLAGS -fno-rtti -fno-exceptions -fuse-cxa-atexit -fno-threadsafe-statics"
|
|
LDLIBS="$COSMO/o/$MODE/third_party/libcxx/libcxx.a $LDLIBS"
|
|
fi
|
|
|
|
OPT=
|
|
FIRST=1
|
|
OUTPUT=
|
|
INTENT=ld
|
|
for x; do
|
|
if [ $FIRST -eq 1 ]; then
|
|
set --
|
|
FIRST=0
|
|
fi
|
|
if [ x"$x" != x"${x#-O}" ]; then
|
|
OPT=$x
|
|
elif [ x"$x" = x"-c" ]; then
|
|
INTENT=cc
|
|
elif [ x"$x" != x"${x#-o}" ]; then
|
|
OUTPUT=${x#-o}
|
|
elif [ x"$x" = x"-march=native" ]; then
|
|
continue # doesn't make sense for a cross compiler
|
|
fi
|
|
set -- "$@" "$x"
|
|
done
|
|
|
|
if [ x"$MODE" = x"nox87" ]; then
|
|
CCFLAGS="$CCFLAGS -mlong-double-64"
|
|
fi
|
|
|
|
if [ x"$OPT" != x"-Os" ] && [ x"${MODE#tiny}" != x"${MODE}" ]; then
|
|
# support --ftrace unless optimizing for size
|
|
CCFLAGS="$CCFLAGS -fpatchable-function-entry=18,16"
|
|
fi
|
|
|
|
if [ $INTENT = cc ]; then
|
|
set -- "$CC" $CCFLAGS "$@"
|
|
else
|
|
set -- "$CC" $CCFLAGS $LDFLAGS $APEFLAGS $CPPFLAGS "$@" \
|
|
$LDLIBS -Wl,-z,common-page-size=4096 -Wl,-z,max-page-size=4096 \
|
|
-fuse-ld=bfd
|
|
fi
|
|
|
|
printf '# %s\n(cd %s; %s)\n' "$ORIGINAL" "$PWD" "$*" >>"${TMPDIR:-/tmp}/build.log"
|
|
"$@" || exit
|
|
"$FIXUPOBJ" "$OUTPUT" || exit
|