performance-aware-programming/haversine_02/compile
2024-06-22 13:54:45 +01:00

136 lines
2.5 KiB
Bash
Executable File

#!/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.cc \
./src/generator/generator.cc \
./src/haversine.cc \
./src/point_types.cc \
./src/generator/main.cc"
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.cc \
./src/point_types.cc \
./src/processor/proc_argparser.cc \
./src/processor/main.cc "
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/*.cc ./$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