undar-lang/build

95 lines
2.1 KiB
Bash
Executable File

#!/bin/sh
set -e
if [ -z $ARCH ]; then
ARCH='linux'
fi
if [ -z $MODE ]; then
MODE='debug'
fi
case $ARCH in
"linux")
if [ -z $CC ]; then
CC='gcc'
fi
;;
"web")
CC=emcc
;;
esac
# setup dirs
SRC_DIR=./arch/$ARCH
BUILD_DIR=./out/$ARCH
GEN_DIR=$BUILD_DIR/gen
TOOL_SRC=tools/file2header.c
TOOL_EXE=$BUILD_DIR/file2header
# clean cmd
case $1 in
"clean")
echo "Deleting $BUILD_DIR"
rm -rf $BUILD_DIR
exit 0
esac
# create the build dir if it doesnt exist
if [ -d $BUILD_DIR ]; then
echo "Building to $BUILD_DIR"
else
echo "$BUILD_DIR not found, creating"
mkdir -p $BUILD_DIR
fi
# Ensure gen dir exists
mkdir -p $GEN_DIR
# Check if tool source exists
if [ ! -f $TOOL_SRC ]; then
echo "Error: $TOOL_SRC not found!"
exit 1
fi
# Compile tool if exe missing or source changed
if [ ! -f $TOOL_EXE ] || [ $TOOL_SRC -nt $TOOL_EXE ]; then
echo "Compiling file2header tool..."
$CC $TOOL_SRC -o $TOOL_EXE
fi
# setup the build flags based on the build mode
case $MODE in
"debug")
BUILD_FLAGS="-g -Wall -Wextra -Werror -pedantic"
;;
"release")
BUILD_FLAGS="-O3 -Wall -Wextra -Werror -pedantic"
;;
esac
# build the core VM
VM_BUILD_FLAGS="$BUILD_FLAGS -std=c89 -ffreestanding -nostdlib -fno-builtin"
${CC} -c libc.c -o $BUILD_DIR/libc.o $VM_BUILD_FLAGS
${CC} -c list.c -o $BUILD_DIR/list.o $VM_BUILD_FLAGS
${CC} -c lexer.c -o $BUILD_DIR/lexer.o $VM_BUILD_FLAGS
${CC} -c parser.c -o $BUILD_DIR/parser.o $VM_BUILD_FLAGS
#BUILD_CMD="$CC -o $BUILD_DIR/undar $SRC_DIR/main.c libc.c list.c lexer.c parser.c -I$GEN_DIR $BUILD_FLAGS"
# Set up the final build command
case $ARCH in
"linux")
BUILD_CMD="$CC -o $BUILD_DIR/undar $SRC_DIR/main.c emit/c/emit.c emit/uxn/emit.c $LINK_FLAGS $BUILD_DIR/libc.o $BUILD_DIR/list.o $BUILD_DIR/lexer.o $BUILD_DIR/parser.o $BUILD_FLAGS $LINK_FLAGS"
;;
"web")
BUILD_CMD="$CC $SRC_DIR/main.c emit/c/emit.c emit/uxn/emit.c $BUILD_DIR/libc.o $BUILD_DIR/list.o $BUILD_DIR/lexer.o $BUILD_DIR/parser.o -o $BUILD_DIR/undar.html $BUILD_FLAGS $LINK_FLAGS"
;;
esac
echo "$BUILD_CMD"
${BUILD_CMD}
echo "Finished building to $BUILD_DIR/undar"