#!/bin/bash

# This sets environment variables used by scripts/make.sh

# People run ./configure out of habit, so do "defconfig" for them.

if [ "$(basename "$0")" == configure ]
then
  echo "Assuming you want 'make defconfig', but you should probably check the README."
  make defconfig
  exit $?
fi

# CFLAGS and OPTIMIZE are different so you can add extra CFLAGS without
# disabling default optimizations
[ -z "$CFLAGS" ] && CFLAGS="-Wall -Wundef -Wno-char-subscripts -Werror=implicit-function-declaration -Wno-pointer-sign"
# Required for our expected ABI. we're 8-bit clean thus "char" must be unsigned.
CFLAGS="$CFLAGS -funsigned-char"
[ -z "$OPTIMIZE" ] && OPTIMIZE="-Os -ffunction-sections -fdata-sections -fno-asynchronous-unwind-tables -fno-strict-aliasing"
# set ASAN=1 to enable "address sanitizer" and debuggable backtraces
[ -z "$ASAN" ] || { CFLAGS="$CFLAGS -O1 -g -fno-omit-frame-pointer -fno-optimize-sibling-calls -fsanitize=address"; NOSTRIP=1; }

# We accept LDFLAGS, but by default don't have anything in it
if [ "$(uname)" == "Darwin" ]
then
  [ -z "$LDOPTIMIZE" ] && LDOPTIMIZE="-Wl,-dead_strip"
else
  [ -z "$LDOPTIMIZE" ] && LDOPTIMIZE="-Wl,--gc-sections"
  LDASNEEDED="-Wl,--as-needed"
fi

# The makefile provides defaults for these, so this only gets used if
# you call scripts/make.sh and friends directly.

[ -z "$CC" ] && CC=cc

# Strip harder on Linux.
# Darwin's strip doesn't have equivalents of the binutils -s or -R.
[ -z "$STRIP" ] && STRIP=strip
if [ "$(uname)" != "Darwin" ]
then
  [ -z "$STRIP" ] && STRIP="strip -s -R .note* -R .comment"
fi

# If HOSTCC needs CFLAGS or LDFLAGS, just add them to the variable
# ala HOSTCC="blah-cc --static"
[ -z "$HOSTCC" ] && HOSTCC=cc

[ -z "$GENERATED" ] && GENERATED=generated
