make: Use prefixes for archs in variables.

This commit is contained in:
Rémi Bernon
2025-01-12 11:37:25 +01:00
committed by Arkadiusz Hiler
parent ead580b59e
commit 82b173490c
11 changed files with 354 additions and 359 deletions

View File

@ -11,27 +11,27 @@ $$($(2)_SRC)/configure: $$($(2)_ORIGIN)/configure.ac | $$(OBJ)/.$(1)-post-source
@echo ":: autoreconfing $(1)..." >&2
cd "$$($(2)_SRC)" && autoreconf -fiv
$$(OBJ)/.$(1)-configure$(3): $$($(2)_SRC)/configure
@echo ":: configuring $(3)bit $(1)..." >&2
rm -rf "$$($(2)_OBJ$(3))/config.cache"
$$(OBJ)/.$(1)-$(3)-configure: $$($(2)_SRC)/configure
@echo ":: configuring $(1)-$(3)..." >&2
rm -rf "$$($(2)_$(3)_OBJ)/config.cache"
cd "$$($(2)_OBJ$(3))" && env $$($(2)_ENV$(3)) \
cd "$$($(2)_$(3)_OBJ)" && env $$($(2)_$(3)_ENV) \
$$($(2)_SRC)/configure $(--quiet?) -C \
--prefix="$$($(2)_DST$(3))" \
--libdir="$$($(2)_DST$(3))/lib" \
--host="$$(TARGET_$(4)$(3))" \
$$($(2)_ENV$(3)) \
$$(AUTOCONF_ARGS_$(3)) \
--prefix="$$($(2)_$(3)_DST)" \
--libdir="$$($(2)_$(3)_DST)/lib" \
--host="$$($(4)$(3)_TARGET)" \
$$($(2)_$(3)_ENV) \
$$($(3)_AUTOCONF_ARGS) \
$$($(2)_AUTOCONF_ARGS) \
$$($(2)_AUTOCONF_ARGS$(3)) \
$$($(2)_$(3)_AUTOCONF_ARGS)
touch $$@
$$(OBJ)/.$(1)-build$(3):
@echo ":: building $(3)bit $(1)..." >&2
+cd "$$($(2)_OBJ$(3))" && env $$($(2)_ENV$(3)) \
$$(OBJ)/.$(1)-$(3)-build:
@echo ":: building $(1)-$(3)..." >&2
+cd "$$($(2)_$(3)_OBJ)" && env $$($(2)_$(3)_ENV) \
$$(BEAR) $$(MAKE)
cd "$$($(2)_OBJ$(3))" && env $$($(2)_ENV$(3)) \
cd "$$($(2)_$(3)_OBJ)" && env $$($(2)_$(3)_ENV) \
$$(MAKE) install
touch $$@
endef

View File

@ -6,27 +6,26 @@
define create-rules-cargo
$(call create-rules-common,$(1),$(2),$(3))
$$(OBJ)/.$(1)-configure$(3):
@echo ":: configuring $(3)bit $(1)..." >&2
$$(OBJ)/.$(1)-$(3)-configure:
@echo ":: configuring $(1)-$(3)..." >&2
touch $$@
$$(OBJ)/.$(1)-build$(3):
@echo ":: building $(3)bit $(1)..." >&2
cd $$($(2)_SRC) && env $$($(2)_ENV$(3)) \
$$(OBJ)/.$(1)-$(3)-build:
@echo ":: building $(1)-$(3)..." >&2
cd $$($(2)_SRC) && env $$($(2)_$(3)_ENV) \
cargo build $(--quiet?) --release \
$$(filter -j%,$$(MAKEFLAGS)) \
--target-dir $$($(2)_OBJ$(3)) \
$$(CARGO_ARGS_$(3)) \
--target-dir $$($(2)_$(3)_OBJ) \
$$($(3)_CARGO_ARGS) \
$$($(2)_CARGO_ARGS) \
$$($(2)_CARGO_ARGS$(3)) \
$$($(2)_$(3)_CARGO_ARGS)
touch $$@
endef
rules-cargo = $(call create-rules-cargo,$(1),$(call toupper,$(1)),$(2))
CARGO_TARGET_32 := i686-unknown-linux-gnu
CARGO_TARGET_64 := x86_64-unknown-linux-gnu
32_CARGO_TARGET := i686-unknown-linux-gnu
64_CARGO_TARGET := x86_64-unknown-linux-gnu
CARGO_ARGS_32 := --target $(CARGO_TARGET_32)
CARGO_ARGS_64 := --target $(CARGO_TARGET_64)
32_CARGO_ARGS := --target $(32_CARGO_TARGET)
64_CARGO_ARGS := --target $(64_CARGO_TARGET)

View File

@ -8,29 +8,29 @@ define create-rules-cmake
$(call create-rules-common,$(1),$(2),$(3),$(4))
$$($(2)_SRC)/CMakeLists.txt: | $$(OBJ)/.$(1)-post-source
$$(OBJ)/.$(1)-configure$(3): $$($(2)_SRC)/CMakeLists.txt
@echo ":: configuring $(3)bit $(1)..." >&2
rm -rf "$$($(2)_OBJ$(3))/CMakeCache.txt"
$$(OBJ)/.$(1)-$(3)-configure: $$($(2)_SRC)/CMakeLists.txt
@echo ":: configuring $(1)-$(3)..." >&2
rm -rf "$$($(2)_$(3)_OBJ)/CMakeCache.txt"
cd "$$($(2)_OBJ$(3))" && env $$($(2)_ENV$(3)) \
cd "$$($(2)_$(3)_OBJ)" && env $$($(2)_$(3)_ENV) \
cmake "$$($(2)_SRC)" \
-DCMAKE_INSTALL_PREFIX="$$($(2)_DST$(3))" \
-DCMAKE_INSTALL_LIBDIR="lib/$$(LIBDIR_$(4)$(3))" \
-DCMAKE_INSTALL_PREFIX="$$($(2)_$(3)_DST)" \
-DCMAKE_INSTALL_LIBDIR="lib/$$($(4)$(3)_LIBDIR)" \
-DCMAKE_BUILD_TYPE=plain \
-DCMAKE_SYSTEM_NAME=$(if $(4),Windows,) \
-DCMAKE_SHARED_LIBRARY_PREFIX_C=$(if $(4),,lib) \
-DCMAKE_IMPORT_LIBRARY_PREFIX_C=$(if $(4),,lib) \
$$(CMAKE_ARGS_$(3)) \
$$($(3)_CMAKE_ARGS) \
$$($(2)_CMAKE_ARGS) \
$$($(2)_CMAKE_ARGS$(3)) \
$$($(2)_$(3)_CMAKE_ARGS)
touch $$@
$$(OBJ)/.$(1)-build$(3):
@echo ":: building $(3)bit $(1)..." >&2
cd "$$($(2)_OBJ$(3))" && env $$($(2)_ENV$(3)) \
$$(OBJ)/.$(1)-$(3)-build:
@echo ":: building $(1)-$(3)..." >&2
cd "$$($(2)_$(3)_OBJ)" && env $$($(2)_$(3)_ENV) \
$$(MAKE)
cd "$$($(2)_OBJ$(3))" && env $$($(2)_ENV$(3)) \
cd "$$($(2)_$(3)_OBJ)" && env $$($(2)_$(3)_ENV) \
$$(MAKE) install
touch $$@
endef

