From f25d78538b85626782d8e5df04e88a9045caaf60 Mon Sep 17 00:00:00 2001 From: cozis Date: Thu, 11 Aug 2022 19:26:03 +0200 Subject: [PATCH] makefile supports multiple build modes. Deleted old shell build script --- build.sh | 122 ------------------------------------------------------- makefile | 46 +++++++++++++++++++++ 2 files changed, 46 insertions(+), 122 deletions(-) delete mode 100755 build.sh diff --git a/build.sh b/build.sh deleted file mode 100755 index ec68852..0000000 --- a/build.sh +++ /dev/null @@ -1,122 +0,0 @@ - -CC=gcc -FLAGS="-Wall -Wextra" - -for arg in "$@" -do - case $arg in - --debug) FLAGS="$FLAGS -DDEBUG -g" - ;; - --release) FLAGS="$FLAGS -DNDEBUG -O3" - ;; - - --valgrind) FLAGS="$FLAGS -DUSING_VALGRIND=1" - ;; - - --coverage) CC=clang - FLAGS="$FLAGS -fprofile-instr-generate -fcoverage-mapping" - ;; - - --fuzzing) CC=afl-clang-fast - ;; - esac -done - -mkdir temp - -mkdir temp/utils -$CC -c src/utils/utf8.c -o temp/utils/utf8.o $FLAGS -$CC -c src/utils/hash.c -o temp/utils/hash.o $FLAGS -$CC -c src/utils/stack.c -o temp/utils/stack.o $FLAGS -$CC -c src/utils/error.c -o temp/utils/error.o $FLAGS -$CC -c src/utils/source.c -o temp/utils/source.o $FLAGS -$CC -c src/utils/bpalloc.c -o temp/utils/bpalloc.o $FLAGS -$CC -c src/utils/promise.c -o temp/utils/promise.o $FLAGS -$CC -c src/utils/bucketlist.c -o temp/utils/bucketlist.o $FLAGS - -mkdir temp/objects -$CC -c src/objects/heap.c -o temp/objects/heap.o $FLAGS -$CC -c src/objects/o_int.c -o temp/objects/o_int.o $FLAGS -$CC -c src/objects/o_map.c -o temp/objects/o_map.o $FLAGS -$CC -c src/objects/o_list.c -o temp/objects/o_list.o $FLAGS -$CC -c src/objects/o_none.c -o temp/objects/o_none.o $FLAGS -$CC -c src/objects/o_bool.c -o temp/objects/o_bool.o $FLAGS -$CC -c src/objects/o_file.c -o temp/objects/o_file.o $FLAGS -$CC -c src/objects/o_dir.c -o temp/objects/o_dir.o $FLAGS -$CC -c src/objects/o_float.c -o temp/objects/o_float.o $FLAGS -$CC -c src/objects/o_string.c -o temp/objects/o_string.o $FLAGS -$CC -c src/objects/o_buffer.c -o temp/objects/o_buffer.o $FLAGS -$CC -c src/objects/o_closure.c -o temp/objects/o_closure.o $FLAGS -$CC -c src/objects/objects.c -o temp/objects/objects.o $FLAGS - -mkdir temp/compiler -$CC -c src/compiler/parse.c -o temp/compiler/parse.o $FLAGS -$CC -c src/compiler/compile.c -o temp/compiler/compile.o $FLAGS - -mkdir temp/common -$CC -c src/common/executable.c -o temp/common/executable.o $FLAGS - -mkdir temp/runtime -$CC -c src/runtime/runtime_error.c -o temp/runtime/runtime_error.o $FLAGS -$CC -c src/runtime/runtime.c -o temp/runtime/runtime.o $FLAGS -$CC -c src/runtime/o_nfunc.c -o temp/runtime/o_nfunc.o $FLAGS -$CC -c src/runtime/o_func.c -o temp/runtime/o_func.o $FLAGS -$CC -c src/runtime/o_staticmap.c -o temp/runtime/o_staticmap.o $FLAGS - -mkdir temp/builtins -$CC -c src/builtins/basic.c -o temp/builtins/basic.o $FLAGS -$CC -c src/builtins/files.c -o temp/builtins/files.o $FLAGS -$CC -c src/builtins/math.c -o temp/builtins/math.o $FLAGS - -rm -rf build -mkdir build - -ar rcs build/libnoja-objects.a \ - temp/objects/heap.o \ - temp/objects/o_int.o \ - temp/objects/o_float.o \ - temp/objects/objects.o \ - temp/utils/error.o - -ar rcs build/libnoja-compile.a \ - temp/compiler/parse.o \ - temp/compiler/compile.o \ - temp/utils/bpalloc.o \ - temp/utils/error.o \ - temp/utils/source.o - -ar rcs build/libnoja-runtime.a \ - temp/runtime/runtime.o \ - temp/runtime/runtime_error.o \ - temp/runtime/o_func.o \ - build/libnoja-compile.a \ - build/libnoja-objects.a - -$CC src/main.c \ - temp/utils/utf8.o \ - temp/utils/hash.o \ - temp/utils/stack.o \ - temp/utils/source.o \ - temp/utils/promise.o \ - temp/utils/bucketlist.o \ - temp/objects/o_map.o \ - temp/objects/o_none.o \ - temp/objects/o_list.o \ - temp/objects/o_file.o \ - temp/objects/o_dir.o \ - temp/objects/o_bool.o \ - temp/objects/o_buffer.o \ - temp/objects/o_string.o \ - temp/objects/o_closure.o \ - temp/runtime/runtime.o \ - temp/runtime/runtime_error.o \ - temp/runtime/o_nfunc.o \ - temp/runtime/o_func.o \ - temp/runtime/o_staticmap.o \ - temp/builtins/basic.o \ - temp/builtins/files.o \ - temp/builtins/math.o \ - temp/common/executable.o \ - -o build/noja $FLAGS -Lbuild/ -lnoja-compile -lnoja-objects -lm - -rm -rf temp diff --git a/makefile b/makefile index 3af0f15..7174d51 100644 --- a/makefile +++ b/makefile @@ -40,12 +40,58 @@ AR = ar CFLAGS = -Wall -Wextra LFLAGS = -lm +# Build the library with valgrind support. +# Can be one of: YES, NO +USING_VALGRIND = NO + +# May be one of: COVERAGE, RELEASE, DEBUG +BUILD_MODE = RELEASE + +# Changing the BUILD_MODE will add one of the +# following set of flags to the CFLAGS and +# LFLAGS. If the BUILD_MODE is COVERAGE, then +# the flags are also determined based on the CC. +CFLAGS_DEBUG = -DDEBUG -g +LFLAGS_DEBUG = + +CFLAGS_RELEASE = -DNDEBUG -O3 +LFLAGS_RELEASE = + +CFLAGS_COVERAGE_GCC = +LFLAGS_COVERAGE_GCC = --coverage +CFLAGS_COVERAGE_CLANG = -fprofile-instr-generate -fcoverage-mapping +LFLAGS_COVERAGE_CLANG = +# NOTE: To support BUILD_MODE=COVERAGE for a new compiler, +# just define CFLAGS_COVERAGE_xxx and LFLAGS_COVERAGE_xxx, +# where xxx is the uppercase version of the compiler +# name (the value of CC). + # ===================== # # === Variables ======= # # ===================== # # Auxiliary function rwildcard = $(foreach d, $(wildcard $(1:=/*)), $(call rwildcard ,$d, $2) $(filter $(subst *, %, $2), $d)) +uppercase = $(shell echo '$1' | tr '[:lower:]' '[:upper:]') + +# Add the flags specific to the build mode. +ifeq ($(BUILD_MODE),COVERAGE) + UPPERCASE_CC = $(call uppercase,$(CC)) + CFLAGS += ${CFLAGS_COVERAGE_$(UPPERCASE_CC)} + LFLAGS += ${LFLAGS_COVERAGE_$(UPPERCASE_CC)} +else + BRANCH=else + CFLAGS += ${CFLAGS_$(BUILD_MODE)} + LFLAGS += ${LFLAGS_$(BUILD_MODE)} +endif + +# Add the valgrind flag if requested. +ifeq ($(USING_VALGRIND),YES) + CFLAGS += -DUSING_VALGRIND=1 +endif + +$(info CFLAGS=$(CFLAGS)) +$(info LFLAGS=$(LFLAGS)) # Absolute path of each program's source tree LIB_SRCDIR = $(SRCDIR)/$(LIB_SUBDIR)