blob: 48909409079abbab5e8ef53423d278a663aaeca2 [file] [log] [blame]
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +02001OS := $(shell uname)
Eugene Kliuchnikov03739d22017-05-29 17:55:14 +02002LIBSOURCES = $(wildcard c/common/*.c) $(wildcard c/dec/*.c) \
3 $(wildcard c/enc/*.c)
4SOURCES = $(LIBSOURCES) c/tools/brotli.c
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +02005BINDIR = bin
6OBJDIR = $(BINDIR)/obj
chad-iris8529bfa2016-07-06 10:09:04 -07007LIBOBJECTS = $(addprefix $(OBJDIR)/, $(LIBSOURCES:.c=.o))
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +02008OBJECTS = $(addprefix $(OBJDIR)/, $(SOURCES:.c=.o))
chad-iris8529bfa2016-07-06 10:09:04 -07009LIB_A = libbrotli.a
Eugene Kliuchnikov03739d22017-05-29 17:55:14 +020010EXECUTABLE = brotli
Eugene Kliuchnikov6ece1d82017-04-23 14:07:08 +020011DIRS = $(OBJDIR)/c/common $(OBJDIR)/c/dec $(OBJDIR)/c/enc \
12 $(OBJDIR)/c/tools $(BINDIR)/tmp
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +020013CFLAGS += -O2
14ifeq ($(os), Darwin)
15 CPPFLAGS += -DOS_MACOSX
16endif
Eugene Kliuchnikov378485b2016-06-16 10:52:57 +020017
Stephen Kyle67f059e2018-09-27 10:00:33 +010018ifneq ($(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)
Stephen Kyle7a153eb2018-10-17 16:29:32 +010027 CFLAGS += -march=armv7-a -mfloat-abi=hard -mfpu=neon
Stephen Kyle67f059e2018-09-27 10:00:33 +010028endif
29
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +020030all: test
31 @:
Eugene Kliuchnikov378485b2016-06-16 10:52:57 +020032
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +020033.PHONY: all clean test
Eugene Kliuchnikov378485b2016-06-16 10:52:57 +020034
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +020035$(DIRS):
36 mkdir -p $@
Eugene Kliuchnikov378485b2016-06-16 10:52:57 +020037
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +020038$(EXECUTABLE): $(OBJECTS)
Eugene Kliuchnikove9b278a2016-10-31 14:33:59 +010039 $(CC) $(LDFLAGS) $(OBJECTS) -lm -o $(BINDIR)/$(EXECUTABLE)
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +020040
chad-iris8529bfa2016-07-06 10:09:04 -070041lib: $(LIBOBJECTS)
42 rm -f $(LIB_A)
43 ar -crs $(LIB_A) $(LIBOBJECTS)
44
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +020045test: $(EXECUTABLE)
Stephen Kyle67f059e2018-09-27 10:00:33 +010046 tests/compatibility_test.sh $(BROTLI_WRAPPER)
47 tests/roundtrip_test.sh $(BROTLI_WRAPPER)
Evgenii Kliuchnikov52ff8172016-06-24 15:32:51 +020048
49clean:
chad-iris8529bfa2016-07-06 10:09:04 -070050 rm -rf $(BINDIR) $(LIB_A)
Eugene Kliuchnikovdd8fa3e2016-09-22 11:32:23 +020051
52.SECONDEXPANSION:
53$(OBJECTS): $$(patsubst %.o,%.c,$$(patsubst $$(OBJDIR)/%,%,$$@)) | $(DIRS)
Eugene Kliuchnikov6ece1d82017-04-23 14:07:08 +020054 $(CC) $(CFLAGS) $(CPPFLAGS) -Ic/include \
Eugene Kliuchnikovdd8fa3e2016-09-22 11:32:23 +020055 -c $(patsubst %.o,%.c,$(patsubst $(OBJDIR)/%,%,$@)) -o $@