View File

@ -4,98 +4,98 @@
# $(3): 32/64, build type
# $(4): CROSS/<empty>, cross compile
define create-rules-common
$(2)_OBJ$(3) := $$(OBJ)/obj-$(1)$(3)
$(2)_DST$(3) := $$(OBJ)/dst-$(1)$(3)
$(2)_DEPS$(3) := $$(call toupper,$$($(2)_DEPENDS)) $$(call toupper,$$($(2)_DEPENDS$(3)))
$(2)_$(3)_OBJ := $$(OBJ)/obj-$(1)-$(3)
$(2)_$(3)_DST := $$(OBJ)/dst-$(1)-$(3)
$(2)_$(3)_DEPS := $$(call toupper,$$($(2)_DEPENDS)) $$(call toupper,$$($(2)_$(3)_DEPENDS))
$(2)_BINDIR$(3) ?= $$($(2)_DST$(3))/bin
$(2)_LIBDIR$(3) ?= $$($(2)_DST$(3))/lib
$(2)_INCDIR$(3) ?= $$($(2)_DST$(3))/include
$(2)_$(3)_BINDIR ?= $$($(2)_$(3)_DST)/bin
$(2)_$(3)_LIBDIR ?= $$($(2)_$(3)_DST)/lib
$(2)_$(3)_INCDIR ?= $$($(2)_$(3)_DST)/include
$$(OBJ)/.$(1)-configure$(3): $$(shell mkdir -p $$($(2)_OBJ$(3)))
$$(OBJ)/.$(1)-configure$(3): CCACHE_BASEDIR = $$($(2)_SRC)
$$(OBJ)/.$(1)-configure$(3): $$(patsubst %,%-build$(3),$$($(2)_DEPENDS) $$($(2)_DEPENDS$(3)))
$$(OBJ)/.$(1)-configure$(3): | $$(OBJ)/.$(1)-post-source
$$(OBJ)/.$(1)-$(3)-configure: $$(shell mkdir -p $$($(2)_$(3)_OBJ))
$$(OBJ)/.$(1)-$(3)-configure: CCACHE_BASEDIR = $$($(2)_SRC)
$$(OBJ)/.$(1)-$(3)-configure: $$(patsubst %,%-$(3)-build,$$($(2)_DEPENDS) $$($(2)_$(3)_DEPENDS))
$$(OBJ)/.$(1)-$(3)-configure: | $$(OBJ)/.$(1)-post-source
$(1)-configure$(3): $$(OBJ)/.$(1)-configure$(3)
.INTERMEDIATE: $(1)-configure$(3)
$(1)-$(3)-configure: $$(OBJ)/.$(1)-$(3)-configure
.INTERMEDIATE: $(1)-$(3)-configure
all-configure$(3) $(1)-configure: $(1)-configure$(3)
.PHONY: all-configure$(3) $(1)-configure
all-$(3)-configure $(1)-configure: $(1)-$(3)-configure
.PHONY: all-$(3)-configure $(1)-configure
all-configure: $(1)-configure
.PHONY: all-configure
$$(OBJ)/.$(1)-build$(3): CCACHE_BASEDIR = $$($(2)_SRC)
$$(OBJ)/.$(1)-build$(3): $$(OBJ)/.$(1)-source
$$(OBJ)/.$(1)-build$(3): $$(OBJ)/.$(1)-configure$(3)
$$(OBJ)/.$(1)-$(3)-build: CCACHE_BASEDIR = $$($(2)_SRC)
$$(OBJ)/.$(1)-$(3)-build: $$(OBJ)/.$(1)-source
$$(OBJ)/.$(1)-$(3)-build: $$(OBJ)/.$(1)-$(3)-configure
$$(OBJ)/.$(1)-post-build$(3): $$(OBJ)/.$(1)-build$(3)
$$(OBJ)/.$(1)-$(3)-post-build: $$(OBJ)/.$(1)-$(3)-build
$(1)-build$(3): $$(OBJ)/.$(1)-build$(3)
.INTERMEDIATE: $(1)-build$(3)
$(1)-$(3)-build: $$(OBJ)/.$(1)-$(3)-build
.INTERMEDIATE: $(1)-$(3)-build
all-build$(3) $(1)-build: $(1)-build$(3)
.PHONY: all-build$(3) $(1)-build
all-$(3)-build $(1)-build: $(1)-$(3)-build
.PHONY: all-$(3)-build $(1)-build
all-build: $(1)-build
.PHONY: all-build
$$(OBJ)/.$(1)-dist$(3): $$(OBJ)/.$(1)-build$(3)
$$(OBJ)/.$(1)-dist$(3): $$(OBJ)/.$(1)-post-build$(3)
$$(OBJ)/.$(1)-$(3)-dist: $$(OBJ)/.$(1)-$(3)-build
$$(OBJ)/.$(1)-$(3)-dist: $$(OBJ)/.$(1)-$(3)-post-build
$(2)_SOURCE_DATE_EPOCH$(3) ?= $$(BASE_SOURCE_DATE_EPOCH$(3))
$(2)_$(3)_SOURCE_DATE_EPOCH ?= $$($(3)_SOURCE_DATE_EPOCH)
$$(OBJ)/.$(1)-dist$(3):
@echo ":: installing $(3)bit $(1)..." >&2
if [ -f "$$($(2)_OBJ$(3))/compile_commands.json" ]; then \
mkdir -p "$$(OBJ)/compile_commands/$(1)$(3)/"; \
sed "s#$$($(2)_SRC)#$$($(2)_ORIGIN)#g" "$$($(2)_OBJ$(3))/compile_commands.json" > "$$(OBJ)/compile_commands/$(1)$(3)/compile_commands.json"; \
$$(OBJ)/.$(1)-$(3)-dist:
@echo ":: installing $(1)-$(3)..." >&2
if [ -f "$$($(2)_$(3)_OBJ)/compile_commands.json" ]; then \
mkdir -p "$$(OBJ)/compile_commands/$(1)-$(3)/"; \
sed "s#$$($(2)_SRC)#$$($(2)_ORIGIN)#g" "$$($(2)_$(3)_OBJ)/compile_commands.json" > "$$(OBJ)/compile_commands/$(1)-$(3)/compile_commands.json"; \
fi
mkdir -p $$($(2)_LIBDIR$(3))/ $$(DST_LIBDIR)/
cd $$($(2)_LIBDIR$(3)) && find -type f -printf '$$(DST_LIBDIR)/%h\0' | sort -z | uniq -z | xargs $(--verbose?) -0 -r -P$$(J) mkdir -p
cd $$($(2)_LIBDIR$(3)) && find -type l -printf '%p\0$$(DST_LIBDIR)/%p\0' | xargs $(--verbose?) -0 -r -P$$(J) -n2 cp -a
mkdir -p $$($(2)_$(3)_LIBDIR)/ $$(DST_LIBDIR)/
cd $$($(2)_$(3)_LIBDIR) && find -type f -printf '$$(DST_LIBDIR)/%h\0' | sort -z | uniq -z | xargs $(--verbose?) -0 -r -P$$(J) mkdir -p
cd $$($(2)_$(3)_LIBDIR) && find -type l -printf '%p\0$$(DST_LIBDIR)/%p\0' | xargs $(--verbose?) -0 -r -P$$(J) -n2 cp -a
ifneq ($(UNSTRIPPED_BUILD),)
cd $$($(2)_LIBDIR$(3)) && find -type f -not '(' -iname '*.pc' -or -iname '*.cmake' -or -iname '*.a' -or -iname '*.la' -or -iname '*.def' -or -iname '*.h' ')' \
cd $$($(2)_$(3)_LIBDIR) && find -type f -not '(' -iname '*.pc' -or -iname '*.cmake' -or -iname '*.a' -or -iname '*.la' -or -iname '*.def' -or -iname '*.h' ')' \
-printf '--only-keep-debug\0%p\0$$(DST_LIBDIR)/%p.debug\0' | \
xargs $(--verbose?) -0 -r -P$$(J) -n3 objcopy $(OBJCOPY_FLAGS)
cd $$($(2)_LIBDIR$(3)) && find -type f -not '(' -iname '*.pc' -or -iname '*.cmake' -or -iname '*.a' -or -iname '*.la' -or -iname '*.def' -or -iname '*.h' ')' \
cd $$($(2)_$(3)_LIBDIR) && find -type f -not '(' -iname '*.pc' -or -iname '*.cmake' -or -iname '*.a' -or -iname '*.la' -or -iname '*.def' -or -iname '*.h' ')' \
-printf '--add-gnu-debuglink=$$(DST_LIBDIR)/%p.debug\0--strip-debug\0%p\0$$(DST_LIBDIR)/%p\0' | \
xargs $(--verbose?) -0 -r -P$$(J) -n4 objcopy $(OBJCOPY_FLAGS) --set-section-flags .text=contents,alloc,load,readonly,code
touch $$@
else
cd $$($(2)_LIBDIR$(3)) && find -type f -not '(' -iname '*.pc' -or -iname '*.cmake' -or -iname '*.a' -or -iname '*.la' -or -iname '*.def' -or -iname '*.h' ')' \
cd $$($(2)_$(3)_LIBDIR) && find -type f -not '(' -iname '*.pc' -or -iname '*.cmake' -or -iname '*.a' -or -iname '*.la' -or -iname '*.def' -or -iname '*.h' ')' \
-printf '$$(DST_LIBDIR)/%p.debug\0' | xargs $(--verbose?) -0 -r -P$$(J) rm -f
cd $$($(2)_LIBDIR$(3)) && find -type f -not '(' -iname '*.pc' -or -iname '*.cmake' -or -iname '*.a' -or -iname '*.la' -or -iname '*.def' -or -iname '*.h' ')' \
cd $$($(2)_$(3)_LIBDIR) && find -type f -not '(' -iname '*.pc' -or -iname '*.cmake' -or -iname '*.a' -or -iname '*.la' -or -iname '*.def' -or -iname '*.h' ')' \
-printf '--strip-debug\0%p\0$$(DST_LIBDIR)/%p\0' | \
xargs $(--verbose?) -0 -r -P$$(J) -n3 objcopy $(OBJCOPY_FLAGS) --set-section-flags .text=contents,alloc,load,readonly,code
touch $$@
endif
$(1)-dist$(3): $$(OBJ)/.$(1)-dist$(3)
.INTERMEDIATE: $(1)-dist$(3)
$(1)-$(3)-dist: $$(OBJ)/.$(1)-$(3)-dist
.INTERMEDIATE: $(1)-$(3)-dist
all-dist$(3) $(1)-dist: $(1)-dist$(3)
.PHONY: all-dist$(3) $(1)-dist
all-$(3)-dist $(1)-dist: $(1)-$(3)-dist
.PHONY: all-$(3)-dist $(1)-dist
all-dist: $(1)-dist
.PHONY: all-dist
$(1)$(3): $(1)-configure$(3) $(1)-build$(3) $(1)-dist$(3)
.INTERMEDIATE: $(1)$(3)
$(1)-$(3): $(1)-$(3)-configure $(1)-$(3)-build $(1)-$(3)-dist
.INTERMEDIATE: $(1)-$(3)
all$(3) $(1): $(1)$(3)
.PHONY: all$(3) $(1)
all-$(3) $(1): $(1)-$(3)
.PHONY: all-$(3) $(1)
all: $(1)
.PHONY: all
$(2)_INCFLAGS$(3) = $$(foreach d,$$($(2)_DEPS$(3)),-I$$($$(d)_INCDIR$(3)))
$(2)_LIBFLAGS$(3) = $$(foreach d,$$($(2)_DEPS$(3)),-L$$($$(d)_LIBDIR$(3))/$$(LIBDIR_$(4)$(3))) \
$$(foreach d,$$($(2)_DEPS$(3)),-Wl,-rpath-link=$$($$(d)_LIBDIR$(3))/$$(LIBDIR_$(4)$(3))) \
$(2)_$(3)_INCFLAGS = $$(foreach d,$$($(2)_$(3)_DEPS),-I$$($$(d)_$(3)_INCDIR))
$(2)_$(3)_LIBFLAGS = $$(foreach d,$$($(2)_$(3)_DEPS),-L$$($$(d)_$(3)_LIBDIR)/$$($(4)$(3)_LIBDIR)) \
$$(foreach d,$$($(2)_$(3)_DEPS),-Wl,-rpath-link=$$($$(d)_$(3)_LIBDIR)/$$($(4)$(3)_LIBDIR)) \
# PKG_CONFIG is intentionally never using CROSS target, as it's missing
# wrapper scripts in the toolchain, we use PKG_CONFIG_LIBDIR directly
@ -105,27 +105,27 @@ $(2)_LIBFLAGS$(3) = $$(foreach d,$$($(2)_DEPS$(3)),-L$$($$(d)_LIBDIR$(3))/$$(LIB
# native version doesn't exist.
$(2)_ENV$(3) = \
CARGO_TARGET_$$(call toupper,$$(CARGO_TARGET_$(3)))_LINKER="$$(TARGET_$(4)$(3))-gcc" \
$(2)_$(3)_ENV = \
CARGO_TARGET_$$(call toupper,$$($(3)_CARGO_TARGET))_LINKER="$$($(4)$(3)_TARGET)-gcc" \
CCACHE_BASEDIR="$$(CCACHE_BASEDIR)" \
STRIP="$$(STRIP)" \
AR="$$(TARGET_$(4)$(3))-ar" \
RANLIB="$$(TARGET_$(4)$(3))-ranlib" \
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))),,:):$$$$PATH" \
LD_LIBRARY_PATH="$$(call list-join,:,$$(foreach d,$$($(2)_DEPS$(3)),$$($$(d)_LIBDIR$(3))/$$(LIBDIR_$(4)$(3))),,:)$$$$LD_LIBRARY_PATH" \
PKG_CONFIG_PATH="$$(call list-join,:,$$(foreach d,$$($(2)_DEPS$(3)),$$($$(d)_LIBDIR$(3))/$$(LIBDIR_$(4)$(3))/pkgconfig))" \
PKG_CONFIG_LIBDIR="/usr/lib/$$(LIBDIR_$(4)$(3))/pkgconfig:/usr/share/pkgconfig" \
CFLAGS="$$($(2)_INCFLAGS$(3)) $$($(2)_CFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS$(3))" \
CPPFLAGS="$$($(2)_INCFLAGS$(3)) $$($(2)_CPPFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS$(3))" \
CXXFLAGS="$$($(2)_INCFLAGS$(3)) $$($(2)_CXXFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS$(3)) -std=c++17" \
LDFLAGS="$$($(2)_LIBFLAGS$(3)) $$($(2)_LDFLAGS$(3)) $$($(2)_LDFLAGS) $$($(4)LDFLAGS)" \
SOURCE_DATE_EPOCH="$$($(2)_SOURCE_DATE_EPOCH$(3))" \
AR="$$($(4)$(3)_TARGET)-ar" \
RANLIB="$$($(4)$(3)_TARGET)-ranlib" \
CC="$$($(4)$(3)_TARGET)-gcc" \
CXX="$$($(4)$(3)_TARGET)-g++" \
LD="$$($(4)$(3)_TARGET)-ld" \
RC="$$(CROSS$(3)_TARGET)-windres" \
WIDL="$$(CROSS$(3)_TARGET)-widl" \
PKG_CONFIG="$$($(3)_TARGET)-pkg-config" \
PATH="$$(call list-join,:,$$(foreach d,$$($(2)_$(3)_DEPS),$$($$(d)_$(3)_BINDIR)),,:):$$$$PATH" \
LD_LIBRARY_PATH="$$(call list-join,:,$$(foreach d,$$($(2)_$(3)_DEPS),$$($$(d)_$(3)_LIBDIR)/$$($(4)$(3)_LIBDIR)),,:)$$$$LD_LIBRARY_PATH" \
PKG_CONFIG_PATH="$$(call list-join,:,$$(foreach d,$$($(2)_$(3)_DEPS),$$($$(d)_$(3)_LIBDIR)/$$($(4)$(3)_LIBDIR)/pkgconfig))" \
PKG_CONFIG_LIBDIR="/usr/lib/$$($(4)$(3)_LIBDIR)/pkgconfig:/usr/share/pkgconfig" \
CFLAGS="$$($(2)_$(3)_INCFLAGS) $$($(2)_CFLAGS) $$(COMMON_FLAGS) $$($(3)_COMMON_FLAGS)" \
CPPFLAGS="$$($(2)_$(3)_INCFLAGS) $$($(2)_CPPFLAGS) $$(COMMON_FLAGS) $$($(3)_COMMON_FLAGS)" \
CXXFLAGS="$$($(2)_$(3)_INCFLAGS) $$($(2)_CXXFLAGS) $$(COMMON_FLAGS) $$($(3)_COMMON_FLAGS) -std=c++17" \
LDFLAGS="$$($(2)_$(3)_LIBFLAGS) $$($(2)_$(3)_LDFLAGS) $$($(2)_LDFLAGS) $$($(4)LDFLAGS)" \
SOURCE_DATE_EPOCH="$$($(2)_$(3)_SOURCE_DATE_EPOCH)" \
ifneq ($(4),CROSS)
@ -135,17 +135,17 @@ ifneq ($(4),CROSS)
# This is for instance used by Wine, but also Meson, as it requires the
# environment variable to ones for native.
$(2)_ENV$(3) += \
CROSSAR="$$(TARGET_CROSS$(3))-ar" \
CROSSRANLIB="$$(TARGET_CROSS$(3))-ranlib" \
CROSSCC="$$(TARGET_CROSS$(3))-gcc" \
CROSSCXX="$$(TARGET_CROSS$(3))-g++" \
CROSSLD="$$(TARGET_CROSS$(3))-ld" \
CROSSCFLAGS="$$($(2)_INCFLAGS$(3)) $$($(2)_CFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS$(3))" \
CROSSCPPFLAGS="$$($(2)_INCFLAGS$(3)) $$($(2)_CPPFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS$(3))" \
CROSSCXXFLAGS="$$($(2)_INCFLAGS$(3)) $$($(2)_CXXFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS$(3)) -std=c++17" \
CROSSLDFLAGS="$$($(2)_LIBFLAGS$(3)) $$($(2)_LDFLAGS$(3)) $$($(2)_LDFLAGS) $$(CROSSLDFLAGS)" \
CROSSPKG_CONFIG_LIBDIR="/usr/lib/$$(LIBDIR_CROSS$(3))/pkgconfig:/usr/share/pkgconfig" \
$(2)_$(3)_ENV += \
CROSSAR="$$(CROSS$(3)_TARGET)-ar" \
CROSSRANLIB="$$(CROSS$(3)_TARGET)-ranlib" \
CROSSCC="$$(CROSS$(3)_TARGET)-gcc" \
CROSSCXX="$$(CROSS$(3)_TARGET)-g++" \
CROSSLD="$$(CROSS$(3)_TARGET)-ld" \
CROSSCFLAGS="$$($(2)_$(3)_INCFLAGS) $$($(2)_CFLAGS) $$(COMMON_FLAGS) $$($(3)_COMMON_FLAGS)" \
CROSSCPPFLAGS="$$($(2)_$(3)_INCFLAGS) $$($(2)_CPPFLAGS) $$(COMMON_FLAGS) $$($(3)_COMMON_FLAGS)" \
CROSSCXXFLAGS="$$($(2)_$(3)_INCFLAGS) $$($(2)_CXXFLAGS) $$(COMMON_FLAGS) $$($(3)_COMMON_FLAGS) -std=c++17" \
CROSSLDFLAGS="$$($(2)_$(3)_LIBFLAGS) $$($(2)_$(3)_LDFLAGS) $$($(2)_LDFLAGS) $$(CROSSLDFLAGS)" \
CROSSPKG_CONFIG_LIBDIR="/usr/lib/$$(CROSS$(3)_LIBDIR)/pkgconfig:/usr/share/pkgconfig" \
endif
@ -158,24 +158,24 @@ else
install-strip = objcopy $(OBJCOPY_FLAGS) --strip-debug $(1) $(2)/$(notdir $(1)) && rm -f $(2)/$(notdir $(1)).debug
endif
TARGET_32 := i686-linux-gnu
TARGET_64 := x86_64-linux-gnu
TARGET_CROSS32 := i686-w64-mingw32
TARGET_CROSS64 := x86_64-w64-mingw32
32_TARGET := i686-linux-gnu
64_TARGET := x86_64-linux-gnu
CROSS32_TARGET := i686-w64-mingw32
CROSS64_TARGET := x86_64-w64-mingw32
LIBDIR_32 := i386-linux-gnu
LIBDIR_64 := x86_64-linux-gnu
LIBDIR_CROSS32 := i386-w64-mingw32
LIBDIR_CROSS64 := x86_64-w64-mingw32
32_LIBDIR := i386-linux-gnu
64_LIBDIR := x86_64-linux-gnu
CROSS32_LIBDIR := i386-w64-mingw32
CROSS64_LIBDIR := x86_64-w64-mingw32
LIBDIR_WINE_32 := wine/i386-unix
LIBDIR_WINE_64 := wine/x86_64-unix
LIBDIR_WINE_CROSS32 := wine/i386-windows
LIBDIR_WINE_CROSS64 := wine/x86_64-windows
32_WINEDIR := wine/i386-unix
64_WINEDIR := wine/x86_64-unix
CROSS32_WINEDIR := wine/i386-windows
CROSS64_WINEDIR := wine/x86_64-windows
$(OBJ)/.%-post-build32:
$(OBJ)/.%-32-post-build:
touch $@
$(OBJ)/.%-post-build64:
$(OBJ)/.%-64-post-build:
touch $@
rules-common = $(call create-rules-common,$(1),$(call toupper,$(1)),$(2),$(3))

