set -eux set -o pipefail exec >&2 ARCH=${ARCH:-x86_64} AR=${AR:-ar} CC=${CC:-cc} CFLAGS=${CFLAGS:--O2 -D _XOPEN_SOURCE=700} bits_hdrs () { printf "%s\n" arch/$ARCH/bits/*.h printf "%s\n" arch/generic/bits/*.h } internal_hdrs () { echo "src/internal/version.h" printf "%s\n" src/internal/*.h } all_hdrs () { internal_hdrs echo "include/bits/alltypes.h" echo "include/bits/syscall.h" bits_hdrs printf "%s\n" include/*.h include/*/*.h } all_src () { printf "%s\n" src/*/$ARCH/*.[csS] printf "%s\n" src/*/*.c src/malloc/mallocng/*.c } all_obj () { all_src | sed -e 's/\.[csS]$/.o/g' } case "$1" in all) mkdir -p include/bits redo-ifchange libc.a ;; libc.a) obj="$(all_obj)" redo-ifchange $obj $AR rc "$3" $obj ;; src/internal/version.h) echo "#define VERSION \"unknown\"" > "$3" ;; include/bits/alltypes.h) redo-ifchange tools/mkalltypes.sed arch/$ARCH/bits/alltypes.h.in include/alltypes.h.in sed -f tools/mkalltypes.sed arch/$ARCH/bits/alltypes.h.in include/alltypes.h.in > "$3" ;; include/bits/syscall.h) redo-ifchange arch/$ARCH/bits/syscall.h.in cp arch/$ARCH/bits/syscall.h.in "$3" sed -n -e s/__NR_/SYS_/p < arch/$ARCH/bits/syscall.h.in >> "$3" ;; *.o) cfile="${1%.o}.c" sfile="${1%.o}.s" Sfile="${1%.o}.S" if test -e "$cfile" then src="$cfile" elif test -e "$sfile" then src="$sfile" elif test -e "$Sfile" then src="$Sfile" else echo "don't know how to build $1" 2>&1 exit 1 fi redo-ifchange $(all_hdrs) "$src" includes=" -nostdinc -I./arch/$ARCH -I./arch/generic -I./src/internal -I./src/include -I./include " $CC $CFLAGS $includes -c -o "$3" "$src" ;; *) echo "don't know how to build $1" 2>&1 exit 1 ;; esac