summaryrefslogtreecommitdiff
path: root/build.sh
diff options
context:
space:
mode:
author0x221E2026-06-14 14:00:58 +0200
committer0x221E2026-06-14 14:00:58 +0200
commit56796c08d6388ad0eb0539d166cd12964cfeb7e9 (patch)
tree0a478620c3f07a72719fd22c12cbed5aa077234e /build.sh
initial commit
Diffstat (limited to 'build.sh')
-rwxr-xr-xbuild.sh50
1 files changed, 50 insertions, 0 deletions
diff --git a/build.sh b/build.sh
new file mode 100755
index 0000000..5996c05
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+
+PLATFORM=elf
+
+SRC_DIRECTORIES=(
+ "./arch/"
+ "./lex/"
+ "./parser/"
+ "./lib/"
+ "./platform/${PLATFORM}/"
+)
+
+TARGET_NAME="metalc"
+
+BUILD_DIR="./build/"
+
+CFLAGS=(-I./include/ -g -O1) # -fsanitize=address)
+LDFLAGS=()
+
+function build {
+ mkdir -p "$BUILD_DIR"
+
+ set -e
+
+ local files=()
+
+ echo "[BUILD] Building metalc..."
+ for i in ${SRC_DIRECTORIES[@]}; do
+ local arr=$(find "$i" -name "*.c")
+ for j in ${arr[@]}; do
+ files+=("$j")
+ done
+ done
+
+ gcc "${files[@]}" "${CFLAGS[@]}" -o "$TARGET_NAME"
+ echo "Built ${TARGET_NAME}."
+}
+
+function clean {
+ if [[ -e "$TARGET_NAME" && -f "$TARGET_NAME" ]]; then
+ rm -rf "$TARGET_NAME"
+ echo "[CLEAN] deleted ${TARGET_NAME}"
+ fi
+}
+
+case "$1" in
+ "build") build ;;
+ "clean") clean ;;
+ *) "invalid command" ;;
+esac