xref: /OK3568_Linux_fs/buildroot/package/pkg-meson.mk (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun################################################################################
2*4882a593Smuzhiyun# Meson package infrastructure
3*4882a593Smuzhiyun#
4*4882a593Smuzhiyun# This file implements an infrastructure that eases development of
5*4882a593Smuzhiyun# package .mk files for Meson packages. It should be used for all
6*4882a593Smuzhiyun# packages that use Meson as their build system.
7*4882a593Smuzhiyun#
8*4882a593Smuzhiyun# See the Buildroot documentation for details on the usage of this
9*4882a593Smuzhiyun# infrastructure
10*4882a593Smuzhiyun#
11*4882a593Smuzhiyun# In terms of implementation, this Meson infrastructure requires
12*4882a593Smuzhiyun# the .mk file to only specify metadata information about the
13*4882a593Smuzhiyun# package: name, version, download URL, etc.
14*4882a593Smuzhiyun#
15*4882a593Smuzhiyun# We still allow the package .mk file to override what the different
16*4882a593Smuzhiyun# steps are doing, if needed. For example, if <PKG>_BUILD_CMDS is
17*4882a593Smuzhiyun# already defined, it is used as the list of commands to perform to
18*4882a593Smuzhiyun# build the package, instead of the default Meson behaviour. The
19*4882a593Smuzhiyun# package can also define some post operation hooks.
20*4882a593Smuzhiyun#
21*4882a593Smuzhiyun################################################################################
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun#
24*4882a593Smuzhiyun# Pass PYTHONNOUSERSITE environment variable when invoking Meson or Ninja, so
25*4882a593Smuzhiyun# $(HOST_DIR)/bin/python3 will not look for Meson modules in
26*4882a593Smuzhiyun# $HOME/.local/lib/python3.x/site-packages
27*4882a593Smuzhiyun#
28*4882a593SmuzhiyunMESON		= PYTHONNOUSERSITE=y $(HOST_DIR)/bin/meson
29*4882a593SmuzhiyunNINJA		= PYTHONNOUSERSITE=y $(HOST_DIR)/bin/ninja
30*4882a593SmuzhiyunNINJA_OPTS	= $(if $(VERBOSE),-v)
31*4882a593Smuzhiyun
32*4882a593Smuzhiyun# https://mesonbuild.com/Reference-tables.html#cpu-families
33*4882a593Smuzhiyunifeq ($(BR2_arcle)$(BR2_arceb),y)
34*4882a593SmuzhiyunPKG_MESON_TARGET_CPU_FAMILY = arc
35*4882a593Smuzhiyunelse ifeq ($(BR2_arm)$(BR2_armeb),y)
36*4882a593SmuzhiyunPKG_MESON_TARGET_CPU_FAMILY = arm
37*4882a593Smuzhiyunelse ifeq ($(BR2_aarch64)$(BR2_aarch64_be),y)
38*4882a593SmuzhiyunPKG_MESON_TARGET_CPU_FAMILY = aarch64
39*4882a593Smuzhiyunelse ifeq ($(BR2_i386),y)
40*4882a593SmuzhiyunPKG_MESON_TARGET_CPU_FAMILY = x86
41*4882a593Smuzhiyunelse ifeq ($(BR2_m68k),y)
42*4882a593SmuzhiyunPKG_MESON_TARGET_CPU_FAMILY = m68k
43*4882a593Smuzhiyunelse ifeq ($(BR2_microblazeel)$(BR2_microblazebe),y)
44*4882a593SmuzhiyunPKG_MESON_TARGET_CPU_FAMILY = microblaze
45*4882a593Smuzhiyunelse ifeq ($(BR2_mips)$(BR2_mipsel),y)
46*4882a593SmuzhiyunPKG_MESON_TARGET_CPU_FAMILY = mips
47*4882a593Smuzhiyunelse ifeq ($(BR2_mips64)$(BR2_mips64el),y)
48*4882a593SmuzhiyunPKG_MESON_TARGET_CPU_FAMILY = mips64
49*4882a593Smuzhiyunelse ifeq ($(BR2_powerpc),y)
50*4882a593SmuzhiyunPKG_MESON_TARGET_CPU_FAMILY = ppc
51*4882a593Smuzhiyunelse ifeq ($(BR2_powerpc64)$(BR2_powerpc64le),y)
52*4882a593SmuzhiyunPKG_MESON_TARGET_CPU_FAMILY = ppc64
53*4882a593Smuzhiyunelse ifeq ($(BR2_riscv)$(BR2_RISCV_32),yy)
54*4882a593SmuzhiyunPKG_MESON_TARGET_CPU_FAMILY = riscv32
55*4882a593Smuzhiyunelse ifeq ($(BR2_riscv)$(BR2_RISCV_64),yy)
56*4882a593SmuzhiyunPKG_MESON_TARGET_CPU_FAMILY = riscv64
57*4882a593Smuzhiyunelse ifeq ($(BR2_s390x),y)
58*4882a593SmuzhiyunPKG_MESON_TARGET_CPU_FAMILY = s390x
59*4882a593Smuzhiyunelse ifeq ($(BR2_sh4)$(BR2_sh4eb)$(BR2_sh4a)$(BR2_sh4aeb),y)
60*4882a593SmuzhiyunPKG_MESON_TARGET_CPU_FAMILY = sh4
61*4882a593Smuzhiyunelse ifeq ($(BR2_sparc),y)
62*4882a593SmuzhiyunPKG_MESON_TARGET_CPU_FAMILY = sparc
63*4882a593Smuzhiyunelse ifeq ($(BR2_sparc64),y)
64*4882a593SmuzhiyunPKG_MESON_TARGET_CPU_FAMILY = sparc64
65*4882a593Smuzhiyunelse ifeq ($(BR2_x86_64),y)
66*4882a593SmuzhiyunPKG_MESON_TARGET_CPU_FAMILY = x86_64
67*4882a593Smuzhiyunelse
68*4882a593SmuzhiyunPKG_MESON_TARGET_CPU_FAMILY = $(ARCH)
69*4882a593Smuzhiyunendif
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun# To avoid populating the cross-file with non existing compilers,
72*4882a593Smuzhiyun# we tie them to /bin/false
73*4882a593Smuzhiyunifeq ($(BR2_INSTALL_LIBSTDCPP),y)
74*4882a593SmuzhiyunPKG_MESON_TARGET_CXX = $(TARGET_CXX)
75*4882a593Smuzhiyunelse
76*4882a593SmuzhiyunPKG_MESON_TARGET_CXX = /bin/false
77*4882a593Smuzhiyunendif
78*4882a593Smuzhiyun
79*4882a593Smuzhiyunifeq ($(BR2_TOOLCHAIN_HAS_FORTRAN),y)
80*4882a593SmuzhiyunPKG_MESON_TARGET_FC = $(TARGET_FC)
81*4882a593Smuzhiyunelse
82*4882a593SmuzhiyunPKG_MESON_TARGET_FC = /bin/false
83*4882a593Smuzhiyunendif
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun# Generates sed patterns for patching the cross-compilation.conf template,
86*4882a593Smuzhiyun# since Flags might contain commas the arguments are passed indirectly by
87*4882a593Smuzhiyun# variable name (stripped to deal with whitespaces).
88*4882a593Smuzhiyun# Arguments are variable containing cflags, cxxflags, ldflags, fcflags
89*4882a593Smuzhiyundefine PKG_MESON_CROSSCONFIG_SED_COMMON
90*4882a593Smuzhiyun        -e "s%@TARGET_FC@%$(PKG_MESON_TARGET_FC)%g" \
91*4882a593Smuzhiyun        -e "s%@TARGET_ARCH@%$(PKG_MESON_TARGET_CPU_FAMILY)%g" \
92*4882a593Smuzhiyun        -e "s%@TARGET_CPU@%$(GCC_TARGET_CPU)%g" \
93*4882a593Smuzhiyun        -e "s%@TARGET_ENDIAN@%$(call qstrip,$(call LOWERCASE,$(BR2_ENDIAN)))%g" \
94*4882a593Smuzhiyun        -e "s%@TARGET_FCFLAGS@%$(call make-sq-comma-list,$($(strip $(4))))%g" \
95*4882a593Smuzhiyun        -e "s%@TARGET_CFLAGS@%$(call make-sq-comma-list,$($(strip $(1))))%g" \
96*4882a593Smuzhiyun        -e "s%@TARGET_LDFLAGS@%$(call make-sq-comma-list,$($(strip $(3))))%g" \
97*4882a593Smuzhiyun        -e "s%@TARGET_CXXFLAGS@%$(call make-sq-comma-list,$($(strip $(2))))%g" \
98*4882a593Smuzhiyun        -e "s%@BR2_CMAKE@%$(BR2_CMAKE)%g" \
99*4882a593Smuzhiyun        -e "s%@PKGCONF_HOST_BINARY@%$(HOST_DIR)/bin/pkgconf%g" \
100*4882a593Smuzhiyun        -e "s%@HOST_DIR@%$(HOST_DIR)%g" \
101*4882a593Smuzhiyun        -e "s%@STAGING_DIR@%$(STAGING_DIR)%g" \
102*4882a593Smuzhiyun        -e "s%@STATIC@%$(if $(BR2_STATIC_LIBS),true,false)%g" \
103*4882a593Smuzhiyun        $(TOPDIR)/support/misc/cross-compilation.conf.in
104*4882a593Smuzhiyunendef
105*4882a593Smuzhiyun
106*4882a593Smuzhiyundefine PKG_MESON_CROSSCONFIG_SED
107*4882a593Smuzhiyun        -e "s%@TARGET_CC@%$(TARGET_CC)%g" \
108*4882a593Smuzhiyun        -e "s%@TARGET_CXX@%$(PKG_MESON_TARGET_CXX)%g" \
109*4882a593Smuzhiyun        -e "s%@TARGET_AR@%$(TARGET_AR)%g" \
110*4882a593Smuzhiyun        -e "s%@TARGET_STRIP@%$(TARGET_STRIP)%g" \
111*4882a593Smuzhiyun	$(call PKG_MESON_CROSSCONFIG_SED_COMMON,$(1),$(2),$(3),$(4))
112*4882a593Smuzhiyunendef
113*4882a593Smuzhiyun
114*4882a593Smuzhiyundefine PKG_MESON_CROSSCONFIG_SED_CUSTOM
115*4882a593Smuzhiyun        -e "s%@TARGET_CC@%$($(1))%g" \
116*4882a593Smuzhiyun        -e "s%@TARGET_CXX@%$($(2))%g" \
117*4882a593Smuzhiyun        -e "s%@TARGET_AR@%$($(3))%g" \
118*4882a593Smuzhiyun        -e "s%@TARGET_STRIP@%$($(4))%g" \
119*4882a593Smuzhiyun	$(call PKG_MESON_CROSSCONFIG_SED_COMMON,$(5),$(6),$(7),$(8))
120*4882a593Smuzhiyunendef
121*4882a593Smuzhiyun
122*4882a593Smuzhiyun################################################################################
123*4882a593Smuzhiyun# inner-meson-package -- defines how the configuration, compilation and
124*4882a593Smuzhiyun# installation of a Meson package should be done, implements a few hooks to
125*4882a593Smuzhiyun# tune the build process and calls the generic package infrastructure to
126*4882a593Smuzhiyun# generate the necessary make targets
127*4882a593Smuzhiyun#
128*4882a593Smuzhiyun#  argument 1 is the lowercase package name
129*4882a593Smuzhiyun#  argument 2 is the uppercase package name, including a HOST_ prefix
130*4882a593Smuzhiyun#             for host packages
131*4882a593Smuzhiyun#  argument 3 is the uppercase package name, without the HOST_ prefix
132*4882a593Smuzhiyun#             for host packages
133*4882a593Smuzhiyun#  argument 4 is the type (target or host)
134*4882a593Smuzhiyun################################################################################
135*4882a593Smuzhiyun
136*4882a593Smuzhiyundefine inner-meson-package
137*4882a593Smuzhiyun
138*4882a593Smuzhiyun#
139*4882a593Smuzhiyun# Configure step. Only define it if not already defined by the package
140*4882a593Smuzhiyun# .mk file. And take care of the differences between host and target
141*4882a593Smuzhiyun# packages.
142*4882a593Smuzhiyun#
143*4882a593Smuzhiyunifndef $(2)_CONFIGURE_CMDS
144*4882a593Smuzhiyunifeq ($(4),target)
145*4882a593Smuzhiyun
146*4882a593Smuzhiyun$(2)_CFLAGS ?= $$(TARGET_CFLAGS)
147*4882a593Smuzhiyun$(2)_LDFLAGS ?= $$(TARGET_LDFLAGS)
148*4882a593Smuzhiyun$(2)_CXXFLAGS ?= $$(TARGET_CXXFLAGS)
149*4882a593Smuzhiyun
150*4882a593Smuzhiyunifneq ($(BR2_TOOLCHAIN_PREFER_CLANG):$$($(2)_USE_CLANG),:)
151*4882a593Smuzhiyunifeq ($$($(2)_DISALLOW_CLANG),)
152*4882a593Smuzhiyun$(2)_DEPENDENCIES += host-clang host-llvm
153*4882a593Smuzhiyun
154*4882a593Smuzhiyun$(2)_CC ?= $(HOST_DIR)/bin/clang
155*4882a593Smuzhiyun$(2)_CXX ?= $(HOST_DIR)/bin/clang++
156*4882a593Smuzhiyun$(2)_AR ?= $(HOST_DIR)/bin/llvm-ar
157*4882a593Smuzhiyun
158*4882a593Smuzhiyunifeq ($(BR2_STRIP_strip),y)
159*4882a593Smuzhiyun$(2)_STRIP ?= $(HOST_DIR)/bin/llvm-strip
160*4882a593Smuzhiyunendif
161*4882a593Smuzhiyun
162*4882a593Smuzhiyun$(2)_CFLAGS += --sysroot=$(STAGING_DIR)
163*4882a593Smuzhiyun$(2)_LDFLAGS += --sysroot=$(STAGING_DIR)
164*4882a593Smuzhiyun$(2)_CXXFLAGS += --sysroot=$(STAGING_DIR)
165*4882a593Smuzhiyunendif
166*4882a593Smuzhiyunendif
167*4882a593Smuzhiyun
168*4882a593Smuzhiyun$(2)_CC ?= $$(TARGET_CC)
169*4882a593Smuzhiyun$(2)_CXX ?= $$(TARGET_CXX)
170*4882a593Smuzhiyun$(2)_AR ?= $$(TARGET_AR)
171*4882a593Smuzhiyun$(2)_STRIP ?= $$(TARGET_STRIP)
172*4882a593Smuzhiyun
173*4882a593Smuzhiyun# Configure package for target
174*4882a593Smuzhiyun#
175*4882a593Smuzhiyun#
176*4882a593Smuzhiyundefine $(2)_CONFIGURE_CMDS
177*4882a593Smuzhiyun	rm -rf $$($$(PKG)_SRCDIR)/build
178*4882a593Smuzhiyun	mkdir -p $$($$(PKG)_SRCDIR)/build
179*4882a593Smuzhiyun	sed -e "/^\[binaries\]$$$$/s:$$$$:$$(foreach x,$$($(2)_MESON_EXTRA_BINARIES),\n$$(x)):" \
180*4882a593Smuzhiyun	    -e "/^\[properties\]$$$$/s:$$$$:$$(foreach x,$$($(2)_MESON_EXTRA_PROPERTIES),\n$$(x)):" \
181*4882a593Smuzhiyun	    $$(call PKG_MESON_CROSSCONFIG_SED_CUSTOM,$(2)_CC,$(2)_CXX,$(2)_AR,$(2)_STRIP,$(2)_CFLAGS,$(2)_CXXFLAGS,$(2)_LDFLAGS,$(2)_FCFLAGS) \
182*4882a593Smuzhiyun	    > $$($$(PKG)_SRCDIR)/build/cross-compilation.conf
183*4882a593Smuzhiyun	PATH=$$(BR_PATH) \
184*4882a593Smuzhiyun	CC_FOR_BUILD="$$(HOSTCC)" \
185*4882a593Smuzhiyun	CXX_FOR_BUILD="$$(HOSTCXX)" \
186*4882a593Smuzhiyun	$$($$(PKG)_CONF_ENV) \
187*4882a593Smuzhiyun	$$(MESON) setup \
188*4882a593Smuzhiyun		--prefix=/usr \
189*4882a593Smuzhiyun		--libdir=lib \
190*4882a593Smuzhiyun		--default-library=$(if $(BR2_STATIC_LIBS),static,$(if $(BR2_SHARED_STATIC_LIBS),both,shared)) \
191*4882a593Smuzhiyun		--buildtype=$(if $(BR2_ENABLE_RUNTIME_DEBUG),debug,release) \
192*4882a593Smuzhiyun		--cross-file=$$($$(PKG)_SRCDIR)/build/cross-compilation.conf \
193*4882a593Smuzhiyun		-Db_pie=false \
194*4882a593Smuzhiyun		-Dstrip=false \
195*4882a593Smuzhiyun		-Dbuild.pkg_config_path=$$(HOST_DIR)/lib/pkgconfig \
196*4882a593Smuzhiyun		-Dbuild.cmake_prefix_path=$$(HOST_DIR)/lib/cmake \
197*4882a593Smuzhiyun		$$($$(PKG)_CONF_OPTS) \
198*4882a593Smuzhiyun		$$($$(PKG)_SRCDIR) $$($$(PKG)_SRCDIR)/build
199*4882a593Smuzhiyunendef
200*4882a593Smuzhiyunelse
201*4882a593Smuzhiyun
202*4882a593Smuzhiyun# Configure package for host
203*4882a593Smuzhiyundefine $(2)_CONFIGURE_CMDS
204*4882a593Smuzhiyun	rm -rf $$($$(PKG)_SRCDIR)/build
205*4882a593Smuzhiyun	mkdir -p $$($$(PKG)_SRCDIR)/build
206*4882a593Smuzhiyun	$$(HOST_CONFIGURE_OPTS) \
207*4882a593Smuzhiyun	$$($$(PKG)_CONF_ENV) $$(MESON) setup \
208*4882a593Smuzhiyun		--prefix=$$(HOST_DIR) \
209*4882a593Smuzhiyun		--libdir=lib \
210*4882a593Smuzhiyun		--sysconfdir=$$(HOST_DIR)/etc \
211*4882a593Smuzhiyun		--localstatedir=$$(HOST_DIR)/var \
212*4882a593Smuzhiyun		--default-library=shared \
213*4882a593Smuzhiyun		--buildtype=release \
214*4882a593Smuzhiyun		--wrap-mode=nodownload \
215*4882a593Smuzhiyun		-Dstrip=true \
216*4882a593Smuzhiyun		$$($$(PKG)_CONF_OPTS) \
217*4882a593Smuzhiyun		$$($$(PKG)_SRCDIR) $$($$(PKG)_SRCDIR)/build
218*4882a593Smuzhiyunendef
219*4882a593Smuzhiyunendif
220*4882a593Smuzhiyunendif
221*4882a593Smuzhiyun
222*4882a593Smuzhiyun$(2)_DEPENDENCIES += host-meson
223*4882a593Smuzhiyun
224*4882a593Smuzhiyun#
225*4882a593Smuzhiyun# Build step. Only define it if not already defined by the package .mk
226*4882a593Smuzhiyun# file.
227*4882a593Smuzhiyun#
228*4882a593Smuzhiyunifndef $(2)_BUILD_CMDS
229*4882a593Smuzhiyunifeq ($(4),target)
230*4882a593Smuzhiyundefine $(2)_BUILD_CMDS
231*4882a593Smuzhiyun	$$(TARGET_MAKE_ENV) $$($$(PKG)_NINJA_ENV) \
232*4882a593Smuzhiyun		$$(NINJA) $$(NINJA_OPTS) $$($$(PKG)_NINJA_OPTS) -C $$($$(PKG)_SRCDIR)/build
233*4882a593Smuzhiyunendef
234*4882a593Smuzhiyunelse
235*4882a593Smuzhiyundefine $(2)_BUILD_CMDS
236*4882a593Smuzhiyun	$$(HOST_MAKE_ENV) $$($$(PKG)_NINJA_ENV) \
237*4882a593Smuzhiyun		$$(NINJA) $$(NINJA_OPTS) $$($$(PKG)_NINJA_OPTS) -C $$($$(PKG)_SRCDIR)/build
238*4882a593Smuzhiyunendef
239*4882a593Smuzhiyunendif
240*4882a593Smuzhiyunendif
241*4882a593Smuzhiyun
242*4882a593Smuzhiyun#
243*4882a593Smuzhiyun# Host installation step. Only define it if not already defined by the
244*4882a593Smuzhiyun# package .mk file.
245*4882a593Smuzhiyun#
246*4882a593Smuzhiyunifndef $(2)_INSTALL_CMDS
247*4882a593Smuzhiyundefine $(2)_INSTALL_CMDS
248*4882a593Smuzhiyun	$$(HOST_MAKE_ENV) $$($$(PKG)_NINJA_ENV) \
249*4882a593Smuzhiyun		$$(NINJA) $$(NINJA_OPTS) -C $$($$(PKG)_SRCDIR)/build install
250*4882a593Smuzhiyunendef
251*4882a593Smuzhiyunendif
252*4882a593Smuzhiyun
253*4882a593Smuzhiyun#
254*4882a593Smuzhiyun# Staging installation step. Only define it if not already defined by
255*4882a593Smuzhiyun# the package .mk file.
256*4882a593Smuzhiyun#
257*4882a593Smuzhiyunifndef $(2)_INSTALL_STAGING_CMDS
258*4882a593Smuzhiyundefine $(2)_INSTALL_STAGING_CMDS
259*4882a593Smuzhiyun	$$(TARGET_MAKE_ENV) $$($$(PKG)_NINJA_ENV) DESTDIR=$$(STAGING_DIR) \
260*4882a593Smuzhiyun		$$(NINJA) $$(NINJA_OPTS) -C $$($$(PKG)_SRCDIR)/build install
261*4882a593Smuzhiyunendef
262*4882a593Smuzhiyunendif
263*4882a593Smuzhiyun
264*4882a593Smuzhiyun#
265*4882a593Smuzhiyun# Target installation step. Only define it if not already defined by
266*4882a593Smuzhiyun# the package .mk file.
267*4882a593Smuzhiyun#
268*4882a593Smuzhiyunifndef $(2)_INSTALL_TARGET_CMDS
269*4882a593Smuzhiyundefine $(2)_INSTALL_TARGET_CMDS
270*4882a593Smuzhiyun	$$(TARGET_MAKE_ENV) $$($$(PKG)_NINJA_ENV) DESTDIR=$$(TARGET_DIR) \
271*4882a593Smuzhiyun		$$(NINJA) $$(NINJA_OPTS) -C $$($$(PKG)_SRCDIR)/build install
272*4882a593Smuzhiyunendef
273*4882a593Smuzhiyunendif
274*4882a593Smuzhiyun
275*4882a593Smuzhiyun# Call the generic package infrastructure to generate the necessary
276*4882a593Smuzhiyun# make targets
277*4882a593Smuzhiyun$(call inner-generic-package,$(1),$(2),$(3),$(4))
278*4882a593Smuzhiyun
279*4882a593Smuzhiyunendef
280*4882a593Smuzhiyun
281*4882a593Smuzhiyun################################################################################
282*4882a593Smuzhiyun# meson-package -- the target generator macro for Meson packages
283*4882a593Smuzhiyun################################################################################
284*4882a593Smuzhiyun
285*4882a593Smuzhiyunmeson-package = $(call inner-meson-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target)
286*4882a593Smuzhiyunhost-meson-package = $(call inner-meson-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host)
287*4882a593Smuzhiyun
288*4882a593Smuzhiyun################################################################################
289*4882a593Smuzhiyun# Generation of the Meson compile flags and cross-compilation file
290*4882a593Smuzhiyun################################################################################
291*4882a593Smuzhiyun
292*4882a593Smuzhiyun# Generate a Meson cross-compilation.conf suitable for use with the
293*4882a593Smuzhiyun# SDK; also install the file as a template for users to add their
294*4882a593Smuzhiyun# own flags if they need to.
295*4882a593Smuzhiyundefine PKG_MESON_INSTALL_CROSS_CONF
296*4882a593Smuzhiyun	mkdir -p $(HOST_DIR)/etc/meson
297*4882a593Smuzhiyun	sed -e "s%@TARGET_CFLAGS@%$(call make-sq-comma-list,$(TARGET_CFLAGS))@PKG_TARGET_CFLAGS@%g" \
298*4882a593Smuzhiyun	    -e "s%@TARGET_LDFLAGS@%$(call make-sq-comma-list,$(TARGET_LDFLAGS))@PKG_TARGET_LDFLAGS@%g" \
299*4882a593Smuzhiyun	    -e "s%@TARGET_CXXFLAGS@%$(call make-sq-comma-list,$(TARGET_CXXFLAGS))@PKG_TARGET_CXXFLAGS@%g" \
300*4882a593Smuzhiyun	    -e "s%@TARGET_FCFLAGS@%$(call make-sq-comma-list,$(TARGET_FCFLAGS))@PKG_TARGET_FCFLAGS@%g" \
301*4882a593Smuzhiyun	    $(call PKG_MESON_CROSSCONFIG_SED) \
302*4882a593Smuzhiyun	    > $(HOST_DIR)/etc/meson/cross-compilation.conf.in
303*4882a593Smuzhiyun	sed $(call PKG_MESON_CROSSCONFIG_SED,TARGET_CFLAGS,TARGET_CXXFLAGS,TARGET_LDFLAGS,TARGET_FCFLAGS) \
304*4882a593Smuzhiyun	    > $(HOST_DIR)/etc/meson/cross-compilation.conf
305*4882a593Smuzhiyunendef
306*4882a593Smuzhiyun
307*4882a593SmuzhiyunTOOLCHAIN_TARGET_FINALIZE_HOOKS += PKG_MESON_INSTALL_CROSS_CONF
308