]>
Commit | Line | Data |
---|---|---|
a17b8eaa | 1 | # SPDX-License-Identifier: GPL-2.0-only |
b7b1b8dc | 2 | # |
137c26b7 | 3 | # Copyright (C) 2006-2010 OpenWrt.org |
54fbe8af | 4 | # Copyright (C) 2016 LEDE Project |
d62e8a94 | 5 | |
a9d683ca FF |
6 | ifneq ($(__rules_inc),1) |
7 | __rules_inc=1 | |
8 | ||
4b0c035a FF |
9 | ifeq ($(DUMP),) |
10 | -include $(TOPDIR)/.config | |
11 | endif | |
5f748a6c | 12 | include $(TOPDIR)/include/debug.mk |
1ef7c9e0 | 13 | include $(TOPDIR)/include/verbose.mk |
67d99146 | 14 | |
7a315b0b FF |
15 | ifneq ($(filter check,$(MAKECMDGOALS)),) |
16 | CHECK:=1 | |
17 | DUMP:=1 | |
18 | endif | |
19 | ||
5d1c80f0 | 20 | export TMP_DIR:=$(TOPDIR)/tmp |
72051f70 | 21 | export TMPDIR:=$(TMP_DIR) |
c6bc77ea | 22 | |
431c9267 | 23 | qstrip=$(strip $(subst ",,$(1))) |
c6bc77ea | 24 | #")) |
6b93231c | 25 | |
4c665e6c FF |
26 | empty:= |
27 | space:= $(empty) $(empty) | |
d081edf7 | 28 | comma:=, |
4c665e6c | 29 | merge=$(subst $(space),,$(1)) |
b993b68b | 30 | confvar=$(shell echo '$(foreach v,$(1),$(v)=$(subst ','\'',$($(v))))' | $(MKHASH) md5) |
214cac64 | 31 | strip_last=$(patsubst %.$(lastword $(subst .,$(space),$(1))),%,$(1)) |
4c665e6c | 32 | |
06286306 FF |
33 | paren_left = ( |
34 | paren_right = ) | |
35 | chars_lower = a b c d e f g h i j k l m n o p q r s t u v w x y z | |
36 | chars_upper = A B C D E F G H I J K L M N O P Q R S T U V W X Y Z | |
37 | ||
dbf8d9c5 JPW |
38 | define sep |
39 | ||
6c434d5f JC |
40 | endef |
41 | ||
42 | define newline | |
43 | ||
44 | ||
dbf8d9c5 JPW |
45 | endef |
46 | ||
06286306 FF |
47 | __tr_list = $(join $(join $(1),$(foreach char,$(1),$(comma))),$(2)) |
48 | __tr_head_stripped = $(subst $(space),,$(foreach cv,$(call __tr_list,$(1),$(2)),$$$(paren_left)subst$(cv)$(comma))) | |
49 | __tr_head = $(subst $(paren_left)subst,$(paren_left)subst$(space),$(__tr_head_stripped)) | |
50 | __tr_tail = $(subst $(space),,$(foreach cv,$(1),$(paren_right))) | |
51 | __tr_template = $(__tr_head)$$(1)$(__tr_tail) | |
52 | ||
53 | $(eval toupper = $(call __tr_template,$(chars_lower),$(chars_upper))) | |
54 | $(eval tolower = $(call __tr_template,$(chars_upper),$(chars_lower))) | |
55 | ||
ffb0181a FF |
56 | version_abbrev = $(if $(if $(CHECK),,$(DUMP)),$(1),$(shell printf '%.8s' $(1))) |
57 | ||
a3a37d0b | 58 | _SINGLE=export MAKEFLAGS=$(space); |
72faa09d | 59 | CFLAGS:= |
431c9267 | 60 | ARCH:=$(subst i486,i386,$(subst i586,i386,$(subst i686,i386,$(call qstrip,$(CONFIG_ARCH))))) |
064e7c8f | 61 | ARCH_PACKAGES:=$(call qstrip,$(CONFIG_TARGET_ARCH_PACKAGES)) |
a9d683ca | 62 | BOARD:=$(call qstrip,$(CONFIG_TARGET_BOARD)) |
54fbe8af | 63 | SUBTARGET:=$(call qstrip,$(CONFIG_TARGET_SUBTARGET)) |
c6bc77ea | 64 | TARGET_OPTIMIZATION:=$(call qstrip,$(CONFIG_TARGET_OPTIMIZATION)) |
ab0c71fe | 65 | TARGET_SUFFIX=$(call qstrip,$(CONFIG_TARGET_SUFFIX)) |
c6bc77ea | 66 | BUILD_SUFFIX:=$(call qstrip,$(CONFIG_BUILD_SUFFIX)) |
5f748a6c | 67 | SUBDIR:=$(patsubst $(TOPDIR)/%,%,${CURDIR}) |
c7308bc9 | 68 | BUILD_SUBDIR:=$(patsubst $(TOPDIR)/%,%,${CURDIR}) |
b204fcdb | 69 | NPROC:=$(shell sysctl -n hw.ncpu 2>/dev/null || nproc) |
b3c87137 | 70 | export SHELL:=/usr/bin/env bash |
6b93231c | 71 | |
c7308bc9 | 72 | IS_PACKAGE_BUILD := $(if $(filter package/%,$(BUILD_SUBDIR)),1) |
36502c5a | 73 | |
431c9267 | 74 | OPTIMIZE_FOR_CPU=$(subst i386,i486,$(ARCH)) |
6b93231c | 75 | |
0eb2fa39 | 76 | ifneq (,$(findstring $(ARCH) , aarch64 aarch64_be powerpc )) |
af22991e | 77 | FPIC:=-DPIC -fPIC |
14ac8769 | 78 | else |
af22991e | 79 | FPIC:=-DPIC -fpic |
14ac8769 FF |
80 | endif |
81 | ||
af22991e | 82 | HOST_FPIC:=-DPIC -fPIC |
a46c3324 | 83 | |
e0189cce | 84 | ARCH_SUFFIX:=$(call qstrip,$(CONFIG_CPU_TYPE)) |
a3989e3d IK |
85 | GCC_ARCH:= |
86 | ||
e0189cce FF |
87 | ifneq ($(ARCH_SUFFIX),) |
88 | ARCH_SUFFIX:=_$(ARCH_SUFFIX) | |
89 | endif | |
a3989e3d | 90 | ifneq ($(filter -march=armv%,$(TARGET_OPTIMIZATION)),) |
a3989e3d IK |
91 | GCC_ARCH:=$(patsubst -march=%,%,$(filter -march=armv%,$(TARGET_OPTIMIZATION))) |
92 | endif | |
8740549c FF |
93 | ifdef CONFIG_HAS_SPE_FPU |
94 | TARGET_SUFFIX:=$(TARGET_SUFFIX)spe | |
95 | endif | |
e0329222 FF |
96 | ifdef CONFIG_MIPS64_ABI |
97 | ifneq ($(CONFIG_MIPS64_ABI_O32),y) | |
e3a28f41 | 98 | ARCH_SUFFIX:=$(ARCH_SUFFIX)_$(call qstrip,$(CONFIG_MIPS64_ABI)) |
e0329222 FF |
99 | endif |
100 | endif | |
80d6e3b2 | 101 | |
d826af2c | 102 | DEFAULT_SUBDIR_TARGETS:=clean download prepare compile update refresh prereq dist distcheck configure check check-depends |
6cf067d0 FF |
103 | |
104 | define DefaultTargets | |
9228d1c0 FF |
105 | $(foreach t,$(DEFAULT_SUBDIR_TARGETS) $(1), |
106 | .$(t): | |
107 | $(t): .$(t) | |
108 | .PHONY: $(t) .$(t) | |
6cf067d0 FF |
109 | ) |
110 | endef | |
111 | ||
59db2868 | 112 | DL_DIR=$(if $(call qstrip,$(CONFIG_DOWNLOAD_FOLDER)),$(call qstrip,$(CONFIG_DOWNLOAD_FOLDER)),$(TOPDIR)/dl)$(if $(DL_SUBDIR),/$(DL_SUBDIR)) |
54fbe8af JPW |
113 | OUTPUT_DIR:=$(if $(call qstrip,$(CONFIG_BINARY_FOLDER)),$(call qstrip,$(CONFIG_BINARY_FOLDER)),$(TOPDIR)/bin) |
114 | BIN_DIR:=$(OUTPUT_DIR)/targets/$(BOARD)/$(SUBTARGET) | |
4ced39ac | 115 | INCLUDE_DIR:=$(TOPDIR)/include |
e6dd6901 | 116 | SCRIPT_DIR:=$(TOPDIR)/scripts |
c6bc77ea | 117 | BUILD_DIR_BASE:=$(TOPDIR)/build_dir |
c9bc7c50 NT |
118 | ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) |
119 | GCCV:=$(call qstrip,$(CONFIG_GCC_VERSION)) | |
120 | LIBC:=$(call qstrip,$(CONFIG_LIBC)) | |
c9bc7c50 NT |
121 | REAL_GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX)) |
122 | GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux | |
f55c29e4 | 123 | DIR_SUFFIX:=_$(LIBC)$(if $(CONFIG_arm),_eabi) |
a7780603 | 124 | BIN_DIR:=$(BIN_DIR)$(if $(CONFIG_USE_MUSL),,-$(LIBC)) |
318052e0 FF |
125 | TARGET_DIR_NAME = target-$(ARCH)$(ARCH_SUFFIX)$(DIR_SUFFIX)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX)) |
126 | TOOLCHAIN_DIR_NAME = toolchain-$(ARCH)$(ARCH_SUFFIX)_gcc-$(GCCV)$(DIR_SUFFIX) | |
c9bc7c50 NT |
127 | else |
128 | ifeq ($(CONFIG_NATIVE_TOOLCHAIN),) | |
129 | GNU_TARGET_NAME=$(call qstrip,$(CONFIG_TARGET_NAME)) | |
130 | else | |
131 | GNU_TARGET_NAME=$(shell gcc -dumpmachine) | |
132 | endif | |
133 | REAL_GNU_TARGET_NAME=$(GNU_TARGET_NAME) | |
57657a72 FF |
134 | LIBC:=$(call qstrip,$(CONFIG_LIBC)) |
135 | TARGET_DIR_NAME:=target-$(GNU_TARGET_NAME)_$(LIBC)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX)) | |
318052e0 | 136 | TOOLCHAIN_DIR_NAME:=toolchain-$(GNU_TARGET_NAME) |
c9bc7c50 | 137 | endif |
318052e0 | 138 | |
bd4d3cd1 | 139 | ifeq ($(or $(CONFIG_EXTERNAL_TOOLCHAIN),$(CONFIG_TARGET_uml)),) |
62ed1af1 | 140 | iremap = -f$(if $(CONFIG_REPRODUCIBLE_DEBUG_INFO),file,macro)-prefix-map=$(1)=$(2) |
b737686b FF |
141 | endif |
142 | ||
318052e0 | 143 | PACKAGE_DIR:=$(BIN_DIR)/packages |
2fbf6697 | 144 | PACKAGE_DIR_ALL:=$(TOPDIR)/staging_dir/packages/$(BOARD) |
318052e0 FF |
145 | BUILD_DIR:=$(BUILD_DIR_BASE)/$(TARGET_DIR_NAME) |
146 | STAGING_DIR:=$(TOPDIR)/staging_dir/$(TARGET_DIR_NAME) | |
147 | BUILD_DIR_TOOLCHAIN:=$(BUILD_DIR_BASE)/$(TOOLCHAIN_DIR_NAME) | |
148 | TOOLCHAIN_DIR:=$(TOPDIR)/staging_dir/$(TOOLCHAIN_DIR_NAME) | |
6b93231c | 149 | STAMP_DIR:=$(BUILD_DIR)/stamp |
c6bc77ea | 150 | STAMP_DIR_HOST=$(BUILD_DIR_HOST)/stamp |
70633d5f RH |
151 | TARGET_ROOTFS_DIR?=$(if $(call qstrip,$(CONFIG_TARGET_ROOTFS_DIR)),$(call qstrip,$(CONFIG_TARGET_ROOTFS_DIR)),$(BUILD_DIR)) |
152 | TARGET_DIR:=$(TARGET_ROOTFS_DIR)/root-$(BOARD) | |
4169a2e8 | 153 | STAGING_DIR_ROOT:=$(STAGING_DIR)/root-$(BOARD) |
7d57db4d | 154 | STAGING_DIR_IMAGE:=$(STAGING_DIR)/image |
e78c1baa | 155 | BUILD_LOG_DIR:=$(if $(call qstrip,$(CONFIG_BUILD_LOG_DIR)),$(call qstrip,$(CONFIG_BUILD_LOG_DIR)),$(TOPDIR)/logs) |
44cd20b8 | 156 | PKG_INFO_DIR := $(STAGING_DIR)/pkginfo |
e6dd6901 | 157 | |
3d717861 | 158 | BUILD_DIR_HOST:=$(if $(IS_PACKAGE_BUILD),$(BUILD_DIR_BASE)/hostpkg,$(BUILD_DIR_BASE)/host) |
2a328364 CM |
159 | STAGING_DIR_HOST:=$(abspath $(STAGING_DIR)/../host) |
160 | STAGING_DIR_HOSTPKG:=$(abspath $(STAGING_DIR)/../hostpkg) | |
36502c5a | 161 | |
24f49b17 | 162 | TARGET_PATH:=$(subst $(space),:,$(filter-out .,$(filter-out ./,$(subst :,$(space),$(PATH))))) |
064761d1 JPW |
163 | TARGET_INIT_PATH:=$(call qstrip,$(CONFIG_TARGET_INIT_PATH)) |
164 | TARGET_INIT_PATH:=$(if $(TARGET_INIT_PATH),$(TARGET_INIT_PATH),/usr/sbin:/sbin:/usr/bin:/bin) | |
c5d74630 | 165 | TARGET_CFLAGS:=$(TARGET_OPTIMIZATION)$(if $(CONFIG_DEBUG), -g3) $(call qstrip,$(CONFIG_EXTRA_OPTIMIZATION)) |
edc3ad91 | 166 | TARGET_CXXFLAGS = $(TARGET_CFLAGS) |
a1a5f59e FF |
167 | TARGET_ASFLAGS_DEFAULT = $(TARGET_CFLAGS) |
168 | TARGET_ASFLAGS = $(TARGET_ASFLAGS_DEFAULT) | |
a66b4960 JPW |
169 | ifneq ($(CONFIG_EXTERNAL_TOOLCHAIN),) |
170 | LIBGCC_S_PATH=$(realpath $(wildcard $(call qstrip,$(CONFIG_LIBGCC_ROOT_DIR))/$(call qstrip,$(CONFIG_LIBGCC_FILE_SPEC)))) | |
171 | LIBGCC_S=$(if $(LIBGCC_S_PATH),-L$(dir $(LIBGCC_S_PATH)) -lgcc_s) | |
236c369a | 172 | LIBGCC_A=$(realpath $(lastword $(wildcard $(dir $(LIBGCC_S_PATH))/gcc/*/*/libgcc.a))) |
a66b4960 | 173 | else |
236c369a | 174 | LIBGCC_A=$(lastword $(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc.a)) |
cbe164a2 | 175 | LIBGCC_S=$(if $(wildcard $(TOOLCHAIN_DIR)/lib/libgcc_s.so),-L$(TOOLCHAIN_DIR)/lib -lgcc_s,$(LIBGCC_A)) |
a66b4960 | 176 | endif |
958c4eac | 177 | |
348cae15 | 178 | ifeq ($(CONFIG_ARCH_64BIT),y) |
fb9023bb FF |
179 | LIB_SUFFIX:=64 |
180 | endif | |
181 | ||
127296bc | 182 | ifndef DUMP |
c9bc7c50 NT |
183 | ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) |
184 | -include $(TOOLCHAIN_DIR)/info.mk | |
58203064 | 185 | export GCC_HONOUR_COPTS:=0 |
c9bc7c50 | 186 | TARGET_CROSS:=$(if $(TARGET_CROSS),$(TARGET_CROSS),$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX))-) |
987458c2 CM |
187 | TOOLCHAIN_ROOT_DIR:=$(TOPDIR)/staging_dir/$(TOOLCHAIN_DIR_NAME) |
188 | TOOLCHAIN_BIN_DIRS:=$(TOOLCHAIN_ROOT_DIR)/bin | |
189 | TOOLCHAIN_INC_DIRS:=$(TOOLCHAIN_ROOT_DIR)/usr/include $(TOOLCHAIN_ROOT_DIR)/include | |
190 | TOOLCHAIN_LIB_DIRS:=$(TOOLCHAIN_ROOT_DIR)/usr/lib $(TOOLCHAIN_ROOT_DIR)/lib | |
5db4fbad | 191 | TARGET_CFLAGS+= -fhonour-copts |
55fe8b29 | 192 | ifeq ($(CONFIG_USE_MUSL),y) |
987458c2 | 193 | TOOLCHAIN_INC_DIRS+= $(TOOLCHAIN_DIR)/include/fortify |
55fe8b29 | 194 | endif |
c9bc7c50 NT |
195 | else |
196 | ifeq ($(CONFIG_NATIVE_TOOLCHAIN),) | |
197 | TARGET_CROSS:=$(call qstrip,$(CONFIG_TOOLCHAIN_PREFIX)) | |
198 | TOOLCHAIN_ROOT_DIR:=$(call qstrip,$(CONFIG_TOOLCHAIN_ROOT)) | |
199 | TOOLCHAIN_BIN_DIRS:=$(patsubst ./%,$(TOOLCHAIN_ROOT_DIR)/%,$(call qstrip,$(CONFIG_TOOLCHAIN_BIN_PATH))) | |
200 | TOOLCHAIN_INC_DIRS:=$(patsubst ./%,$(TOOLCHAIN_ROOT_DIR)/%,$(call qstrip,$(CONFIG_TOOLCHAIN_INC_PATH))) | |
201 | TOOLCHAIN_LIB_DIRS:=$(patsubst ./%,$(TOOLCHAIN_ROOT_DIR)/%,$(call qstrip,$(CONFIG_TOOLCHAIN_LIB_PATH))) | |
c9bc7c50 NT |
202 | endif |
203 | endif | |
987458c2 CM |
204 | ifneq ($(TOOLCHAIN_BIN_DIRS),) |
205 | TARGET_PATH:=$(subst $(space),:,$(TOOLCHAIN_BIN_DIRS)):$(TARGET_PATH) | |
206 | endif | |
207 | ifneq ($(TOOLCHAIN_INC_DIRS),) | |
208 | TARGET_CPPFLAGS+= $(patsubst %,-I%,$(TOOLCHAIN_INC_DIRS)) | |
209 | endif | |
210 | ifneq ($(TOOLCHAIN_LIB_DIRS),) | |
211 | TARGET_LDFLAGS+= $(patsubst %,-L%,$(TOOLCHAIN_LIB_DIRS)) | |
212 | endif | |
127296bc | 213 | endif |
21ab20bc AH |
214 | |
215 | TARGET_LINKER?=bfd | |
216 | TARGET_LDFLAGS+= -fuse-ld=$(TARGET_LINKER) | |
217 | ||
3d717861 | 218 | TARGET_PATH_PKG:=$(STAGING_DIR)/host/bin:$(STAGING_DIR_HOSTPKG)/bin:$(TARGET_PATH) |
14993559 | 219 | |
915e6b89 | 220 | ifeq ($(CONFIG_SOFT_FLOAT),y) |
343c412a | 221 | SOFT_FLOAT_CONFIG_OPTION:=--with-float=soft |
f6b57149 IK |
222 | ifeq ($(CONFIG_arm),y) |
223 | TARGET_CFLAGS+= -mfloat-abi=soft | |
224 | else | |
225 | TARGET_CFLAGS+= -msoft-float | |
226 | endif | |
915e6b89 | 227 | else |
343c412a | 228 | SOFT_FLOAT_CONFIG_OPTION:= |
f6b57149 IK |
229 | ifeq ($(CONFIG_arm),y) |
230 | TARGET_CFLAGS+= -mfloat-abi=hard | |
231 | endif | |
915e6b89 IK |
232 | endif |
233 | ||
d87a8aa1 | 234 | export ORIG_PATH:=$(if $(ORIG_PATH),$(ORIG_PATH),$(PATH)) |
5d30e6cb | 235 | export PATH:=$(TARGET_PATH) |
40d3401f | 236 | export STAGING_DIR STAGING_DIR_HOST STAGING_DIR_HOSTPKG |
a9136c08 | 237 | export SH_FUNC:=. $(INCLUDE_DIR)/shell.sh; |
5d30e6cb | 238 | |
9f73ab51 JC |
239 | PKG_CONFIG:=$(STAGING_DIR_HOST)/bin/pkg-config |
240 | ||
241 | export PKG_CONFIG | |
242 | ||
728581dc RP |
243 | HOSTCC:=$(STAGING_DIR_HOST)/bin/gcc |
244 | HOSTCXX:=$(STAGING_DIR_HOST)/bin/g++ | |
bdc41294 | 245 | HOST_CPPFLAGS:=-I$(STAGING_DIR_HOST)/include $(if $(IS_PACKAGE_BUILD),-I$(STAGING_DIR_HOSTPKG)/include -I$(STAGING_DIR)/host/include) |
87d489f6 | 246 | HOST_CXXFLAGS:= |
8726a422 | 247 | HOST_CFLAGS:=-O2 $(HOST_CPPFLAGS) |
bdc41294 | 248 | HOST_LDFLAGS:=-L$(STAGING_DIR_HOST)/lib $(if $(IS_PACKAGE_BUILD),-L$(STAGING_DIR_HOSTPKG)/lib -L$(STAGING_DIR)/host/lib) |
c6bc77ea | 249 | |
beca028b FF |
250 | BUILD_KEY=$(TOPDIR)/key-build |
251 | ||
0fdbd2e6 | 252 | FAKEROOT:=$(STAGING_DIR_HOST)/bin/fakeroot |
65410285 | 253 | |
2555ffb4 VW |
254 | TARGET_AR:=$(TARGET_CROSS)gcc-ar |
255 | TARGET_RANLIB:=$(TARGET_CROSS)gcc-ranlib | |
256 | TARGET_NM:=$(TARGET_CROSS)gcc-nm | |
e6dd6901 | 257 | TARGET_CC:=$(TARGET_CROSS)gcc |
2430e9a4 | 258 | TARGET_CXX:=$(TARGET_CROSS)g++ |
21ab20bc | 259 | TARGET_LD:=$(TARGET_CROSS)ld.$(TARGET_LINKER) |
d3f412f4 | 260 | KPATCH:=$(SCRIPT_DIR)/patch-kernel.sh |
2bb8e4a8 | 261 | FILECMD:=$(STAGING_DIR_HOST)/bin/file |
c6bc77ea | 262 | SED:=$(STAGING_DIR_HOST)/bin/sed -i -e |
d3b43f49 | 263 | ESED:=$(STAGING_DIR_HOST)/bin/sed -E -i -e |
b993b68b LM |
264 | MKHASH:=$(STAGING_DIR_HOST)/bin/mkhash |
265 | # MKHASH is used in /scripts, so we export it here. | |
266 | export MKHASH | |
e6dd6901 | 267 | CP:=cp -fpR |
137c26b7 | 268 | LN:=ln -sf |
1c742fb3 | 269 | XARGS:=xargs -r |
6b93231c | 270 | |
1162d6b7 JPW |
271 | BASH:=bash |
272 | TAR:=tar | |
273 | FIND:=find | |
274 | PATCH:=patch | |
f8bc8fa3 | 275 | PYTHON:=python3 |
78f476ed | 276 | |
ffd7c05a MP |
277 | ifeq ($(HOST_OS),Darwin) |
278 | TRUE:=/usr/bin/env gtrue | |
279 | FALSE:=/usr/bin/env gfalse | |
280 | else | |
281 | TRUE:=/usr/bin/env true | |
282 | FALSE:=/usr/bin/env false | |
283 | endif | |
284 | ||
39296679 | 285 | INSTALL_BIN:=install -m0755 |
1416b63d | 286 | INSTALL_SUID:=install -m4755 |
39296679 FF |
287 | INSTALL_DIR:=install -d -m0755 |
288 | INSTALL_DATA:=install -m0644 | |
9f048d5a | 289 | INSTALL_CONF:=install -m0600 |
39296679 | 290 | |
370894e5 JC |
291 | TARGET_CC_NOCACHE:=$(TARGET_CC) |
292 | TARGET_CXX_NOCACHE:=$(TARGET_CXX) | |
293 | HOSTCC_NOCACHE:=$(HOSTCC) | |
3d6093c2 | 294 | HOSTCXX_NOCACHE:=$(HOSTCXX) |
370894e5 JC |
295 | export TARGET_CC_NOCACHE |
296 | export TARGET_CXX_NOCACHE | |
297 | export HOSTCC_NOCACHE | |
524fb564 | 298 | export HOSTCXX_NOCACHE |
370894e5 | 299 | |
c8b0cd5a | 300 | ifneq ($(CONFIG_CCACHE),) |
5a1eb3bb PF |
301 | TARGET_CC:= ccache $(TARGET_CC) |
302 | TARGET_CXX:= ccache $(TARGET_CXX) | |
ccb6b0a0 | 303 | HOSTCC:= ccache $(HOSTCC) |
3d6093c2 | 304 | HOSTCXX:= ccache $(HOSTCXX) |
2ca084cc RY |
305 | export CCACHE_BASEDIR:=$(TOPDIR) |
306 | export CCACHE_DIR:=$(if $(call qstrip,$(CONFIG_CCACHE_DIR)),$(call qstrip,$(CONFIG_CCACHE_DIR)),$(TOPDIR)/.ccache) | |
307 | export CCACHE_COMPILERCHECK:=%compiler% -dumpmachine; %compiler% -dumpversion | |
c8b0cd5a MB |
308 | endif |
309 | ||
dd046f47 | 310 | TARGET_CONFIGURE_OPTS = \ |
9a467998 | 311 | AR="$(TARGET_AR)" \ |
5b3445c6 | 312 | AS="$(TARGET_CC) -c $(TARGET_ASFLAGS)" \ |
21ab20bc | 313 | LD="$(TARGET_LD)" \ |
9a467998 | 314 | NM="$(TARGET_NM)" \ |
c8b0cd5a MB |
315 | CC="$(TARGET_CC)" \ |
316 | GCC="$(TARGET_CC)" \ | |
eef95be7 | 317 | CXX="$(TARGET_CXX)" \ |
9a467998 | 318 | RANLIB="$(TARGET_RANLIB)" \ |
6d905289 | 319 | STRIP=$(TARGET_CROSS)strip \ |
d9b2f5c0 | 320 | OBJCOPY=$(TARGET_CROSS)objcopy \ |
9400ad24 NT |
321 | OBJDUMP=$(TARGET_CROSS)objdump \ |
322 | SIZE=$(TARGET_CROSS)size | |
e6dd6901 MB |
323 | |
324 | # strip an entire directory | |
373e5f5e | 325 | ifneq ($(CONFIG_NO_STRIP),) |
c9d9f804 | 326 | RSTRIP:=: |
4702698c | 327 | STRIP:=: |
c9d9f804 | 328 | else |
4702698c | 329 | ifneq ($(CONFIG_USE_STRIP),) |
0f3c406b | 330 | STRIP:=$(TARGET_CROSS)strip $(call qstrip,$(CONFIG_STRIP_ARGS)) |
4702698c NT |
331 | else |
332 | ifneq ($(CONFIG_USE_SSTRIP),) | |
d026b19c | 333 | STRIP:=$(STAGING_DIR_HOST)/bin/sstrip $(if $(CONFIG_SSTRIP_DISCARD_TRAILING_ZEROES),-z) |
4702698c NT |
334 | endif |
335 | endif | |
3bbb9277 | 336 | RSTRIP= \ |
236dd9d9 | 337 | export CROSS="$(TARGET_CROSS)" \ |
3bbb9277 | 338 | $(if $(PKG_BUILD_ID),KEEP_BUILD_ID=1) \ |
236dd9d9 FF |
339 | $(if $(CONFIG_KERNEL_KALLSYMS),NO_RENAME=1) \ |
340 | $(if $(CONFIG_KERNEL_PROFILING),KEEP_SYMBOLS=1); \ | |
c9d9f804 JC |
341 | NM="$(TARGET_CROSS)nm" \ |
342 | STRIP="$(STRIP)" \ | |
c2590fe9 | 343 | STRIP_KMOD="$(SCRIPT_DIR)/strip-kmod.sh" \ |
2efe776a | 344 | PATCHELF="$(STAGING_DIR_HOST)/bin/patchelf" \ |
c9d9f804 JC |
345 | $(SCRIPT_DIR)/rstrip.sh |
346 | endif | |
e6dd6901 | 347 | |
97258f53 FF |
348 | NINJA = \ |
349 | MAKEFLAGS="$(MAKE_JOBSERVER)" \ | |
350 | $(STAGING_DIR_HOST)/bin/ninja \ | |
351 | $(if $(findstring c,$(OPENWRT_VERBOSE)),-v) \ | |
352 | $(if $(MAKE_JOBSERVER),,-j1) | |
353 | ||
11e1304c | 354 | ifeq ($(CONFIG_IPV6),y) |
28efbbc8 | 355 | DISABLE_IPV6:= |
11e1304c FF |
356 | else |
357 | DISABLE_IPV6:=--disable-ipv6 | |
358 | endif | |
359 | ||
627e974c FF |
360 | TAR_OPTIONS:=-xf - |
361 | ||
4551f2bf JC |
362 | ifeq ($(CONFIG_BUILD_LOG),y) |
363 | BUILD_LOG:=1 | |
364 | endif | |
365 | ||
c541b31e | 366 | export BISON_PKGDATADIR:=$(STAGING_DIR_HOST)/share/bison |
fe33d5ba | 367 | export HOST_GNULIB_SRCDIR:=$(STAGING_DIR_HOST)/share/gnulib |
c541b31e FF |
368 | export M4:=$(STAGING_DIR_HOST)/bin/m4 |
369 | ||
cf4e7af3 FF |
370 | define shvar |
371 | V_$(subst .,_,$(subst -,_,$(subst /,_,$(1)))) | |
372 | endef | |
373 | ||
374 | define shexport | |
20a3814a | 375 | export $(call shvar,$(1))=$$(call $(1)) |
cf4e7af3 FF |
376 | endef |
377 | ||
e396e33a MB |
378 | # Execute commands under flock |
379 | # $(1) => The shell expression. | |
380 | # $(2) => The lock name. If not given, the global lock will be used. | |
579e9620 FF |
381 | ifneq ($(wildcard $(STAGING_DIR_HOST)/bin/flock),) |
382 | define locked | |
b34a0b32 | 383 | SHELL= \ |
579e9620 | 384 | flock \ |
b34a0b32 FF |
385 | $(TMP_DIR)/.$(if $(2),$(strip $(2)),global).flock \ |
386 | -c '$(subst ','\'',$(1))' | |
579e9620 FF |
387 | endef |
388 | else | |
389 | locked=$(1) | |
390 | endif | |
e396e33a | 391 | |
82859769 JPW |
392 | # Recursively copy paths into another directory, purge dangling |
393 | # symlinks before. | |
394 | # $(1) => File glob expression | |
395 | # $(2) => Destination directory | |
396 | define file_copy | |
397 | for src_dir in $(sort $(foreach d,$(wildcard $(1)),$(dir $(d)))); do \ | |
398 | ( cd $$src_dir; find -type f -or -type d ) | \ | |
399 | ( cd $(2); while :; do \ | |
400 | read FILE; \ | |
401 | [ -z "$$FILE" ] && break; \ | |
402 | [ -L "$$FILE" ] || continue; \ | |
403 | echo "Removing symlink $(2)/$$FILE"; \ | |
404 | rm -f "$$FILE"; \ | |
405 | done; ); \ | |
406 | done; \ | |
993ac460 | 407 | $(CP) $(1) $(2) |
82859769 JPW |
408 | endef |
409 | ||
27854a0a JPW |
410 | # Calculate sha256sum of any plain file within a given directory |
411 | # $(1) => Input directory | |
681e825f | 412 | # $(2) => If set, recurse into subdirectories |
27854a0a | 413 | define sha256sums |
681e825f | 414 | (cd $(1); find . $(if $(2),,-maxdepth 1) -type f -not -name 'sha256sums' -printf "%P\n" | sort | \ |
b993b68b | 415 | xargs -r $(MKHASH) -n sha256 | sed -ne 's!^\(.*\) \(.*\)$$!\1 *\2!p' > sha256sums) |
27854a0a JPW |
416 | endef |
417 | ||
dbeb0fad FF |
418 | # file extension |
419 | ext=$(word $(words $(subst ., ,$(1))),$(subst ., ,$(1))) | |
420 | ||
9ae3c6f9 PS |
421 | # Count Git commits of a package |
422 | # $(1) => if non-empty: count commits since last ": [uU]pdate to " or ": [bB]ump to " in commit message | |
423 | define commitcount | |
424 | $(shell \ | |
425 | if git log -1 >/dev/null 2>/dev/null; then \ | |
426 | if [ -n "$(1)" ]; then \ | |
427 | last_bump="$$(git log --pretty=format:'%h %s' . | \ | |
eb7ffeaf | 428 | grep -m 1 -e ': [uU]pdate to ' -e ': [bB]ump to ' | \ |
9ae3c6f9 PS |
429 | cut -f 1 -d ' ')"; \ |
430 | fi; \ | |
431 | if [ -n "$$last_bump" ]; then \ | |
432 | echo -n $$(($$(git rev-list --count "$$last_bump..HEAD" .) + 1)); \ | |
433 | else \ | |
513f7171 | 434 | git rev-list --count HEAD .; \ |
9ae3c6f9 PS |
435 | fi; \ |
436 | else \ | |
437 | secs="$$(($(SOURCE_DATE_EPOCH) % 86400))"; \ | |
438 | date="$$(date --utc --date="@$(SOURCE_DATE_EPOCH)" "+%y%m%d")"; \ | |
439 | printf '%s.%05d' "$$date" "$$secs"; \ | |
440 | fi; \ | |
441 | ) | |
442 | endef | |
443 | ||
b12288fa FF |
444 | abi_version_str = $(subst -,,$(subst _,,$(subst .,,$(1)))) |
445 | ||
ddab795b PS |
446 | COMMITCOUNT = $(if $(DUMP),0,$(call commitcount)) |
447 | AUTORELEASE = $(if $(DUMP),0,$(call commitcount,1)) | |
9ae3c6f9 | 448 | |
6afabb71 | 449 | all: |
e6dd6901 | 450 | FORCE: ; |
6afabb71 | 451 | .PHONY: FORCE |
a9d683ca | 452 | |
7a315b0b FF |
453 | check: FORCE |
454 | @true | |
455 | ||
10f5101a JPW |
456 | val.%: |
457 | @$(if $(filter undefined,$(origin $*)),\ | |
458 | echo "$* undefined" >&2, \ | |
459 | echo '$(subst ','"'"',$($*))' \ | |
460 | ) | |
461 | ||
462 | var.%: | |
463 | @$(if $(filter undefined,$(origin $*)),\ | |
464 | echo "$* undefined" >&2, \ | |
465 | echo "$*='"'$(subst ','"'\"'\"'"',$($*))'"'" \ | |
466 | ) | |
467 | ||
a9d683ca | 468 | endif #__rules_inc |