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

@ -153,15 +153,15 @@ module: | $(BUILD_ROOT)/$(module)/lib/wine/x86_64-windows
module: | $(BUILD_ROOT)/$(module)/lib/wine/x86_64-unix module: | $(BUILD_ROOT)/$(module)/lib/wine/x86_64-unix
module: configure module: configure
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) module=$(module) module && \ $(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) module=$(module) module && \
cp -f $(BUILD_DIR)/obj-wine32/dlls/$(module)/$(MODULE_PEFILE) $(BUILD_ROOT)/$(module)/lib/wine/i386-windows/ && \ cp -f $(BUILD_DIR)/obj-wine-32/dlls/$(module)/$(MODULE_PEFILE) $(BUILD_ROOT)/$(module)/lib/wine/i386-windows/ && \
cp -f $(BUILD_DIR)/obj-wine64/dlls/$(module)/$(MODULE_PEFILE) $(BUILD_ROOT)/$(module)/lib/wine/x86_64-windows/ && \ cp -f $(BUILD_DIR)/obj-wine-64/dlls/$(module)/$(MODULE_PEFILE) $(BUILD_ROOT)/$(module)/lib/wine/x86_64-windows/ && \
if [ -e $(BUILD_DIR)/obj-wine32/dlls/$(module)/$(MODULE_PEFILE).so ]; then \ if [ -e $(BUILD_DIR)/obj-wine-32/dlls/$(module)/$(MODULE_PEFILE).so ]; then \
cp -f $(BUILD_DIR)/obj-wine32/dlls/$(module)/$(MODULE_PEFILE).so $(BUILD_ROOT)/$(module)/lib/wine/i386-unix/ && \ cp -f $(BUILD_DIR)/obj-wine-32/dlls/$(module)/$(MODULE_PEFILE).so $(BUILD_ROOT)/$(module)/lib/wine/i386-unix/ && \
cp -f $(BUILD_DIR)/obj-wine64/dlls/$(module)/$(MODULE_PEFILE).so $(BUILD_ROOT)/$(module)/lib/wine/x86_64-unix/; \ cp -f $(BUILD_DIR)/obj-wine-64/dlls/$(module)/$(MODULE_PEFILE).so $(BUILD_ROOT)/$(module)/lib/wine/x86_64-unix/; \
fi fi
if [ -e $(BUILD_DIR)/obj-wine32/dlls/$(module)/$(MODULE_SOFILE) ]; then \ if [ -e $(BUILD_DIR)/obj-wine-32/dlls/$(module)/$(MODULE_SOFILE) ]; then \
cp -f $(BUILD_DIR)/obj-wine32/dlls/$(module)/$(MODULE_SOFILE) $(BUILD_ROOT)/$(module)/lib/wine/i386-unix/ && \ cp -f $(BUILD_DIR)/obj-wine-32/dlls/$(module)/$(MODULE_SOFILE) $(BUILD_ROOT)/$(module)/lib/wine/i386-unix/ && \
cp -f $(BUILD_DIR)/obj-wine64/dlls/$(module)/$(MODULE_SOFILE) $(BUILD_ROOT)/$(module)/lib/wine/x86_64-unix/; \ cp -f $(BUILD_DIR)/obj-wine-64/dlls/$(module)/$(MODULE_SOFILE) $(BUILD_ROOT)/$(module)/lib/wine/x86_64-unix/; \
fi fi
any $(CONTAINERGOALS): configure any $(CONTAINERGOALS): configure

View File

