Yucom/make/rules-meson.mk
Arkadiusz Hiler 692ef0aa1f build: Do as much as possible inside of the SDK container.
Parts of the rules, including the magical ones created via
make/rules-*.mk, are executed inside of the container via SHELL
override, and parts are executed on the host side.

This makes reasoning about and debugging the rules much harder than it
should be. It also requirs the users to have certain programs installed
on the host in addition to docker/podman.

With this change `make` will act as a simple pass through to inside of
the container for the most part.

One notable exception is installation which still happens the host side.
2023-02-14 16:07:44 +02:00

71 lines
2 KiB
Makefile

# parameters:
# $(1): lowercase package name
# $(2): uppercase package name
# $(3): 32/64, build type
# $(4): CROSS/<empty>, cross compile
#
define create-rules-meson
# Don't pass CROSS here, we need a native environment and we'll handle
# cross compilation below with the CROSS-prefixed variables.
$(call create-rules-common,$(1),$(2),$(3))
define $(2)_MESON_CROSS$(3)
cat <<EOF
[binaries]
ar = '$$$$CROSSAR'
c = '$$$$CROSSCC'
cpp = '$$$$CROSSCXX'
ld = '$$$$CROSSLD'
windres = '$$$$RC'
strip = '$$$$STRIP'
widl = '$$$$WIDL'
pkgconfig = '$$$$PKG_CONFIG'
[properties]
needs_exe_wrapper = true
c_args = [$$(call list-quote,$$($(2)_INCFLAGS$(3)) $$($(2)_CPPFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS$(3)))]
cpp_args = [$$(call list-quote,$$($(2)_INCFLAGS$(3)) $$($(2)_CPPFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS$(3)) -std=c++17)]
link_args = [$$(call list-quote,$$($(2)_LIBFLAGS$(3)) $$($(2)_LDFLAGS$(3)) $$($(2)_LDFLAGS) $$(CROSSLDFLAGS))]
pkg_config_libdir = '$$$$CROSSPKG_CONFIG_LIBDIR'
[host_machine]
system = 'windows'
cpu_family = '$$(MESON_CPU$(3))'
cpu = '$$(MESON_CPU$(3))'
endian = 'little'
EOF
endef
export $(2)_MESON_CROSS$(3)
$$($(2)_SRC)/meson.build: | $$(OBJ)/.$(1)-post-source
$$(OBJ)/.$(1)-configure$(3): $$($(2)_SRC)/meson.build
@echo ":: configuring $(3)bit $(1)..." >&2
rm -rf "$$($(2)_OBJ$(3))/meson-private/coredata.dat"
echo "$$$$$(2)_MESON_CROSS$(3)" | env $$($(2)_ENV$(3)) sh >"$$($(2)_OBJ$(3))/cross-$(3).txt"
env $$($(2)_ENV$(3)) \
meson "$$($(2)_OBJ$(3))" "$$($(2)_SRC)" \
--prefix="$$($(2)_DST$(3))" \
--libdir="lib$(subst 32,,$(3))" \
--buildtype=plain \
$(if $(4),--cross-file="$$($(2)_OBJ$(3))/cross-$(3).txt",) \
$$($(2)_MESON_ARGS) \
$$($(2)_MESON_ARGS$(3)) \
$$(MESON_STRIP_ARG)
touch $$@
$$(OBJ)/.$(1)-build$(3):
@echo ":: building $(3)bit $(1)..." >&2
env $$($(2)_ENV$(3)) \
ninja $$(filter -j%,$$(MAKEFLAGS)) -C "$$($(2)_OBJ$(3))" install $(-v?)
touch $$@
endef
MESON_CPU32 = x86
MESON_CPU64 = x86_64
rules-meson = $(call create-rules-meson,$(1),$(call toupper,$(1)),$(2),$(3))