# flags for the build - adjust for your needs
# delete all the generated stuff afterwards (with `rm -r gen`)
CC='gcc'
-CFLAGS='-O3 -Wall -Werror -fPIC -std=c99 -march=native'
+# -fstack-check isn't just hardening - we do unbounded stack allocations in TPRINTF!
+CFLAGS='-O3 -Wall -Werror -Wno-error=strict-aliasing -fPIC -std=c99 -march=native -fstack-check -fstack-protector-all -D_FORTIFY_SOURCE=2'
# create build environment if it doesn't exist yet
mkdir -p gen # contains all generated files
echo "going ahead with CFLAGS=\"$CFLAGS\"..." >&2
# generate header
+set +f
+# needs correct order, so list them here
+cat header.h bufio.h > gen/jh.h
+set -f
for source_file in $(ls|grep '\.c$'); do
echo "extracting header data from $source_file..." >&2
source_name="$(sed 's|\.c$||' <<< "$source_file")"
echo ''
echo ''
-done > gen/jh.h
+done >> gen/jh.h
# preprocess all source files
for source_file in $(ls|grep '\.c$'); do
(set +e +o pipefail; grep -v '^PUBLIC_CONST '; exit 0) |
sed 's|^PUBLIC_FN ||g' |
(set +e +o pipefail; grep -v '^HEADER '; exit 0) |
+ sed 's| *JH_ATTR_[A-Z_]*||g' |
cat >> "gen/realc/$source_name.c"
if [ $? -ne 0 ]; then exit 1; fi
# ... and link!
cd gen/obj
$CC -shared -Wl,-soname,libjh.so -o ../libjh.so $(ls)
+ar rcs ../libjh.a $(ls)
cd ../..