aboutsummaryrefslogtreecommitdiffstats
path: root/git/new-c-proj
diff options
context:
space:
mode:
Diffstat (limited to 'git/new-c-proj')
-rwxr-xr-xgit/new-c-proj81
1 files changed, 70 insertions, 11 deletions
diff --git a/git/new-c-proj b/git/new-c-proj
index 8bd90f8..7546478 100755
--- a/git/new-c-proj
+++ b/git/new-c-proj
@@ -39,7 +39,11 @@ cat > .gitignore <<EOF
*~
*.o
*.a
+*.t
+*.f
*.lo
+*.to
+*.fo
*.su
*.so
*.so.*
@@ -52,7 +56,9 @@ cat > .gitignore <<EOF
EOF
mkdir -p -- .git/info
-printf '%s\n' '_*' '.hidden' '.makeenv' >> .git/info/exclude
+printf '%s\n' '_*' '._*' '.hidden' '.makeenv' >> .git/info/exclude
+
+printf '%s\n' 'MAKEENV_OPTS_OPT_ATTACHED_ARG = j' 'CC = gcc-extreme -std=c99' >> .makeenv
if printf '%s\n' "$1" | grep '^lib' >/dev/null 2>/dev/null; then
UPPERCASE="$(printf '%s\n' "$1" | tr '[a-z-]' '[A-Z_]')"
@@ -92,17 +98,37 @@ if printf '%s\n' "$1" | grep '^lib' >/dev/null 2>/dev/null; then
x $1.h
LOBJ = \$(OBJ:.o=.lo)
+ TOBJ = \$(OBJ:.o=.to)
+
+
+ ALL_CPPFLAGS = \$(CPPFLAGS) \$(FUZZED_CPPFLAGS)
+ ALL_CFLAGS = \$(CFLAGS) \$(FUZZED_CFLAGS)
+ ALL_LDFLAGS = \$(LDFLAGS) \$(FUZZED_LDFLAGS)
- all: $1.a $1.\$(LIBEXT)
+ all: $1.a $1.\$(LIBEXT) \$(TEST)
\$(OBJ): \$(HDR)
\$(LOBJ): \$(HDR)
+ \$(TOBJ): \$(HDR)
+ \$(TEST): $1.a
.c.o:
- x \$(CC) -c -o \$@ \$< \$(CFLAGS) \$(CPPFLAGS)
+ x \$(CC) -c -o \$@ \$< \$(ALL_CFLAGS) \$(COV_CFLAGS) \$(ALL_CPPFLAGS) \$(COV_CPPFLAGS)
.c.lo:
- x \$(CC) -fPIC -c -o \$@ \$< \$(CFLAGS) \$(CPPFLAGS)
+ x \$(CC) -fPIC -c -o \$@ \$< \$(ALL_CFLAGS) \$(COV_CFLAGS) \$(ALL_CPPFLAGS) \$(COV_CPPFLAGS)
+
+ .c.to:
+ x \$(CC) -DTEST -c -o \$@ \$< $\(G) \$(ALL_CFLAGS) \$(ALL_CPPFLAGS) \$(COV_CPPFLAGS)
+
+ .to.t:
+ x \$(CC) -o \$@ \$< $1.a \$(G) \$(ALL_LDFLAGS) \$(COV_LDFLAGS)
+
+ .c.fo:
+ x \$(CC) -DTEST -DFUZZ -c -o \$@ \$< \$(G) \$(ALL_CFLAGS) \$(ALL_CPPFLAGS) \$(FUZZ_CFLAGS) \$(FUZZ_CPPFLAGS)
+
+ .fo.f:
+ x \$(CC) -o \$@ \$< $1.a \$(G) \$(ALL_LDFLAGS) \$(TEST_LDFLAGS) \$(FUZZ_LDFLAGS)
$1.a: \$(OBJ)
x @rm -f -- \$@
@@ -110,7 +136,7 @@ if printf '%s\n' "$1" | grep '^lib' >/dev/null 2>/dev/null; then
x \$(AR) ts \$@ > /dev/null
$1.\$(LIBEXT): \$(LOBJ)
- x \$(CC) \$(LIBFLAGS) -o \$@ \$(LOBJ) \$(LDFLAGS)
+ x \$(CC) \$(LIBFLAGS) -o \$@ \$(LOBJ) \$(ALL_LDFLAGS)
install: $1.a $1.\$(LIBEXT)
x mkdir -p -- "\$(DESTDIR)\$(PREFIX)/lib"
@@ -132,9 +158,10 @@ if printf '%s\n' "$1" | grep '^lib' >/dev/null 2>/dev/null; then
clean:
x -rm -f -- *.o *.a *.lo *.su *.so *.so.* *.dll *.dylib
x -rm -f -- *.gch *.gcov *.gcno *.gcda *.\$(LIBEXT)
+ x -rm -f -- *.t *.to *.f *.fo
.SUFFIXES:
- .SUFFIXES: .lo .o .c
+ .SUFFIXES: .lo .o .c .to .t .fo .f
.PHONY: all install uninstall clean
EOF
@@ -181,14 +208,20 @@ else
HDR =
+
+ ALL_CPPFLAGS = \$(CPPFLAGS) \$(FUZZED_CPPFLAGS)
+ ALL_CFLAGS = \$(CFLAGS) \$(FUZZED_CFLAGS)
+ ALL_LDFLAGS = \$(LDFLAGS) \$(FUZZED_LDFLAGS)
+
+
all: $1
\$(OBJ): \$(HDR)
.c.o:
- x \$(CC) -c -o \$@ \$< \$(CFLAGS) \$(CPPFLAGS)
+ x \$(CC) -c -o \$@ \$< \$(ALL_CFLAGS) \$(GOV_CFLAGS) \$(ALL_CPPFLAGS) \$(GOV_CPPFLAGS)
$1: \$(OBJ)
- x \$(CC) -o \$@ \$(OBJ) \$(LDFLAGS)
+ x \$(CC) -o \$@ \$(OBJ) \$(ALL_LDFLAGS) \$(COV_LDFLAGS)
install: $1
x mkdir -p -- "\$(DESTDIR)\$(PREFIX)/bin"
@@ -201,7 +234,8 @@ else
x -rm -f -- "\$(DESTDIR)\$(MANPREFIX)/man1/$1.1"
clean:
- x -rm -f -- *.o *.a *.lo *.su *.so *.so.* *.gch *.gcov *.gcno *.gcda
+ x -rm -f -- *.o *.a *.lo *.su *.so *.so.* *.gch
+ x -rm -f -- *.gcov *.gcno *.gcda *.t *.to *.f *.fo
x -rm -f -- $1
.SUFFIXES:
@@ -217,7 +251,32 @@ cat > config.mk <<-EOF
CC = c99
+ COMMON_SANITIZE = -fsanitize=alignment,shift,signed-integer-overflow,object-size,null,undefined,bounds,address
+ CLANG_SANITIZE = -O1 \$(COMMON_SANITIZE),cfi -flto -fvisibility=hidden -fno-sanitize-trap=cfi
+ GCC_SANITIZE = -O1 \$(COMMON_SANITIZE)
+ #SANITIZE = \$(CLANG_SANITIZE)
+ #SANITIZE = \$(GCC_SANITIZE)
+
CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_GNU_SOURCE
- CFLAGS =
- LDFLAGS =
+ CFLAGS = \$(SANITIZE)
+ LDFLAGS = \$(SANITIZE)
+
+ G = -g
+EOF
+
+cat <<-EOF | sed 's/x\t/\t/g' > config-coverage-gcc.mk
+ CONFIGFILE_PROPER = config.mk
+ include \$(CONFIGFILE_PROPER)
+
+ CC = \$(CC_PREFIX)gcc -std=c99
+ GCOV = gcov
+
+ COV_CPPFLAGS = -DCOVERAGE_TEST
+ COV_CFLAGS = --coverage -g -O0
+ COV_LDFLAGS = --coverage -g -O0
+
+ G =
+
+ coverage: check
+ x \$(GCOV) -pr -- *.gcda 2>&1
EOF