diff --git a/Makefile b/Makefile index fef7668..90c1221 100644 --- a/Makefile +++ b/Makefile @@ -1,73 +1,113 @@ -SRC=$(wildcard src/**/*.c) $(wildcard src/*.c) -TESTS=$(wildcard tests/*c) $(wildcard tests/**/*.c) +###################################### +###### Config ####### +###################################### +OUTDIR:=bin +OBJDIR:=obj +TEST_FILE:=kerep.com +LIB_FILE:=kerep.so +DLL_FILE:=kerep.dll +CMP_C:=gcc +CMP_CPP:=g++ +STD_C:=c11 +STD_CPP:=c++17 +WARN_C:=-Wall -Wno-discarded-qualifiers #-Wextra +WARN_CPP:=-Wall #-Wextra +SRC_C:= $(wildcard src/*.c ) $(wildcard src/**/*.c ) +SRC_CPP:= $(wildcard src/*.cpp ) $(wildcard src/**/*.cpp ) +TESTS_C:= $(wildcard tests/*c ) $(wildcard tests/**/*.c ) +TESTS_CPP:=$(wildcard tests/*cpp) $(wildcard tests/**/*.cpp) -OUTDIR=bin -CMP=gcc -OPT_ARGS=-O2 -flto -std=c17 -WARN_ARGS=-Wall -Wno-discarded-qualifiers -all: clear_c clear_bin build_test_dbg +###################################### +###### Small tasks ####### +###################################### + +all: clear_c clear_bin build_test clear_c: clear clear_bin: - @echo -e '\n\e[96m-------------[clear_bin]--------------\e[0m' + @echo -e '\e[96m-------------[clear_bin]--------------\e[0m' rm -rf $(OUTDIR) - mkdir $(OUTDIR) + mkdir $(OUTDIR) + +clear_obj: + @echo -e '\e[96m-------------[clear_obj]--------------\e[0m' + rm -rf $(OBJDIR) + mkdir $(OBJDIR) -clang: CMP=clang -clang: WARN_ARGS=-Wall -Wno-ignored-qualifiers -Wno-incompatible-pointer-types-discards-qualifiers -std=c17 -clang: all ###################################### ###### Build tasks ####### ###################################### -TEST_FILE=kerep_test.com -TEST_ARGS=$(WARN_ARGS) $(SRC) $(TESTS) -o $(OUTDIR)/$(TEST_FILE) -build_test: - @echo -e '\n\e[96m-------------[build_test]-------------\e[0m' - $(CMP) $(OPT_ARGS) $(TEST_ARGS) +# set it in build targets +SOURCES_C:= +SOURCES_CPP:= +CMPARGS:= +LNKARGS:= +OUTFILE:= -build_test_dbg: - @echo -e '\n\e[96m-----------[build_test_dbg]-----------\e[0m' - $(CMP) -g -O0 $(TEST_ARGS).dbg +compile_c_file=$(CMP_C) -std=$(STD_C) $(WARN_C) $(CMPARGS) -c ../$(SRCFILE) +__compile_c: + @echo -e '\e[96m-------------[compile_c]--------------\e[0m' + $(eval commands:=cd $(OBJDIR) $(foreach SRCFILE, $(SOURCES_C), ; $(compile_c_file))) + $(commands) -LIB_ARGS=$(OPT_ARGS) $(WARN_ARGS)\ - -fpic -shared -Wl,-soname,$(LIB_FILE)\ - $(SRC) tests/test_marshalling.c -LIB_FILE=kerep.so +compile_cpp_file=$(CMP_CPP) -std=$(STD_CPP) $(WARN_CPP) $(CMPARGS) -c ../$(SRCFILE) +__compile_cpp: + @echo -e '\e[96m------------[compile_cpp]-------------\e[0m' + $(eval commands:=cd $(OBJDIR) $(foreach SRCFILE, $(SOURCES_CPP), ; $(compile_cpp_file))) + $(commands) -build_lib: - @echo -e '\n\e[96m-------------[build_lib]--------------\e[0m' - $(CMP) $(LIB_ARGS) -o $(OUTDIR)/$(LIB_FILE) +__compile: __compile_c #__compile_cpp -DLL_ARGS=$(OPT_ARGS) $(WARN_ARGS)\ - -shared -fpic -static-libgcc -static-libstdc++\ - $(SRC) tests/test_marshalling.c -DLL_FILE=kerep.dll +__link: + @echo -e '\e[96m----------------[link]----------------\e[0m' + $(CMP_C) $(LNKARGS) -o $(OUTDIR)/$(OUTFILE) $(wildcard $(OBJDIR)/*.o) + +###### Build test ####### +__build_test_pre: + @echo -e '\e[96m===========[build_test_dbg]===========\e[0m' +build_test: OUTFILE=$(TEST_FILE) +build_test: SOURCES_C=$(SRC_C) $(TESTS_C) +build_test: SOURCES_CPP=$(SRC_CPP) $(TESTS_CPP) +build_test: CMPARGS=-O0 -g +build_test: LNKARGS= +build_test: clear_c __build_test_pre clear_obj __compile __link + +###### Build lib ####### +__build_lib_pre: + @echo -e '\e[96m=============[build_lib]==============\e[0m' +build_lib: OUTFILE=$(LIB_FILE) +build_lib: SOURCES_C=$(SRC_C) tests/test_marshalling.c +build_lib: SOURCES_CPP=$(SRC_CPP) +build_lib: CMPARGS=-O2 -fpic -shared +build_lib: LNKARGS=-flto -Wl,-soname,$(LIB_FILE) +build_lib: clear_c __build_lib_pre clear_obj __compile __link + +###### Build dll ####### +__build_dll_pre: + @echo -e '\e[96m=============[build_dll]==============\e[0m' +build_dll: OUTFILE=$(DLL_FILE) +build_dll: SOURCES_C=$(SRC_C) tests/test_marshalling.c +build_dll: SOURCES_CPP=$(SRC_CPP) +build_dll: CMPARGS=-O2 -fpic -shared +build_dll: LNKARGS=-static-libgcc -static-libstdc++ +build_dll: clear_c __build_dll_pre clear_obj __compile __link -build_dll: - gcc --version - @echo -e '\n\e[96m-------------[build_dll]--------------\e[0m' - $(CMP) $(DLL_ARGS) -o $(OUTDIR)/$(DLL_FILE) ###################################### -###### Run tasks ####### +###### Testing tasks ####### ###################################### -test: clear_c build_test - @echo -e '\n\e[96m----------------[test]----------------\e[0m' +test: build_test + @echo -e '\e[96m================[test]================\e[0m' @tabs 4 - $(OUTDIR)/$(TEST_FILE) + cd $(OUTDIR); ./$(TEST_FILE) -test_dbg: clear_c build_test - @echo -e '\n\e[96m--------------[test_dbg]--------------\e[0m' +valgrind: build_test + @echo -e '\e[96m==============[valgrind]==============\e[0m' @tabs 4 - $(OUTDIR)/$(TEST_FILE) - -valgrind: clear_c build_test_dbg - @echo -e '\n\e[96m--------------[valgrind]--------------\e[0m' - @tabs 4 - valgrind -s --read-var-info=yes --track-origins=yes --fullpath-after=kerep/ \ - --leak-check=full --show-leak-kinds=all $(OUTDIR)/$(TEST_FILE).dbg + cd $(OUTDIR); valgrind -s --read-var-info=yes --track-origins=yes --fullpath-after=kerep/ \ + --leak-check=full --show-leak-kinds=all $(TEST_FILE).dbg