View File

@ -7,31 +7,31 @@
define create-rules-configure
$(call create-rules-common,$(1),$(2),$(3),$(4))
$$(OBJ)/.$(1)-configure$(3):
@echo ":: configuring $(3)bit $(1)..." >&2
$$(OBJ)/.$(1)-$(3)-configure:
@echo ":: configuring $(1)-$(3)..." >&2
cd "$$($(2)_OBJ$(3))" && env $$($(2)_ENV$(3)) \
cd "$$($(2)_$(3)_OBJ)" && env $$($(2)_$(3)_ENV) \
$$($(2)_SRC)/configure $(--quiet?) \
--cross-prefix=$$(TARGET_$(3))- \
--cross-prefix=$$($(3)_TARGET)- \
--target-os=linux \
--prefix="$$($(2)_DST$(3))" \
--libdir="$$($(2)_LIBDIR$(3))/$$(LIBDIR_$(4)$(3))" \
$$(CONFIGURE_ARGS_$(3)) \
--prefix="$$($(2)_$(3)_DST)" \
--libdir="$$($(2)_$(3)_LIBDIR)/$$($(4)$(3)_LIBDIR)" \
$$($(3)_CONFIGURE_ARGS) \
$$($(2)_CONFIGURE_ARGS) \
$$($(2)_CONFIGURE_ARGS$(3)) \
$$($(2)_$(3)_CONFIGURE_ARGS)
touch $$@
$$(OBJ)/.$(1)-build$(3):
@echo ":: building $(3)bit $(1)..." >&2
+cd "$$($(2)_OBJ$(3))" && env $$($(2)_ENV$(3)) \
$$(OBJ)/.$(1)-$(3)-build:
@echo ":: building $(1)-$(3)..." >&2
+cd "$$($(2)_$(3)_OBJ)" && env $$($(2)_$(3)_ENV) \
$$(BEAR) $$(MAKE)
cd "$$($(2)_OBJ$(3))" && env $$($(2)_ENV$(3)) \
cd "$$($(2)_$(3)_OBJ)" && env $$($(2)_$(3)_ENV) \
$$(MAKE) install
touch $$@
endef
CONFIGURE_ARGS_32 := --arch=x86
CONFIGURE_ARGS_64 := --arch=x86_64
32_CONFIGURE_ARGS := --arch=x86
64_CONFIGURE_ARGS := --arch=x86_64
rules-configure = $(call create-rules-configure,$(1),$(call toupper,$(1)),$(2),$(3))

