Parcel/build.bash

79 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
INCLUDE_STATEMENTS="-I code/inc/ -I code/exports/"
INVOCATION_PATH=`pwd`
function build_checks() {
if [[ ! -f $INVOCATION_PATH/.build/libparcel.a ]] then
build_debug
fi
cd checks/
for check_folder in $(ls)
do
if [[ -f $check_folder ]] then
continue
fi
cd $check_folder
gcc src/*.c $INVOCATION_PATH/.build/libparcel.a -o check.elf -I $INVOCATION_PATH/code/inc/
cd ..
done
}
function create_archive() {
ar -rvs .build/libparcel.a .build/objects/*.o
}
function compile_sources() {
rm -r .build/objects/
rm .build/libparcel.a
mkdir -p .build/objects
for source_file in $(find "code/src/")
do
if [[ ! -f $source_file ]] then
continue
fi
# Cut out the prefix (code/src/)
BASENAME=`echo $source_file | cut -c '10-'`
echo "==== COMPILING $source_file ===="
gcc -c $COMPILATION_FLAGS -o .build/objects/$BASENAME.o $source_file $INCLUDE_STATEMENTS
done
}
function build_debug() {
COMPILATION_FLAGS="-g2 -Wall -Wextra -D__PAC_DEBUG__"
compile_sources
create_archive
}
function build_release() {
COMPILATION_FLAGS="-O2 -Wall -D__PAC_RELEASE__"
compile_sources
create_archive
}
function clean() {
rm -R .build/objects/*.o
rm .build/libparcel.a
}
case $1 in
"clean")
clean
;;
"debug")
build_debug
;;
"release")
build_release
;;
"checks")
build_checks
;;
*)
echo "Unknown action '$1'. Possible Actions are:"
echo "[ clean | debug | release | checks ]"
esac