#!/bin/sh # arm64 backend compiler for fatcosmocc CC="$COSMO/o/third_party/gcc/bin/aarch64-linux-musl-gcc" CCFLAGS="-ffixed-x18 -ffixed-x28 -mno-outline-atomics" LDFLAGS="-static -nostdlib -no-pie -Wl,-z,norelro" APEFLAGS="-L$COSMOS/lib/.aarch64 -Wl,--gc-sections -Wl,-T,$COSMO/o/$MODE/ape/aarch64.lds $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/aarch64-linux-musl-g++" CCFLAGS="$CCFLAGS -fno-rtti -fno-exceptions -fuse-cxa-atexit" 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"$OPT" != x"-Os" ] && [ x"${MODE#aarch64-tiny}" != x"${MODE}" ]; then # support --ftrace unless optimizing for size CCFLAGS="$CCFLAGS -fpatchable-function-entry=7,6" fi if [ $INTENT = cc ]; then set -- "$CC" $CCFLAGS "$@" else set -- "$CC" $CCFLAGS $LDFLAGS $APEFLAGS $CPPFLAGS "$@" \ $LDLIBS -Wl,-z,common-page-size=16384 -Wl,-z,max-page-size=16384 fi printf '# %s\n(cd %s; %s)\n' "$ORIGINAL" "$PWD" "$*" >>"${TMPDIR:-/tmp}/build.log" "$@" || exit "$FIXUPOBJ" "$OUTPUT" || exit