52 lines
1.2 KiB
Makefile
52 lines
1.2 KiB
Makefile
# flags
|
|
CC_WARN := -Wall -Wextra -Werror=implicit-function-declaration -Wformat -Werror=format-security
|
|
|
|
ifeq ($(CC),musl-gcc)
|
|
# musl is ISO 10646 compliant but doesn't define __STDC_ISO_10646__
|
|
CC_EXTRA := -D__STDC_ISO_10646__=201706L
|
|
else
|
|
# sanitisers only work for non-musl builds
|
|
CC_SAN := -fsanitize=address -fsanitize=leak -fsanitize=undefined -fsanitize-address-use-after-scope
|
|
endif
|
|
|
|
test: CFLAGS := -ggdb -std=c11 -pipe $(CC_WARN) $(CC_EXTRA) -fno-omit-frame-pointer $(CC_SAN)
|
|
flto-test: CFLAGS := -s -O2 -pipe -std=c11 $(CC_WARN) $(CC_EXTRA) -flto -march=native -mtune=native
|
|
tools: CFLAGS := -s -O2 -pipe -std=c11 $(CC_WARN) $(CC_EXTRA)
|
|
|
|
# str library source files
|
|
SRC := str.c str.h str_test.c
|
|
|
|
# all
|
|
.PHONY: all
|
|
all: tools test flto-test
|
|
|
|
.PHONY: clean
|
|
clean: clean-test clean-tools
|
|
|
|
# test
|
|
test: $(SRC)
|
|
$(CC) $(CFLAGS) -o $@ $(filter %.c,$^)
|
|
./$@
|
|
|
|
flto-test: $(SRC)
|
|
$(CC) $(CFLAGS) -o $@ $(filter %.c,$^)
|
|
./$@
|
|
|
|
.PHONY: clean-test
|
|
clean-test:
|
|
rm -f test flto-test
|
|
|
|
# tools
|
|
GEN_CHAR_CLASS := tools/gen-char-class
|
|
|
|
.PHONY: tools
|
|
tools: $(GEN_CHAR_CLASS)
|
|
|
|
# gen-char-class
|
|
$(GEN_CHAR_CLASS): tools/gen_char_class.c
|
|
$(CC) $(CFLAGS) -o $@ $(filter %.c,$^)
|
|
|
|
.PHONY: clean-tools
|
|
clean-tools:
|
|
rm -f $(GEN_CHAR_CLASS)
|