View File

@ -6,47 +6,47 @@
define create-rules-makedep
$(call create-rules-common,$(1),$(2),$(3)) # cannot pass $(4)/CROSS here because of link flags for remaining .dll.so modules
$$(OBJ)/.$(1)-configure$(3):
@echo ":: configuring $(3)bit $(1)..." >&2
$$(OBJ)/.$(1)-$(3)-configure:
@echo ":: configuring $(1)-$(3)..." >&2
sed -e '/^all:$$$$/,$$$$c all:' \
-e '/^SUBDIRS/,/[^\\]$$$$/c SUBDIRS = $$($(2)_SRC)' \
\
-e '/^srcdir/a objdir = $$(WINE_OBJ$(3))' \
-e '/^prefix/c prefix = $$($(2)_DST$(3))' \
-e '/^libdir/c libdir = $$($(2)_LIBDIR$(3))' \
-e '/^toolsdir/c toolsdir = $$(WINE_OBJ$(3))' \
-e '/^srcdir/a objdir = $$(WINE_$(3)_OBJ)' \
-e '/^prefix/c prefix = $$($(2)_$(3)_DST)' \
-e '/^libdir/c libdir = $$($(2)_$(3)_LIBDIR)' \
-e '/^toolsdir/c toolsdir = $$(WINE_$(3)_OBJ)' \
\
-e '/^CFLAGS/c CFLAGS = $$($(2)_INCFLAGS$(3)) $$($(2)_CFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS$(3))' \
-e '/^CPPFLAGS/c CPPFLAGS = $$($(2)_INCFLAGS$(3)) $$($(2)_CPPFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS$(3))' \
-e '/^CXXFLAGS/c CXXFLAGS = $$($(2)_INCFLAGS$(3)) $$($(2)_CXXFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS$(3)) -std=c++17' \
-e '/^LDFLAGS/c LDFLAGS = $$($(2)_LIBFLAGS$(3)) $$($(2)_LDFLAGS$(3)) $$($(2)_LDFLAGS)' \
-e '/^CFLAGS/c CFLAGS = $$($(2)_$(3)_INCFLAGS) $$($(2)_CFLAGS) $$(COMMON_FLAGS) $$($(3)_COMMON_FLAGS)' \
-e '/^CPPFLAGS/c CPPFLAGS = $$($(2)_$(3)_INCFLAGS) $$($(2)_CPPFLAGS) $$(COMMON_FLAGS) $$($(3)_COMMON_FLAGS)' \
-e '/^CXXFLAGS/c CXXFLAGS = $$($(2)_$(3)_INCFLAGS) $$($(2)_CXXFLAGS) $$(COMMON_FLAGS) $$($(3)_COMMON_FLAGS) -std=c++17' \
-e '/^LDFLAGS/c LDFLAGS = $$($(2)_$(3)_LIBFLAGS) $$($(2)_$(3)_LDFLAGS) $$($(2)_LDFLAGS)' \
\
-e '/^x86_64_CC/a x86_64_CXX = $$(TARGET_CROSS64)-g++' \
-e '/^x86_64_CFLAGS/c x86_64_CFLAGS = $$($(2)_INCFLAGS64) $$($(2)_CFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS64)' \
-e '/^x86_64_CPPFLAGS/c x86_64_CPPFLAGS = $$($(2)_INCFLAGS64) $$($(2)_CPPFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS64)' \
-e '/^x86_64_CXXFLAGS/c x86_64_CXXFLAGS = $$($(2)_INCFLAGS64) $$($(2)_CXXFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS64) -std=c++17' \
-e '/^x86_64_LDFLAGS/c x86_64_LDFLAGS = $$($(2)_LIBFLAGS64) $$($(2)_LDFLAGS64) $$(CROSSLDFLAGS)' \
-e '/^x86_64_CC/a x86_64_CXX = $$(CROSS64_TARGET)-g++' \
-e '/^x86_64_CFLAGS/c x86_64_CFLAGS = $$($(2)_64_INCFLAGS) $$($(2)_CFLAGS) $$(COMMON_FLAGS) $$(64_COMMON_FLAGS)' \
-e '/^x86_64_CPPFLAGS/c x86_64_CPPFLAGS = $$($(2)_64_INCFLAGS) $$($(2)_CPPFLAGS) $$(COMMON_FLAGS) $$(64_COMMON_FLAGS)' \
-e '/^x86_64_CXXFLAGS/c x86_64_CXXFLAGS = $$($(2)_64_INCFLAGS) $$($(2)_CXXFLAGS) $$(COMMON_FLAGS) $$(64_COMMON_FLAGS) -std=c++17' \
-e '/^x86_64_LDFLAGS/c x86_64_LDFLAGS = $$($(2)_64_LIBFLAGS) $$($(2)_64_LDFLAGS) $$(CROSSLDFLAGS)' \
\
-e '/^i386_CC/a i386_CXX = $$(TARGET_CROSS32)-g++' \
-e '/^i386_CFLAGS/c i386_CFLAGS = $$($(2)_INCFLAGS32) $$($(2)_CFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS32)' \
-e '/^i386_CPPFLAGS/c i386_CPPFLAGS = $$($(2)_INCFLAGS32) $$($(2)_CPPFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS32)' \
-e '/^i386_CXXFLAGS/c i386_CXXFLAGS = $$($(2)_INCFLAGS32) $$($(2)_CXXFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS32) -std=c++17' \
-e '/^i386_LDFLAGS/c i386_LDFLAGS = $$($(2)_LIBFLAGS32) $$($(2)_LDFLAGS32) $$(CROSSLDFLAGS)' \
-e '/^i386_CC/a i386_CXX = $$(CROSS32_TARGET)-g++' \
-e '/^i386_CFLAGS/c i386_CFLAGS = $$($(2)_32_INCFLAGS) $$($(2)_CFLAGS) $$(COMMON_FLAGS) $$(32_COMMON_FLAGS)' \
-e '/^i386_CPPFLAGS/c i386_CPPFLAGS = $$($(2)_32_INCFLAGS) $$($(2)_CPPFLAGS) $$(COMMON_FLAGS) $$(32_COMMON_FLAGS)' \
-e '/^i386_CXXFLAGS/c i386_CXXFLAGS = $$($(2)_32_INCFLAGS) $$($(2)_CXXFLAGS) $$(COMMON_FLAGS) $$(32_COMMON_FLAGS) -std=c++17' \
-e '/^i386_LDFLAGS/c i386_LDFLAGS = $$($(2)_32_LIBFLAGS) $$($(2)_32_LDFLAGS) $$(CROSSLDFLAGS)' \
\
-e 's@UNIXLDFLAGS =@UNIXLDFLAGS = -L$$(WINE_LIBDIR$(3))/$$(LIBDIR_WINE_$(3)) -l:ntdll.so@' \
$$(WINE_OBJ$(3))/Makefile > $$($(2)_OBJ$(3))/Makefile
-e 's@UNIXLDFLAGS =@UNIXLDFLAGS = -L$$(WINE_$(3)_LIBDIR)/$$($(3)_WINEDIR) -l:ntdll.so@' \
$$(WINE_$(3)_OBJ)/Makefile > $$($(2)_$(3)_OBJ)/Makefile
cd "$$($(2)_OBJ$(3))" && env $$($(2)_ENV$(3)) \
$$(WINE_OBJ$(3))/tools/makedep
cd "$$($(2)_$(3)_OBJ)" && env $$($(2)_$(3)_ENV) \
$$(WINE_$(3)_OBJ)/tools/makedep
touch $$@
$$(OBJ)/.$(1)-build$(3):
@echo ":: building $(3)bit $(1)..." >&2
+cd "$$($(2)_OBJ$(3))" && env $$($(2)_ENV$(3)) \
$$(OBJ)/.$(1)-$(3)-build:
@echo ":: building $(1)-$(3)..." >&2
+cd "$$($(2)_$(3)_OBJ)" && env $$($(2)_$(3)_ENV) \
$$(BEAR) $$(MAKE)
cd "$$($(2)_OBJ$(3))" && env $$($(2)_ENV$(3)) \
cd "$$($(2)_$(3)_OBJ)" && env $$($(2)_$(3)_ENV) \
$$(MAKE) install
touch $$@
endef

