95 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
# Copyright 2022 Darwin Schuppan <darwin@nobrain.org>
 | 
						|
# SPDX license identifier: MIT
 | 
						|
 | 
						|
################################
 | 
						|
#            Config            #
 | 
						|
################################
 | 
						|
CFLAGS := -O2 -Wall -pedantic -Wno-gnu-zero-variadic-macro-arguments
 | 
						|
#CFLAGS := -ggdb -Wall -pedantic -Wno-gnu-zero-variadic-macro-arguments
 | 
						|
ifeq ($(OS),Windows_NT)
 | 
						|
	EXE_EXT := .exe
 | 
						|
else
 | 
						|
	EXE_EXT :=
 | 
						|
endif
 | 
						|
 | 
						|
################################
 | 
						|
#           Library            #
 | 
						|
################################
 | 
						|
HDR := internal/generic/begin.h internal/generic/end.h generic/map.h generic/smap.h generic/vec.h error.h fmt.h types.h string.h
 | 
						|
SRC := error.c fmt.c string.c
 | 
						|
 | 
						|
_HDR := $(addprefix include/ds/,$(HDR))
 | 
						|
_SRC := $(addprefix src/ds/,$(SRC))
 | 
						|
_OBJ := $(_SRC:.c=.o)
 | 
						|
 | 
						|
all: ds.a
 | 
						|
 | 
						|
ds.a: $(_OBJ)
 | 
						|
	rm -f $@
 | 
						|
	$(AR) rc $@ $^
 | 
						|
 | 
						|
src/%.o: src/%.c $(_HDR)
 | 
						|
	$(CC) -c -o $@ $< -I./include $(CFLAGS)
 | 
						|
 | 
						|
################################
 | 
						|
#           Testing            #
 | 
						|
################################
 | 
						|
define test_single
 | 
						|
if ./$(1); then \
 | 
						|
	echo "Passed test $(1)."; \
 | 
						|
else \
 | 
						|
	echo "Failed test $(1)!"; \
 | 
						|
	exit 1; \
 | 
						|
fi
 | 
						|
endef
 | 
						|
 | 
						|
define test_single_leaks
 | 
						|
printf "Checking for leaks in $(1)..."; \
 | 
						|
if valgrind -q --error-exitcode=1 --leak-check=full --show-leak-kinds=all --track-origins=yes ./$(1); then \
 | 
						|
	echo "OK"; \
 | 
						|
else \
 | 
						|
	echo "Valgrind reported one or more errors!"; \
 | 
						|
	exit 1; \
 | 
						|
fi
 | 
						|
endef
 | 
						|
 | 
						|
TEST_HDR := generic/vec.h
 | 
						|
TESTS := generic/map generic/smap generic/vec error fmt
 | 
						|
 | 
						|
_TEST_HDR := $(addprefix tests/,$(TEST_HDR))
 | 
						|
_TESTS := $(addsuffix $(EXE_EXT),$(addprefix tests/,$(TESTS)))
 | 
						|
 | 
						|
.PHONY: test test_outputs test_leaks test_full test_debug
 | 
						|
 | 
						|
test: $(_TESTS)
 | 
						|
	@for i in $(_TESTS); do $(call test_single,$$i); done
 | 
						|
	@echo "All tests passed."
 | 
						|
 | 
						|
test_leaks: $(_TESTS)
 | 
						|
	@for i in $(_TESTS); do $(call test_single_leaks,$$i); done
 | 
						|
	@echo "All tests passed."
 | 
						|
 | 
						|
test_full: clean $(_TESTS)
 | 
						|
	@for i in $(_TESTS); do $(call test_single,$$i); done
 | 
						|
	@for i in $(_TESTS); do $(call test_single_leaks,$$i); done
 | 
						|
	@echo "All tests passed."
 | 
						|
 | 
						|
test_debug: tests/$(TEST_TO_DEBUG)
 | 
						|
ifdef TEST_TO_DEBUG
 | 
						|
	gdb -q --args ./tests/$(TEST_TO_DEBUG)
 | 
						|
else
 | 
						|
	@echo "Please run with TEST_TO_DEBUG=<test>."
 | 
						|
	@echo "Options are: $(TESTS)"
 | 
						|
endif
 | 
						|
 | 
						|
tests/%: tests/%.c ds.a $(_HDR) $(_TEST_HDR)
 | 
						|
	$(CC) -o $@ $< ds.a -I./include $(CFLAGS) $(LDFLAGS)
 | 
						|
 | 
						|
################################
 | 
						|
#           General            #
 | 
						|
################################
 | 
						|
.PHONY: clean
 | 
						|
 | 
						|
clean:
 | 
						|
	rm -f ds.a $(_OBJ) $(_TESTS)
 |