From 7e9f73bfa79f7e6cd5850f67b055d1b0ede42ef1 Mon Sep 17 00:00:00 2001 From: Andre Wagner Date: Sun, 10 May 2026 08:55:46 -0500 Subject: [PATCH] . --- .idea/misc.xml | 15 +++++++++++ .idea/tyche.iml | 6 ++++- Makefile | 62 ++++++++++++++++++++++++++++++++----------- config/WARNINGS | 22 +++++++++++++++ config/WARNINGS_CLANG | 3 +++ config/WARNINGS_GCC | 7 +++++ lib/tyche.h | 4 +++ 7 files changed, 102 insertions(+), 17 deletions(-) create mode 100644 config/WARNINGS create mode 100644 config/WARNINGS_CLANG create mode 100644 config/WARNINGS_GCC create mode 100644 lib/tyche.h diff --git a/.idea/misc.xml b/.idea/misc.xml index 1dc917f..2542bdc 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -6,4 +6,19 @@ + + + + + \ No newline at end of file diff --git a/.idea/tyche.iml b/.idea/tyche.iml index 4c94235..c52a66d 100644 --- a/.idea/tyche.iml +++ b/.idea/tyche.iml @@ -1,2 +1,6 @@ - \ No newline at end of file + + + + + \ No newline at end of file diff --git a/Makefile b/Makefile index 450198e..03371ea 100644 --- a/Makefile +++ b/Makefile @@ -9,46 +9,76 @@ VERSION_MINOR=1 VERSION=${VERSION_MAJOR}.${VERSION_MINOR} +# +# flags/options +# + +IS_CLANG := $(shell $(CC) -dM -E - < /dev/null | grep -c __clang__) + +WARNINGS=@config/WARNINGS +ADD_DBG_FLAGS= +ifeq ($(IS_CLANG),1) + WARNINGS += @config/WARNINGS_CLANG +else + WARNINGS += @config/WARNINGS_GCC + ADD_DBG_FLAGS=-fanalyzer +endif + +DEBUG_CFLAGS=-Og -ggdb3 ${WARNINGS} -fno-omit-frame-pointer -fsanitize=address -fsanitize=undefined -fsanitize=leak \ + -fno-sanitize-recover=all -fstack-protector-strong -fstack-clash-protection -fno-common ${ADD_DBG_FLAGS} +DEBUG_LDFLAGS=-fsanitize=address + +RELEASE_CFLAGS=-O3 -flto=auto -march=native -mtune=native -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 -fstack-protector-strong +RELEASE_LDFLAGS=-flto=auto + +CFLAGS+=-std=c99 -fPIC -fvisibility=hidden -MMD -MP +LDFLAGS+= + # # generic targets # all: tyche libtyche.a libtyche.so.${VERSION} -check: tyche-test +check: + $(MAKE) clean + $(MAKE) tyche-test ./tyche-test clean: - rm -f tyche libtyche.a libtyche.so* tyche-test src/tyche.o src/tests.o lib/vm.o + rm -f tyche libtyche.a libtyche.so* tyche-test src/tyche.o src/tests.o lib/vm.o src/*.d lib/*.d -install: tyche libtyche.a libtyche.so.${VERSION} - install libtyche.a libtyche.so.${VERSION} ${PREFIX}/lib +install: tyche libtyche.a libtyche.so.${VERSION} lib/tyche.h + install -m 644 libtyche.a libtyche.so.${VERSION} ${PREFIX}/lib install tyche ${PREFIX}/bin - ln -s libfoo.so.${VERSION} libfoo.so.${VERSION_MAJOR} - ln -s libfoo.so.${VERSION_MAJOR} libfoo.so + install -m 644 lib/tyche.h ${PREFIX}/include + ln -s ${PREFIX}/lib/libtyche.so.${VERSION} ${PREFIX}/lib/libtyche.so.${VERSION_MAJOR} + ln -s ${PREFIX}/lib/libtyche.so.${VERSION_MAJOR} ${PREFIX}/lib/libtyche.so uninstall: - rm -f ${PREFIX}/lib/libtyche.* ${PREFIX}/bin/tyche + rm -f ${PREFIX}/lib/libtyche.* ${PREFIX}/bin/tyche ${PREFIX}/include/tyche.h -# -# flags/options -# - -CFLAGS=-fPIC -LIBS= +.PHONY: all check clean install uninstall # # executable files # +tyche: CFLAGS += ${RELEASE_CFLAGS} +tyche: LDFLAGS += ${RELEASE_LDFLAGS} tyche: src/tyche.o libtyche.a - $(CC) -o $@ $^ ${LIBS} + $(CC) -o $@ $^ ${LDFLAGS} +tyche-test: CFLAGS += ${DEBUG_CFLAGS} +tyche-test: LDFLAGS += ${DEBUG_LDFLAGS} tyche-test: src/tests.o libtyche.a - $(CC) -o $@ $^ ${LIBS} + $(CC) -o $@ $^ ${LDFLAGS} libtyche.a: lib/vm.o ar rcs $@ $^ +libtyche.so.${VERSION}: LDFLAGS += ${RELEASE_LDFLAGS} libtyche.so.${VERSION}: lib/vm.o - $(CC) -shared -o $@ -Wl,-soname,libfoo.so.${VERSION_MAJOR} $^ \ No newline at end of file + $(CC) -shared -o $@ -Wl,-soname,libfoo.so.${VERSION_MAJOR} $^ ${LDFLAGS} + +-include $(wildcard src/*.d lib/*.d) \ No newline at end of file diff --git a/config/WARNINGS b/config/WARNINGS new file mode 100644 index 0000000..2e2bdaa --- /dev/null +++ b/config/WARNINGS @@ -0,0 +1,22 @@ +-Wall +-Wextra +-Wpedantic +-Wshadow +-Wmissing-prototypes +-Wcast-qual +-Wcast-align +-Wconversion +-Wsign-conversion +-Wdouble-promotion +-Wformat=2 +-Wformat-security +-Wnull-dereference +-Wstrict-overflow=4 +-Wundef +-Wswitch-enum +-Wswitch-default +-Wfloat-equal +-Wpointer-arith +-Wwrite-strings +-Wredundant-decls +-Wstack-protector diff --git a/config/WARNINGS_CLANG b/config/WARNINGS_CLANG new file mode 100644 index 0000000..3c0cf8b --- /dev/null +++ b/config/WARNINGS_CLANG @@ -0,0 +1,3 @@ +-Wshadow-all +-Wcomma +-Wassign-enum \ No newline at end of file diff --git a/config/WARNINGS_GCC b/config/WARNINGS_GCC new file mode 100644 index 0000000..0e84656 --- /dev/null +++ b/config/WARNINGS_GCC @@ -0,0 +1,7 @@ +-Wlogical-op +-Wjump-misses-init +-Wduplicated-cond +-Wduplicated-branches +-Wtrampolines +-Walloc-zero +-Walloca diff --git a/lib/tyche.h b/lib/tyche.h new file mode 100644 index 0000000..a2307cd --- /dev/null +++ b/lib/tyche.h @@ -0,0 +1,4 @@ +#ifndef TYCHE_TYCHE_H +#define TYCHE_TYCHE_H + +#endif //TYCHE_TYCHE_H