mirror of https://git.wownero.com/dsc/mxe.git
Makefile: add target loop, serialise targets, and update settings file
This commit is contained in:
parent
50129207bb
commit
95e37fbe7e
94
Makefile
94
Makefile
|
@ -1,7 +1,7 @@
|
||||||
# This file is part of MXE.
|
# This file is part of MXE.
|
||||||
# See index.html for further information.
|
# See index.html for further information.
|
||||||
|
|
||||||
TARGET := i686-pc-mingw32
|
MXE_TARGETS := i686-pc-mingw32
|
||||||
SOURCEFORGE_MIRROR := freefr.dl.sourceforge.net
|
SOURCEFORGE_MIRROR := freefr.dl.sourceforge.net
|
||||||
PKG_MIRROR := s3.amazonaws.com/mxe-pkg
|
PKG_MIRROR := s3.amazonaws.com/mxe-pkg
|
||||||
PKG_CDN := d1yihgixbnrglp.cloudfront.net
|
PKG_CDN := d1yihgixbnrglp.cloudfront.net
|
||||||
|
@ -35,8 +35,6 @@ TOP_DIR := $(patsubst %/,%,$(dir $(MAKEFILE)))
|
||||||
PKGS := $(shell $(SED) -n 's/^.* id="\([^"]*\)-package">.*$$/\1/p' '$(TOP_DIR)/index.html')
|
PKGS := $(shell $(SED) -n 's/^.* id="\([^"]*\)-package">.*$$/\1/p' '$(TOP_DIR)/index.html')
|
||||||
PATH := $(PREFIX)/bin:$(PATH)
|
PATH := $(PREFIX)/bin:$(PATH)
|
||||||
|
|
||||||
CMAKE_TOOLCHAIN_FILE := $(PREFIX)/$(TARGET)/share/cmake/mxe-conf.cmake
|
|
||||||
|
|
||||||
# unexport any environment variables that might cause trouble
|
# unexport any environment variables that might cause trouble
|
||||||
unexport AR CC CFLAGS C_INCLUDE_PATH CPATH CPLUS_INCLUDE_PATH CPP
|
unexport AR CC CFLAGS C_INCLUDE_PATH CPATH CPLUS_INCLUDE_PATH CPP
|
||||||
unexport CPPFLAGS CROSS CXX CXXCPP CXXFLAGS EXEEXT EXTRA_CFLAGS
|
unexport CPPFLAGS CROSS CXX CXXCPP CXXFLAGS EXEEXT EXTRA_CFLAGS
|
||||||
|
@ -68,7 +66,6 @@ ESCAPE_PKG = \
|
||||||
echo '$($(1)_FILE)' | perl -lpe 's/([^A-Za-z0-9])/sprintf("%%%02X", ord($$$$1))/seg'
|
echo '$($(1)_FILE)' | perl -lpe 's/([^A-Za-z0-9])/sprintf("%%%02X", ord($$$$1))/seg'
|
||||||
|
|
||||||
DOWNLOAD_PKG_ARCHIVE = \
|
DOWNLOAD_PKG_ARCHIVE = \
|
||||||
$(if $(value $(1)_URL), \
|
|
||||||
mkdir -p '$(PKG_DIR)' && \
|
mkdir -p '$(PKG_DIR)' && \
|
||||||
$(if $($(1)_URL_2), \
|
$(if $($(1)_URL_2), \
|
||||||
( $(WGET) -T 30 -t 3 -O- '$($(1)_URL)' || \
|
( $(WGET) -T 30 -t 3 -O- '$($(1)_URL)' || \
|
||||||
|
@ -81,8 +78,7 @@ DOWNLOAD_PKG_ARCHIVE = \
|
||||||
$(if $($(1)_FIX_GZIP), \
|
$(if $($(1)_FIX_GZIP), \
|
||||||
| gzip -d | gzip -9n, \
|
| gzip -d | gzip -9n, \
|
||||||
) \
|
) \
|
||||||
> '$(PKG_DIR)/$($(1)_FILE)' || rm -f '$(PKG_DIR)/$($(1)_FILE)', \
|
> '$(PKG_DIR)/$($(1)_FILE)' || rm -f '$(PKG_DIR)/$($(1)_FILE)'
|
||||||
$(error URL not specified for package $(1)))
|
|
||||||
|
|
||||||
ifeq ($(IGNORE_SETTINGS),yes)
|
ifeq ($(IGNORE_SETTINGS),yes)
|
||||||
$(info [ignore settings.mk])
|
$(info [ignore settings.mk])
|
||||||
|
@ -91,9 +87,12 @@ else ifeq ($(wildcard $(PWD)/settings.mk),$(PWD)/settings.mk)
|
||||||
else
|
else
|
||||||
$(info [create settings.mk])
|
$(info [create settings.mk])
|
||||||
$(shell { \
|
$(shell { \
|
||||||
echo '#JOBS = $(JOBS)'; \
|
echo '#JOBS := $(JOBS)'; \
|
||||||
echo '#.DEFAULT my-pkgs:'; \
|
echo '#MXE_TARGETS := i686-pc-mingw32 x86_64-w64-mingw32 i686-w64-mingw32'; \
|
||||||
echo '#my-pkgs: boost curl file flac lzo pthreads vorbis wxwidgets'; \
|
echo '#SOURCEFORGE_MIRROR := downloads.sourceforge.net'; \
|
||||||
|
echo '#LOCAL_PKG_LIST := boost curl file flac lzo pthreads vorbis wxwidgets'; \
|
||||||
|
echo '#.DEFAULT local-pkg-list:'; \
|
||||||
|
echo '#local-pkg-list: $$(LOCAL_PKG_LIST)'; \
|
||||||
} >'$(PWD)/settings.mk')
|
} >'$(PWD)/settings.mk')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -149,21 +148,49 @@ include $(patsubst %,$(TOP_DIR)/src/%.mk,$(PKGS))
|
||||||
.PHONY: download
|
.PHONY: download
|
||||||
download: $(addprefix download-,$(PKGS))
|
download: $(addprefix download-,$(PKGS))
|
||||||
|
|
||||||
|
define TARGET_DEPS
|
||||||
|
$(1)_DEPS := $(shell echo '$(MXE_TARGETS)' | \
|
||||||
|
$(SED) -n 's,.*$(1)\(.*\),\1,p' | \
|
||||||
|
awk '{print $$1}')
|
||||||
|
endef
|
||||||
|
$(foreach TARGET,$(MXE_TARGETS),$(eval $(call TARGET_DEPS,$(TARGET))))
|
||||||
|
|
||||||
|
TARGET_HEADER = \
|
||||||
|
$(strip with \
|
||||||
|
$(if $(value MAKECMDGOALS),\
|
||||||
|
$(words $(MAKECMDGOALS)) goal$(shell [ $(words $(MAKECMDGOALS)) == 1 ] || echo s) from command line,\
|
||||||
|
$(if $(value LOCAL_PKG_LIST),\
|
||||||
|
$(words $(LOCAL_PKG_LIST)) goal$(shell [ $(words $(LOCAL_PKG_LIST)) == 1 ] || echo s) from settings.mk,\
|
||||||
|
$(words $(PKGS)) goal$(shell [ $(words $(PKGS)) == 1 ] || echo s) from src/*.mk)))
|
||||||
|
|
||||||
|
define TARGET_RULE
|
||||||
|
.PHONY: $(1)
|
||||||
|
$(1): | $(if $(value $(1)_DEPS), \
|
||||||
|
$(if $(value MAKECMDGOALS),\
|
||||||
|
$(addprefix $(PREFIX)/$($(1)_DEPS)/installed/,$(MAKECMDGOALS)), \
|
||||||
|
$(if $(value LOCAL_PKG_LIST),\
|
||||||
|
$(addprefix $(PREFIX)/$($(1)_DEPS)/installed/,$(LOCAL_PKG_LIST)), \
|
||||||
|
$(addprefix $(PREFIX)/$($(1)_DEPS)/installed/,$(PKGS))))) \
|
||||||
|
$($(1)_DEPS)
|
||||||
|
@echo '[target] $(1) $(call TARGET_HEADER)'
|
||||||
|
endef
|
||||||
|
$(foreach TARGET,$(MXE_TARGETS),$(eval $(call TARGET_RULE,$(TARGET))))
|
||||||
|
|
||||||
define PKG_RULE
|
define PKG_RULE
|
||||||
.PHONY: download-$(1)
|
.PHONY: download-$(1)
|
||||||
download-$(1): $(addprefix download-,$($(1)_DEPS))
|
download-$(1):: $(addprefix download-,$($(1)_DEPS))
|
||||||
if ! $(call CHECK_PKG_ARCHIVE,$(1)); then \
|
if ! $(call CHECK_PKG_ARCHIVE,$(1)); then \
|
||||||
$(call DOWNLOAD_PKG_ARCHIVE,$(1)); \
|
$(call DOWNLOAD_PKG_ARCHIVE,$(1)); \
|
||||||
$(call CHECK_PKG_ARCHIVE,$(1)) || { echo 'Wrong checksum!'; exit 1; }; \
|
$(call CHECK_PKG_ARCHIVE,$(1)) || { echo 'Wrong checksum!'; exit 1; }; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
.PHONY: $(1)
|
.PHONY: $(1)
|
||||||
$(1): $(PREFIX)/installed/$(1)
|
$(1): $(PREFIX)/$(3)/installed/$(1)
|
||||||
$(PREFIX)/installed/$(1): $(TOP_DIR)/src/$(1).mk \
|
$(PREFIX)/$(3)/installed/$(1): $(TOP_DIR)/src/$(1).mk \
|
||||||
$(wildcard $(TOP_DIR)/src/$(1)-*.patch) \
|
$(wildcard $(TOP_DIR)/src/$(1)-*.patch) \
|
||||||
$(wildcard $(TOP_DIR)/src/$(1)-test*) \
|
$(wildcard $(TOP_DIR)/src/$(1)-test*) \
|
||||||
$(addprefix $(PREFIX)/installed/,$($(1)_DEPS)) \
|
$(addprefix $(PREFIX)/$(3)/installed/,$($(1)_DEPS)) \
|
||||||
| check-requirements
|
| check-requirements $(3)
|
||||||
@[ -d '$(LOG_DIR)/$(TIMESTAMP)' ] || mkdir -p '$(LOG_DIR)/$(TIMESTAMP)'
|
@[ -d '$(LOG_DIR)/$(TIMESTAMP)' ] || mkdir -p '$(LOG_DIR)/$(TIMESTAMP)'
|
||||||
@if ! $(call CHECK_PKG_ARCHIVE,$(1)); then \
|
@if ! $(call CHECK_PKG_ARCHIVE,$(1)); then \
|
||||||
echo '[download] $(1)'; \
|
echo '[download] $(1)'; \
|
||||||
|
@ -180,12 +207,18 @@ $(PREFIX)/installed/$(1): $(TOP_DIR)/src/$(1).mk \
|
||||||
exit 1; \
|
exit 1; \
|
||||||
fi; \
|
fi; \
|
||||||
fi
|
fi
|
||||||
$(if $(value $(1)_BUILD),
|
$(if $(or $(value $(1)_BUILD_$(3)),\
|
||||||
@echo '[build] $(1)'
|
$(and $(value $(1)_BUILD),$(findstring undefined,$(origin $(1)_BUILD_$(3))))),
|
||||||
,)
|
@echo '[build] $(1)',
|
||||||
@touch '$(LOG_DIR)/$(TIMESTAMP)/$(1)'
|
$(if $(findstring undefined,$(origin $(1)_BUILD_$(3))),
|
||||||
@ln -sf '$(TIMESTAMP)/$(1)' '$(LOG_DIR)/$(1)'
|
@echo '[no-op] $(1)',
|
||||||
@if ! (time $(MAKE) -f '$(MAKEFILE)' 'build-only-$(1)') &> '$(LOG_DIR)/$(TIMESTAMP)/$(1)'; then \
|
@echo '[exclude] $(1)'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
@touch '$(LOG_DIR)/$(TIMESTAMP)/$(1)_$(3)'
|
||||||
|
@[ $(words $(MXE_TARGETS)) == 1 ] || ln -sf '$(TIMESTAMP)/$(1)_$(3)' '$(LOG_DIR)/$(1)_$(3)'
|
||||||
|
@ln -sf '$(TIMESTAMP)/$(1)_$(3)' '$(LOG_DIR)/$(1)'
|
||||||
|
@if ! (time $(MAKE) -f '$(MAKEFILE)' 'build-only-$(1)_$(3)') &> '$(LOG_DIR)/$(TIMESTAMP)/$(1)_$(3)'; then \
|
||||||
echo; \
|
echo; \
|
||||||
echo 'Failed to build package $(1)!'; \
|
echo 'Failed to build package $(1)!'; \
|
||||||
echo '------------------------------------------------------------'; \
|
echo '------------------------------------------------------------'; \
|
||||||
|
@ -197,24 +230,29 @@ $(PREFIX)/installed/$(1): $(TOP_DIR)/src/$(1).mk \
|
||||||
fi
|
fi
|
||||||
@echo '[done] $(1)'
|
@echo '[done] $(1)'
|
||||||
|
|
||||||
.PHONY: build-only-$(1)
|
.PHONY: build-only-$(1)_$(3)
|
||||||
build-only-$(1): PKG = $(1)
|
build-only-$(1)_$(3): PKG = $(1)
|
||||||
build-only-$(1):
|
build-only-$(1)_$(3): TARGET = $(3)
|
||||||
$(if $(value $(1)_BUILD),
|
build-only-$(1)_$(3): CMAKE_TOOLCHAIN_FILE = $(PREFIX)/$(3)/share/cmake/mxe-conf.cmake
|
||||||
|
build-only-$(1)_$(3):
|
||||||
|
$(if $(or $(value $(1)_BUILD_$(3)),\
|
||||||
|
$(and $(value $(1)_BUILD),$(findstring undefined,$(origin $(1)_BUILD_$(3))))),
|
||||||
rm -rf '$(2)'
|
rm -rf '$(2)'
|
||||||
mkdir -p '$(2)'
|
mkdir -p '$(2)'
|
||||||
cd '$(2)' && $(call UNPACK_PKG_ARCHIVE,$(1))
|
cd '$(2)' && $(call UNPACK_PKG_ARCHIVE,$(1))
|
||||||
cd '$(2)/$($(1)_SUBDIR)'
|
cd '$(2)/$($(1)_SUBDIR)'
|
||||||
$(foreach PKG_PATCH,$(sort $(wildcard $(TOP_DIR)/src/$(1)-*.patch)),
|
$(foreach PKG_PATCH,$(sort $(wildcard $(TOP_DIR)/src/$(1)-*.patch)),
|
||||||
(cd '$(2)/$($(1)_SUBDIR)' && $(PATCH) -p1 -u) < $(PKG_PATCH))
|
(cd '$(2)/$($(1)_SUBDIR)' && $(PATCH) -p1 -u) < $(PKG_PATCH))
|
||||||
$$(call $(1)_BUILD,$(2)/$($(1)_SUBDIR),$(TOP_DIR)/src/$(1)-test)
|
$$(call $(if $(value $(1)_BUILD_$(3)),$(1)_BUILD_$(3),$(1)_BUILD),$(2)/$($(1)_SUBDIR),$(TOP_DIR)/src/$(1)-test)
|
||||||
(du -k -d 0 '$(2)' 2>/dev/null || du -k --max-depth 0 '$(2)') | $(SED) -n 's/^\(\S*\).*/du: \1 KiB/p'
|
(du -k -d 0 '$(2)' 2>/dev/null || du -k --max-depth 0 '$(2)') | $(SED) -n 's/^\(\S*\).*/du: \1 KiB/p'
|
||||||
rm -rfv '$(2)'
|
rm -rfv '$(2)'
|
||||||
,)
|
,)
|
||||||
[ -d '$(PREFIX)/installed' ] || mkdir -p '$(PREFIX)/installed'
|
[ -d '$(PREFIX)/$(3)/installed' ] || mkdir -p '$(PREFIX)/$(3)/installed'
|
||||||
touch '$(PREFIX)/installed/$(1)'
|
touch '$(PREFIX)/$(3)/installed/$(1)'
|
||||||
endef
|
endef
|
||||||
$(foreach PKG,$(PKGS),$(eval $(call PKG_RULE,$(PKG),$(call TMP_DIR,$(PKG)))))
|
$(foreach TARGET,$(MXE_TARGETS), \
|
||||||
|
$(foreach PKG,$(PKGS), \
|
||||||
|
$(eval $(call PKG_RULE,$(PKG),$(call TMP_DIR,$(PKG)),$(TARGET)))))
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean:
|
clean:
|
||||||
|
|
Loading…
Reference in New Issue