2020-09-22 02:48:37 +00:00
|
|
|
# SPDX-License-Identifier: GPL-2.0-only
|
2008-09-13 14:34:43 +00:00
|
|
|
#
|
2010-03-05 20:26:14 +00:00
|
|
|
# Copyright (C) 2006-2010 OpenWrt.org
|
2016-04-06 19:49:15 +00:00
|
|
|
# Copyright (C) 2016 LEDE Project
|
2006-06-27 00:35:46 +00:00
|
|
|
|
2007-09-08 19:55:42 +00:00
|
|
|
ifneq ($(__rules_inc),1)
|
|
|
|
__rules_inc=1
|
|
|
|
|
2007-06-26 20:24:55 +00:00
|
|
|
ifeq ($(DUMP),)
|
|
|
|
-include $(TOPDIR)/.config
|
|
|
|
endif
|
2007-08-30 21:12:39 +00:00
|
|
|
include $(TOPDIR)/include/debug.mk
|
2006-06-23 21:47:24 +00:00
|
|
|
include $(TOPDIR)/include/verbose.mk
|
2005-10-19 13:32:59 +00:00
|
|
|
|
2016-12-14 14:36:39 +00:00
|
|
|
ifneq ($(filter check,$(MAKECMDGOALS)),)
|
|
|
|
CHECK:=1
|
|
|
|
DUMP:=1
|
|
|
|
endif
|
|
|
|
|
2013-07-18 11:18:37 +00:00
|
|
|
export TMP_DIR:=$(TOPDIR)/tmp
|
2017-12-12 15:28:04 +00:00
|
|
|
export TMPDIR:=$(TMP_DIR)
|
2007-08-07 00:04:25 +00:00
|
|
|
|
2024-11-08 11:43:52 +00:00
|
|
|
##@
|
|
|
|
# @brief Strip quotes `"` and pounds `#` from string.
|
|
|
|
#
|
|
|
|
# @param 1: String.
|
|
|
|
##
|
2009-03-03 14:55:53 +00:00
|
|
|
qstrip=$(strip $(subst ",,$(1)))
|
2007-08-07 00:04:25 +00:00
|
|
|
#"))
|
2005-03-06 03:34:52 +00:00
|
|
|
|
2008-06-09 15:38:45 +00:00
|
|
|
empty:=
|
|
|
|
space:= $(empty) $(empty)
|
2014-10-22 08:57:16 +00:00
|
|
|
comma:=,
|
2024-06-25 05:48:45 +00:00
|
|
|
pound:=\#
|
2024-11-08 11:43:52 +00:00
|
|
|
##@
|
|
|
|
# @brief Merge strings by removing spaces.
|
|
|
|
#
|
|
|
|
# @param 1: String.
|
|
|
|
##
|
2008-06-09 15:38:45 +00:00
|
|
|
merge=$(subst $(space),,$(1))
|
2024-11-08 11:43:52 +00:00
|
|
|
##@
|
|
|
|
# @brief Get hash sum of variable list.
|
|
|
|
#
|
|
|
|
# @param 1: List of variable names.
|
|
|
|
##
|
2021-05-09 20:28:15 +00:00
|
|
|
confvar=$(shell echo '$(foreach v,$(1),$(v)=$(subst ','\'',$($(v))))' | $(MKHASH) md5)
|
2024-11-08 11:43:52 +00:00
|
|
|
##@
|
|
|
|
# @brief Strip last extension from file name.
|
|
|
|
#
|
|
|
|
# @param 1: File name.
|
|
|
|
##
|
2008-07-31 23:55:39 +00:00
|
|
|
strip_last=$(patsubst %.$(lastword $(subst .,$(space),$(1))),%,$(1))
|
2008-06-09 15:38:45 +00:00
|
|
|
|
2016-01-03 20:57:53 +00:00
|
|
|
paren_left = (
|
|
|
|
paren_right = )
|
|
|
|
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
|
|
|
|
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
|
|
|
|
|
2010-12-13 19:04:33 +00:00
|
|
|
define sep
|
|
|
|
|
2015-03-15 19:47:46 +00:00
|
|
|
endef
|
|
|
|
|
|
|
|
define newline
|
|
|
|
|
|
|
|
|
2010-12-13 19:04:33 +00:00
|
|
|
endef
|
|
|
|
|
2016-01-03 20:57:53 +00:00
|
|
|
__tr_list = $(join $(join $(1),$(foreach char,$(1),$(comma))),$(2))
|
|
|
|
__tr_head_stripped = $(subst $(space),,$(foreach cv,$(call __tr_list,$(1),$(2)),$$$(paren_left)subst$(cv)$(comma)))
|
|
|
|
__tr_head = $(subst $(paren_left)subst,$(paren_left)subst$(space),$(__tr_head_stripped))
|
|
|
|
__tr_tail = $(subst $(space),,$(foreach cv,$(1),$(paren_right)))
|
|
|
|
__tr_template = $(__tr_head)$$(1)$(__tr_tail)
|
|
|
|
|
2024-11-08 11:43:52 +00:00
|
|
|
##@
|
|
|
|
# @brief Convert string characters to upper.
|
|
|
|
##
|
2016-01-03 20:57:53 +00:00
|
|
|
$(eval toupper = $(call __tr_template,$(chars_lower),$(chars_upper)))
|
2024-11-08 11:43:52 +00:00
|
|
|
##@
|
|
|
|
# @brief Convert string characters to lower.
|
|
|
|
##
|
2016-01-03 20:57:53 +00:00
|
|
|
$(eval tolower = $(call __tr_template,$(chars_upper),$(chars_lower)))
|
|
|
|
|
2024-11-08 11:43:52 +00:00
|
|
|
##@
|
|
|
|
# @brief Abbreviate version. Truncate to 8 characters.
|
|
|
|
##
|
2016-12-21 15:39:56 +00:00
|
|
|
version_abbrev = $(if $(if $(CHECK),,$(DUMP)),$(1),$(shell printf '%.8s' $(1)))
|
|
|
|
|
2008-08-16 16:59:47 +00:00
|
|
|
_SINGLE=export MAKEFLAGS=$(space);
|
2009-03-14 03:17:06 +00:00
|
|
|
CFLAGS:=
|
2009-03-03 14:55:53 +00:00
|
|
|
ARCH:=$(subst i486,i386,$(subst i586,i386,$(subst i686,i386,$(call qstrip,$(CONFIG_ARCH)))))
|
2010-09-12 20:49:54 +00:00
|
|
|
ARCH_PACKAGES:=$(call qstrip,$(CONFIG_TARGET_ARCH_PACKAGES))
|
2007-09-08 19:55:42 +00:00
|
|
|
BOARD:=$(call qstrip,$(CONFIG_TARGET_BOARD))
|
2016-04-06 19:49:15 +00:00
|
|
|
SUBTARGET:=$(call qstrip,$(CONFIG_TARGET_SUBTARGET))
|
2007-08-07 00:04:25 +00:00
|
|
|
TARGET_OPTIMIZATION:=$(call qstrip,$(CONFIG_TARGET_OPTIMIZATION))
|
2009-01-17 20:36:38 +00:00
|
|
|
TARGET_SUFFIX=$(call qstrip,$(CONFIG_TARGET_SUFFIX))
|
2007-08-07 00:04:25 +00:00
|
|
|
BUILD_SUFFIX:=$(call qstrip,$(CONFIG_BUILD_SUFFIX))
|
2007-08-30 21:12:39 +00:00
|
|
|
SUBDIR:=$(patsubst $(TOPDIR)/%,%,${CURDIR})
|
2016-01-20 20:13:40 +00:00
|
|
|
BUILD_SUBDIR:=$(patsubst $(TOPDIR)/%,%,${CURDIR})
|
2019-10-07 04:52:08 +00:00
|
|
|
NPROC:=$(shell sysctl -n hw.ncpu 2>/dev/null || nproc)
|
2010-08-19 13:32:47 +00:00
|
|
|
export SHELL:=/usr/bin/env bash
|
2005-03-06 03:34:52 +00:00
|
|
|
|
2016-01-20 20:13:40 +00:00
|
|
|
IS_PACKAGE_BUILD := $(if $(filter package/%,$(BUILD_SUBDIR)),1)
|
2016-01-20 19:12:06 +00:00
|
|
|
|
2009-03-03 14:55:53 +00:00
|
|
|
OPTIMIZE_FOR_CPU=$(subst i386,i486,$(ARCH))
|
2005-03-06 03:34:52 +00:00
|
|
|
|
2020-12-04 16:32:46 +00:00
|
|
|
ifneq (,$(findstring $(ARCH) , aarch64 aarch64_be powerpc ))
|
2021-03-19 21:09:45 +00:00
|
|
|
FPIC:=-DPIC -fPIC
|
2008-08-06 22:10:20 +00:00
|
|
|
else
|
2021-03-19 21:09:45 +00:00
|
|
|
FPIC:=-DPIC -fpic
|
2008-08-06 22:10:20 +00:00
|
|
|
endif
|
|
|
|
|
2021-03-19 21:09:45 +00:00
|
|
|
HOST_FPIC:=-DPIC -fPIC
|
2010-10-23 20:30:43 +00:00
|
|
|
|
2013-09-26 17:53:32 +00:00
|
|
|
ARCH_SUFFIX:=$(call qstrip,$(CONFIG_CPU_TYPE))
|
2011-02-25 16:52:25 +00:00
|
|
|
GCC_ARCH:=
|
|
|
|
|
2013-09-26 17:53:32 +00:00
|
|
|
ifneq ($(ARCH_SUFFIX),)
|
|
|
|
ARCH_SUFFIX:=_$(ARCH_SUFFIX)
|
|
|
|
endif
|
2011-02-25 16:52:25 +00:00
|
|
|
ifneq ($(filter -march=armv%,$(TARGET_OPTIMIZATION)),)
|
|
|
|
GCC_ARCH:=$(patsubst -march=%,%,$(filter -march=armv%,$(TARGET_OPTIMIZATION)))
|
|
|
|
endif
|
2011-01-16 01:25:06 +00:00
|
|
|
ifdef CONFIG_HAS_SPE_FPU
|
|
|
|
TARGET_SUFFIX:=$(TARGET_SUFFIX)spe
|
|
|
|
endif
|
2013-04-05 12:36:23 +00:00
|
|
|
ifdef CONFIG_MIPS64_ABI
|
|
|
|
ifneq ($(CONFIG_MIPS64_ABI_O32),y)
|
2013-07-10 14:51:09 +00:00
|
|
|
ARCH_SUFFIX:=$(ARCH_SUFFIX)_$(call qstrip,$(CONFIG_MIPS64_ABI))
|
2013-04-05 12:36:23 +00:00
|
|
|
endif
|
|
|
|
endif
|
2010-03-14 18:24:05 +00:00
|
|
|
|
2017-02-09 12:21:53 +00:00
|
|
|
DEFAULT_SUBDIR_TARGETS:=clean download prepare compile update refresh prereq dist distcheck configure check check-depends
|
2017-01-18 13:00:48 +00:00
|
|
|
|
2024-11-08 11:43:52 +00:00
|
|
|
##@
|
|
|
|
# @brief Create default targets.
|
|
|
|
#
|
|
|
|
# Targets are created from @DEFAULT_SUBDIR_TARGETS and input argument lists.
|
|
|
|
#
|
|
|
|
# @param 1: Additional targets list.
|
|
|
|
##
|
2017-01-18 13:00:48 +00:00
|
|
|
define DefaultTargets
|
2017-01-18 13:27:04 +00:00
|
|
|
$(foreach t,$(DEFAULT_SUBDIR_TARGETS) $(1),
|
|
|
|
.$(t):
|
|
|
|
$(t): .$(t)
|
|
|
|
.PHONY: $(t) .$(t)
|
2017-01-18 13:00:48 +00:00
|
|
|
)
|
|
|
|
endef
|
|
|
|
|
2022-08-03 17:01:51 +00:00
|
|
|
DL_DIR=$(if $(call qstrip,$(CONFIG_DOWNLOAD_FOLDER)),$(call qstrip,$(CONFIG_DOWNLOAD_FOLDER)),$(TOPDIR)/dl)$(if $(DL_SUBDIR),/$(DL_SUBDIR))
|
2016-04-06 19:49:15 +00:00
|
|
|
OUTPUT_DIR:=$(if $(call qstrip,$(CONFIG_BINARY_FOLDER)),$(call qstrip,$(CONFIG_BINARY_FOLDER)),$(TOPDIR)/bin)
|
|
|
|
BIN_DIR:=$(OUTPUT_DIR)/targets/$(BOARD)/$(SUBTARGET)
|
2006-06-21 02:32:39 +00:00
|
|
|
INCLUDE_DIR:=$(TOPDIR)/include
|
2006-06-22 22:33:56 +00:00
|
|
|
SCRIPT_DIR:=$(TOPDIR)/scripts
|
2007-08-07 00:04:25 +00:00
|
|
|
BUILD_DIR_BASE:=$(TOPDIR)/build_dir
|
2009-09-23 02:27:38 +00:00
|
|
|
ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
|
|
|
|
GCCV:=$(call qstrip,$(CONFIG_GCC_VERSION))
|
|
|
|
LIBC:=$(call qstrip,$(CONFIG_LIBC))
|
|
|
|
REAL_GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX))
|
|
|
|
GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux
|
2017-02-07 09:33:10 +00:00
|
|
|
DIR_SUFFIX:=_$(LIBC)$(if $(CONFIG_arm),_eabi)
|
2015-06-15 23:05:08 +00:00
|
|
|
BIN_DIR:=$(BIN_DIR)$(if $(CONFIG_USE_MUSL),,-$(LIBC))
|
2014-03-10 11:12:32 +00:00
|
|
|
TARGET_DIR_NAME = target-$(ARCH)$(ARCH_SUFFIX)$(DIR_SUFFIX)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX))
|
|
|
|
TOOLCHAIN_DIR_NAME = toolchain-$(ARCH)$(ARCH_SUFFIX)_gcc-$(GCCV)$(DIR_SUFFIX)
|
2009-09-23 02:27:38 +00:00
|
|
|
else
|
|
|
|
ifeq ($(CONFIG_NATIVE_TOOLCHAIN),)
|
|
|
|
GNU_TARGET_NAME=$(call qstrip,$(CONFIG_TARGET_NAME))
|
|
|
|
else
|
|
|
|
GNU_TARGET_NAME=$(shell gcc -dumpmachine)
|
|
|
|
endif
|
|
|
|
REAL_GNU_TARGET_NAME=$(GNU_TARGET_NAME)
|
2017-01-15 04:04:38 +00:00
|
|
|
LIBC:=$(call qstrip,$(CONFIG_LIBC))
|
|
|
|
TARGET_DIR_NAME:=target-$(GNU_TARGET_NAME)_$(LIBC)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX))
|
2014-03-10 11:12:32 +00:00
|
|
|
TOOLCHAIN_DIR_NAME:=toolchain-$(GNU_TARGET_NAME)
|
2009-09-23 02:27:38 +00:00
|
|
|
endif
|
2014-03-10 11:12:32 +00:00
|
|
|
|
2019-10-09 04:41:00 +00:00
|
|
|
ifeq ($(or $(CONFIG_EXTERNAL_TOOLCHAIN),$(CONFIG_TARGET_uml)),)
|
2021-09-19 09:30:30 +00:00
|
|
|
iremap = -f$(if $(CONFIG_REPRODUCIBLE_DEBUG_INFO),file,macro)-prefix-map=$(1)=$(2)
|
2016-01-25 15:49:31 +00:00
|
|
|
endif
|
|
|
|
|
2024-10-24 18:13:07 +00:00
|
|
|
PACKAGE_DIR?=$(BIN_DIR)/packages
|
|
|
|
PACKAGE_DIR_ALL?=$(TOPDIR)/staging_dir/packages/$(BOARD)
|
2014-03-10 11:12:32 +00:00
|
|
|
BUILD_DIR:=$(BUILD_DIR_BASE)/$(TARGET_DIR_NAME)
|
|
|
|
STAGING_DIR:=$(TOPDIR)/staging_dir/$(TARGET_DIR_NAME)
|
|
|
|
BUILD_DIR_TOOLCHAIN:=$(BUILD_DIR_BASE)/$(TOOLCHAIN_DIR_NAME)
|
|
|
|
TOOLCHAIN_DIR:=$(TOPDIR)/staging_dir/$(TOOLCHAIN_DIR_NAME)
|
2005-03-06 03:34:52 +00:00
|
|
|
STAMP_DIR:=$(BUILD_DIR)/stamp
|
2007-08-07 00:04:25 +00:00
|
|
|
STAMP_DIR_HOST=$(BUILD_DIR_HOST)/stamp
|
2009-02-20 10:44:19 +00:00
|
|
|
TARGET_ROOTFS_DIR?=$(if $(call qstrip,$(CONFIG_TARGET_ROOTFS_DIR)),$(call qstrip,$(CONFIG_TARGET_ROOTFS_DIR)),$(BUILD_DIR))
|
|
|
|
TARGET_DIR:=$(TARGET_ROOTFS_DIR)/root-$(BOARD)
|
2009-08-07 21:58:35 +00:00
|
|
|
STAGING_DIR_ROOT:=$(STAGING_DIR)/root-$(BOARD)
|
2017-01-27 12:41:04 +00:00
|
|
|
STAGING_DIR_IMAGE:=$(STAGING_DIR)/image
|
2019-09-28 21:12:21 +00:00
|
|
|
BUILD_LOG_DIR:=$(if $(call qstrip,$(CONFIG_BUILD_LOG_DIR)),$(call qstrip,$(CONFIG_BUILD_LOG_DIR)),$(TOPDIR)/logs)
|
2012-10-06 16:01:06 +00:00
|
|
|
PKG_INFO_DIR := $(STAGING_DIR)/pkginfo
|
2006-06-22 22:33:56 +00:00
|
|
|
|
2017-01-18 18:47:36 +00:00
|
|
|
BUILD_DIR_HOST:=$(if $(IS_PACKAGE_BUILD),$(BUILD_DIR_BASE)/hostpkg,$(BUILD_DIR_BASE)/host)
|
2022-12-02 19:56:12 +00:00
|
|
|
STAGING_DIR_HOST:=$(abspath $(STAGING_DIR)/../host)
|
|
|
|
STAGING_DIR_HOSTPKG:=$(abspath $(STAGING_DIR)/../hostpkg)
|
2016-01-20 19:12:06 +00:00
|
|
|
|
2015-02-10 15:49:36 +00:00
|
|
|
TARGET_PATH:=$(subst $(space),:,$(filter-out .,$(filter-out ./,$(subst :,$(space),$(PATH)))))
|
2016-02-08 14:28:35 +00:00
|
|
|
TARGET_INIT_PATH:=$(call qstrip,$(CONFIG_TARGET_INIT_PATH))
|
|
|
|
TARGET_INIT_PATH:=$(if $(TARGET_INIT_PATH),$(TARGET_INIT_PATH),/usr/sbin:/sbin:/usr/bin:/bin)
|
2016-01-28 00:26:38 +00:00
|
|
|
TARGET_CFLAGS:=$(TARGET_OPTIMIZATION)$(if $(CONFIG_DEBUG), -g3) $(call qstrip,$(CONFIG_EXTRA_OPTIMIZATION))
|
2012-03-01 10:39:46 +00:00
|
|
|
TARGET_CXXFLAGS = $(TARGET_CFLAGS)
|
2013-08-14 13:02:29 +00:00
|
|
|
TARGET_ASFLAGS_DEFAULT = $(TARGET_CFLAGS)
|
|
|
|
TARGET_ASFLAGS = $(TARGET_ASFLAGS_DEFAULT)
|
2011-04-11 16:06:46 +00:00
|
|
|
ifneq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
|
|
|
|
LIBGCC_S_PATH=$(realpath $(wildcard $(call qstrip,$(CONFIG_LIBGCC_ROOT_DIR))/$(call qstrip,$(CONFIG_LIBGCC_FILE_SPEC))))
|
|
|
|
LIBGCC_S=$(if $(LIBGCC_S_PATH),-L$(dir $(LIBGCC_S_PATH)) -lgcc_s)
|
2013-01-13 20:59:51 +00:00
|
|
|
LIBGCC_A=$(realpath $(lastword $(wildcard $(dir $(LIBGCC_S_PATH))/gcc/*/*/libgcc.a)))
|
2011-04-11 16:06:46 +00:00
|
|
|
else
|
2013-01-13 20:59:51 +00:00
|
|
|
LIBGCC_A=$(lastword $(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc.a))
|
2011-09-05 19:29:22 +00:00
|
|
|
LIBGCC_S=$(if $(wildcard $(TOOLCHAIN_DIR)/lib/libgcc_s.so),-L$(TOOLCHAIN_DIR)/lib -lgcc_s,$(LIBGCC_A))
|
2011-04-11 16:06:46 +00:00
|
|
|
endif
|
2008-07-19 16:29:01 +00:00
|
|
|
|
2013-04-05 12:36:19 +00:00
|
|
|
ifeq ($(CONFIG_ARCH_64BIT),y)
|
2012-08-10 14:15:06 +00:00
|
|
|
LIB_SUFFIX:=64
|
|
|
|
endif
|
|
|
|
|
2009-03-03 13:54:29 +00:00
|
|
|
ifndef DUMP
|
2009-09-23 02:27:38 +00:00
|
|
|
ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
|
|
|
|
-include $(TOOLCHAIN_DIR)/info.mk
|
2011-07-25 10:32:38 +00:00
|
|
|
export GCC_HONOUR_COPTS:=0
|
2009-09-23 02:27:38 +00:00
|
|
|
TARGET_CROSS:=$(if $(TARGET_CROSS),$(TARGET_CROSS),$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX))-)
|
2023-10-19 15:39:24 +00:00
|
|
|
TOOLCHAIN_ROOT_DIR:=$(TOPDIR)/staging_dir/$(TOOLCHAIN_DIR_NAME)
|
|
|
|
TOOLCHAIN_BIN_DIRS:=$(TOOLCHAIN_ROOT_DIR)/bin
|
|
|
|
TOOLCHAIN_INC_DIRS:=$(TOOLCHAIN_ROOT_DIR)/usr/include $(TOOLCHAIN_ROOT_DIR)/include
|
|
|
|
TOOLCHAIN_LIB_DIRS:=$(TOOLCHAIN_ROOT_DIR)/usr/lib $(TOOLCHAIN_ROOT_DIR)/lib
|
2022-07-17 11:26:14 +00:00
|
|
|
TARGET_CFLAGS+= -fhonour-copts
|
2015-06-29 06:47:49 +00:00
|
|
|
ifeq ($(CONFIG_USE_MUSL),y)
|
2023-10-19 15:39:24 +00:00
|
|
|
TOOLCHAIN_INC_DIRS+= $(TOOLCHAIN_DIR)/include/fortify
|
2015-06-29 06:47:49 +00:00
|
|
|
endif
|
2009-09-23 02:27:38 +00:00
|
|
|
else
|
|
|
|
ifeq ($(CONFIG_NATIVE_TOOLCHAIN),)
|
2024-04-20 16:29:23 +00:00
|
|
|
-include $(TOOLCHAIN_DIR)/info.mk
|
2009-09-23 02:27:38 +00:00
|
|
|
TARGET_CROSS:=$(call qstrip,$(CONFIG_TOOLCHAIN_PREFIX))
|
|
|
|
TOOLCHAIN_ROOT_DIR:=$(call qstrip,$(CONFIG_TOOLCHAIN_ROOT))
|
|
|
|
TOOLCHAIN_BIN_DIRS:=$(patsubst ./%,$(TOOLCHAIN_ROOT_DIR)/%,$(call qstrip,$(CONFIG_TOOLCHAIN_BIN_PATH)))
|
|
|
|
TOOLCHAIN_INC_DIRS:=$(patsubst ./%,$(TOOLCHAIN_ROOT_DIR)/%,$(call qstrip,$(CONFIG_TOOLCHAIN_INC_PATH)))
|
|
|
|
TOOLCHAIN_LIB_DIRS:=$(patsubst ./%,$(TOOLCHAIN_ROOT_DIR)/%,$(call qstrip,$(CONFIG_TOOLCHAIN_LIB_PATH)))
|
|
|
|
endif
|
|
|
|
endif
|
2023-10-19 15:39:24 +00:00
|
|
|
ifneq ($(TOOLCHAIN_BIN_DIRS),)
|
|
|
|
TARGET_PATH:=$(subst $(space),:,$(TOOLCHAIN_BIN_DIRS)):$(TARGET_PATH)
|
|
|
|
endif
|
|
|
|
ifneq ($(TOOLCHAIN_INC_DIRS),)
|
|
|
|
TARGET_CPPFLAGS+= $(patsubst %,-I%,$(TOOLCHAIN_INC_DIRS))
|
|
|
|
endif
|
|
|
|
ifneq ($(TOOLCHAIN_LIB_DIRS),)
|
|
|
|
TARGET_LDFLAGS+= $(patsubst %,-L%,$(TOOLCHAIN_LIB_DIRS))
|
|
|
|
endif
|
2009-03-03 13:54:29 +00:00
|
|
|
endif
|
2023-01-27 15:32:31 +00:00
|
|
|
|
|
|
|
TARGET_LINKER?=bfd
|
|
|
|
TARGET_LDFLAGS+= -fuse-ld=$(TARGET_LINKER)
|
|
|
|
|
2017-01-18 18:47:36 +00:00
|
|
|
TARGET_PATH_PKG:=$(STAGING_DIR)/host/bin:$(STAGING_DIR_HOSTPKG)/bin:$(TARGET_PATH)
|
2006-08-10 19:25:26 +00:00
|
|
|
|
2007-12-28 18:06:47 +00:00
|
|
|
ifeq ($(CONFIG_SOFT_FLOAT),y)
|
2009-01-29 20:19:00 +00:00
|
|
|
SOFT_FLOAT_CONFIG_OPTION:=--with-float=soft
|
2013-11-29 10:59:51 +00:00
|
|
|
ifeq ($(CONFIG_arm),y)
|
|
|
|
TARGET_CFLAGS+= -mfloat-abi=soft
|
|
|
|
else
|
|
|
|
TARGET_CFLAGS+= -msoft-float
|
|
|
|
endif
|
2007-12-28 18:06:47 +00:00
|
|
|
else
|
2009-01-29 20:19:00 +00:00
|
|
|
SOFT_FLOAT_CONFIG_OPTION:=
|
2013-11-29 10:59:51 +00:00
|
|
|
ifeq ($(CONFIG_arm),y)
|
|
|
|
TARGET_CFLAGS+= -mfloat-abi=hard
|
|
|
|
endif
|
2007-12-28 18:06:47 +00:00
|
|
|
endif
|
|
|
|
|
2023-05-25 06:31:17 +00:00
|
|
|
export ORIG_PATH:=$(if $(ORIG_PATH),$(ORIG_PATH),$(PATH))
|
2006-08-04 11:59:52 +00:00
|
|
|
export PATH:=$(TARGET_PATH)
|
2017-01-18 23:03:32 +00:00
|
|
|
export STAGING_DIR STAGING_DIR_HOST STAGING_DIR_HOSTPKG
|
2010-08-19 12:49:37 +00:00
|
|
|
export SH_FUNC:=. $(INCLUDE_DIR)/shell.sh;
|
2006-08-04 11:59:52 +00:00
|
|
|
|
2007-10-20 19:13:53 +00:00
|
|
|
PKG_CONFIG:=$(STAGING_DIR_HOST)/bin/pkg-config
|
|
|
|
|
|
|
|
export PKG_CONFIG
|
|
|
|
|
2023-03-16 03:02:45 +00:00
|
|
|
HOSTCC:=$(STAGING_DIR_HOST)/bin/gcc
|
|
|
|
HOSTCXX:=$(STAGING_DIR_HOST)/bin/g++
|
2018-01-17 10:53:10 +00:00
|
|
|
HOST_CPPFLAGS:=-I$(STAGING_DIR_HOST)/include $(if $(IS_PACKAGE_BUILD),-I$(STAGING_DIR_HOSTPKG)/include -I$(STAGING_DIR)/host/include)
|
2012-09-09 21:35:42 +00:00
|
|
|
HOST_CFLAGS:=-O2 $(HOST_CPPFLAGS)
|
2024-06-20 05:10:21 +00:00
|
|
|
HOST_CXXFLAGS:=$(HOST_CFLAGS)
|
2018-01-17 10:53:10 +00:00
|
|
|
HOST_LDFLAGS:=-L$(STAGING_DIR_HOST)/lib $(if $(IS_PACKAGE_BUILD),-L$(STAGING_DIR_HOSTPKG)/lib -L$(STAGING_DIR)/host/lib)
|
2007-08-07 00:04:25 +00:00
|
|
|
|
2015-04-06 19:39:51 +00:00
|
|
|
BUILD_KEY=$(TOPDIR)/key-build
|
2024-05-14 10:36:59 +00:00
|
|
|
BUILD_KEY_APK_SEC=$(TOPDIR)/private-key.pem
|
|
|
|
BUILD_KEY_APK_PUB=$(TOPDIR)/public-key.pem
|
2015-04-06 19:39:51 +00:00
|
|
|
|
2020-09-10 12:54:49 +00:00
|
|
|
FAKEROOT:=$(STAGING_DIR_HOST)/bin/fakeroot
|
2020-09-01 15:00:45 +00:00
|
|
|
|
2020-12-28 15:00:13 +00:00
|
|
|
TARGET_AR:=$(TARGET_CROSS)gcc-ar
|
|
|
|
TARGET_RANLIB:=$(TARGET_CROSS)gcc-ranlib
|
|
|
|
TARGET_NM:=$(TARGET_CROSS)gcc-nm
|
2006-06-22 22:33:56 +00:00
|
|
|
TARGET_CC:=$(TARGET_CROSS)gcc
|
2013-05-09 20:50:49 +00:00
|
|
|
TARGET_CXX:=$(TARGET_CROSS)g++
|
2023-01-27 15:32:31 +00:00
|
|
|
TARGET_LD:=$(TARGET_CROSS)ld.$(TARGET_LINKER)
|
2010-10-07 11:32:09 +00:00
|
|
|
KPATCH:=$(SCRIPT_DIR)/patch-kernel.sh
|
2023-03-14 09:10:50 +00:00
|
|
|
FILECMD:=$(STAGING_DIR_HOST)/bin/file
|
2007-08-07 00:04:25 +00:00
|
|
|
SED:=$(STAGING_DIR_HOST)/bin/sed -i -e
|
2018-03-05 09:46:44 +00:00
|
|
|
ESED:=$(STAGING_DIR_HOST)/bin/sed -E -i -e
|
2021-05-09 20:28:15 +00:00
|
|
|
MKHASH:=$(STAGING_DIR_HOST)/bin/mkhash
|
|
|
|
# MKHASH is used in /scripts, so we export it here.
|
|
|
|
export MKHASH
|
2006-06-22 22:33:56 +00:00
|
|
|
CP:=cp -fpR
|
2010-03-05 20:26:14 +00:00
|
|
|
LN:=ln -sf
|
2013-07-10 15:11:29 +00:00
|
|
|
XARGS:=xargs -r
|
2005-03-06 03:34:52 +00:00
|
|
|
|
2015-02-06 12:35:36 +00:00
|
|
|
BASH:=bash
|
|
|
|
TAR:=tar
|
|
|
|
FIND:=find
|
|
|
|
PATCH:=patch
|
2022-01-24 10:22:31 +00:00
|
|
|
PYTHON:=python3
|
2015-02-05 16:57:18 +00:00
|
|
|
|
2023-04-20 16:31:16 +00:00
|
|
|
ifeq ($(HOST_OS),Darwin)
|
|
|
|
TRUE:=/usr/bin/env gtrue
|
|
|
|
FALSE:=/usr/bin/env gfalse
|
|
|
|
else
|
|
|
|
TRUE:=/usr/bin/env true
|
|
|
|
FALSE:=/usr/bin/env false
|
|
|
|
endif
|
|
|
|
|
2006-11-22 23:05:54 +00:00
|
|
|
INSTALL_BIN:=install -m0755
|
2018-11-29 11:32:34 +00:00
|
|
|
INSTALL_SUID:=install -m4755
|
2006-11-22 23:05:54 +00:00
|
|
|
INSTALL_DIR:=install -d -m0755
|
|
|
|
INSTALL_DATA:=install -m0644
|
2006-12-31 15:54:59 +00:00
|
|
|
INSTALL_CONF:=install -m0600
|
2006-11-22 23:05:54 +00:00
|
|
|
|
2012-07-28 21:06:59 +00:00
|
|
|
TARGET_CC_NOCACHE:=$(TARGET_CC)
|
|
|
|
TARGET_CXX_NOCACHE:=$(TARGET_CXX)
|
|
|
|
HOSTCC_NOCACHE:=$(HOSTCC)
|
2013-03-22 12:52:17 +00:00
|
|
|
HOSTCXX_NOCACHE:=$(HOSTCXX)
|
2012-07-28 21:06:59 +00:00
|
|
|
export TARGET_CC_NOCACHE
|
|
|
|
export TARGET_CXX_NOCACHE
|
|
|
|
export HOSTCC_NOCACHE
|
2020-11-27 21:50:32 +00:00
|
|
|
export HOSTCXX_NOCACHE
|
2012-07-28 21:06:59 +00:00
|
|
|
|
2006-08-04 06:56:10 +00:00
|
|
|
ifneq ($(CONFIG_CCACHE),)
|
2023-01-20 15:25:13 +00:00
|
|
|
TARGET_CC:= ccache $(TARGET_CC)
|
|
|
|
TARGET_CXX:= ccache $(TARGET_CXX)
|
2012-01-15 11:43:13 +00:00
|
|
|
HOSTCC:= ccache $(HOSTCC)
|
2013-03-22 12:52:17 +00:00
|
|
|
HOSTCXX:= ccache $(HOSTCXX)
|
2020-06-12 18:43:46 +00:00
|
|
|
export CCACHE_BASEDIR:=$(TOPDIR)
|
|
|
|
export CCACHE_DIR:=$(if $(call qstrip,$(CONFIG_CCACHE_DIR)),$(call qstrip,$(CONFIG_CCACHE_DIR)),$(TOPDIR)/.ccache)
|
|
|
|
export CCACHE_COMPILERCHECK:=%compiler% -dumpmachine; %compiler% -dumpversion
|
2006-08-04 06:56:10 +00:00
|
|
|
endif
|
|
|
|
|
2010-03-29 00:05:48 +00:00
|
|
|
TARGET_CONFIGURE_OPTS = \
|
build: use gcc-provided ar, nm and ranlib where appropriate
Since GCC 4.7, GCC provides its own wrappers around ar, nm and ranlib, which
should be used for builds with link-time optimization. Since GCC 4.9, using them
actually necessary for LTO builds using convenience libraries to succeed.
There are some packages which try to automatically detect if gcc-{ar,nm,ranlib}
exist (one example is my package "fastd" in the package repository, which tries
to use LTO). This breaks because the OpenWrt build system explicitly sets the
binutils versions of these tools.
As it doesn't cause any issues to use gcc-{ar,nm,ranlib} instead of
{ar,nm,ranlib} even without LTO, this patch just makes OpenWrt use the
GCC-provided versions by default, which fixes the build of such packages with
GCC 4.9.
(I know that builds fail though when clang is used with -flto and
gcc-{ar,nm,ranlib}, but as all OpenWrt toolchains are based on GCC, this isn't
a real issue.)
Completely cleaning the tree (or at least `make clean toolchain/clean`) is
necessary to get a consistent state after the binutils plugins support patch and
this one (as trying to use gcc-{ar,nm,ranlib} with a binutils built without
plugin support will definitely lead to a build failure).
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
SVN-Revision: 43784
2014-12-27 12:59:59 +00:00
|
|
|
AR="$(TARGET_AR)" \
|
2013-04-05 12:35:53 +00:00
|
|
|
AS="$(TARGET_CC) -c $(TARGET_ASFLAGS)" \
|
2023-01-27 15:32:31 +00:00
|
|
|
LD="$(TARGET_LD)" \
|
build: use gcc-provided ar, nm and ranlib where appropriate
Since GCC 4.7, GCC provides its own wrappers around ar, nm and ranlib, which
should be used for builds with link-time optimization. Since GCC 4.9, using them
actually necessary for LTO builds using convenience libraries to succeed.
There are some packages which try to automatically detect if gcc-{ar,nm,ranlib}
exist (one example is my package "fastd" in the package repository, which tries
to use LTO). This breaks because the OpenWrt build system explicitly sets the
binutils versions of these tools.
As it doesn't cause any issues to use gcc-{ar,nm,ranlib} instead of
{ar,nm,ranlib} even without LTO, this patch just makes OpenWrt use the
GCC-provided versions by default, which fixes the build of such packages with
GCC 4.9.
(I know that builds fail though when clang is used with -flto and
gcc-{ar,nm,ranlib}, but as all OpenWrt toolchains are based on GCC, this isn't
a real issue.)
Completely cleaning the tree (or at least `make clean toolchain/clean`) is
necessary to get a consistent state after the binutils plugins support patch and
this one (as trying to use gcc-{ar,nm,ranlib} with a binutils built without
plugin support will definitely lead to a build failure).
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
SVN-Revision: 43784
2014-12-27 12:59:59 +00:00
|
|
|
NM="$(TARGET_NM)" \
|
2006-08-04 06:56:10 +00:00
|
|
|
CC="$(TARGET_CC)" \
|
|
|
|
GCC="$(TARGET_CC)" \
|
2008-09-01 18:35:03 +00:00
|
|
|
CXX="$(TARGET_CXX)" \
|
build: use gcc-provided ar, nm and ranlib where appropriate
Since GCC 4.7, GCC provides its own wrappers around ar, nm and ranlib, which
should be used for builds with link-time optimization. Since GCC 4.9, using them
actually necessary for LTO builds using convenience libraries to succeed.
There are some packages which try to automatically detect if gcc-{ar,nm,ranlib}
exist (one example is my package "fastd" in the package repository, which tries
to use LTO). This breaks because the OpenWrt build system explicitly sets the
binutils versions of these tools.
As it doesn't cause any issues to use gcc-{ar,nm,ranlib} instead of
{ar,nm,ranlib} even without LTO, this patch just makes OpenWrt use the
GCC-provided versions by default, which fixes the build of such packages with
GCC 4.9.
(I know that builds fail though when clang is used with -flto and
gcc-{ar,nm,ranlib}, but as all OpenWrt toolchains are based on GCC, this isn't
a real issue.)
Completely cleaning the tree (or at least `make clean toolchain/clean`) is
necessary to get a consistent state after the binutils plugins support patch and
this one (as trying to use gcc-{ar,nm,ranlib} with a binutils built without
plugin support will definitely lead to a build failure).
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
SVN-Revision: 43784
2014-12-27 12:59:59 +00:00
|
|
|
RANLIB="$(TARGET_RANLIB)" \
|
2007-01-01 00:03:09 +00:00
|
|
|
STRIP=$(TARGET_CROSS)strip \
|
2007-03-22 18:07:01 +00:00
|
|
|
OBJCOPY=$(TARGET_CROSS)objcopy \
|
2007-09-03 05:50:05 +00:00
|
|
|
OBJDUMP=$(TARGET_CROSS)objdump \
|
|
|
|
SIZE=$(TARGET_CROSS)size
|
2006-06-22 22:33:56 +00:00
|
|
|
|
|
|
|
# strip an entire directory
|
2008-09-13 08:31:15 +00:00
|
|
|
ifneq ($(CONFIG_NO_STRIP),)
|
2008-06-10 07:18:41 +00:00
|
|
|
RSTRIP:=:
|
2009-07-07 02:34:58 +00:00
|
|
|
STRIP:=:
|
2008-06-10 07:18:41 +00:00
|
|
|
else
|
2009-07-07 02:34:58 +00:00
|
|
|
ifneq ($(CONFIG_USE_STRIP),)
|
2010-01-22 08:12:20 +00:00
|
|
|
STRIP:=$(TARGET_CROSS)strip $(call qstrip,$(CONFIG_STRIP_ARGS))
|
2009-07-07 02:34:58 +00:00
|
|
|
else
|
|
|
|
ifneq ($(CONFIG_USE_SSTRIP),)
|
2023-01-28 20:16:16 +00:00
|
|
|
STRIP:=$(STAGING_DIR_HOST)/bin/sstrip $(if $(CONFIG_SSTRIP_DISCARD_TRAILING_ZEROES),-z)
|
2009-07-07 02:34:58 +00:00
|
|
|
endif
|
|
|
|
endif
|
2015-10-30 15:20:12 +00:00
|
|
|
RSTRIP= \
|
2012-03-01 15:13:26 +00:00
|
|
|
export CROSS="$(TARGET_CROSS)" \
|
2015-10-30 15:20:12 +00:00
|
|
|
$(if $(PKG_BUILD_ID),KEEP_BUILD_ID=1) \
|
2012-03-01 15:13:26 +00:00
|
|
|
$(if $(CONFIG_KERNEL_KALLSYMS),NO_RENAME=1) \
|
|
|
|
$(if $(CONFIG_KERNEL_PROFILING),KEEP_SYMBOLS=1); \
|
2008-06-10 07:18:41 +00:00
|
|
|
NM="$(TARGET_CROSS)nm" \
|
|
|
|
STRIP="$(STRIP)" \
|
2012-02-20 17:38:26 +00:00
|
|
|
STRIP_KMOD="$(SCRIPT_DIR)/strip-kmod.sh" \
|
2015-02-10 15:48:48 +00:00
|
|
|
PATCHELF="$(STAGING_DIR_HOST)/bin/patchelf" \
|
2008-06-10 07:18:41 +00:00
|
|
|
$(SCRIPT_DIR)/rstrip.sh
|
|
|
|
endif
|
2006-06-22 22:33:56 +00:00
|
|
|
|
2021-06-06 12:31:01 +00:00
|
|
|
NINJA = \
|
|
|
|
MAKEFLAGS="$(MAKE_JOBSERVER)" \
|
|
|
|
$(STAGING_DIR_HOST)/bin/ninja \
|
|
|
|
$(if $(findstring c,$(OPENWRT_VERBOSE)),-v) \
|
|
|
|
$(if $(MAKE_JOBSERVER),,-j1)
|
|
|
|
|
2009-07-25 21:45:51 +00:00
|
|
|
ifeq ($(CONFIG_IPV6),y)
|
2009-08-01 12:12:48 +00:00
|
|
|
DISABLE_IPV6:=
|
2009-07-25 21:45:51 +00:00
|
|
|
else
|
|
|
|
DISABLE_IPV6:=--disable-ipv6
|
|
|
|
endif
|
|
|
|
|
2014-03-22 19:52:48 +00:00
|
|
|
TAR_OPTIONS:=-xf -
|
|
|
|
|
2011-07-03 17:37:31 +00:00
|
|
|
ifeq ($(CONFIG_BUILD_LOG),y)
|
|
|
|
BUILD_LOG:=1
|
|
|
|
endif
|
|
|
|
|
2014-08-26 12:15:50 +00:00
|
|
|
export BISON_PKGDATADIR:=$(STAGING_DIR_HOST)/share/bison
|
2023-03-22 22:29:24 +00:00
|
|
|
export HOST_GNULIB_SRCDIR:=$(STAGING_DIR_HOST)/share/gnulib
|
2014-08-26 12:15:50 +00:00
|
|
|
export M4:=$(STAGING_DIR_HOST)/bin/m4
|
|
|
|
|
2024-11-08 11:43:52 +00:00
|
|
|
##@
|
|
|
|
# @brief Slugify variable name and prepend suffix.
|
|
|
|
##
|
2006-11-11 23:11:02 +00:00
|
|
|
define shvar
|
|
|
|
V_$(subst .,_,$(subst -,_,$(subst /,_,$(1))))
|
|
|
|
endef
|
|
|
|
|
2024-11-08 11:43:52 +00:00
|
|
|
##@
|
|
|
|
# @brief Create and export variable, set to function result.
|
|
|
|
#
|
|
|
|
# @param 1: Function name. Used as variable name, prepended with `V_`.
|
|
|
|
##
|
2006-11-11 23:11:02 +00:00
|
|
|
define shexport
|
2014-10-22 08:57:20 +00:00
|
|
|
export $(call shvar,$(1))=$$(call $(1))
|
2006-11-11 23:11:02 +00:00
|
|
|
endef
|
|
|
|
|
2024-11-08 11:43:52 +00:00
|
|
|
##@
|
|
|
|
# @brief Support 64 bit tine in C code.
|
|
|
|
#
|
2024-06-25 05:48:45 +00:00
|
|
|
# Test support for 64-bit time with C code from largefile.m4 provided by GNU Gnulib
|
2024-11-08 11:43:52 +00:00
|
|
|
# the value is `y` when successful and `` otherwise
|
|
|
|
##
|
2024-06-25 05:48:45 +00:00
|
|
|
define YEAR_2038
|
|
|
|
$(shell \
|
|
|
|
mkdir -p $(TMP_DIR); \
|
|
|
|
echo '$(pound) include <time.h>' > $(TMP_DIR)/year2038.c; \
|
|
|
|
echo '$(pound) define LARGE_TIME_T ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30)))' >> $(TMP_DIR)/year2038.c; \
|
|
|
|
echo 'int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535 && LARGE_TIME_T % 65537 == 0) ? 1 : -1];' >> $(TMP_DIR)/year2038.c; \
|
|
|
|
echo 'int main (void) {return 0;}' >> $(TMP_DIR)/year2038.c; \
|
|
|
|
$(HOSTCC) $(TMP_DIR)/year2038.c -o /dev/null 2>/dev/null && echo y && rm -f $(TMP_DIR)/year2038.c || rm -f $(TMP_DIR)/year2038.c; \
|
|
|
|
)
|
|
|
|
endef
|
|
|
|
|
2024-11-08 11:43:52 +00:00
|
|
|
##@
|
|
|
|
# @brief Execute commands under flock
|
|
|
|
#
|
|
|
|
# @param 1: The shell expression.
|
|
|
|
# @param 2: The lock name. If not given, the global lock will be used.
|
|
|
|
##
|
2016-01-20 21:31:38 +00:00
|
|
|
ifneq ($(wildcard $(STAGING_DIR_HOST)/bin/flock),)
|
|
|
|
define locked
|
2010-10-31 15:33:48 +00:00
|
|
|
SHELL= \
|
2016-01-20 21:31:38 +00:00
|
|
|
flock \
|
2010-10-31 15:33:48 +00:00
|
|
|
$(TMP_DIR)/.$(if $(2),$(strip $(2)),global).flock \
|
|
|
|
-c '$(subst ','\'',$(1))'
|
2016-01-20 21:31:38 +00:00
|
|
|
endef
|
|
|
|
else
|
|
|
|
locked=$(1)
|
|
|
|
endif
|
2010-10-29 14:53:16 +00:00
|
|
|
|
2024-11-08 11:43:52 +00:00
|
|
|
|
|
|
|
##@
|
|
|
|
# @brief Recursively copy paths into another directory, purge dangling
|
2012-12-02 12:20:34 +00:00
|
|
|
# symlinks before.
|
2024-11-08 11:43:52 +00:00
|
|
|
#
|
|
|
|
# @param 1: File glob expression.
|
|
|
|
# @param 1: Destination directory.
|
|
|
|
##
|
2012-12-02 12:20:34 +00:00
|
|
|
define file_copy
|
|
|
|
for src_dir in $(sort $(foreach d,$(wildcard $(1)),$(dir $(d)))); do \
|
|
|
|
( cd $$src_dir; find -type f -or -type d ) | \
|
|
|
|
( cd $(2); while :; do \
|
|
|
|
read FILE; \
|
|
|
|
[ -z "$$FILE" ] && break; \
|
|
|
|
[ -L "$$FILE" ] || continue; \
|
|
|
|
echo "Removing symlink $(2)/$$FILE"; \
|
|
|
|
rm -f "$$FILE"; \
|
|
|
|
done; ); \
|
|
|
|
done; \
|
2012-12-02 15:15:07 +00:00
|
|
|
$(CP) $(1) $(2)
|
2012-12-02 12:20:34 +00:00
|
|
|
endef
|
|
|
|
|
2024-11-08 11:43:52 +00:00
|
|
|
##@
|
|
|
|
# @brief Calculate sha256sum of any plain file within a given directory.
|
|
|
|
#
|
|
|
|
# @param 1: Input directory.
|
|
|
|
# @param 2: If set, recurse into subdirectories.
|
|
|
|
##
|
2016-07-26 13:05:35 +00:00
|
|
|
define sha256sums
|
2018-06-27 16:51:25 +00:00
|
|
|
(cd $(1); find . $(if $(2),,-maxdepth 1) -type f -not -name 'sha256sums' -printf "%P\n" | sort | \
|
2021-05-09 20:28:15 +00:00
|
|
|
xargs -r $(MKHASH) -n sha256 | sed -ne 's!^\(.*\) \(.*\)$$!\1 *\2!p' > sha256sums)
|
2016-07-26 13:05:35 +00:00
|
|
|
endef
|
|
|
|
|
2024-11-08 11:43:52 +00:00
|
|
|
##@
|
|
|
|
# @brief Retrieve file extension.
|
|
|
|
#
|
|
|
|
# @param 1: File name.
|
|
|
|
##
|
2007-09-29 00:05:48 +00:00
|
|
|
ext=$(word $(words $(subst ., ,$(1))),$(subst ., ,$(1)))
|
|
|
|
|
2024-11-08 11:43:52 +00:00
|
|
|
##@
|
|
|
|
# @brief Count Git commits of a package.
|
|
|
|
#
|
|
|
|
# @param 1: if non-empty: count commits since last ": [uU]pdate to "
|
|
|
|
# or ": [bB]ump to " in commit message.
|
|
|
|
##
|
2021-01-02 00:02:12 +00:00
|
|
|
define commitcount
|
|
|
|
$(shell \
|
|
|
|
if git log -1 >/dev/null 2>/dev/null; then \
|
|
|
|
if [ -n "$(1)" ]; then \
|
|
|
|
last_bump="$$(git log --pretty=format:'%h %s' . | \
|
2022-12-17 15:39:00 +00:00
|
|
|
grep -m 1 -e ': [uU]pdate to ' -e ': [bB]ump to ' | \
|
2021-01-02 00:02:12 +00:00
|
|
|
cut -f 1 -d ' ')"; \
|
|
|
|
fi; \
|
|
|
|
if [ -n "$$last_bump" ]; then \
|
|
|
|
echo -n $$(($$(git rev-list --count "$$last_bump..HEAD" .) + 1)); \
|
|
|
|
else \
|
2021-01-27 03:16:36 +00:00
|
|
|
git rev-list --count HEAD .; \
|
2021-01-02 00:02:12 +00:00
|
|
|
fi; \
|
|
|
|
else \
|
|
|
|
secs="$$(($(SOURCE_DATE_EPOCH) % 86400))"; \
|
|
|
|
date="$$(date --utc --date="@$(SOURCE_DATE_EPOCH)" "+%y%m%d")"; \
|
|
|
|
printf '%s.%05d' "$$date" "$$secs"; \
|
|
|
|
fi; \
|
|
|
|
)
|
|
|
|
endef
|
|
|
|
|
2024-11-08 11:43:52 +00:00
|
|
|
##@
|
|
|
|
# @brief Get ABI version string, stripping `-`, `_` and `.`.
|
|
|
|
#
|
|
|
|
# @param 1: Version string.
|
|
|
|
##
|
2021-02-12 08:56:56 +00:00
|
|
|
abi_version_str = $(subst -,,$(subst _,,$(subst .,,$(1))))
|
|
|
|
|
2021-01-29 09:17:10 +00:00
|
|
|
COMMITCOUNT = $(if $(DUMP),0,$(call commitcount))
|
|
|
|
AUTORELEASE = $(if $(DUMP),0,$(call commitcount,1))
|
2021-01-02 00:02:12 +00:00
|
|
|
|
2006-05-14 10:25:38 +00:00
|
|
|
all:
|
2006-06-22 22:33:56 +00:00
|
|
|
FORCE: ;
|
2006-05-14 10:25:38 +00:00
|
|
|
.PHONY: FORCE
|
2007-09-08 19:55:42 +00:00
|
|
|
|
2016-12-14 14:36:39 +00:00
|
|
|
check: FORCE
|
|
|
|
@true
|
|
|
|
|
2010-10-10 22:40:44 +00:00
|
|
|
val.%:
|
|
|
|
@$(if $(filter undefined,$(origin $*)),\
|
|
|
|
echo "$* undefined" >&2, \
|
|
|
|
echo '$(subst ','"'"',$($*))' \
|
|
|
|
)
|
|
|
|
|
|
|
|
var.%:
|
|
|
|
@$(if $(filter undefined,$(origin $*)),\
|
|
|
|
echo "$* undefined" >&2, \
|
|
|
|
echo "$*='"'$(subst ','"'\"'\"'"',$($*))'"'" \
|
|
|
|
)
|
|
|
|
|
2007-09-08 19:55:42 +00:00
|
|
|
endif #__rules_inc
|