1
2IFLAGS := -isystem include/ -I ../include/ -I ../lib/zstd/ -isystem googletest/googletest/include -isystem ../../../lib/common/
3
4SOURCES := $(wildcard ../lib/zstd/*.c)
5OBJECTS := $(patsubst %.c,%.o,$(SOURCES))
6
7ARFLAGS := rcs
8CXXFLAGS += -std=c++11 -g -O3 -Wcast-align
9CFLAGS += -g -O3 -Wframe-larger-than=400 -Wcast-align
10CPPFLAGS += $(IFLAGS)
11
12../lib/zstd/libzstd.a: $(OBJECTS)
13	$(AR) $(ARFLAGS) $@ $^
14
15DecompressCrash: DecompressCrash.o $(OBJECTS) libFuzzer.a
16	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) $^ -o $@
17
18RoundTripCrash: RoundTripCrash.o $(OBJECTS) ../lib/xxhash.o libFuzzer.a
19	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) $^ -o $@
20
21UserlandTest: UserlandTest.cpp ../lib/zstd/libzstd.a ../lib/xxhash.o
22	$(CXX) $(CXXFLAGS) $(CPPFLAGS) $^ googletest/build/googlemock/gtest/libgtest.a googletest/build/googlemock/gtest/libgtest_main.a -o $@
23
24XXHashUserlandTest: XXHashUserlandTest.cpp ../lib/xxhash.o ../../../lib/common/xxhash.o
25	$(CXX) $(CXXFLAGS) $(CFLAGS) $(CPPFLAGS) $^ googletest/build/googlemock/gtest/libgtest.a googletest/build/googlemock/gtest/libgtest_main.a -o $@
26
27# Install libfuzzer
28libFuzzer.a:
29	@$(RM) -rf Fuzzer
30	@git clone https://chromium.googlesource.com/chromium/llvm-project/llvm/lib/Fuzzer
31	@./Fuzzer/build.sh
32
33# Install googletest
34.PHONY: googletest
35googletest:
36	@$(RM) -rf googletest
37	@git clone https://github.com/google/googletest
38	@mkdir -p googletest/build
39	@cd googletest/build && cmake .. && $(MAKE)
40
41clean:
42	$(RM) -f *.{o,a} ../lib/zstd/*.{o,a} ../lib/*.o
43	$(RM) -f DecompressCrash RoundTripCrash UserlandTest XXHashUserlandTest
44