1OS := $(shell uname)
2LIBSOURCES = $(wildcard c/common/*.c) $(wildcard c/dec/*.c) \
3             $(wildcard c/enc/*.c)
4SOURCES = $(LIBSOURCES) c/tools/brotli.c
5BINDIR = bin
6OBJDIR = $(BINDIR)/obj
7LIBOBJECTS = $(addprefix $(OBJDIR)/, $(LIBSOURCES:.c=.o))
8OBJECTS = $(addprefix $(OBJDIR)/, $(SOURCES:.c=.o))
9LIB_A = libbrotli.a
10EXECUTABLE = brotli
11DIRS = $(OBJDIR)/c/common $(OBJDIR)/c/dec $(OBJDIR)/c/enc \
12       $(OBJDIR)/c/tools $(BINDIR)/tmp
13CFLAGS += -O2
14ifeq ($(os), Darwin)
15  CPPFLAGS += -DOS_MACOSX
16endif
17
18ifneq ($(strip $(CROSS_COMPILE)), )
19	CC=$(CROSS_COMPILE)-gcc
20	ARCH=$(firstword $(subst -, ,$(CROSS_COMPILE)))
21	BROTLI_WRAPPER="qemu-$(ARCH) -L /usr/$(CROSS_COMPILE)"
22endif
23
24# The arm-linux-gnueabi compiler defaults to Armv5. Since we only support Armv7
25# and beyond, we need to select Armv7 explicitly with march.
26ifeq ($(ARCH), arm)
27	CFLAGS += -march=armv7-a -mfloat-abi=hard -mfpu=neon
28endif
29
30all: test
31	@:
32
33.PHONY: all clean test
34
35$(DIRS):
36	mkdir -p $@
37
38$(EXECUTABLE): $(OBJECTS)
39	$(CC) $(LDFLAGS) $(OBJECTS) -lm -o $(BINDIR)/$(EXECUTABLE)
40
41lib: $(LIBOBJECTS)
42	rm -f $(LIB_A)
43	ar -crs $(LIB_A) $(LIBOBJECTS)
44
45test: $(EXECUTABLE)
46	tests/compatibility_test.sh $(BROTLI_WRAPPER)
47	tests/roundtrip_test.sh $(BROTLI_WRAPPER)
48
49clean:
50	rm -rf $(BINDIR) $(LIB_A)
51
52.SECONDEXPANSION:
53$(OBJECTS): $$(patsubst %.o,%.c,$$(patsubst $$(OBJDIR)/%,%,$$@)) | $(DIRS)
54	$(CC) $(CFLAGS) $(CPPFLAGS) -Ic/include \
55        -c $(patsubst %.o,%.c,$(patsubst $(OBJDIR)/%,%,$@)) -o $@
56