build: Better support meson cross compilation.

This commit is contained in:
Rémi Bernon 2021-11-11 04:03:26 +01:00 committed by Arkadiusz Hiler
parent 5b8a6c72f9
commit 587f86fb9d
3 changed files with 55 additions and 30 deletions

View file

@ -114,6 +114,9 @@ $(2)_LIBFLAGS$(3) = $$(foreach d,$$($(2)_DEPS$(3)),-L$$($$(d)_LIBDIR$(3))) \
# PKG_CONFIG is intentionally never using CROSS target, as it's missing
# wrapper scripts in the toolchain, we use PKG_CONFIG_LIBDIR directly
# instead.
#
# RC and WIDL are intentionally always using CROSS target, as their
# native version doesn't exist.
$(2)_ENV$(3) = \
CARGO_HOME=$$(OBJ)/.cargo \
@ -125,6 +128,8 @@ $(2)_ENV$(3) = \
CC="$$(TARGET_$(4)$(3))-gcc" \
CXX="$$(TARGET_$(4)$(3))-g++" \
LD="$$(TARGET_$(4)$(3))-ld" \
RC="$$(TARGET_CROSS$(3))-windres" \
WIDL="$$(TARGET_CROSS$(3))-widl" \
PKG_CONFIG="$$(TARGET_$(3))-pkg-config" \
PATH="$$(call list-join,:,$$(foreach d,$$($(2)_DEPS$(3)),$$($$(d)_BINDIR$(3))),,:):$$(SRC)/glslang/bin:$$$$PATH" \
LD_LIBRARY_PATH="$$(call list-join,:,$$(foreach d,$$($(2)_DEPS$(3)),$$($$(d)_LIBDIR$(3))),,:)$$$$LD_LIBRARY_PATH" \

View file

@ -2,26 +2,55 @@
# $(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)
ifeq ($(CONTAINER),1)
$$(OBJ)/.$(1)-configure$(3): $$($(2)_SRC)/meson.build
@echo ":: configuring $(3)bit $(1)..." >&2
rm -rf "$$($(2)_OBJ$(3))/meson-private/coredata.dat"
grep -s -v -e c_args -e cpp_args -e link_args "$$($(2)_SRC)/build-win$(3).txt" | \
sed -e "s:\[properties\]:[properties]\nc_args = [$$(call list-quote,$$(COMMON_FLAGS))]:" \
-e "s:\[properties\]:[properties]\ncpp_args = [$$(call list-quote,$$(COMMON_FLAGS))]:" \
-e "s:\[properties\]:[properties]\nlink_args = [$$(call list-quote,$$(CROSSLDFLAGS))]:" \
> "$$($(2)_OBJ$(3))/build-win$(3).txt"
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)
@ -36,4 +65,7 @@ $$(OBJ)/.$(1)-build$(3):
endif
endef
rules-meson = $(call create-rules-meson,$(1),$(call toupper,$(1)),$(2))
MESON_CPU32 = x86
MESON_CPU64 = x86_64
rules-meson = $(call create-rules-meson,$(1),$(call toupper,$(1)),$(2),$(3))