#!/bin/sh # amd64 backend compiler for fatcosmocc CC="$COSMO/o/third_party/gcc/bin/x86_64-linux-musl-gcc" CFLAGS="-mno-tls-direct-seg-refs -mno-red-zone" LDFLAGS="-static -nostdlib -no-pie -Wl,-melf_x86_64 -Wl,-z,common-page-size=4096 -Wl,-z,max-page-size=4096 -fuse-ld=bfd" APEFLAGS="-L$COSMOS/lib -Wl,--gc-sections -Wl,-T,$COSMO/o/$MODE/ape/public/ape.lds" LDLIBS="$COSMO/o/$MODE/cosmopolitan.a" if [ x"$PROG" != x"${PROG%++}" ]; then CC="$COSMO/o/third_party/gcc/bin/x86_64-linux-musl-g++" CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -fuse-cxa-atexit" LDLIBS="$COSMO/o/$MODE/third_party/libcxx/libcxx.a $LDLIBS" fi log_command() { if [ -n "$BUILDLOG" ]; then printf '# %s\n(cd %s; %s)\n' "$ORIGINAL" "$PWD" "$*" >>"$BUILDLOG" 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 CFLAGS="$CFLAGS -mlong-double-64" fi if [ x"$OPT" != x"-Os" ] && # $OPT != -Os [ x"${MODE%tiny}" = x"${MODE}" ]; then # $MODE not in (tiny, aarch64-tiny) # support --ftrace unless optimizing for size CFLAGS="$CFLAGS -fpatchable-function-entry=18,16" fi if [ $INTENT = cc ]; then set -- \ "$CC" \ $CFLAGS \ "$@" else set -- \ "$CC" \ "$COSMO/o/$MODE/ape/ape.o" \ "$COSMO/o/$MODE/libc/crt/crt.o" \ "$@" \ $LDFLAGS \ $APEFLAGS \ $LDLIBS fi log_command "$@" "$@" || exit "$FIXUPOBJ" "$OUTPUT" || exit