|
- # GNU make / gmake. Native target requires an illumos 64-bit compiler + headers.
- CC = gcc
- CPPFLAGS = -D__EXTENSIONS__ -D_POSIX_C_SOURCE=200809L -Isrc
- CFLAGS = -std=c99 -m64 -O2 -Wall -Wextra -Werror -Wformat=2
- LDLIBS = -lkstat -lrt
- SOURCES = src/main.c src/core.c src/config.c src/support.c src/illumos.c
- TESTFLAGS = -std=c99 -O1 -g -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -Isrc -Wall -Wextra -Werror -Wformat=2 -pedantic
-
- .PHONY: all native-check test test-sanitize portability clean
- all: o6h-memory-guard
-
- native-check:
- @test "`uname -s`" = SunOS || { echo "Native build requires SmartOS/illumos; use make test and make portability here."; exit 1; }
-
- o6h-memory-guard: $(SOURCES) src/guard.h | native-check
- $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(SOURCES) $(LDLIBS)
-
- test-guard: tests/test_guard.c src/core.c src/config.c src/guard.h
- $(CC) $(TESTFLAGS) -o $@ tests/test_guard.c src/core.c src/config.c
-
- test-runtime: tests/test_runtime.c src/main.c src/core.c src/config.c src/guard.h
- $(CC) $(TESTFLAGS) -o $@ tests/test_runtime.c src/core.c src/config.c
-
- test: test-guard test-runtime
- ./test-guard
- ./test-runtime
-
- test-sanitize:
- $(CC) $(TESTFLAGS) -fsanitize=address,undefined -fno-omit-frame-pointer -o test-sanitize-guard tests/test_guard.c src/core.c src/config.c
- ./test-sanitize-guard
- $(CC) $(TESTFLAGS) -fsanitize=address,undefined -fno-omit-frame-pointer -o test-sanitize-runtime tests/test_runtime.c src/core.c src/config.c
- ./test-sanitize-runtime
-
- # Local API sketches only: NOT real illumos headers, ABI, linking or runtime validation.
- portability:
- $(CC) $(TESTFLAGS) -Itests/api-sketch -fsyntax-only $(SOURCES)
- @for source in $(SOURCES); do $(CC) $(TESTFLAGS) -Itests/api-sketch -fanalyzer -c $$source -o /dev/null || exit 1; done
- sh -n install.sh
- xmllint --nonet --noout smf/o6h-memory-guard.xml
-
- clean:
- rm -f o6h-memory-guard test-guard test-runtime test-sanitize-guard test-sanitize-runtime
|