From e0d6839c8cdb0931940904e19cef2dea6fb8333b Mon Sep 17 00:00:00 2001 From: q66 Date: Mon, 6 Mar 2017 03:28:28 +0100 Subject: [PATCH] add build.sh to build ostd stuff --- Makefile | 23 -------- build.sh | 165 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 165 insertions(+), 23 deletions(-) delete mode 100644 Makefile create mode 100755 build.sh diff --git a/Makefile b/Makefile deleted file mode 100644 index 5a0e04c..0000000 --- a/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -OSTD_CXXFLAGS = -O2 -g -std=c++1z -Wall -Wextra -Wshadow -Wold-style-cast -I. - -EXAMPLES_OBJ = \ - examples/format \ - examples/listdir \ - examples/range \ - examples/range_pipe \ - examples/signal \ - examples/stream1 \ - examples/stream2 - -all: examples - -examples: $(EXAMPLES_OBJ) - -.cc: - $(CXX) $(CXXFLAGS) $(OSTD_CXXFLAGS) -o $@ $< - -test: test_runner - @./test_runner - -clean: - rm -f $(EXAMPLES_OBJ) test_runner diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..39bbd5b --- /dev/null +++ b/build.sh @@ -0,0 +1,165 @@ +#!/bin/sh + +# fail on error +set -e + +# example sources +EXAMPLES="format listdir range range_pipe signal stream1 stream2" + +# assembly sources +ASM_SOURCES="jump_all_gas make_all_gas ontop_all_gas" +ASM_LIB="context.a" + +# compiler +if [ -z "$CXX" ]; then + CXX="c++" +fi + +# preprocessor +if [ -z "$CPP" ]; then + CPP="cpp" +fi + +# assembler +if [ -z "$AS" ]; then + AS="as" +fi + +# ar +if [ -z "$AR" ]; then + AR="ar" +fi + +# c++ standard +OSTD_CXXFLAGS="-std=c++1z" + +# includes +OSTD_CXXFLAGS="${OSTD_CXXFLAGS} -I." + +# optimization flags +OSTD_CXXFLAGS="${OSTD_CXXFLAGS} -O2" + +# warnings +OSTD_CXXFLAGS="${OSTD_CXXFLAGS} -Wall -Wextra -Wshadow -Wold-style-cast" + +# custom cxxflags +if [ ! -z "$CXXFLAGS" ]; then + OSTD_CXXFLAGS="${OSTD_CXXFLAGS} ${CXXFLAGS}" +fi + +# preprocessor flags +OSTD_CPPFLAGS="" + +# custom cppflags +if [ ! -z "$CPPFLAGS" ]; then + OSTD_CPPFLAGS="${OSTD_CPPFLAGS} ${CPPFLAGS}" +fi + +# linker flags +OSTD_LDFLAGS="" + +# custom linker flags +if [ ! -z "$LDFLAGS" ]; then + OSTD_LDFLAGS="${OSTD_LDFLAGS} ${LDFLAGS}" +fi + +# assembler flags +OSTD_ASFLAGS="" + +# custom assembler flags +if [ ! -z "$LDFLAGS" ]; then + OSTD_LDFLAGS="${OSTD_LDFLAGS} ${LDFLAGS}" +fi + +# +# BUILD LOGIC +# + +# clean everything +clean() { + echo "Cleaning..." + for ex in ${EXAMPLES}; do + rm -f "examples/${ex}" "examples/${ex}.o" + done + for as in ${ASM_SOURCES}; do + rm -f "${as}.o" + done + rm -f "$ASM_LIB" + rm -f test_runner.o test_runner +} + +# call_cxx input output +call_cxx() { + echo "CXX: $1" + eval "${CXX} ${OSTD_CPPFLAGS} ${OSTD_CXXFLAGS} -c -o ${2} ${1}" +} + +# call_as input output +call_as() { + echo "AS: src/asm/${1}" + eval "${CPP} -x assembler-with-cpp \"src/asm/${1}\" | ${AS} -o \"${2}\"" +} + +# call_ld output file1 file2 ... +call_ld() { + echo "LD: $1" + eval "${CXX} ${OSTD_CPPFLAGS} ${OSTD_CXXFLAGS} ${OSTD_LDFLAGS} -o $@" +} + +# call_ldlib output file1 file2 ... +call_ldlib() { + echo "AR: $1" + eval "${AR} rcs $@" +} + +# build_example name +build_example() { + call_cxx "examples/${1}.cc" "examples/${1}.o" + call_ld "examples/${1}" "examples/${1}.o" "$ASM_LIB" + rm "examples/${1}.o" +} + +# build test runner +build_test_runner() { + call_cxx test_runner.cc test_runner.o + call_ld test_runner test_runner.o + rm test_runner.o +} + +# add_ext str ext +add_ext() { + RET="" + for it in $1; do + RET="$RET ${it}${2}" + done + echo $RET +} + +# check if cleaning +if [ "$1" = "clean" ]; then + clean + exit 0 +fi + +# build test runner +echo "Building test runner..." +build_test_runner & + +# build assembly +echo "Running assembler..." +for as in $ASM_SOURCES; do + call_as "${as}.S" "${as}.o" & +done +wait +call_ldlib "$ASM_LIB" $(add_ext "$ASM_SOURCES" ".o") +rm $(add_ext "$ASM_SOURCES" ".o") + +# build examples +echo "Building examples..." +for ex in $EXAMPLES; do + build_example "$ex" & +done +wait + +# done +exit 0