Evgenii Kliuchnikov | 52ff817 | 2016-06-24 15:32:51 +0200 | [diff] [blame] | 1 | OS := $(shell uname) |
Eugene Kliuchnikov | 03739d2 | 2017-05-29 17:55:14 +0200 | [diff] [blame] | 2 | LIBSOURCES = $(wildcard c/common/*.c) $(wildcard c/dec/*.c) \ |
| 3 | $(wildcard c/enc/*.c) |
| 4 | SOURCES = $(LIBSOURCES) c/tools/brotli.c |
Evgenii Kliuchnikov | 52ff817 | 2016-06-24 15:32:51 +0200 | [diff] [blame] | 5 | BINDIR = bin |
| 6 | OBJDIR = $(BINDIR)/obj |
chad-iris | 8529bfa | 2016-07-06 10:09:04 -0700 | [diff] [blame] | 7 | LIBOBJECTS = $(addprefix $(OBJDIR)/, $(LIBSOURCES:.c=.o)) |
Evgenii Kliuchnikov | 52ff817 | 2016-06-24 15:32:51 +0200 | [diff] [blame] | 8 | OBJECTS = $(addprefix $(OBJDIR)/, $(SOURCES:.c=.o)) |
chad-iris | 8529bfa | 2016-07-06 10:09:04 -0700 | [diff] [blame] | 9 | LIB_A = libbrotli.a |
Eugene Kliuchnikov | 03739d2 | 2017-05-29 17:55:14 +0200 | [diff] [blame] | 10 | EXECUTABLE = brotli |
Eugene Kliuchnikov | 6ece1d8 | 2017-04-23 14:07:08 +0200 | [diff] [blame] | 11 | DIRS = $(OBJDIR)/c/common $(OBJDIR)/c/dec $(OBJDIR)/c/enc \ |
| 12 | $(OBJDIR)/c/tools $(BINDIR)/tmp |
Evgenii Kliuchnikov | 52ff817 | 2016-06-24 15:32:51 +0200 | [diff] [blame] | 13 | CFLAGS += -O2 |
| 14 | ifeq ($(os), Darwin) |
| 15 | CPPFLAGS += -DOS_MACOSX |
| 16 | endif |
Eugene Kliuchnikov | 378485b | 2016-06-16 10:52:57 +0200 | [diff] [blame] | 17 | |
Stephen Kyle | 67f059e | 2018-09-27 10:00:33 +0100 | [diff] [blame] | 18 | ifneq ($(strip $(CROSS_COMPILE)), ) |
| 19 | CC=$(CROSS_COMPILE)-gcc |
| 20 | ARCH=$(firstword $(subst -, ,$(CROSS_COMPILE))) |
| 21 | BROTLI_WRAPPER="qemu-$(ARCH) -L /usr/$(CROSS_COMPILE)" |
| 22 | endif |
| 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. |
| 26 | ifeq ($(ARCH), arm) |
Stephen Kyle | 7a153eb | 2018-10-17 16:29:32 +0100 | [diff] [blame] | 27 | CFLAGS += -march=armv7-a -mfloat-abi=hard -mfpu=neon |
Stephen Kyle | 67f059e | 2018-09-27 10:00:33 +0100 | [diff] [blame] | 28 | endif |
| 29 | |
Evgenii Kliuchnikov | 52ff817 | 2016-06-24 15:32:51 +0200 | [diff] [blame] | 30 | all: test |
| 31 | @: |
Eugene Kliuchnikov | 378485b | 2016-06-16 10:52:57 +0200 | [diff] [blame] | 32 | |
Evgenii Kliuchnikov | 52ff817 | 2016-06-24 15:32:51 +0200 | [diff] [blame] | 33 | .PHONY: all clean test |
Eugene Kliuchnikov | 378485b | 2016-06-16 10:52:57 +0200 | [diff] [blame] | 34 | |
Evgenii Kliuchnikov | 52ff817 | 2016-06-24 15:32:51 +0200 | [diff] [blame] | 35 | $(DIRS): |
| 36 | mkdir -p $@ |
Eugene Kliuchnikov | 378485b | 2016-06-16 10:52:57 +0200 | [diff] [blame] | 37 | |
Evgenii Kliuchnikov | 52ff817 | 2016-06-24 15:32:51 +0200 | [diff] [blame] | 38 | $(EXECUTABLE): $(OBJECTS) |
Eugene Kliuchnikov | e9b278a | 2016-10-31 14:33:59 +0100 | [diff] [blame] | 39 | $(CC) $(LDFLAGS) $(OBJECTS) -lm -o $(BINDIR)/$(EXECUTABLE) |
Evgenii Kliuchnikov | 52ff817 | 2016-06-24 15:32:51 +0200 | [diff] [blame] | 40 | |
chad-iris | 8529bfa | 2016-07-06 10:09:04 -0700 | [diff] [blame] | 41 | lib: $(LIBOBJECTS) |
| 42 | rm -f $(LIB_A) |
| 43 | ar -crs $(LIB_A) $(LIBOBJECTS) |
| 44 | |
Evgenii Kliuchnikov | 52ff817 | 2016-06-24 15:32:51 +0200 | [diff] [blame] | 45 | test: $(EXECUTABLE) |
Stephen Kyle | 67f059e | 2018-09-27 10:00:33 +0100 | [diff] [blame] | 46 | tests/compatibility_test.sh $(BROTLI_WRAPPER) |
| 47 | tests/roundtrip_test.sh $(BROTLI_WRAPPER) |
Evgenii Kliuchnikov | 52ff817 | 2016-06-24 15:32:51 +0200 | [diff] [blame] | 48 | |
| 49 | clean: |
chad-iris | 8529bfa | 2016-07-06 10:09:04 -0700 | [diff] [blame] | 50 | rm -rf $(BINDIR) $(LIB_A) |
Eugene Kliuchnikov | dd8fa3e | 2016-09-22 11:32:23 +0200 | [diff] [blame] | 51 | |
| 52 | .SECONDEXPANSION: |
| 53 | $(OBJECTS): $$(patsubst %.o,%.c,$$(patsubst $$(OBJDIR)/%,%,$$@)) | $(DIRS) |
Eugene Kliuchnikov | 6ece1d8 | 2017-04-23 14:07:08 +0200 | [diff] [blame] | 54 | $(CC) $(CFLAGS) $(CPPFLAGS) -Ic/include \ |
Eugene Kliuchnikov | dd8fa3e | 2016-09-22 11:32:23 +0200 | [diff] [blame] | 55 | -c $(patsubst %.o,%.c,$(patsubst $(OBJDIR)/%,%,$@)) -o $@ |