From abaaf762a5510d3b48140a8ff5a2f81d402a7108 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Thu, 11 Nov 2021 04:03:26 +0100 Subject: [PATCH] build: Better support meson cross compilation. --- build/makefile_base.mak | 36 +++++++++++---------------------- make/rules-common.mk | 5 +++++ make/rules-meson.mk | 44 +++++++++++++++++++++++++++++++++++------ 3 files changed, 55 insertions(+), 30 deletions(-) diff --git a/build/makefile_base.mak b/build/makefile_base.mak index 69417713..43dd4b08 100644 --- a/build/makefile_base.mak +++ b/build/makefile_base.mak @@ -738,16 +738,12 @@ $(OBJ)/.vrclient-post-source: ## dxvk ## -DXVK_MESON_ARGS32 = \ - --bindir=$(DXVK_DST32)/lib/wine/dxvk \ - --cross-file=$(DXVK_OBJ32)/build-win32.txt -DXVK_MESON_ARGS64 = \ - --bindir=$(DXVK_DST64)/lib64/wine/dxvk \ - --cross-file=$(DXVK_OBJ64)/build-win64.txt +DXVK_MESON_ARGS32 = --bindir=$(DXVK_DST32)/lib/wine/dxvk +DXVK_MESON_ARGS64 = --bindir=$(DXVK_DST64)/lib64/wine/dxvk $(eval $(call rules-source,dxvk,$(SRCDIR)/dxvk)) -$(eval $(call rules-meson,dxvk,32)) -$(eval $(call rules-meson,dxvk,64)) +$(eval $(call rules-meson,dxvk,32,CROSS)) +$(eval $(call rules-meson,dxvk,64,CROSS)) $(OBJ)/.dxvk-post-build64: mkdir -p "$(DST_DIR)"/lib64/wine/dxvk @@ -764,16 +760,12 @@ $(OBJ)/.dxvk-post-build32: ## dxvk-nvapi ## -DXVK_NVAPI_MESON_ARGS32 = \ - --bindir=$(DXVK_NVAPI_DST32)/lib/wine/nvapi \ - --cross-file=$(DXVK_NVAPI_OBJ32)/build-win32.txt -DXVK_NVAPI_MESON_ARGS64 = \ - --bindir=$(DXVK_NVAPI_DST64)/lib64/wine/nvapi \ - --cross-file=$(DXVK_NVAPI_OBJ64)/build-win64.txt +DXVK_NVAPI_MESON_ARGS32 = --bindir=$(DXVK_NVAPI_DST32)/lib/wine/nvapi +DXVK_NVAPI_MESON_ARGS64 = --bindir=$(DXVK_NVAPI_DST64)/lib64/wine/nvapi $(eval $(call rules-source,dxvk-nvapi,$(SRCDIR)/dxvk-nvapi)) -$(eval $(call rules-meson,dxvk-nvapi,32)) -$(eval $(call rules-meson,dxvk-nvapi,64)) +$(eval $(call rules-meson,dxvk-nvapi,32,CROSS)) +$(eval $(call rules-meson,dxvk-nvapi,64,CROSS)) $(OBJ)/.dxvk-nvapi-post-build64: mkdir -p "$(DST_DIR)"/lib64/wine/nvapi @@ -849,16 +841,12 @@ VKD3D_PROTON_SOURCE_ARGS = \ --exclude vkd3d_version.h.in \ VKD3D_PROTON_MESON_ARGS = -Denable_standalone_d3d12=true -VKD3D_PROTON_MESON_ARGS32 = \ - --bindir=$(VKD3D_PROTON_DST32)/lib/wine/vkd3d-proton \ - --cross-file=$(VKD3D_PROTON_OBJ32)/build-win32.txt -VKD3D_PROTON_MESON_ARGS64 = \ - --bindir=$(VKD3D_PROTON_DST64)/lib64/wine/vkd3d-proton \ - --cross-file=$(VKD3D_PROTON_OBJ64)/build-win64.txt +VKD3D_PROTON_MESON_ARGS32 = --bindir=$(VKD3D_PROTON_DST32)/lib/wine/vkd3d-proton +VKD3D_PROTON_MESON_ARGS64 = --bindir=$(VKD3D_PROTON_DST64)/lib64/wine/vkd3d-proton $(eval $(call rules-source,vkd3d-proton,$(SRCDIR)/vkd3d-proton)) -$(eval $(call rules-meson,vkd3d-proton,32)) -$(eval $(call rules-meson,vkd3d-proton,64)) +$(eval $(call rules-meson,vkd3d-proton,32,CROSS)) +$(eval $(call rules-meson,vkd3d-proton,64,CROSS)) $(OBJ)/.vkd3d-proton-post-source: sed -re 's#@VCS_TAG@#$(shell git -C $(SRCDIR)/vkd3d-proton describe --always --exclude=* --abbrev=15 --dirty=0)#' \ diff --git a/make/rules-common.mk b/make/rules-common.mk index 44ccd6e9..4d72ac06 100644 --- a/make/rules-common.mk +++ b/make/rules-common.mk @@ -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" \ diff --git a/make/rules-meson.mk b/make/rules-meson.mk index 7b982faf..d603bfde 100644 --- a/make/rules-meson.mk +++ b/make/rules-meson.mk @@ -2,26 +2,55 @@ # $(1): lowercase package name # $(2): uppercase package name # $(3): 32/64, build type +# $(4): CROSS/, 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 <&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))