-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathMakefile
94 lines (71 loc) · 2.37 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
.PHONY: all clean clean-all copy-headers test
LIB_NAME := libgrabkernel2
CC := clang
TARGET ?= ios
CFLAGS ?= -Wall -Werror -Wno-unused-command-line-argument -Iinclude -I_external/include -fPIC -fobjc-arc -O3
LDFLAGS ?= -framework Foundation -framework Security -L_external/lib/$(TARGET) -lz -lpartial
ifeq ($(TARGET), macos)
CFLAGS += -arch x86_64 -arch arm64 -mmacosx-version-min=11.0
else ifeq ($(TARGET), ios)
CFLAGS += -arch arm64 -arch arm64e -isysroot $(shell xcrun --sdk iphoneos --show-sdk-path) -miphoneos-version-min=14.0
LDFLAGS += -framework UIKit
else
$(error Unsupported target $(TARGET))
endif
BUILD_DIR := build/$(TARGET)
OUTPUT_DIR := output/$(TARGET)
DEBUG ?= 0
ifeq ($(DEBUG), 1)
CFLAGS += -g -DDEBUG=1 -O0
endif
HEADER_OUTPUT_DIR := $(OUTPUT_DIR)/include
TESTS_SRC_DIR := tests
TESTS_BUILD_DIR := $(BUILD_DIR)/tests
TESTS_OUTPUT_DIR := $(OUTPUT_DIR)/tests
LIB_DIR := $(OUTPUT_DIR)/lib
STATIC_LIB := $(LIB_DIR)/$(LIB_NAME).a
DYNAMIC_LIB := $(LIB_DIR)/$(LIB_NAME).dylib
SRC_DIR := src
SRC_FILES := $(wildcard $(SRC_DIR)/*.m)
OBJ_FILES := $(patsubst $(SRC_DIR)/%.m, $(BUILD_DIR)/%.o, $(SRC_FILES))
DISABLE_TESTS ?= 0
ifeq ($(DISABLE_TESTS), 0)
TESTS_SUBDIRS := $(wildcard $(TESTS_SRC_DIR)/*)
TESTS_BINARIES := $(patsubst $(TESTS_SRC_DIR)/%,$(TESTS_OUTPUT_DIR)/%,$(TESTS_SUBDIRS))
endif
HEADER_OUTPUT_DIR := $(OUTPUT_DIR)/include
all: copy-headers $(STATIC_LIB) $(DYNAMIC_LIB) $(TESTS_BINARIES)
$(STATIC_LIB): $(OBJ_FILES)
@mkdir -p $(LIB_DIR)
libtool $^ -o $@
$(DYNAMIC_LIB): LDFLAGS += -install_name @rpath/$(LIB_NAME).dylib
$(DYNAMIC_LIB): $(OBJ_FILES)
@mkdir -p $(LIB_DIR)
$(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ $^
@ldid -S $@
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.m
@mkdir -p $(@D)
$(CC) $(CFLAGS) $(LDFLAGS) -c $< -o $@
ifeq ($(DISABLE_TESTS), 0)
.SECONDEXPANSION:
$(TESTS_OUTPUT_DIR)/%: $$(wildcard $(TESTS_SRC_DIR)/%/*.m) $(STATIC_LIB)
@mkdir -p $(@D)
@rm -rf $@
$(CC) $(CFLAGS) $(LDFLAGS) -I$(OUTPUT_DIR)/include -o $@ $^
@if [ "$(TARGET)" = "ios" ]; then \
ldid -S_external/ios/entitlements.plist $@; \
fi
endif
test: $(TESTS_BINARIES)
@for test in $(TESTS_BINARIES); do \
echo "Running $$test"; \
$$test; \
done
copy-headers: include/grabkernel.h
@rm -rf $(HEADER_OUTPUT_DIR)
@mkdir -p $(HEADER_OUTPUT_DIR)
@cp -r include/grabkernel.h $(HEADER_OUTPUT_DIR)/libgrabkernel2.h
clean:
@rm -rf $(BUILD_DIR)/* $(OUTPUT_DIR)/*
clean-all:
@rm -rf build output