From ae29a46e8f111a9aa88ddee3862aa88561c78a52 Mon Sep 17 00:00:00 2001 From: Eric-Paul Ickhorn Date: Sat, 7 Sep 2024 22:09:47 +0200 Subject: [PATCH] Add build script and gitignore This initial commit adds a relatively advanced build-script and a very small .gitignore file which should definitely be expanded. --- .gitignore | 4 +++ scripts/build.bash | 83 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 .gitignore create mode 100644 scripts/build.bash diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..92d8187 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ + +.private/ +.build/ +voxula \ No newline at end of file diff --git a/scripts/build.bash b/scripts/build.bash new file mode 100644 index 0000000..4bc689a --- /dev/null +++ b/scripts/build.bash @@ -0,0 +1,83 @@ + +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