makefile supports multiple build modes. Deleted old shell build script
This commit is contained in:
@@ -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
|
|
||||||
@@ -40,12 +40,58 @@ AR = ar
|
|||||||
CFLAGS = -Wall -Wextra
|
CFLAGS = -Wall -Wextra
|
||||||
LFLAGS = -lm
|
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 ======= #
|
# === Variables ======= #
|
||||||
# ===================== #
|
# ===================== #
|
||||||
|
|
||||||
# Auxiliary function
|
# Auxiliary function
|
||||||
rwildcard = $(foreach d, $(wildcard $(1:=/*)), $(call rwildcard ,$d, $2) $(filter $(subst *, %, $2), $d))
|
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
|
# Absolute path of each program's source tree
|
||||||
LIB_SRCDIR = $(SRCDIR)/$(LIB_SUBDIR)
|
LIB_SRCDIR = $(SRCDIR)/$(LIB_SUBDIR)
|
||||||
|
|||||||
Reference in New Issue
Block a user