95 lines
2.1 KiB
Bash
Executable File
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"
|