# 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 -C "$$($(2)_OBJ$(3))" install touch $$@ endef MESON_CPU32 = x86 MESON_CPU64 = x86_64 rules-meson = $(call create-rules-meson,$(1),$(call toupper,$(1)),$(2),$(3))