mirror of
https://github.com/zeux/pugixml.git
synced 2024-12-27 13:33:17 +08:00
71 lines
1.7 KiB
Makefile
71 lines
1.7 KiB
Makefile
.SUFFIXES:
|
|
MAKEFLAGS+=-r
|
|
|
|
config=debug
|
|
defines=standard
|
|
|
|
BUILD=build/make-$(CXX)-$(config)-$(defines)
|
|
|
|
SOURCES=src/pugixml.cpp $(filter-out tests/fuzz_%,$(wildcard tests/*.cpp))
|
|
EXECUTABLE=$(BUILD)/test
|
|
|
|
VERSION=$(shell sed -n 's/.*version \(.*\).*/\1/p' src/pugiconfig.hpp)
|
|
RELEASE=$(shell git ls-files src docs/*.html docs/*.css docs/samples docs/images docs/manual scripts contrib readme.txt)
|
|
|
|
CXXFLAGS=-g -Wall -Wextra -Werror -pedantic
|
|
LDFLAGS=
|
|
|
|
ifeq ($(config),release)
|
|
CXXFLAGS+=-O3 -DNDEBUG
|
|
endif
|
|
|
|
ifeq ($(config),coverage)
|
|
CXXFLAGS+=-DNDEBUG
|
|
CXXFLAGS+=-fprofile-arcs -ftest-coverage
|
|
LDFLAGS+=-fprofile-arcs
|
|
endif
|
|
|
|
ifneq ($(defines),standard)
|
|
COMMA=,
|
|
CXXFLAGS+=-D $(subst $(COMMA), -D ,$(defines))
|
|
endif
|
|
|
|
OBJECTS=$(SOURCES:%=$(BUILD)/%.o)
|
|
|
|
all: $(EXECUTABLE)
|
|
|
|
ifeq ($(config),coverage)
|
|
test: $(EXECUTABLE)
|
|
-@find $(BUILD) -name '*.gcda' | xargs rm
|
|
./$(EXECUTABLE)
|
|
@gcov -b -c $(BUILD)/src/pugixml.cpp.gcda | sed -e '/./{H;$!d;}' -e 'x;/pugixml.cpp/!d;'
|
|
@ls *.gcov | grep -v pugixml.cpp.gcov | xargs rm
|
|
else
|
|
test: $(EXECUTABLE)
|
|
./$(EXECUTABLE)
|
|
endif
|
|
|
|
fuzz:
|
|
@mkdir -p $(BUILD)
|
|
$(AFL)/afl-clang++ tests/fuzz_parse.cpp tests/allocator.cpp src/pugixml.cpp $(CXXFLAGS) -o $(BUILD)/fuzz_parse
|
|
$(AFL)/afl-fuzz -i tests/data_fuzz_parse -o $(BUILD)/fuzz_parse_out -x $(AFL)/testcases/_extras/xml/ -- $(BUILD)/fuzz_parse @@
|
|
|
|
clean:
|
|
rm -rf $(BUILD)
|
|
|
|
release: build/pugixml-$(VERSION).tar.gz build/pugixml-$(VERSION).zip
|
|
|
|
build/pugixml-%: .FORCE | $(RELEASE)
|
|
perl tests/archive.pl $@ $|
|
|
|
|
$(EXECUTABLE): $(OBJECTS)
|
|
$(CXX) $(OBJECTS) $(LDFLAGS) -o $@
|
|
|
|
$(BUILD)/%.o: %
|
|
@mkdir -p $(dir $@)
|
|
$(CXX) $< $(CXXFLAGS) -c -MMD -MP -o $@
|
|
|
|
-include $(OBJECTS:.o=.d)
|
|
|
|
.PHONY: all test clean release .FORCE
|