Kaltenberg/scripts/build.bash

84 lines
2.0 KiB
Bash

cd $(dirname $0)
SCRIPT_PATH=$(pwd)
cd ..
PROJECT_PATH=$(pwd)
function list_modules() {
MODULE_FOLDER=$1
MODULES=$(ls $MODULE_FOLDER)
for MODULE in $MODULES
do
if [[ -d "$MODULE_FOLDER/$MODULE/src-c" ]];
then
echo $MODULE
fi
done
}
function make_object_name() {
SOURCE_PATH=$1
OBJECT_NAME=$(echo $SOURCE_PATH | tr "-" "_" | tr "/" "-")
echo $OBJECT_NAME.o
}
function list_sources() {
MODULE_PATH=$1
ENTRY_PATH=$(pwd)
cd $MODULE_PATH
SOURCES=$(find . -type f | grep ".c$")
for SOURCE in $SOURCES
do
echo $SOURCE | cut -c 3-
done
cd $ENTRY_PATH
}
function make_include_statements() {
MODULE_NAME=$1
for INCLUDE_PATH in $(cat modules/$MODULE_NAME/includes.txt)
do
MODIFIED_PATH="${INCLUDE_PATH//"{self}"/"modules/$PROJECT_PATH/$MODULE_NAME"}"
MODIFIED_PATH="${MODIFIED_PATH//"{module-folder}"/"$PROJECT_PATH/modules"}"
echo "-I ${MODIFIED_PATH//"{dependencies}"/"$PROJECT_PATH/dependencies"}"
done
}
function build_single_module() {
MODULE_NAME=$1
mkdir -p $PROJECT_PATH/.build/modules/$MODULE_NAME/objects
rm -f $PROJECT_PATH/.build/modules/$MODULE_NAME/objects/*.o
echo "| ========================================>"
echo "| Now building module: $MODULE_NAME"
echo "| ========================================>"
INCLUDE_STATEMENTS=$(make_include_statements $MODULE_NAME)
SOURCES=$(list_sources modules/$MODULE_NAME/src-c)
for SOURCE in $SOURCES
do
echo "> $SOURCE"
OBJECT_NAME=$(make_object_name $SOURCE)
gcc -c -o .build/modules/$MODULE_NAME/objects/$OBJECT_NAME -g3 modules/$MODULE_NAME/src-c/$SOURCE $INCLUDE_STATEMENTS
done
ar -rvs .build/archives/voxula-$MODULE_NAME.a .build/modules/$MODULE_NAME/objects/*.o
}
mkdir -p .build/archives
rm -f .build/archives/*.a
MODULE_LIST=$(list_modules "modules")
for MODULE in $MODULE_LIST
do
build_single_module $MODULE
done
gcc -g3 -o voxula .build/archives/*.a