You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.5 KiB
103 lines
3.5 KiB
|
|
.PHONY: clean deepclean |
|
|
|
# Disable -Wsign-compare because StringPiece currently unhelpfully defines |
|
# size() as ssize_t instad of size_t. |
|
CXXFLAGS=-std=c++11 -W -Wall -Wno-sign-compare -g -I third_party/re2 -I. -Isrc |
|
RE2_H=third_party/re2/re2/re2.h |
|
RE2_A=third_party/re2/obj/libre2.a |
|
|
|
bloaty: src/main.cc src/libbloaty.a $(RE2_A) |
|
$(CXX) $(GC_SECTIONS) $(CXXFLAGS) -O2 -o $@ $^ -lpthread |
|
|
|
OBJS=src/bloaty.o src/dwarf.o src/elf.o src/macho.o |
|
|
|
$(OBJS): %.o : %.cc src/bloaty.h src/dwarf_constants.h $(RE2_H) |
|
$(CXX) $(CXXFLAGS) -O2 -c -o $@ $< |
|
|
|
src/libbloaty.a: $(OBJS) |
|
ar rcs $@ $^ |
|
|
|
third_party/re2/obj/libre2.a: third_party/re2/Makefile |
|
$(MAKE) -C third_party/re2 CPPFLAGS="-ffunction-sections -fdata-sections -g" |
|
|
|
# These targets share a pattern match to coerce make into only executing once |
|
# See this discussion: http://stackoverflow.com/a/3077254/1780018 |
|
third%party/re2/Makefile third%party/re2/re2/re2.h third%party/googletest/CMakeLists.txt third%party/libFuzzer/build.sh: .gitmodules |
|
git submodule init && git submodule update |
|
@# Ensure .gitmodules cannot be newer |
|
touch -r .gitmodules $@ |
|
|
|
clean: |
|
rm -f bloaty src/*.o src/*.a |
|
rm -f tests/range_map_test tests/bloaty_test tests/bloaty_misc_test |
|
rm -rf *.dSYM |
|
|
|
deepclean: clean |
|
rm -rf third_party/re2 third_party/googletest third_party/libFuzzer |
|
|
|
## Tests ####################################################################### |
|
|
|
TESTFLAGS=-Ithird_party/googletest/googletest/include -Ithird_party/googletest/googlemock/include |
|
TESTLIBS=src/libbloaty-test.a $(RE2_A) third_party/googletest/googlemock/gtest/libgtest_main.a third_party/googletest/googlemock/gtest/libgtest.a |
|
|
|
ifeq ($(CXX), clang++) |
|
TESTFLAGS += -fsanitize=address |
|
endif |
|
|
|
TESTOBJS=$(OBJS:src/%.o=src/%.test.o) |
|
|
|
$(TESTOBJS): %.test.o : %.cc src/bloaty.h src/dwarf_constants.h $(RE2_H) |
|
$(CXX) $(CXXFLAGS) $(TESTFLAGS) -c -o $@ $< |
|
|
|
src/libbloaty-test.a: $(TESTOBJS) |
|
ar rcs $@ $^ |
|
|
|
test: tests/range_map_test tests/bloaty_test tests/bloaty_misc_test |
|
TOP=`pwd`; \ |
|
tests/range_map_test && \ |
|
(cd tests/testdata/linux-x86_64 && $$TOP/tests/bloaty_test) && \ |
|
(cd tests/testdata/linux-x86 && $$TOP/tests/bloaty_test) && \ |
|
(cd tests/testdata/misc && $$TOP/tests/bloaty_misc_test) |
|
|
|
tests/range_map_test: tests/range_map_test.cc $(TESTLIBS) |
|
$(CXX) $(CXXFLAGS) $(TESTFLAGS) -o $@ $^ -lpthread |
|
|
|
tests/bloaty_test: tests/bloaty_test.cc $(TESTLIBS) |
|
$(CXX) $(CXXFLAGS) $(TESTFLAGS) -o $@ $^ -lpthread |
|
|
|
tests/bloaty_misc_test: tests/bloaty_misc_test.cc $(TESTLIBS) |
|
$(CXX) $(CXXFLAGS) $(TESTFLAGS) -o $@ $^ -lpthread |
|
|
|
third_party/googletest/googlemock/gtest/libgtest_main.a: third_party/googletest/CMakeLists.txt |
|
cd third_party/googletest && cmake . && $(MAKE) |
|
|
|
## Fuzzing ##################################################################### |
|
|
|
FUZZFLAGS=-fsanitize=address -fsanitize-coverage=trace-pc-guard |
|
TESTCMD=-fsanitize-coverage=trace-pc-guard -c -x c++ /dev/null -o /dev/null 2> /dev/null |
|
TESTRESULT=$(shell $(CXX) $(TESTCMD) && echo ok) |
|
ifeq ($(TESTRESULT), ok) |
|
fuzz: tests/fuzz_target |
|
else |
|
fuzz: |
|
echo "Fuzzing requires that CXX is a very recent Clang (ie from svn" |
|
false |
|
endif |
|
|
|
LIBFUZZER=third_party/libFuzzer/libFuzzer.a |
|
FUZZLIBS=$(BLOATYLIBS) $(LIBFUZZER) |
|
|
|
FUZZOBJS=$(OBJS:src/%.o=src/%.fuzz.o) |
|
|
|
$(FUZZOBJS): %.fuzz.o : %.cc src/bloaty.h src/dwarf_constants.h $(RE2_H) |
|
$(CXX) $(CXXFLAGS) $(FUZZFLAGS) -c -o $@ $< |
|
|
|
src/libbloaty-fuzz.a: $(FUZZOBJS) |
|
ar rcs $@ $^ |
|
|
|
$(LIBFUZZER): third_party/libFuzzer/build.sh |
|
cd third_party/libFuzzer && ./build.sh |
|
|
|
tests/fuzz_target: tests/fuzz_target.cc src/libbloaty-fuzz.a $(LIBFUZZER) $(RE2_A) |
|
$(CXX) $(CXXFLAGS) $(FUZZFLAGS) -o $@ $^ -lpthread
|
|
|