#!/bin/bash CC=clang CXX=clang++ CFLAGS="-Wall -Wextra -I$(realpath ./include) " ASM=nasm ASM_FLAGS="-f elf64 " AR=ar AR_FLAGS="rcs" # PARSE ARGUMENTS # From this StackOverflow answer https://stackoverflow.com/a/14203146 while [[ $# > 0 ]];do case $1 in --release) RELEASE=true shift ;; --basic-profiling) BASIC_PROFILING=true shift ;; --full-profiling) FULL_PROFILING=true shift ;; *|-*|--*) echo "Unknown option $1" exit 1 ;; esac done # BUILD TYPE if [[ $RELEASE == true ]]; then CFLAGS+="-g -O1" else CFLAGS+="-g" fi # GENERATOR GENSRC="./src/generator/gen_argparser.cpp \ ./src/generator/generator.cpp \ ./src/haversine.cpp \ ./src/point_types.cpp \ ./src/generator/main.cpp" GENOUT=genhavr (set -x ; $CXX $CFLAGS $GENSRC -o $GENOUT) echo # PROFILER PROFSRC="../src/profiler/timer.c" PROFFLAGS="-c " PROF_BUILD_DIR=prof_build # PROCESSOR JSONSRC="../src/json/*.c " JSONFLAGS="-c " JSON_BUILD_DIR=json_build PROCSRC="./$JSON_BUILD_DIR/*.o \ ./src/haversine.cpp \ ./src/point_types.cpp \ ./src/processor/proc_argparser.cpp \ ./src/processor/main.cpp " PROCOUT=prochavr # MEMTESTER MEMTESTSRC="./src/memtester/*.c" MEMTESTOUT=memtest (set -x ; $CC $CFLAGS $MEMTESTSRC -o $MEMTESTOUT) echo # REPTEST ASSEMBLY ASM_BUILD_DIR=reptest_build ASM_SRC="./src/repetition_testing/reptest_functions.asm" ASM_OBJ="./$ASM_BUILD_DIR/funcs.o" ASM_LIB="./$ASM_BUILD_DIR/libfuncs.a" mkdir $ASM_BUILD_DIR (set -x ; $ASM $ASM_FLAGS $ASM_SRC -o $ASM_OBJ) (set -x ; $AR $AR_FLAGS $ASM_LIB $ASM_OBJ) echo if [[ $BASIC_PROFILING == true ]] || [[ $FULL_PROFILING == true ]]; then if [[ $FULL_PROFILING == true ]]; then JSONFLAGS+="-DFULL_PROFILING" PROCFLAGS="-DFULL_PROFILING" REPTESTFLAGS="-DFULL_PROFILING" PROFFLAGS+="-DFULL_PROFILING" elif [[ $BASIC_PROFILING == true ]]; then JSONFLAGS+="-DBASIC_PROFILING" PROCFLAGS="-DBASIC_PROFILING" REPTESTFLAGS="-DBASIC_PROFILING" PROFFLAGS+="-DBASIC_PROFILING" fi PROCSRC+=./$PROF_BUILD_DIR/*.o mkdir $PROF_BUILD_DIR cd $PROF_BUILD_DIR (set -x ; $CC $CFLAGS $PROFFLAGS $PROFSRC) echo cd ../ # REPETITION TESTING REPTESTSRC="./src/repetition_testing/*.cpp ./$PROF_BUILD_DIR/*.o $ASM_LIB" REPTESTOUT=reptest (set -x ; $CXX $CFLAGS $REPTESTFLAGS $REPTESTSRC -o $REPTESTOUT) echo fi mkdir $JSON_BUILD_DIR cd $JSON_BUILD_DIR (set -x ; $CC $CFLAGS $JSONFLAGS $JSONSRC) echo cd ../ (set -x ; $CXX $CFLAGS $PROCFLAGS $PROCSRC -o $PROCOUT) echo # CLEAR BUILD FILES rm -rvf $JSON_BUILD_DIR $PROF_BUILD_DIR $ASM_BUILD_DIR