@ -57,8 +57,8 @@ OPTIMIZE_FLAGS := -O2 -march=nocona -mtune=core-avx2 -mfpmath=sse
SANITY_FLAGS := -fwrapv -fno-strict-aliasing SANITY_FLAGS := -fwrapv -fno-strict-aliasing
DEBUG_FLAGS := -ggdb -ffunction-sections -fdata-sections -fno-omit-frame-pointer DEBUG_FLAGS := -ggdb -ffunction-sections -fdata-sections -fno-omit-frame-pointer
COMMON_FLAGS = $(DEBUG_FLAGS) $(OPTIMIZE_FLAGS) $(SANITY_FLAGS) -ffile-prefix-map=$(CCACHE_BASEDIR)=. COMMON_FLAGS = $(DEBUG_FLAGS) $(OPTIMIZE_FLAGS) $(SANITY_FLAGS) -ffile-prefix-map=$(CCACHE_BASEDIR)=.
COMMON_FLAGS32 := -mstackrealign 32_COMMON_FLAGS := -mstackrealign
COMMON_FLAGS64 := -mcmodel=small 64_COMMON_FLAGS := -mcmodel=small
ifneq ($(SUPPRESS_WARNINGS),) ifneq ($(SUPPRESS_WARNINGS),)
COMMON_FLAGS += -w COMMON_FLAGS += -w
@ -74,8 +74,8 @@ $(DST_DIR):
mkdir -p $@ mkdir -p $@
ifeq ($(CONTAINER),1) # inside the container ifeq ($(CONTAINER),1) # inside the container
BASE_SOURCE_DATE_EPOCH32 := $(BASE_SOURCE_DATE_EPOCH) 32_SOURCE_DATE_EPOCH := $(BASE_SOURCE_DATE_EPOCH)
BASE_SOURCE_DATE_EPOCH64 := $(shell expr $(BASE_SOURCE_DATE_EPOCH) - 10) 64_SOURCE_DATE_EPOCH := $(shell expr $(BASE_SOURCE_DATE_EPOCH) - 10)
# all, all-dist and dist are basically synonyms # all, all-dist and dist are basically synonyms
.PHONY: all all-dist dist .PHONY: all all-dist dist
@ -245,9 +245,9 @@ $(eval $(call rules-configure,ffmpeg,32))
$(eval $(call rules-configure,ffmpeg,64)) $(eval $(call rules-configure,ffmpeg,64))
## Only use ffmpeg to build gst-libav; we don't ship it. ## Only use ffmpeg to build gst-libav; we don't ship it.
$(OBJ)/.ffmpeg-dist32: $(OBJ)/.ffmpeg-32-dist:
touch $@ touch $@
$(OBJ)/.ffmpeg-dist64: $(OBJ)/.ffmpeg-64-dist:
touch $@ touch $@
## ##
@ -274,14 +274,14 @@ $(eval $(call rules-source,gst_plugins_rs,$(SRCDIR)/gst-plugins-rs))
$(eval $(call rules-cargo,gst_plugins_rs,32)) $(eval $(call rules-cargo,gst_plugins_rs,32))
$(eval $(call rules-cargo,gst_plugins_rs,64)) $(eval $(call rules-cargo,gst_plugins_rs,64))
$(OBJ)/.gst_plugins_rs-post-build64: $(OBJ)/.gst_plugins_rs-64-post-build:
mkdir -p $(GST_PLUGINS_RS_DST64)/lib/x86_64-linux-gnu/gstreamer-1.0/ mkdir -p $(GST_PLUGINS_RS_64_DST)/lib/x86_64-linux-gnu/gstreamer-1.0/
cp -a $(GST_PLUGINS_RS_OBJ64)/x86_64-unknown-linux-gnu/release/libgstdav1d.so $(GST_PLUGINS_RS_DST64)/lib/x86_64-linux-gnu/gstreamer-1.0/ cp -a $(GST_PLUGINS_RS_64_OBJ)/x86_64-unknown-linux-gnu/release/libgstdav1d.so $(GST_PLUGINS_RS_64_DST)/lib/x86_64-linux-gnu/gstreamer-1.0/
touch $@ touch $@
$(OBJ)/.gst_plugins_rs-post-build32: $(OBJ)/.gst_plugins_rs-32-post-build:
mkdir -p $(GST_PLUGINS_RS_DST32)/lib/i386-linux-gnu/gstreamer-1.0/ mkdir -p $(GST_PLUGINS_RS_32_DST)/lib/i386-linux-gnu/gstreamer-1.0/
cp -a $(GST_PLUGINS_RS_OBJ32)/i686-unknown-linux-gnu/release/libgstdav1d.so $(GST_PLUGINS_RS_DST32)/lib/i386-linux-gnu/gstreamer-1.0/ cp -a $(GST_PLUGINS_RS_32_OBJ)/i686-unknown-linux-gnu/release/libgstdav1d.so $(GST_PLUGINS_RS_32_DST)/lib/i386-linux-gnu/gstreamer-1.0/
touch $@ touch $@
@ -347,13 +347,13 @@ WINEOPENXR_DEPENDS = wine openxr
$(eval $(call rules-source,wineopenxr,$(SRCDIR)/wineopenxr)) $(eval $(call rules-source,wineopenxr,$(SRCDIR)/wineopenxr))
$(eval $(call rules-makedep,wineopenxr,64,CROSS)) $(eval $(call rules-makedep,wineopenxr,64,CROSS))
DIST_WINEOPENXR_JSON64 := $(DIST_PREFIX)/drive_c/openxr/wineopenxr64.json DIST_WINEOPENXR64_JSON := $(DIST_PREFIX)/drive_c/openxr/wineopenxr64.json
$(WINEOPENXR_SRC)/wineopenxr64.json: wineopenxr $(WINEOPENXR_SRC)/wineopenxr64.json: wineopenxr
$(DIST_WINEOPENXR_JSON64): $(WINEOPENXR_SRC)/wineopenxr64.json default_pfx $(DIST_WINEOPENXR64_JSON): $(WINEOPENXR_SRC)/wineopenxr64.json default_pfx
mkdir -p $(dir $@) mkdir -p $(dir $@)
cp -a $< $@ cp -a $< $@
all-dist: $(DIST_WINEOPENXR_JSON64) all-dist: $(DIST_WINEOPENXR64_JSON)
## ##
@ -392,11 +392,11 @@ $(OBJ)/.steamexe-post-build64:
$(eval $(call rules-source,piper,$(SRCDIR)/piper)) $(eval $(call rules-source,piper,$(SRCDIR)/piper))
$(eval $(call rules-cmake,piper,64)) $(eval $(call rules-cmake,piper,64))
$(OBJ)/.piper-post-build64: $(OBJ)/.piper-64-post-build:
mkdir -p $(PIPER_DST64)/lib/$(TARGET_64) mkdir -p $(PIPER_64_DST)/lib/$(64_TARGET)
mv $(PIPER_DST64)/*.so* $(PIPER_DST64)/lib/$(TARGET_64) mv $(PIPER_64_DST)/*.so* $(PIPER_64_DST)/lib/$(64_TARGET)
mkdir -p $(DST_DIR)/share mkdir -p $(DST_DIR)/share
cp -a $(PIPER_DST64)/{espeak-ng-data,libtashkeel_model.ort} $(DST_DIR)/share/ cp -a $(PIPER_64_DST)/{espeak-ng-data,libtashkeel_model.ort} $(DST_DIR)/share/
touch $@ touch $@
## ##
@ -427,19 +427,19 @@ WINE_AUTOCONF_ARGS = \
--with-mingw \ --with-mingw \
--disable-tests --disable-tests
WINE_AUTOCONF_ARGS32 = \ WINE_32_AUTOCONF_ARGS = \
VKD3D_PE_CFLAGS="-I$(VULKAN_HEADERS_DST32)/include -I$(VKD3D_DST32)/include/vkd3d" \ VKD3D_PE_CFLAGS="-I$(VULKAN_HEADERS_32_DST)/include -I$(VKD3D_32_DST)/include/vkd3d" \
VKD3D_PE_LIBS="-L$(VKD3D_LIBDIR32)/vkd3d/i386-windows -l:libvkd3d-1.dll -l:libvkd3d-shader-1.dll" VKD3D_PE_LIBS="-L$(VKD3D_32_LIBDIR)/vkd3d/i386-windows -l:libvkd3d-1.dll -l:libvkd3d-shader-1.dll"
WINE_AUTOCONF_ARGS64 = --enable-win64 \ WINE_64_AUTOCONF_ARGS = --enable-win64 \
VKD3D_PE_CFLAGS="-I$(VULKAN_HEADERS_DST64)/include -I$(VKD3D_DST64)/include/vkd3d" \ VKD3D_PE_CFLAGS="-I$(VULKAN_HEADERS_64_DST)/include -I$(VKD3D_64_DST)/include/vkd3d" \
VKD3D_PE_LIBS="-L$(VKD3D_LIBDIR64)/vkd3d/x86_64-windows -l:libvkd3d-1.dll -l:libvkd3d-shader-1.dll" VKD3D_PE_LIBS="-L$(VKD3D_64_LIBDIR)/vkd3d/x86_64-windows -l:libvkd3d-1.dll -l:libvkd3d-shader-1.dll"
WINE_DEPENDS = gst_orc gstreamer gst_base vkd3d ffmpeg WINE_DEPENDS = gst_orc gstreamer gst_base vkd3d ffmpeg
WINE_DEPENDS64 = piper WINE_64_DEPENDS = piper
WINE_LIBDIR32 = $(WINE_DST32)/lib WINE_32_LIBDIR = $(WINE_32_DST)/lib
WINE_LIBDIR64 = $(WINE_DST64)/lib WINE_64_LIBDIR = $(WINE_64_DST)/lib
$(eval $(call rules-source,wine,$(SRCDIR)/wine)) $(eval $(call rules-source,wine,$(SRCDIR)/wine))
$(eval $(call rules-autoconf,wine,32)) $(eval $(call rules-autoconf,wine,32))
@ -451,19 +451,19 @@ $(OBJ)/.wine-post-source:
-cd $(WINE_SRC) && tools/make_specfiles -cd $(WINE_SRC) && tools/make_specfiles
touch $@ touch $@
$(OBJ)/.wine-post-build64: $(OBJ)/.wine-64-post-build:
mkdir -p $(DST_DIR)/{bin,share} mkdir -p $(DST_DIR)/{bin,share}
$(call install-strip,$(WINE_DST64)/bin/wine64,$(DST_DIR)/bin) $(call install-strip,$(WINE_64_DST)/bin/wine64,$(DST_DIR)/bin)
$(call install-strip,$(WINE_DST64)/bin/wine64-preloader,$(DST_DIR)/bin) $(call install-strip,$(WINE_64_DST)/bin/wine64-preloader,$(DST_DIR)/bin)
$(call install-strip,$(WINE_DST64)/bin/wineserver,$(DST_DIR)/bin) $(call install-strip,$(WINE_64_DST)/bin/wineserver,$(DST_DIR)/bin)
cp -a $(WINE_DST64)/share/wine $(DST_DIR)/share cp -a $(WINE_64_DST)/share/wine $(DST_DIR)/share
cp -a $(WINE_DST64)/bin/msidb $(DST_DIR)/bin cp -a $(WINE_64_DST)/bin/msidb $(DST_DIR)/bin
touch $@ touch $@
$(OBJ)/.wine-post-build32: $(OBJ)/.wine-32-post-build:
mkdir -p $(DST_DIR)/bin mkdir -p $(DST_DIR)/bin
$(call install-strip,$(WINE_DST32)/bin/wine,$(DST_DIR)/bin) $(call install-strip,$(WINE_32_DST)/bin/wine,$(DST_DIR)/bin)
$(call install-strip,$(WINE_DST32)/bin/wine-preloader,$(DST_DIR)/bin) $(call install-strip,$(WINE_32_DST)/bin/wine-preloader,$(DST_DIR)/bin)
touch $@ touch $@
@ -484,14 +484,14 @@ $(eval $(call rules-makedep,vrclient,64,CROSS))
## ##
# wine builds DLLs with the same names, we need to differentiate the timestamps # wine builds DLLs with the same names, we need to differentiate the timestamps
DXVK_SOURCE_DATE_EPOCH32 := $(shell expr $(BASE_SOURCE_DATE_EPOCH32) - 1) DXVK_32_SOURCE_DATE_EPOCH := $(shell expr $(32_SOURCE_DATE_EPOCH) - 1)
DXVK_SOURCE_DATE_EPOCH64 := $(shell expr $(BASE_SOURCE_DATE_EPOCH64) - 1) DXVK_64_SOURCE_DATE_EPOCH := $(shell expr $(64_SOURCE_DATE_EPOCH) - 1)
DXVK_SOURCE_ARGS = \ DXVK_SOURCE_ARGS = \
--exclude version.h.in \ --exclude version.h.in \
DXVK_MESON_ARGS32 = --bindir=$(DXVK_DST32)/lib/wine/dxvk/i386-windows DXVK_32_MESON_ARGS = --bindir=$(DXVK_32_DST)/lib/wine/dxvk/i386-windows
DXVK_MESON_ARGS64 = --bindir=$(DXVK_DST64)/lib/wine/dxvk/x86_64-windows DXVK_64_MESON_ARGS = --bindir=$(DXVK_64_DST)/lib/wine/dxvk/x86_64-windows
DXVK_DEPENDS = glslang DXVK_DEPENDS = glslang
$(eval $(call rules-source,dxvk,$(SRCDIR)/dxvk)) $(eval $(call rules-source,dxvk,$(SRCDIR)/dxvk))
@ -511,8 +511,8 @@ $(OBJ)/.dxvk-post-source:
## dxvk-nvapi ## dxvk-nvapi
## ##
DXVK_NVAPI_MESON_ARGS32 = --bindir=$(DXVK_NVAPI_DST32)/lib/wine/nvapi/i386-windows DXVK_NVAPI_32_MESON_ARGS = --bindir=$(DXVK_NVAPI_32_DST)/lib/wine/nvapi/i386-windows
DXVK_NVAPI_MESON_ARGS64 = --bindir=$(DXVK_NVAPI_DST64)/lib/wine/nvapi/x86_64-windows DXVK_NVAPI_64_MESON_ARGS = --bindir=$(DXVK_NVAPI_64_DST)/lib/wine/nvapi/x86_64-windows
$(eval $(call rules-source,dxvk-nvapi,$(SRCDIR)/dxvk-nvapi)) $(eval $(call rules-source,dxvk-nvapi,$(SRCDIR)/dxvk-nvapi))
$(eval $(call rules-meson,dxvk-nvapi,32,CROSS)) $(eval $(call rules-meson,dxvk-nvapi,32,CROSS))
@ -556,23 +556,23 @@ VKD3D_CFLAGS = -fno-lto
VKD3D_LDFLAGS = -static-libgcc $(CROSSLDFLAGS) VKD3D_LDFLAGS = -static-libgcc $(CROSSLDFLAGS)
VKD3D_DEPENDS = vulkan-headers spirv-headers VKD3D_DEPENDS = vulkan-headers spirv-headers
VKD3D_LIBDIR32 = $(VKD3D_DST32)/lib VKD3D_32_LIBDIR = $(VKD3D_32_DST)/lib
VKD3D_LIBDIR64 = $(VKD3D_DST64)/lib VKD3D_64_LIBDIR = $(VKD3D_64_DST)/lib
$(eval $(call rules-source,vkd3d,$(SRCDIR)/vkd3d)) $(eval $(call rules-source,vkd3d,$(SRCDIR)/vkd3d))
$(eval $(call rules-autoconf,vkd3d,32,CROSS)) $(eval $(call rules-autoconf,vkd3d,32,CROSS))
$(eval $(call rules-autoconf,vkd3d,64,CROSS)) $(eval $(call rules-autoconf,vkd3d,64,CROSS))
$(OBJ)/.vkd3d-post-build64: $(OBJ)/.vkd3d-64-post-build:
mkdir -p $(VKD3D_LIBDIR64)/vkd3d/x86_64-windows mkdir -p $(VKD3D_64_LIBDIR)/vkd3d/x86_64-windows
mv $(VKD3D_DST64)/bin/libvkd3d-1.dll $(VKD3D_LIBDIR64)/vkd3d/x86_64-windows mv $(VKD3D_64_DST)/bin/libvkd3d-1.dll $(VKD3D_64_LIBDIR)/vkd3d/x86_64-windows
mv $(VKD3D_DST64)/bin/libvkd3d-shader-1.dll $(VKD3D_LIBDIR64)/vkd3d/x86_64-windows mv $(VKD3D_64_DST)/bin/libvkd3d-shader-1.dll $(VKD3D_64_LIBDIR)/vkd3d/x86_64-windows
touch $@ touch $@
$(OBJ)/.vkd3d-post-build32: $(OBJ)/.vkd3d-32-post-build:
mkdir -p $(VKD3D_LIBDIR32)/vkd3d/i386-windows mkdir -p $(VKD3D_32_LIBDIR)/vkd3d/i386-windows
mv $(VKD3D_DST32)/bin/libvkd3d-1.dll $(VKD3D_LIBDIR32)/vkd3d/i386-windows mv $(VKD3D_32_DST)/bin/libvkd3d-1.dll $(VKD3D_32_LIBDIR)/vkd3d/i386-windows
mv $(VKD3D_DST32)/bin/libvkd3d-shader-1.dll $(VKD3D_LIBDIR32)/vkd3d/i386-windows mv $(VKD3D_32_DST)/bin/libvkd3d-shader-1.dll $(VKD3D_32_LIBDIR)/vkd3d/i386-windows
touch $@ touch $@
## ##
@ -580,15 +580,15 @@ $(OBJ)/.vkd3d-post-build32:
## ##
# wine builds DLLs with the same names, we need to differentiate the timestamps # wine builds DLLs with the same names, we need to differentiate the timestamps
VKD3D_PROTON_SOURCE_DATE_EPOCH32 := $(shell expr $(BASE_SOURCE_DATE_EPOCH32) - 2) VKD3D_PROTON_32_SOURCE_DATE_EPOCH := $(shell expr $(32_SOURCE_DATE_EPOCH) - 2)
VKD3D_PROTON_SOURCE_DATE_EPOCH64 := $(shell expr $(BASE_SOURCE_DATE_EPOCH64) - 2) VKD3D_PROTON_64_SOURCE_DATE_EPOCH := $(shell expr $(64_SOURCE_DATE_EPOCH) - 2)
VKD3D_PROTON_SOURCE_ARGS = \ VKD3D_PROTON_SOURCE_ARGS = \
--exclude vkd3d_build.h.in \ --exclude vkd3d_build.h.in \
--exclude vkd3d_version.h.in \ --exclude vkd3d_version.h.in \
VKD3D_PROTON_MESON_ARGS32 = --bindir=$(VKD3D_PROTON_DST32)/lib/wine/vkd3d-proton/i386-windows VKD3D_PROTON_32_MESON_ARGS = --bindir=$(VKD3D_PROTON_32_DST)/lib/wine/vkd3d-proton/i386-windows
VKD3D_PROTON_MESON_ARGS64 = --bindir=$(VKD3D_PROTON_DST64)/lib/wine/vkd3d-proton/x86_64-windows VKD3D_PROTON_64_MESON_ARGS = --bindir=$(VKD3D_PROTON_64_DST)/lib/wine/vkd3d-proton/x86_64-windows
VKD3D_PROTON_DEPENDS = glslang VKD3D_PROTON_DEPENDS = glslang
ifneq ($(UNSTRIPPED_BUILD),) ifneq ($(UNSTRIPPED_BUILD),)
@ -625,20 +625,20 @@ $(eval $(call rules-winemaker,battleye,32,beclient.dll))
$(eval $(call rules-winemaker,battleye,64,beclient_x64.dll)) $(eval $(call rules-winemaker,battleye,64,beclient_x64.dll))
$(OBJ)/.battleye-post-source: $(OBJ)/.battleye-post-source:
mkdir -p $(BATTLEYE_OBJ32) && cp -a $(BATTLEYE_SRC)/beclient.spec $(BATTLEYE_OBJ32)/beclient.spec mkdir -p $(BATTLEYE_32_OBJ) && cp -a $(BATTLEYE_SRC)/beclient.spec $(BATTLEYE_32_OBJ)/beclient.spec
mkdir -p $(BATTLEYE_OBJ64) && cp -a $(BATTLEYE_SRC)/beclient.spec $(BATTLEYE_OBJ64)/beclient_x64.spec mkdir -p $(BATTLEYE_64_OBJ) && cp -a $(BATTLEYE_SRC)/beclient.spec $(BATTLEYE_64_OBJ)/beclient_x64.spec
touch $@ touch $@
$(OBJ)/.battleye-post-build64: $(OBJ)/.battleye-64-post-build:
mkdir -p $(OBJ)/dist-battleye/v1 mkdir -p $(OBJ)/dist-battleye/v1
cp -r $(BATTLEYE_DST64)/* $(OBJ)/dist-battleye/v1/ cp -r $(BATTLEYE_64_DST)/* $(OBJ)/dist-battleye/v1/
rm -rf $(BATTLEYE_DST64)/* rm -rf $(BATTLEYE_64_DST)/*
touch $@ touch $@
$(OBJ)/.battleye-post-build32: $(OBJ)/.battleye-32-post-build:
mkdir -p $(OBJ)/dist-battleye/v1 mkdir -p $(OBJ)/dist-battleye/v1
cp -r $(BATTLEYE_DST32)/* $(OBJ)/dist-battleye/v1/ cp -r $(BATTLEYE_32_DST)/* $(OBJ)/dist-battleye/v1/
rm -rf $(BATTLEYE_DST32)/* rm -rf $(BATTLEYE_32_DST)/*
touch $@ touch $@
endif endif
@ -656,26 +656,26 @@ $(eval $(call create-rules-common,eac,EAC,64))
$(eval $(call create-rules-common,eac,EAC,32)) $(eval $(call create-rules-common,eac,EAC,32))
$(OBJ)/.eac-build64: $(OBJ)/.eac-64-build:
@echo ":: building 64bit eac..." >&2 @echo ":: building 64bit eac..." >&2
rsync -arx "$(EAC_SRC)/" "$(EAC_OBJ64)/" rsync -arx "$(EAC_SRC)/" "$(EAC_64_OBJ)/"
env $(EAC_ENV64) \ env $(EAC_64_ENV) \
$(MAKE) -C "$(EAC_OBJ64)" WINE_OBJ="$(WINE_OBJ64)" HOST="x86_64-w64-mingw32" CROSSCXX="x86_64-w64-mingw32-g++" BIT="64" $(MAKE) -C "$(EAC_64_OBJ)" WINE_OBJ="$(WINE_64_OBJ)" HOST="x86_64-w64-mingw32" CROSSCXX="x86_64-w64-mingw32-g++" BIT="64"
mkdir -p $(OBJ)/dist-eac/v2/lib/x86_64-linux-gnu mkdir -p $(OBJ)/dist-eac/v2/lib/x86_64-linux-gnu
$(call install-strip,$(EAC_OBJ64)/easyanticheat.so,$(OBJ)/dist-eac/v2/lib/x86_64-linux-gnu) $(call install-strip,$(EAC_64_OBJ)/easyanticheat.so,$(OBJ)/dist-eac/v2/lib/x86_64-linux-gnu)
$(call install-strip,$(EAC_OBJ64)/easyanticheat.dll,$(OBJ)/dist-eac/v2/lib/x86_64-linux-gnu) $(call install-strip,$(EAC_64_OBJ)/easyanticheat.dll,$(OBJ)/dist-eac/v2/lib/x86_64-linux-gnu)
cp $(OBJ)/dist-eac/v2/lib/x86_64-linux-gnu/easyanticheat.so $(OBJ)/dist-eac/v2/lib/x86_64-linux-gnu/easyanticheat_x64.so cp $(OBJ)/dist-eac/v2/lib/x86_64-linux-gnu/easyanticheat.so $(OBJ)/dist-eac/v2/lib/x86_64-linux-gnu/easyanticheat_x64.so
cp $(OBJ)/dist-eac/v2/lib/x86_64-linux-gnu/easyanticheat.dll $(OBJ)/dist-eac/v2/lib/x86_64-linux-gnu/easyanticheat_x64.dll cp $(OBJ)/dist-eac/v2/lib/x86_64-linux-gnu/easyanticheat.dll $(OBJ)/dist-eac/v2/lib/x86_64-linux-gnu/easyanticheat_x64.dll
touch $@ touch $@
$(OBJ)/.eac-build32: $(OBJ)/.eac-32-build:
@echo ":: building 32bit eac..." >&2 @echo ":: building 32bit eac..." >&2
rsync -arx "$(EAC_SRC)/" "$(EAC_OBJ32)/" rsync -arx "$(EAC_SRC)/" "$(EAC_32_OBJ)/"
env $(EAC_ENV32) \ env $(EAC_32_ENV) \
$(MAKE) -C "$(EAC_OBJ32)" WINE_OBJ="$(WINE_OBJ32)" HOST="i686-w64-mingw32" CROSSCXX="i686-w64-mingw32-g++" BIT="32" $(MAKE) -C "$(EAC_32_OBJ)" WINE_OBJ="$(WINE_32_OBJ)" HOST="i686-w64-mingw32" CROSSCXX="i686-w64-mingw32-g++" BIT="32"
mkdir -p $(OBJ)/dist-eac/v2/lib32 mkdir -p $(OBJ)/dist-eac/v2/lib32
$(call install-strip,$(EAC_OBJ32)/easyanticheat.so,$(OBJ)/dist-eac/v2/lib32) $(call install-strip,$(EAC_32_OBJ)/easyanticheat.so,$(OBJ)/dist-eac/v2/lib32)
$(call install-strip,$(EAC_OBJ32)/easyanticheat.dll,$(OBJ)/dist-eac/v2/lib32) $(call install-strip,$(EAC_32_OBJ)/easyanticheat.dll,$(OBJ)/dist-eac/v2/lib32)
mv $(OBJ)/dist-eac/v2/lib32/easyanticheat.so $(OBJ)/dist-eac/v2/lib32/easyanticheat_x86.so mv $(OBJ)/dist-eac/v2/lib32/easyanticheat.so $(OBJ)/dist-eac/v2/lib32/easyanticheat_x86.so
mv $(OBJ)/dist-eac/v2/lib32/easyanticheat.dll $(OBJ)/dist-eac/v2/lib32/easyanticheat_x86.dll mv $(OBJ)/dist-eac/v2/lib32/easyanticheat.dll $(OBJ)/dist-eac/v2/lib32/easyanticheat_x86.dll
touch $@ touch $@
@ -691,16 +691,16 @@ SYMSTORE_DEPENDS = wine
$(eval $(call rules-source,symstore,$(SRCDIR)/symstore)) $(eval $(call rules-source,symstore,$(SRCDIR)/symstore))
$(eval $(call create-rules-common,symstore,SYMSTORE,64)) $(eval $(call create-rules-common,symstore,SYMSTORE,64))
$(OBJ)/.symstore-build64: $(OBJ)/.symstore-64-build:
@echo ":: building symstore helper..." >&2 @echo ":: building symstore helper..." >&2
rsync -arx "$(SYMSTORE_SRC)/" "$(SYMSTORE_OBJ64)/" rsync -arx "$(SYMSTORE_SRC)/" "$(SYMSTORE_64_OBJ)/"
$(MAKE) -C "$(SYMSTORE_OBJ64)" SYMSTORE_CFLAGS="-I$(WINE_SRC)/include -I$(WINE_OBJ64)/include" $(MAKE) -C "$(SYMSTORE_64_OBJ)" SYMSTORE_CFLAGS="-I$(WINE_SRC)/include -I$(WINE_64_OBJ)/include"
touch $@ touch $@
.PHONY: symstore-tarball .PHONY: symstore-tarball
symstore-tarball: symstore-tarball:
mkdir -p $(OBJ)/symstore/$(BUILD_NAME) mkdir -p $(OBJ)/symstore/$(BUILD_NAME)
$(SYMSTORE_OBJ64)/symstore --skip-managed $(DST_BASE) $(OBJ)/symstore/$(BUILD_NAME) $(SYMSTORE_64_OBJ)/symstore --skip-managed $(DST_BASE) $(OBJ)/symstore/$(BUILD_NAME)
cd $(OBJ)/symstore/$(BUILD_NAME) && zip -r ../$(BUILD_NAME)-symstore.zip . >& /dev/null cd $(OBJ)/symstore/$(BUILD_NAME) && zip -r ../$(BUILD_NAME)-symstore.zip . >& /dev/null
## ##
@ -929,35 +929,33 @@ all-dist: $(DIST_FONTS)
## ##
GECKO_VER := 2.47.4 GECKO_VER := 2.47.4
GECKO32_TARBALL := wine-gecko-$(GECKO_VER)-x86.tar.xz GECKO_32_TARBALL := wine-gecko-$(GECKO_VER)-x86.tar.xz
GECKO64_TARBALL := wine-gecko-$(GECKO_VER)-x86_64.tar.xz GECKO_64_TARBALL := wine-gecko-$(GECKO_VER)-x86_64.tar.xz
GECKO64_TARBALL_URL := https://dl.winehq.org/wine/wine-gecko/$(GECKO_VER)/$(GECKO64_TARBALL) GECKO_64_TARBALL_URL := https://dl.winehq.org/wine/wine-gecko/$(GECKO_VER)/$(GECKO_64_TARBALL)
GECKO32_TARBALL_URL := https://dl.winehq.org/wine/wine-gecko/$(GECKO_VER)/$(GECKO32_TARBALL) GECKO_32_TARBALL_URL := https://dl.winehq.org/wine/wine-gecko/$(GECKO_VER)/$(GECKO_32_TARBALL)
DIST_GECKO_DIR := $(DST_DIR)/share/wine/gecko GECKO_DST := $(DST_DIR)/share/wine/gecko
DIST_GECKO32 := $(OBJ)/.gecko-dist32
DIST_GECKO64 := $(OBJ)/.gecko-dist64
$(SRC)/contrib/$(GECKO64_TARBALL): $(SRC)/contrib/$(GECKO_64_TARBALL):
mkdir -p $(dir $@) mkdir -p $(dir $@)
wget --no-use-server-timestamps -O $@ $(GECKO64_TARBALL_URL) || (rm $@; false) wget --no-use-server-timestamps -O $@ $(GECKO_64_TARBALL_URL) || (rm $@; false)
$(SRC)/contrib/$(GECKO32_TARBALL): $(SRC)/contrib/$(GECKO_32_TARBALL):
mkdir -p $(dir $@) mkdir -p $(dir $@)
wget --no-use-server-timestamps -O $@ $(GECKO32_TARBALL_URL) || (rm $@; false) wget --no-use-server-timestamps -O $@ $(GECKO_32_TARBALL_URL) || (rm $@; false)
$(DIST_GECKO32): $(SRC)/contrib/$(GECKO32_TARBALL) $(OBJ)/.gecko-32-dist: $(SRC)/contrib/$(GECKO_32_TARBALL)
mkdir -p $(DIST_GECKO_DIR) mkdir -p $(GECKO_DST)
rm -rf $(DIST_GECKO_DIR)/wine-gecko-$(GECKO_VER)-x86 rm -rf $(GECKO_DST)/wine-gecko-$(GECKO_VER)-x86
tar --no-same-owner -xf $< -C $(DIST_GECKO_DIR) tar --no-same-owner -xf $< -C $(GECKO_DST)
touch $@ touch $@
$(DIST_GECKO64): $(SRC)/contrib/$(GECKO64_TARBALL) $(OBJ)/.gecko-64-dist: $(SRC)/contrib/$(GECKO_64_TARBALL)
mkdir -p $(DIST_GECKO_DIR) mkdir -p $(GECKO_DST)
rm -rf $(DIST_GECKO_DIR)/wine-gecko-$(GECKO_VER)-x86_64 rm -rf $(GECKO_DST)/wine-gecko-$(GECKO_VER)-x86_64
tar --no-same-owner -xf $< -C $(DIST_GECKO_DIR) tar --no-same-owner -xf $< -C $(GECKO_DST)
touch $@ touch $@
all-dist: $(DIST_GECKO32) $(DIST_GECKO64) all-dist: $(OBJ)/.gecko-32-dist $(OBJ)/.gecko-64-dist
## ##
@ -1011,43 +1009,41 @@ all-dist: $(DIST_XALIA)
## ##
ICU_VER := 6.8.2 ICU_VER := 6.8.2
DIST_ICU64_DIR := $(DST_LIBDIR)/wine/icu/x86_64-windows ICU_64_DIST_DIR := $(DST_LIBDIR)/wine/icu/x86_64-windows
DIST_ICU64 := $(OBJ)/.icu-dist64 ICU_64_TARBALL := icu-$(ICU_VER)-x86_64.tar.xz
ICU64_TARBALL := icu-$(ICU_VER)-x86_64.tar.xz ICU_32_DIST_DIR := $(DST_LIBDIR)/wine/icu/i386-windows
DIST_ICU32_DIR := $(DST_LIBDIR)/wine/icu/i386-windows ICU_32_TARBALL := icu-$(ICU_VER)-x86.tar.xz
DIST_ICU32 := $(OBJ)/.icu-dist32
ICU32_TARBALL := icu-$(ICU_VER)-x86.tar.xz
$(DIST_ICU64): $(SRC)/icu/$(ICU64_TARBALL) $(OBJ)/.icu-64-dist: $(SRC)/icu/$(ICU_64_TARBALL)
mkdir -p $(DIST_ICU64_DIR) mkdir -p $(ICU_64_DIST_DIR)
rm -rf $(DIST_ICU64_DIR)/*.dll rm -rf $(ICU_64_DIST_DIR)/*.dll
tar --no-same-owner -xf $< -C $(DIST_ICU64_DIR) tar --no-same-owner -xf $< -C $(ICU_64_DIST_DIR)
touch $@ touch $@
$(DIST_ICU32): $(SRC)/icu/$(ICU32_TARBALL) $(OBJ)/.icu-32-dist: $(SRC)/icu/$(ICU_32_TARBALL)
mkdir -p $(DIST_ICU32_DIR) mkdir -p $(ICU_32_DIST_DIR)
rm -rf $(DIST_ICU32_DIR)/*.dll rm -rf $(ICU_32_DIST_DIR)/*.dll
tar --no-same-owner -xf $< -C $(DIST_ICU32_DIR) tar --no-same-owner -xf $< -C $(ICU_32_DIST_DIR)
touch $@ touch $@
all-dist: $(DIST_ICU64) $(DIST_ICU32) all-dist: $(OBJ)/.icu-64-dist $(OBJ)/.icu-32-dist
## ##
## openvr ## openvr
## ##
DIST_OVR32 := $(DST_LIBDIR)/wine/dxvk/i386-windows/openvr_api_dxvk.dll OVR_32_DIST := $(DST_LIBDIR)/wine/dxvk/i386-windows/openvr_api_dxvk.dll
$(DIST_OVR32): $(SRCDIR)/openvr/bin/win32/openvr_api.dll | $(DST_DIR) $(OVR_32_DIST): $(SRCDIR)/openvr/bin/win32/openvr_api.dll | $(DST_DIR)
mkdir -p $(DST_LIBDIR)/wine/dxvk/i386-windows mkdir -p $(DST_LIBDIR)/wine/dxvk/i386-windows
cp -af $< $@ cp -af $< $@
DIST_OVR64 := $(DST_LIBDIR)/wine/dxvk/x86_64-windows/openvr_api_dxvk.dll OVR_64_DIST := $(DST_LIBDIR)/wine/dxvk/x86_64-windows/openvr_api_dxvk.dll
$(DIST_OVR64): $(SRCDIR)/openvr/bin/win64/openvr_api.dll | $(DST_DIR) $(OVR_64_DIST): $(SRCDIR)/openvr/bin/win64/openvr_api.dll | $(DST_DIR)
mkdir -p $(DST_LIBDIR)/wine/dxvk/x86_64-windows mkdir -p $(DST_LIBDIR)/wine/dxvk/x86_64-windows
cp -af $< $@ cp -af $< $@
all-dist: $(DIST_OVR32) $(DIST_OVR64) all-dist: $(OVR_32_DIST) $(OVR_64_DIST)
## ##
@ -1167,11 +1163,11 @@ redist: all
.PHONY: module32 module64 module .PHONY: module32 module64 module
module32: | all-source wine-configure32 module32: | all-source wine-32-configure
+$(BEAR) $(MAKE) -j$(J) $(filter -j%,$(MAKEFLAGS)) $(MFLAGS) $(MAKEOVERRIDES) -C $(WINE_OBJ32)/dlls/$(module) +$(BEAR) $(MAKE) -j$(J) $(filter -j%,$(MAKEFLAGS)) $(MFLAGS) $(MAKEOVERRIDES) -C $(WINE_32_OBJ)/dlls/$(module)
module64: | all-source wine-configure64 module64: | all-source wine-64-configure
+$(BEAR) $(MAKE) -j$(J) $(filter -j%,$(MAKEFLAGS)) $(MFLAGS) $(MAKEOVERRIDES) -C $(WINE_OBJ64)/dlls/$(module) +$(BEAR) $(MAKE) -j$(J) $(filter -j%,$(MAKEFLAGS)) $(MFLAGS) $(MAKEOVERRIDES) -C $(WINE_64_OBJ)/dlls/$(module)
module: | all-source wine-configure module: | all-source wine-configure
module: module32 module64 module: module32 module64

View File

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

View File

@ -6,27 +6,26 @@
define create-rules-cargo define create-rules-cargo
$(call create-rules-common,$(1),$(2),$(3)) $(call create-rules-common,$(1),$(2),$(3))
$$(OBJ)/.$(1)-configure$(3): $$(OBJ)/.$(1)-$(3)-configure:
@echo ":: configuring $(3)bit $(1)..." >&2 @echo ":: configuring $(1)-$(3)..." >&2
touch $$@ touch $$@
$$(OBJ)/.$(1)-build$(3): $$(OBJ)/.$(1)-$(3)-build:
@echo ":: building $(3)bit $(1)..." >&2 @echo ":: building $(1)-$(3)..." >&2
cd $$($(2)_SRC) && env $$($(2)_ENV$(3)) \ cd $$($(2)_SRC) && env $$($(2)_$(3)_ENV) \
cargo build $(--quiet?) --release \ cargo build $(--quiet?) --release \
$$(filter -j%,$$(MAKEFLAGS)) \ $$(filter -j%,$$(MAKEFLAGS)) \
--target-dir $$($(2)_OBJ$(3)) \ --target-dir $$($(2)_$(3)_OBJ) \
$$(CARGO_ARGS_$(3)) \ $$($(3)_CARGO_ARGS) \
$$($(2)_CARGO_ARGS) \ $$($(2)_CARGO_ARGS) \
$$($(2)_CARGO_ARGS$(3)) \ $$($(2)_$(3)_CARGO_ARGS)
touch $$@ touch $$@
endef endef
rules-cargo = $(call create-rules-cargo,$(1),$(call toupper,$(1)),$(2)) rules-cargo = $(call create-rules-cargo,$(1),$(call toupper,$(1)),$(2))
CARGO_TARGET_32 := i686-unknown-linux-gnu 32_CARGO_TARGET := i686-unknown-linux-gnu
CARGO_TARGET_64 := x86_64-unknown-linux-gnu 64_CARGO_TARGET := x86_64-unknown-linux-gnu
CARGO_ARGS_32 := --target $(CARGO_TARGET_32) 32_CARGO_ARGS := --target $(32_CARGO_TARGET)
CARGO_ARGS_64 := --target $(CARGO_TARGET_64) 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)) $(call create-rules-common,$(1),$(2),$(3),$(4))
$$($(2)_SRC)/CMakeLists.txt: | $$(OBJ)/.$(1)-post-source $$($(2)_SRC)/CMakeLists.txt: | $$(OBJ)/.$(1)-post-source
$$(OBJ)/.$(1)-configure$(3): $$($(2)_SRC)/CMakeLists.txt $$(OBJ)/.$(1)-$(3)-configure: $$($(2)_SRC)/CMakeLists.txt
@echo ":: configuring $(3)bit $(1)..." >&2 @echo ":: configuring $(1)-$(3)..." >&2
rm -rf "$$($(2)_OBJ$(3))/CMakeCache.txt" 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)" \ cmake "$$($(2)_SRC)" \
-DCMAKE_INSTALL_PREFIX="$$($(2)_DST$(3))" \ -DCMAKE_INSTALL_PREFIX="$$($(2)_$(3)_DST)" \
-DCMAKE_INSTALL_LIBDIR="lib/$$(LIBDIR_$(4)$(3))" \ -DCMAKE_INSTALL_LIBDIR="lib/$$($(4)$(3)_LIBDIR)" \
-DCMAKE_BUILD_TYPE=plain \ -DCMAKE_BUILD_TYPE=plain \
-DCMAKE_SYSTEM_NAME=$(if $(4),Windows,) \ -DCMAKE_SYSTEM_NAME=$(if $(4),Windows,) \
-DCMAKE_SHARED_LIBRARY_PREFIX_C=$(if $(4),,lib) \ -DCMAKE_SHARED_LIBRARY_PREFIX_C=$(if $(4),,lib) \
-DCMAKE_IMPORT_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) \
$$($(2)_CMAKE_ARGS$(3)) \ $$($(2)_$(3)_CMAKE_ARGS)
touch $$@ touch $$@
$$(OBJ)/.$(1)-build$(3): $$(OBJ)/.$(1)-$(3)-build:
@echo ":: building $(3)bit $(1)..." >&2 @echo ":: building $(1)-$(3)..." >&2
cd "$$($(2)_OBJ$(3))" && env $$($(2)_ENV$(3)) \ cd "$$($(2)_$(3)_OBJ)" && env $$($(2)_$(3)_ENV) \
$$(MAKE) $$(MAKE)
cd "$$($(2)_OBJ$(3))" && env $$($(2)_ENV$(3)) \ cd "$$($(2)_$(3)_OBJ)" && env $$($(2)_$(3)_ENV) \
$$(MAKE) install $$(MAKE) install
touch $$@ touch $$@
endef endef

View File

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

View File

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

View File

@ -6,47 +6,47 @@
define create-rules-makedep 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 $(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): $$(OBJ)/.$(1)-$(3)-configure:
@echo ":: configuring $(3)bit $(1)..." >&2 @echo ":: configuring $(1)-$(3)..." >&2
sed -e '/^all:$$$$/,$$$$c all:' \ sed -e '/^all:$$$$/,$$$$c all:' \
-e '/^SUBDIRS/,/[^\\]$$$$/c SUBDIRS = $$($(2)_SRC)' \ -e '/^SUBDIRS/,/[^\\]$$$$/c SUBDIRS = $$($(2)_SRC)' \
\ \
-e '/^srcdir/a objdir = $$(WINE_OBJ$(3))' \ -e '/^srcdir/a objdir = $$(WINE_$(3)_OBJ)' \
-e '/^prefix/c prefix = $$($(2)_DST$(3))' \ -e '/^prefix/c prefix = $$($(2)_$(3)_DST)' \
-e '/^libdir/c libdir = $$($(2)_LIBDIR$(3))' \ -e '/^libdir/c libdir = $$($(2)_$(3)_LIBDIR)' \
-e '/^toolsdir/c toolsdir = $$(WINE_OBJ$(3))' \ -e '/^toolsdir/c toolsdir = $$(WINE_$(3)_OBJ)' \
\ \
-e '/^CFLAGS/c CFLAGS = $$($(2)_INCFLAGS$(3)) $$($(2)_CFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS$(3))' \ -e '/^CFLAGS/c CFLAGS = $$($(2)_$(3)_INCFLAGS) $$($(2)_CFLAGS) $$(COMMON_FLAGS) $$($(3)_COMMON_FLAGS)' \
-e '/^CPPFLAGS/c CPPFLAGS = $$($(2)_INCFLAGS$(3)) $$($(2)_CPPFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS$(3))' \ -e '/^CPPFLAGS/c CPPFLAGS = $$($(2)_$(3)_INCFLAGS) $$($(2)_CPPFLAGS) $$(COMMON_FLAGS) $$($(3)_COMMON_FLAGS)' \
-e '/^CXXFLAGS/c CXXFLAGS = $$($(2)_INCFLAGS$(3)) $$($(2)_CXXFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS$(3)) -std=c++17' \ -e '/^CXXFLAGS/c CXXFLAGS = $$($(2)_$(3)_INCFLAGS) $$($(2)_CXXFLAGS) $$(COMMON_FLAGS) $$($(3)_COMMON_FLAGS) -std=c++17' \
-e '/^LDFLAGS/c LDFLAGS = $$($(2)_LIBFLAGS$(3)) $$($(2)_LDFLAGS$(3)) $$($(2)_LDFLAGS)' \ -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_CC/a x86_64_CXX = $$(CROSS64_TARGET)-g++' \
-e '/^x86_64_CFLAGS/c x86_64_CFLAGS = $$($(2)_INCFLAGS64) $$($(2)_CFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS64)' \ -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)_INCFLAGS64) $$($(2)_CPPFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS64)' \ -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)_INCFLAGS64) $$($(2)_CXXFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS64) -std=c++17' \ -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)_LIBFLAGS64) $$($(2)_LDFLAGS64) $$(CROSSLDFLAGS)' \ -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_CC/a i386_CXX = $$(CROSS32_TARGET)-g++' \
-e '/^i386_CFLAGS/c i386_CFLAGS = $$($(2)_INCFLAGS32) $$($(2)_CFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS32)' \ -e '/^i386_CFLAGS/c i386_CFLAGS = $$($(2)_32_INCFLAGS) $$($(2)_CFLAGS) $$(COMMON_FLAGS) $$(32_COMMON_FLAGS)' \
-e '/^i386_CPPFLAGS/c i386_CPPFLAGS = $$($(2)_INCFLAGS32) $$($(2)_CPPFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS32)' \ -e '/^i386_CPPFLAGS/c i386_CPPFLAGS = $$($(2)_32_INCFLAGS) $$($(2)_CPPFLAGS) $$(COMMON_FLAGS) $$(32_COMMON_FLAGS)' \
-e '/^i386_CXXFLAGS/c i386_CXXFLAGS = $$($(2)_INCFLAGS32) $$($(2)_CXXFLAGS) $$(COMMON_FLAGS) $$(COMMON_FLAGS32) -std=c++17' \ -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)_LIBFLAGS32) $$($(2)_LDFLAGS32) $$(CROSSLDFLAGS)' \ -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@' \ -e 's@UNIXLDFLAGS =@UNIXLDFLAGS = -L$$(WINE_$(3)_LIBDIR)/$$($(3)_WINEDIR) -l:ntdll.so@' \
$$(WINE_OBJ$(3))/Makefile > $$($(2)_OBJ$(3))/Makefile $$(WINE_$(3)_OBJ)/Makefile > $$($(2)_$(3)_OBJ)/Makefile
cd "$$($(2)_OBJ$(3))" && env $$($(2)_ENV$(3)) \ cd "$$($(2)_$(3)_OBJ)" && env $$($(2)_$(3)_ENV) \
$$(WINE_OBJ$(3))/tools/makedep $$(WINE_$(3)_OBJ)/tools/makedep
touch $$@ touch $$@
$$(OBJ)/.$(1)-build$(3): $$(OBJ)/.$(1)-$(3)-build:
@echo ":: building $(3)bit $(1)..." >&2 @echo ":: building $(1)-$(3)..." >&2
+cd "$$($(2)_OBJ$(3))" && env $$($(2)_ENV$(3)) \ +cd "$$($(2)_$(3)_OBJ)" && env $$($(2)_$(3)_ENV) \
$$(BEAR) $$(MAKE) $$(BEAR) $$(MAKE)
cd "$$($(2)_OBJ$(3))" && env $$($(2)_ENV$(3)) \ cd "$$($(2)_$(3)_OBJ)" && env $$($(2)_$(3)_ENV) \
$$(MAKE) install $$(MAKE) install
touch $$@ touch $$@
endef endef

View File

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

View File

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