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