2017-03-06 03:28:28 +01:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
# fail on error
|
|
|
|
set -e
|
|
|
|
|
|
|
|
# example sources
|
2017-03-06 03:31:37 +01:00
|
|
|
EXAMPLES="format listdir range range_pipe signal"
|
|
|
|
EXAMPLES="${EXAMPLES} stream1 stream2 coroutine1 coroutine2"
|
2017-03-06 03:28:28 +01:00
|
|
|
|
|
|
|
# assembly sources
|
2017-03-09 00:59:10 +01:00
|
|
|
ASM_SOURCE_DIR="src/asm"
|
2017-03-06 03:28:28 +01:00
|
|
|
ASM_SOURCES="jump_all_gas make_all_gas ontop_all_gas"
|
2017-03-09 00:59:10 +01:00
|
|
|
|
|
|
|
# c++ sources
|
|
|
|
CXX_SOURCE_DIR="src"
|
|
|
|
CXX_SOURCES="context_stack"
|
|
|
|
|
|
|
|
# output lib
|
|
|
|
OSTD_LIB="libostd.a"
|
2017-03-06 03:28:28 +01:00
|
|
|
|
|
|
|
# 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
|
2017-03-09 00:59:10 +01:00
|
|
|
rm -f "${ASM_SOURCE_DIR}/${as}.o"
|
2017-03-06 03:28:28 +01:00
|
|
|
done
|
2017-03-09 00:59:10 +01:00
|
|
|
for cs in ${CXX_SOURCES}; do
|
|
|
|
rm -f "${CXX_SOURCE_DIR}/${cs}.o"
|
|
|
|
done
|
|
|
|
rm -f "$OSTD_LIB"
|
2017-03-06 03:28:28 +01:00
|
|
|
rm -f test_runner.o test_runner
|
|
|
|
}
|
|
|
|
|
|
|
|
# call_cxx input output
|
|
|
|
call_cxx() {
|
|
|
|
echo "CXX: $1"
|
2017-03-09 00:59:10 +01:00
|
|
|
eval "${CXX} ${OSTD_CPPFLAGS} ${OSTD_CXXFLAGS} -c -o \"${2}\" \"${1}\""
|
2017-03-06 03:28:28 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
# call_as input output
|
|
|
|
call_as() {
|
2017-03-09 00:59:10 +01:00
|
|
|
echo "AS: $1"
|
|
|
|
eval "${CPP} -x assembler-with-cpp \"${1}\" | ${AS} -o \"${2}\""
|
2017-03-06 03:28:28 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
# 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"
|
2017-03-09 00:59:10 +01:00
|
|
|
call_ld "examples/${1}" "examples/${1}.o" "$OSTD_LIB"
|
|
|
|
rm -f "examples/${1}.o"
|
2017-03-06 03:28:28 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
# build test runner
|
|
|
|
build_test_runner() {
|
|
|
|
call_cxx test_runner.cc test_runner.o
|
2017-03-09 00:59:10 +01:00
|
|
|
call_ld test_runner test_runner.o "$OSTD_LIB"
|
|
|
|
rm -f test_runner.o
|
2017-03-06 03:28:28 +01:00
|
|
|
}
|
|
|
|
|
2017-03-09 00:59:10 +01:00
|
|
|
# add_sfx_pfx str sfx pfx
|
|
|
|
add_sfx_pfx() {
|
2017-03-06 03:28:28 +01:00
|
|
|
RET=""
|
|
|
|
for it in $1; do
|
2017-03-09 00:59:10 +01:00
|
|
|
RET="$RET ${3}${it}${2}"
|
2017-03-06 03:28:28 +01:00
|
|
|
done
|
|
|
|
echo $RET
|
|
|
|
}
|
|
|
|
|
|
|
|
# check if cleaning
|
|
|
|
if [ "$1" = "clean" ]; then
|
|
|
|
clean
|
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
|
|
|
# build assembly
|
2017-03-09 00:59:10 +01:00
|
|
|
echo "Building the library..."
|
2017-03-06 03:28:28 +01:00
|
|
|
for as in $ASM_SOURCES; do
|
2017-03-09 00:59:10 +01:00
|
|
|
call_as "${ASM_SOURCE_DIR}/${as}.S" "${ASM_SOURCE_DIR}/${as}.o" &
|
|
|
|
done
|
|
|
|
for cs in $CXX_SOURCES; do
|
|
|
|
call_cxx "${CXX_SOURCE_DIR}/${cs}.cc" "${CXX_SOURCE_DIR}/${cs}.o" &
|
2017-03-06 03:28:28 +01:00
|
|
|
done
|
|
|
|
wait
|
2017-03-09 00:59:10 +01:00
|
|
|
call_ldlib "$OSTD_LIB" \
|
|
|
|
$(add_sfx_pfx "$ASM_SOURCES" ".o" "$ASM_SOURCE_DIR/") \
|
|
|
|
$(add_sfx_pfx "$CXX_SOURCES" ".o" "$CXX_SOURCE_DIR/")
|
|
|
|
|
|
|
|
rm -f $(add_sfx_pfx "$ASM_SOURCES" ".o" "$ASM_SOURCE_DIR/")
|
|
|
|
rm -f $(add_sfx_pfx "$CXX_SOURCES" ".o" "$CXX_SOURCE_DIR/")
|
|
|
|
|
|
|
|
# build test runner
|
|
|
|
echo "Building test runner..."
|
|
|
|
build_test_runner &
|
2017-03-06 03:28:28 +01:00
|
|
|
|
|
|
|
# build examples
|
|
|
|
echo "Building examples..."
|
|
|
|
for ex in $EXAMPLES; do
|
|
|
|
build_example "$ex" &
|
|
|
|
done
|
|
|
|
wait
|
|
|
|
|
|
|
|
# done
|
|
|
|
exit 0
|