View File

@ -9,7 +9,7 @@ define create-rules-meson
# cross compilation below with the CROSS-prefixed variables.
$(call create-rules-common,$(1),$(2),$(3))
define $(2)_MESON_CROSS$(3)
define $(2)_$(3)_MESON_CROSS
cat <<EOF
[binaries]
ar = '$$$$CROSSAR'
@ -23,50 +23,50 @@ 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))]
c_args = [$$(call list-quote,$$($(2)_$(3)_INCFLAGS) $$($(2)_CPPFLAGS) $$(COMMON_FLAGS) $$($(3)_COMMON_FLAGS))]
cpp_args = [$$(call list-quote,$$($(2)_$(3)_INCFLAGS) $$($(2)_CPPFLAGS) $$(COMMON_FLAGS) $$($(3)_COMMON_FLAGS) -std=c++17)]
link_args = [$$(call list-quote,$$($(2)_$(3)_LIBFLAGS) $$($(2)_$(3)_LDFLAGS) $$($(2)_LDFLAGS) $$(CROSSLDFLAGS))]
pkg_config_libdir = '$$$$CROSSPKG_CONFIG_LIBDIR'
[host_machine]
system = 'windows'
cpu_family = '$$(MESON_CPU$(3))'
cpu = '$$(MESON_CPU$(3))'
cpu_family = '$$($(3)_MESON_CPU)'
cpu = '$$($(3)_MESON_CPU)'
endian = 'little'
EOF
endef
export $(2)_MESON_CROSS$(3)
export $(2)_$(3)_MESON_CROSS
$$($(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"
$$(OBJ)/.$(1)-$(3)-configure: $$($(2)_SRC)/meson.build
@echo ":: configuring $(1)-$(3)..." >&2
rm -rf "$$($(2)_$(3)_OBJ)/meson-private/coredata.dat"
echo "$$$$$(2)_MESON_CROSS$(3)" | env $$($(2)_ENV$(3)) sh >"$$($(2)_OBJ$(3))/cross-$(3).txt"
echo "$$$$$(2)_$(3)_MESON_CROSS" | env $$($(2)_$(3)_ENV) sh >"$$($(2)_$(3)_OBJ)/$(3)-cross.txt"
env $$($(2)_ENV$(3)) \
meson "$$($(2)_OBJ$(3))" "$$($(2)_SRC)" \
--prefix="$$($(2)_DST$(3))" \
--libdir="lib/$$(LIBDIR_$(4)$(3))" \
env $$($(2)_$(3)_ENV) \
meson "$$($(2)_$(3)_OBJ)" "$$($(2)_SRC)" \
--prefix="$$($(2)_$(3)_DST)" \
--libdir="lib/$$($(4)$(3)_LIBDIR)" \
--buildtype=plain \
$(if $(4),--cross-file="$$($(2)_OBJ$(3))/cross-$(3).txt",) \
$$(MESON_ARGS_$(3)) \
$(if $(4),--cross-file="$$($(2)_$(3)_OBJ)/$(3)-cross.txt",) \
$$($(3)_MESON_ARGS) \
$$($(2)_MESON_ARGS) \
$$($(2)_MESON_ARGS$(3)) \
$$($(2)_$(3)_MESON_ARGS) \
$$(MESON_STRIP_ARG)
touch $$@
$$(OBJ)/.$(1)-build$(3):
@echo ":: building $(3)bit $(1)..." >&2
+env $$($(2)_ENV$(3)) \
ninja -C "$$($(2)_OBJ$(3))" install
$$(OBJ)/.$(1)-$(3)-build:
@echo ":: building $(1)-$(3)..." >&2
+env $$($(2)_$(3)_ENV) \
ninja -C "$$($(2)_$(3)_OBJ)" install
touch $$@
endef
MESON_CPU32 = x86
MESON_CPU64 = x86_64
32_MESON_CPU = x86
64_MESON_CPU = x86_64
rules-meson = $(call create-rules-meson,$(1),$(call toupper,$(1)),$(2),$(3))

View File

@ -13,13 +13,13 @@ $$($(2)_SRC)/server/request_trace.h: | $$(OBJ)/.$(1)-post-source
$$($(2)_SRC)/server/request_trace.h: $$($(2)_ORIGIN)/server/request_trace.h
cp -a $$< $$@
$$(OBJ)/.$(1)-configure32: $$($(2)_SRC)/include/wine/server_protocol.h
$$(OBJ)/.$(1)-configure32: $$($(2)_SRC)/server/request_handlers.h
$$(OBJ)/.$(1)-configure32: $$($(2)_SRC)/server/request_trace.h
$$(OBJ)/.$(1)-32-configure: $$($(2)_SRC)/include/wine/server_protocol.h
$$(OBJ)/.$(1)-32-configure: $$($(2)_SRC)/server/request_handlers.h
$$(OBJ)/.$(1)-32-configure: $$($(2)_SRC)/server/request_trace.h
$$(OBJ)/.$(1)-configure64: $$($(2)_SRC)/include/wine/server_protocol.h
$$(OBJ)/.$(1)-configure64: $$($(2)_SRC)/server/request_handlers.h
$$(OBJ)/.$(1)-configure64: $$($(2)_SRC)/server/request_trace.h
$$(OBJ)/.$(1)-64-configure: $$($(2)_SRC)/include/wine/server_protocol.h
$$(OBJ)/.$(1)-64-configure: $$($(2)_SRC)/server/request_handlers.h
$$(OBJ)/.$(1)-64-configure: $$($(2)_SRC)/server/request_trace.h
$$(OBJ)/.$(1)-wine-requests: $$($(2)_SRC)/include/wine/server_protocol.h
$$(OBJ)/.$(1)-wine-requests: $$($(2)_SRC)/server/request_handlers.h
@ -31,8 +31,8 @@ $$(OBJ)/.$(1)-wine-requests: | $$(OBJ)/.$(1)-post-source
cd "$$($(2)_SRC)" && tools/make_requests
touch $$@
$$(OBJ)/.$(1)-build32: $$(OBJ)/.$(1)-wine-requests
$$(OBJ)/.$(1)-build64: $$(OBJ)/.$(1)-wine-requests
$$(OBJ)/.$(1)-32-build: $$(OBJ)/.$(1)-wine-requests
$$(OBJ)/.$(1)-64-build: $$(OBJ)/.$(1)-wine-requests
endef
rules-wine-requests = $(call create-rules-wine-requests,$(1),$(call toupper,$(1)))

View File

@ -6,39 +6,39 @@
#
define create-rules-winemaker
$(call create-rules-common,$(1),$(2),$(3))
$(2)_OBJ$(3) := $$($(2)_OBJ$(3))/$(4)
$(2)_$(3)_OBJ := $$($(2)_$(3)_OBJ)/$(4)
$$(OBJ)/.$(1)-configure$(3):
@echo ":: configuring $(3)bit $(1)..." >&2
rsync -arx "$$($(2)_SRC)/" "$$($(2)_OBJ$(3))/"
cd "$$($(2)_OBJ$(3))" && env $$($(2)_ENV$(3)) \
$$(OBJ)/.$(1)-$(3)-configure:
@echo ":: configuring $(1)-$(3)..." >&2
rsync -arx "$$($(2)_SRC)/" "$$($(2)_$(3)_OBJ)/"
cd "$$($(2)_$(3)_OBJ)" && env $$($(2)_$(3)_ENV) \
winemaker --nosource-fix --nolower-include --nodlls --nomsvcrt \
"-I$$(WINE_SRC)/include" \
"-I$$(WINE_SRC)/include/wine" \
"-I$$(WINE_DST$(3))/include/wine" \
"-I$$(WINE_$(3)_DST)/include/wine" \
$(patsubst %.dll,--dll,$(patsubst %.exe,--guiexe,$(4))) \
$$(WINEMAKER_ARGS_$(3)) \
$$($(3)_WINEMAKER_ARGS) \
$$($(2)_WINEMAKER_ARGS) \
$$($(2)_WINEMAKER_ARGS$(3)) \
$$($(2)_$(3)_WINEMAKER_ARGS) \
.
sed -re 's@_LDFLAGS=@_LDFLAGS= $$$$(LDFLAGS) @' -i "$$($(2)_OBJ$(3))/Makefile"
sed -re 's@_LDFLAGS=@_LDFLAGS= $$$$(LDFLAGS) @' -i "$$($(2)_$(3)_OBJ)/Makefile"
touch $$@
$$(OBJ)/.$(1)-build$(3):
@echo ":: building $(3)bit $(1)..." >&2
rsync -arx "$$($(2)_SRC)/" "$$($(2)_OBJ$(3))/"
env $$($(2)_ENV$(3)) \
$$(MAKE) -C "$$($(2)_OBJ$(3))" LIBRARIES="$$($(2)_LDFLAGS)"
cd "$$($(2)_OBJ$(3))" && touch "$(basename $(4)).spec" && env $$($(2)_ENV$(3)) \
$$(OBJ)/.$(1)-$(3)-build:
@echo ":: building $(1)-$(3)..." >&2
rsync -arx "$$($(2)_SRC)/" "$$($(2)_$(3)_OBJ)/"
env $$($(2)_$(3)_ENV) \
$$(MAKE) -C "$$($(2)_$(3)_OBJ)" LIBRARIES="$$($(2)_LDFLAGS)"
cd "$$($(2)_$(3)_OBJ)" && touch "$(basename $(4)).spec" && env $$($(2)_$(3)_ENV) \
winebuild --$(lastword $(subst ., ,$(4))) --fake-module -E "$(basename $(4)).spec" -o "$(4).fake"
mkdir -p $$($(2)_LIBDIR$(3))/$(LIBDIR_WINE_$(3))
cp -a $$($(2)_OBJ$(3))/$(4).so $$($(2)_LIBDIR$(3))/$(LIBDIR_WINE_$(3))/
mkdir -p $$($(2)_LIBDIR$(3))/$(LIBDIR_WINE_CROSS$(3))
cp -a $$($(2)_OBJ$(3))/$(4).fake $$($(2)_LIBDIR$(3))/$(LIBDIR_WINE_CROSS$(3))/$(4)
mkdir -p $$($(2)_$(3)_LIBDIR)/$($(3)_WINEDIR)
cp -a $$($(2)_$(3)_OBJ)/$(4).so $$($(2)_$(3)_LIBDIR)/$($(3)_WINEDIR)/
mkdir -p $$($(2)_$(3)_LIBDIR)/$(CROSS$(3)_WINEDIR)
cp -a $$($(2)_$(3)_OBJ)/$(4).fake $$($(2)_$(3)_LIBDIR)/$(CROSS$(3)_WINEDIR)/$(4)
touch $$@
endef
WINEMAKER_ARGS_32 := --wine32
WINEMAKER_ARGS_64 :=
32_WINEMAKER_ARGS := --wine32
64_WINEMAKER_ARGS :=
rules-winemaker = $(call create-rules-winemaker,$(1),$(call toupper,$(1)),$(2),$(3))