-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathMakefile
144 lines (112 loc) · 2.92 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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
CC = cc
CXX = c++
COMPILE_ARGS =
LIBRARY_ARGS =
ifneq ($(CROSS_TRIPLE),)
CC := $(CROSS_TRIPLE)-$(CC)
CXX := $(CROSS_TRIPLE)-$(CXX)
endif
ifeq ($(TARGET_OS), windows)
EXT = .dll
else ifeq ($(TARGET_OS), darwin)
EXT = .so
# Needs this or cgo will try to link with libgcc, which will fail
CC := $(CROSS_ROOT)/bin/$(CROSS_TRIPLE)-clang
CXX := $(CROSS_ROOT)/bin/$(CROSS_TRIPLE)-clang++
LDFLAGS += "-lm"
else ifeq ($(TARGET_OS), linux)
EXT = .so
else ifeq ($(TARGET_OS), android)
EXT = .so
CC := $(CROSS_ROOT)/bin/$(CROSS_TRIPLE)-clang
CXX := $(CROSS_ROOT)/bin/$(CROSS_TRIPLE)-clang++
endif
ifeq ($(TARGET_ARCH), armv7_softfp)
COMPILE_ARGS += -march=armv7-a -mfloat-abi=softfp
LIBRARY_ARGS += -march=armv7-a -mfloat-abi=softfp
endif
PROJECT = elementumorg
NAME = test
GIT = git
DOCKER = docker
DOCKER_IMAGE = elementumorg/cross-compiler
OBJECT_NAME = $(NAME).o
OUTPUT_NAME = $(NAME)$(EXT)
BUILD_PATH = build/$(TARGET_OS)_$(TARGET_ARCH)
LIBRARY_PATH = libraries/$(TARGET_OS)_$(TARGET_ARCH)
ANDROID_PLATFORMS = \
android-arm \
android-arm64 \
android-x64 \
android-x86
LINUX_PLATFORMS = \
linux-armv6 \
linux-armv7 \
linux-armv7_softfp \
linux-arm64 \
linux-x64 \
linux-x86
WINDOWS_PLATFORMS = \
windows-x64 \
windows-x86
DARWIN_PLATFORMS = \
darwin-x64
PLATFORMS = $(ANDROID_PLATFORMS) $(LINUX_PLATFORMS) $(WINDOWS_PLATFORMS) $(DARWIN_PLATFORMS)
.PHONY: $(PLATFORMS)
all:
for i in $(PLATFORMS); do \
$(MAKE) $$i; \
done
$(PLATFORMS):
$(MAKE) build TARGET_OS=$(firstword $(subst -, ,$@)) TARGET_ARCH=$(word 2, $(subst -, ,$@))
force:
@true
$(BUILD_PATH):
mkdir -p $(BUILD_PATH)
$(LIBRARY_PATH):
mkdir -p $(LIBRARY_PATH)
$(LIBRARY_PATH)/$(OUTPUT_NAME): $(BUILD_PATH) $(LIBRARY_PATH) force
# Make object file
LDFLAGS='$(LDFLAGS)' \
CFLAGS='$(CFLAGS)' \
CC='$(CC)' CXX='$(CXX)' \
$(CC) \
$(COMPILE_ARGS) \
-c -o '$(BUILD_PATH)/$(OBJECT_NAME)' \
src/test.c
# Make library
LDFLAGS='$(LDFLAGS)' \
CFLAGS='$(CFLAGS)' \
CC='$(CC)' CXX='$(CXX)' \
$(CC) \
$(LIBRARY_ARGS) \
--shared -o '$(LIBRARY_PATH)/$(OUTPUT_NAME)' \
'$(BUILD_PATH)/$(OBJECT_NAME)'
chmod -R 777 $(BUILD_PATH)
# Copy header file
cp src/test.h $(LIBRARY_PATH)/
# Cleanuip object file
rm -f '$(BUILD_PATH)/$(OBJECT_NAME)'
vendor_darwin vendor_linux:
vendor_windows:
vendor_android:
vendor_libs_windows:
vendor_libs_android:
lib: $(LIBRARY_PATH)/$(OUTPUT_NAME)
re: clean build
clean:
rm -rf $(BUILD_PATH)
rm -rf $(LIBRARY_PATH)
distclean:
rm -rf build
build: force
$(DOCKER) run --rm -v $(shell pwd):/src/ --ulimit memlock=67108864 -w /src/ $(DOCKER_IMAGE):$(TARGET_OS)-$(TARGET_ARCH) make dist TARGET_OS=$(TARGET_OS) TARGET_ARCH=$(TARGET_ARCH)
docker: force
$(DOCKER) run --rm -v $(shell pwd):/src/ --ulimit memlock=67108864 -w /src/ $(DOCKER_IMAGE):$(TARGET_OS)-$(TARGET_ARCH)
dist: lib vendor_$(TARGET_OS)
pull-all:
for i in $(PLATFORMS); do \
docker pull $(DOCKER_IMAGE):$$i; \
done
pull:
docker pull $(DOCKER_IMAGE):$(PLATFORM)