Skip to content

Commit

Permalink
wheel.mk: Migrate to using status cookie (#6389)
Browse files Browse the repository at this point in the history
* wheel.mk: Use status cookie for general wheel + wheel_download

* wheel.mk: Move wheel jq query to master wheel mk file

* spk.mk: Add new cokkoe files to wheelclean

* wheel.mk: Declare crossenv default wheel type

* wheel.mk: Fix grep+sed file looping to avoid loosing filename

* wheel.mk: Avoid downloading if pure wheel packaging is disabled

* common.mk: Add PIP_NATIVE to use our own pip native always

* crossenv.mk: Missing call to pre_crossenv_target

* spk.mk: Add ability to clean one specific wheel

* wheel.mk: Enable compile and install steps for wheel building

* wheel.mk: Re-enable install_python_wheel towards staging directory

* Bump package version to initiate build wheel testing

* python-wheel.mk: Ensure wheelhouse directory is set

* wheel-compile.mk: Fix call to crossenv <wheelname>-<wheelversion>

* python-wheel.mk: Fix post compile issue related to install

* crossenv.mk: Migrate to using WHEEL_NAME and WHEEL_VERSION

This allows using a unique method for both wheel and crossenv calls

* wheelclean: Also clean-up work/.wheel* due to download-wheels

* wheel.mk: Add new download-wheels sub-routine

* wheel.mk: Remove commented debug traces

* wheel.mk: Pre-process #egg= tags for compatibility with newer pip

* wheel.mk: Fix MAKECMDGOALS when called from spk.mk

* github-action: Enable downloading wheels from new method

* Revert package bump to test wheels

* deluge: Revert package bump
  • Loading branch information
th0ma7 authored Jan 18, 2025
1 parent c6a078a commit 0e05b07
Show file tree
Hide file tree
Showing 11 changed files with 481 additions and 264 deletions.
2 changes: 1 addition & 1 deletion .github/actions/download.sh
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ if [ -z "${build_packages}" ]; then
else
for package in ${build_packages}; do
echo "===> Download wheels: ${package}"
make -C spk/${package} wheeldownload
make -C spk/${package} download-wheels
done
fi

Expand Down
3 changes: 3 additions & 0 deletions mk/spksrc.common.mk
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ PIP ?= pip
# System default pip outside from build environment
PIP_SYSTEM = $(shell which pip)

# System default pip outside from build environment
PIP_NATIVE = $(WORK_DIR)/../../../native/$(or $(PYTHON_PACKAGE),$(SPK_NAME))/work-native/install/usr/local/bin/pip

# Why ask for the same thing twice? Always cache downloads
PIP_CACHE_OPT ?= --find-links $(PIP_DISTRIB_DIR) --cache-dir $(PIP_CACHE_DIR)
PIP_WHEEL_ARGS = wheel --disable-pip-version-check --no-binary :all: $(PIP_CACHE_OPT) --no-deps --wheel-dir $(WHEELHOUSE)
Expand Down
36 changes: 16 additions & 20 deletions mk/spksrc.crossenv.mk
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
# build_crossenv_target (override with CROSSENV_TARGET)
# post_crossenv_target (override with POST_CROSSENV_TARGET)
# Variables:
# WHEELS List of wheels to go through
# WHEEL_NAME Name of wheel to process
# WHEEL_VERSION Version of wheel to process (can be empty)

# Defined using PYTHON_PACKAGE_WORK_DIR from spksrc.python.mk or use local work directory
PYTHON_WORK_DIR = $(or $(wildcard $(PYTHON_PACKAGE_WORK_DIR)),$(wildcard $(WORK_DIR)))
Expand Down Expand Up @@ -55,13 +56,13 @@ endif

###

# Check for wheel==x.y, then fallback to wheel, then default
ifneq ($(wildcard $(CROSSENV_CONFIG_PATH)/requirements-$(WHEEL).txt),)
CROSSENV_BUILD_WHEEL = $(WHEEL)
CROSSENV_BUILD_REQUIREMENTS = $(CROSSENV_CONFIG_PATH)/requirements-$(CROSSENV_BUILD_WHEEL).txt
else ifneq ($(wildcard $(CROSSENV_CONFIG_PATH)/requirements-$(firstword $(subst -, ,$(WHEEL))).txt),)
CROSSENV_BUILD_WHEEL = $(firstword $(subst -, ,$(WHEEL)))
# Check for <wheel>-<x.y>, then fallback to <wheel>, then default
ifneq ($(wildcard $(CROSSENV_CONFIG_PATH)/requirements-$(WHEEL_NAME)-$(WHEEL_VERSION).txt),)
CROSSENV_BUILD_WHEEL = $(WHEEL_NAME)-$(WHEEL_VERSION)
CROSSENV_BUILD_REQUIREMENTS = $(CROSSENV_CONFIG_PATH)/requirements-$(CROSSENV_BUILD_WHEEL).txt
else ifneq ($(wildcard $(CROSSENV_CONFIG_PATH)/requirements-$(WHEEL_NAME).txt),)
CROSSENV_BUILD_WHEEL = $(WHEEL_NAME)
CROSSENV_BUILD_REQUIREMENTS = $(CROSSENV_CONFIG_PATH)/requirements-$(WHEEL_NAME).txt
else
CROSSENV_BUILD_WHEEL = default
CROSSENV_BUILD_REQUIREMENTS = $(CROSSENV_CONFIG_DEFAULT)
Expand All @@ -73,10 +74,10 @@ CROSSENV_COOKIE = $(WORK_DIR)/.crossenv-$(CROSSENV_BUILD_WHEEL)_done
###

# default wheel packages to install in crossenv
ifneq ($(wildcard $(CROSSENV_CONFIG_PATH)/requirements-$(WHEEL).txt $(CROSSENV_CONFIG_DEFAULT)),)
CROSSENV_DEFAULT_PIP_VERSION = $(shell grep -h -E "^pip[<>=]=" $(wildcard $(CROSSENV_CONFIG_PATH)/requirements-$(WHEEL).txt $(CROSSENV_CONFIG_DEFAULT)) | head -1 | sed -E 's/.*[<>=]=//')
CROSSENV_DEFAULT_SETUPTOOLS_VERSION = $(shell grep -h -E "^setuptools[<>=]=" $(wildcard $(CROSSENV_CONFIG_PATH)/requirements-$(WHEEL).txt $(CROSSENV_CONFIG_DEFAULT)) | head -1 | sed -E 's/.*[<>=]=//')
CROSSENV_DEFAULT_WHEEL_VERSION = $(shell grep -h -E "^wheel[<>=]=" $(wildcard $(CROSSENV_CONFIG_PATH)/requirements-$(WHEEL).txt $(CROSSENV_CONFIG_DEFAULT)) | head -1 | sed -E 's/.*[<>=]=//')
ifneq ($(wildcard $(CROSSENV_BUILD_REQUIREMENTS) $(CROSSENV_CONFIG_DEFAULT)),)
CROSSENV_DEFAULT_PIP_VERSION = $(shell grep -h -E "^pip[<>=]=" $(wildcard $(CROSSENV_BUILD_REQUIREMENTS) $(CROSSENV_CONFIG_DEFAULT)) | head -1 | sed -E 's/.*[<>=]=//')
CROSSENV_DEFAULT_SETUPTOOLS_VERSION = $(shell grep -h -E "^setuptools[<>=]=" $(wildcard $(CROSSENV_BUILD_REQUIREMENTS) $(CROSSENV_CONFIG_DEFAULT)) | head -1 | sed -E 's/.*[<>=]=//')
CROSSENV_DEFAULT_WHEEL_VERSION = $(shell grep -h -E "^wheel[<>=]=" $(wildcard $(CROSSENV_BUILD_REQUIREMENTS) $(CROSSENV_CONFIG_DEFAULT)) | head -1 | sed -E 's/.*[<>=]=//')
endif

ifneq ($(CROSSENV_DEFAULT_PIP_VERSION),)
Expand Down Expand Up @@ -114,13 +115,8 @@ post_crossenv_target: $(CROSSENV_TARGET)
###

crossenv-%:
ifneq ($(filter error-%, $(CROSSENV_BUILD_WHEEL)),)
@$(MSG) $(MAKE) $(CROSSENV_BUILD_WHEEL)
@$(MAKE) $(CROSSENV_BUILD_WHEEL) --no-print-directory
else
@$(MSG) $(MAKE) ARCH=$(firstword $(subst -, ,$*)) TCVERSION=$(lastword $(subst -, ,$*)) WHEEL=$(CROSSENV_BUILD_WHEEL) crossenv
-@MAKEFLAGS= $(MAKE) ARCH=$(firstword $(subst -, ,$*)) TCVERSION=$(lastword $(subst -, ,$*)) WHEEL=$(CROSSENV_BUILD_WHEEL) crossenv --no-print-directory
endif
@$(MSG) $(MAKE) ARCH=$(firstword $(subst -, ,$*)) TCVERSION=$(lastword $(subst -, ,$*)) WHEEL_NAME=$(WHEEL_NAME) WHEEL_VERSION=$(WHEEL_VERSION) crossenv
-@MAKEFLAGS= $(MAKE) ARCH=$(firstword $(subst -, ,$*)) TCVERSION=$(lastword $(subst -, ,$*)) WHEEL_NAME=$(WHEEL_NAME) WHEEL_VERSION=$(WHEEL_VERSION) crossenv --no-print-directory

####

Expand Down Expand Up @@ -166,8 +162,8 @@ export PYTHONPATH = $(PYTHON_LIB_NATIVE):$(PYTHON_STAGING_INSTALL_PREFIX)/lib/py
# >>> sys.path
#
build_crossenv_target: SHELL:=/bin/bash
build_crossenv_target: $(CROSSENV_PATH)/build/python-cc.mk
@$(MSG) $$(date +%Y%m%d-%H%M%S) MAKELEVEL: $(MAKELEVEL), PARALLEL_MAKE: $(PARALLEL_MAKE), ARCH: $(ARCH)-$(TCVERSION), CROSSENV: $(WHEEL) >> $(PSTAT_LOG)
build_crossenv_target: pre_crossenv_target $(CROSSENV_PATH)/build/python-cc.mk
@$(MSG) $$(date +%Y%m%d-%H%M%S) MAKELEVEL: $(MAKELEVEL), PARALLEL_MAKE: $(PARALLEL_MAKE), ARCH: $(ARCH)-$(TCVERSION), CROSSENV: $(CROSSENV_BUILD_WHEEL) >> $(PSTAT_LOG)
@$(MSG) Python sources: $(wildcard $(PYTHON_WORK_DIR)/Python-[0-9]*)
@$(MSG) crossenv wheel packages: $(CROSSENV_DEFAULT_PIP), $(CROSSENV_DEFAULT_SETUPTOOLS), $(CROSSENV_DEFAULT_WHEEL)
@$(MSG) crossenv requirement definition: $(CROSSENV_BUILD_REQUIREMENTS)
Expand Down
4 changes: 2 additions & 2 deletions mk/spksrc.python-module.mk
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ CROSSENV_MODULE_PATH = $(firstword $(wildcard $(WORK_DIR)/crossenv-$(PKG_NAME)-$

### Prepare crossenv
build_crossenv_module:
@$(MSG) WHEEL="$(PKG_NAME)-$(PKG_VERS)" $(MAKE) crossenv-$(ARCH)-$(TCVERSION)
-@MAKEFLAGS= WHEEL="$(PKG_NAME)-$(PKG_VERS)" $(MAKE) crossenv-$(ARCH)-$(TCVERSION)
@$(MSG) $(MAKE) WHEEL_NAME=\"$(PKG_VERS)\" WHEEL_VERSION=\"$(PKG_VERS)\" crossenv-$(ARCH)-$(TCVERSION)
-@MAKEFLAGS= $(MAKE) WHEEL_NAME="$(PKG_VERS)" WHEEL_VERSION="$(PKG_VERS)" crossenv-$(ARCH)-$(TCVERSION)

### Python extension module rules
compile_python_module: build_crossenv_module
Expand Down
12 changes: 8 additions & 4 deletions mk/spksrc.python-wheel.mk
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,6 @@ ifneq ($(wildcard $(PYTHON_STAGING_PREFIX)),)
STAGING_INSTALL_PREFIX := $(PYTHON_STAGING_PREFIX)
endif

## python wheel specific configurations
include ../../mk/spksrc.wheel-env.mk

### Prepare crossenv
build_crossenv_module:
@$(MSG) WHEEL="$(PKG_NAME)-$(PKG_VERS)" $(MAKE) crossenv-$(ARCH)-$(TCVERSION)
Expand All @@ -43,7 +40,8 @@ build_python_wheel_target: build_crossenv_module
@. $(CROSSENV) ; \
$(MSG) _PYTHON_HOST_PLATFORM=$(TC_TARGET) cross-python3 -m build $(BUILD_ARGS) --wheel $(WHEELS_BUILD_ARGS) --outdir $(WHEELHOUSE) ; \
$(RUN) _PYTHON_HOST_PLATFORM=$(TC_TARGET) cross-python3 -m build $(BUILD_ARGS) --wheel $(WHEELS_BUILD_ARGS) --outdir $(WHEELHOUSE)
@$(RUN) echo "$(PKG_NAME)==$(PKG_VERS)" >> $(WHEELHOUSE)/$(WHEELS_CROSS_COMPILE)
@$(MSG) $(MAKE) REQUIREMENT=\"$(PKG_NAME)==$(PKG_VERS)\" WHEEL_NAME=\"$(PKG_NAME)\" WHEEL_VERSION=\"$(PKG_VERS)\" WHEEL_TYPE=\"cross\" wheel_install
-@MAKEFLAGS= $(MAKE) REQUIREMENT="$(PKG_NAME)==$(PKG_VERS)" WHEEL_NAME="$(PKG_NAME)" WHEEL_VERSION="$(PKG_VERS)" WHEEL_TYPE="cross" --no-print-directory wheel_install

post_install_python_wheel_target: $(WHEEL_TARGET) install_python_wheel

Expand All @@ -53,3 +51,9 @@ all: install

# Use crossenv
include ../../mk/spksrc.crossenv.mk

## python wheel specific configurations
include ../../mk/spksrc.wheel-env.mk

## install wheel specific routines
include ../../mk/spksrc.wheel-install.mk
12 changes: 9 additions & 3 deletions mk/spksrc.spk.mk
Original file line number Diff line number Diff line change
Expand Up @@ -538,7 +538,8 @@ spkclean:
work-*/WIZARD_UIFILES

wheelclean: spkclean
rm -fr work-*/.wheel_done \
rm -fr work*/.wheel_done \
work*/.wheel_*_done \
work-*/wheelhouse \
work-*/install/var/packages/**/target/share/wheelhouse
@make --no-print-directory dependency-flat | sort -u | grep cross/ | while read depend ; do \
Expand All @@ -552,10 +553,15 @@ wheelclean: spkclean
fi ; \
done

wheelcleancache: wheelclean
wheelclean-%: spkclean
rm -f work-*/.wheel_done \
work-*/wheelhouse/$*-*.whl
find work-* -type f -regex '.*\.wheel_\(download\|compile\|install\)-$*_done' -exec rm -f {} \;

wheelcleancache:
rm -fr work-*/pip

wheelcleanall: wheelcleancache
wheelcleanall: wheelcleancache wheelclean
rm -fr ../../distrib/pip

crossenvclean: wheelclean
Expand Down
148 changes: 148 additions & 0 deletions mk/spksrc.wheel-compile.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
### Wheel rules
# Compile wheels for modules listed in WHEELS.
#
# Targets are executed in the following order:
# wheel_compile_msg_target
# pre_wheel_compile_target (override with PRE_WHEEL_COMPILE_TARGET)
# wheel_compile_target (override with WHEEL_COMPILE_TARGET)
# post_wheel_compile_target (override with POST_WHEEL_COMPILE_TARGET)
# Variables:
# REQUIREMENT Requirement formatted wheel information
# WHEEL_NAME Name of wheel to process
# WHEEL_VERSION Version of wheel to process (can be empty)
# WHEEL_TYPE Type of wheel to process (abi3, crossenv, pure)

ifeq ($(WHEEL_VERSION),)
WHEEL_COMPILE_COOKIE = $(WORK_DIR)/.$(COOKIE_PREFIX)wheel_compile-$(WHEEL_NAME)_done
else
WHEEL_COMPILE_COOKIE = $(WORK_DIR)/.$(COOKIE_PREFIX)wheel_compile-$(WHEEL_NAME)-$(WHEEL_VERSION)_done
endif

##

ifeq ($(strip $(PRE_WHEEL_COMPILE_TARGET)),)
PRE_WHEEL_COMPILE_TARGET = pre_wheel_compile_target
else
$(PRE_WHEEL_COMPILE_TARGET): wheel_compile_msg_target
endif
ifeq ($(strip $(WHEEL_COMPILE_TARGET)),)
WHEEL_COMPILE_TARGET = wheel_compile_target
else
$(WHEEL_COMPILE_TARGET): $(BUILD_WHEEL_COMPILE_TARGET)
endif
ifeq ($(strip $(POST_WHEEL_COMPILE_TARGET)),)
POST_WHEEL_COMPILE_TARGET = post_wheel_compile_target
else
$(POST_WHEEL_COMPILE_TARGET): $(WHEEL_COMPILE_TARGET)
endif

wheel_compile_msg_target:
@$(MSG) "Processing wheels of $(NAME)"

pre_wheel_compile_target: wheel_compile_msg_target

wheel_compile_target: SHELL:=/bin/bash
wheel_compile_target:
ifeq ($(wildcard $(WHEELHOUSE)),)
@$(MSG) Creating wheelhouse directory: $(WHEELHOUSE)
@mkdir -p $(WHEELHOUSE)
endif
@$(MSG) Compiling wheel [$(WHEEL_NAME)], version [$(WHEEL_VERSION)], type [$(WHEEL_TYPE)]
ifneq ($(WHEEL_TYPE),pure)
@$(MSG) $(MAKE) WHEEL_NAME=\"$(WHEEL_NAME)\" WHEEL_VERSION=\"$(WHEEL_VERSION)\" crossenv-$(ARCH)-$(TCVERSION) ; \
MAKEFLAGS= $(MAKE) WHEEL_NAME="$(WHEEL_NAME)" WHEEL_VERSION="$(WHEEL_VERSION)" crossenv-$(ARCH)-$(TCVERSION) --no-print-directory
@[ "$(WHEEL_TYPE)" = "$(WHEELS_LIMITED_API)" ] && abi3="--build-option=--py-limited-api=$(PYTHON_LIMITED_API)" || abi3="" ; \
global_options=$$(echo $(WHEELS_BUILD_ARGS) | sed -e 's/ \[/\n\[/g' | grep -i $(WHEEL_NAME) | cut -f2 -d] | xargs) ; \
localCFLAGS=($$(echo $(WHEELS_CFLAGS) | sed -e 's/ \[/\n\[/g' | grep -i $(WHEEL_NAME) | cut -f2 -d] | xargs)) ; \
localLDFLAGS=($$(echo $(WHEELS_LDFLAGS) | sed -e 's/ \[/\n\[/g' | grep -i $(WHEEL_NAME) | cut -f2 -d] | xargs)) ; \
localCPPFLAGS=($$(echo $(WHEELS_CPPFLAGS) | sed -e 's/ \[/\n\[/g' | grep -i $(WHEEL_NAME) | cut -f2 -d] | xargs)) ; \
localCXXFLAGS=($$(echo $(WHEELS_CXXFLAGS) | sed -e 's/ \[/\n\[/g' | grep -i $(WHEEL_NAME) | cut -f2 -d] | xargs)) ; \
$(MSG) pip build [$(WHEEL_NAME)], version: [$(WHEEL_VERSION)] \
$$([ "$$(echo $${localCFLAGS[@]})" ] && echo "CFLAGS=\"$${localCFLAGS[@]}\" ") \
$$([ "$$(echo $${localCPPFLAGS[@]})" ] && echo "CPPFLAGS=\"$${localCPPFLAGS[@]}\" ") \
$$([ "$$(echo $${localCXXFLAGS[@]})" ] && echo "CXXFLAGS=\"$${localCXXFLAGS[@]}\" ") \
$$([ "$$(echo $${localLDFLAGS[@]})" ] && echo "LDFLAGS=\"$${localLDFLAGS[@]}\" ") \
$$([ "$$(echo $${abi3})" ] && echo "$${abi3} ")" \
$${global_options}" ; \
REQUIREMENT=$(REQUIREMENT) \
WHEEL_NAME=$(WHEEL_NAME) \
WHEEL_VERSION=$(WHEEL_VERSION) \
ADDITIONAL_CFLAGS="-I$(STAGING_INSTALL_PREFIX)/$(PYTHON_INC_DIR) $${localCFLAGS[@]}" \
ADDITIONAL_CPPFLAGS="-I$(STAGING_INSTALL_PREFIX)/$(PYTHON_INC_DIR) $${localCPPFLAGS[@]}" \
ADDITIONAL_CXXFLAGS="-I$(STAGING_INSTALL_PREFIX)/$(PYTHON_INC_DIR) $${localCXXFLAGS[@]}" \
ADDITIONAL_LDFLAGS="$${localLDFLAGS[@]}" \
ABI3="$${abi3}" \
PIP_GLOBAL_OPTION="$${global_options}" \
$(MAKE) --no-print-directory \
cross-compile-wheel-$(WHEEL_NAME) || exit 1
else ifneq ($(filter 1 ON TRUE,$(WHEELS_PURE_PYTHON_PACKAGING_ENABLE)),)
@if [ -s "$(WHEELHOUSE)/$(WHEELS_PURE_PYTHON)" ]; then \
export LD= LDSHARED= CPP= NM= CC= AS= RANLIB= CXX= AR= STRIP= OBJDUMP= OBJCOPY= READELF= CFLAGS= CPPFLAGS= CXXFLAGS= LDFLAGS= && \
$(RUN) \
PATH="$(abspath $(WORK_DIR)/../../../native/$(PYTHON_PKG_NAME)/work-native/install/usr/local/bin):$(PATH)" \
LD_LIBRARY_PATH="$(abspath $(WORK_DIR)/../../../native/$(PYTHON_PKG_NAME)/work-native/install/usr/local/lib):$(LD_LIBRARY_PATH)" \
$(MSG) $(PIP_NATIVE) $(PIP_WHEEL_ARGS) $(REQUIREMENT) ; \
$(PIP_NATIVE) $(PIP_WHEEL_ARGS) $(REQUIREMENT) ; \
fi
endif

##
## crossenv PATH environment requires a combination of:
## 1) unique PATH variable from $(ENV) -> using merge + dedup macros
## Note: Multiple declarations of ENV += PATH=bla creates confusion in its interpretation.
## Solution implemented fetches all PATH from ENV and combine them in reversed order.
## 2) access to maturin from native/python<version>/.../bin -> ${PYTHON_NATIVE_PATH}/bin
## 3) access to crossenv/bin/cross* tools, mainly cross-pip -> ${CROSSENV_PATH}/bin
##
cross-compile-wheel-%: SHELL:=/bin/bash
cross-compile-wheel-%:
@for crossenv in $(WORK_DIR)/crossenv-$(WHEEL_NAME)-$(WHEEL_VERSION) $(WORK_DIR)/crossenv-$(WHEEL_NAME) $(WORK_DIR)/crossenv ; do \
[ -d $${crossenv} ] && . $${crossenv}/build/python-cc.mk && break ; \
done ; \
if [ -d "$${CROSSENV_PATH}" ] ; then \
PATH=$(call dedup, $(call merge, $(ENV), PATH, :), :):$${PYTHON_NATIVE_PATH}:$${CROSSENV_PATH}/bin:$${PATH} ; \
$(MSG) "crossenv: [$${CROSSENV_PATH}]" ; \
$(MSG) "pip: [$$(which cross-pip)]" ; \
$(MSG) "maturin: [$$(which maturin)]" ; \
else \
echo "ERROR: crossenv not found!" ; \
exit 2 ; \
fi ; \
if [ "$(PIP_GLOBAL_OPTION)" ]; then \
pip_global_option=$$(echo $(PIP_GLOBAL_OPTION) | sed 's/=\([^ ]*\)/="\1"/g; s/[^ ]*/--global-option=&/g') ; \
pip_global_option=$${pip_global_option}" --no-use-pep517" ; \
fi ; \
$(RUN) $(MSG) \
_PYTHON_HOST_PLATFORM=\"$(TC_TARGET)\" \
PATH=$${PATH} \
CMAKE_TOOLCHAIN_FILE=$${CMAKE_TOOLCHAIN_FILE} \
MESON_CROSS_FILE=$${MESON_CROSS_FILE} \
cross-pip \
$(PIP_WHEEL_ARGS_CROSSENV) \
$${pip_global_option} \
--no-build-isolation \
$(ABI3) \
$(REQUIREMENT) ; \
$(RUN) \
_PYTHON_HOST_PLATFORM="$(TC_TARGET)" \
PATH=$${PATH} \
CMAKE_TOOLCHAIN_FILE=$${CMAKE_TOOLCHAIN_FILE} \
MESON_CROSS_FILE=$${MESON_CROSS_FILE} \
cross-pip \
$(PIP_WHEEL_ARGS_CROSSENV) \
$${pip_global_option} \
--no-build-isolation \
$(ABI3) \
$(REQUIREMENT)

post_wheel_compile_target: $(WHEEL_COMPILE_TARGET)

ifeq ($(wildcard $(WHEEL_COMPILE_COOKIE)),)
wheel_compile: $(WHEEL_COMPILE_COOKIE)

$(WHEEL_COMPILE_COOKIE): $(POST_WHEEL_COMPILE_TARGET)
$(create_target_dir)
@touch -f $@
else
wheel_compile: ;
endif
86 changes: 86 additions & 0 deletions mk/spksrc.wheel-download.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
### Wheel rules
# Download wheels for modules listed in WHEELS.
#
# Targets are executed in the following order:
# wheel_download_msg_target
# pre_wheel_download_target (override with PRE_WHEEL_DOWNLOAD_TARGET)
# wheel_download_target (override with WHEEL_DOWNLOAD_TARGET)
# post_wheel_download_target (override with POST_WHEEL_DOWNLOAD_TARGET)
# Variables:
# REQUIREMENT Requirement formatted wheel information
# WHEEL_NAME Name of wheel to process
# WHEEL_VERSION Version of wheel to process (can be empty)
# WHEEL_TYPE Type of wheel to process (abi3, crossenv, pure)

ifeq ($(WHEEL_VERSION),)
WHEEL_DOWNLOAD_COOKIE = $(WORK_DIR)/.$(COOKIE_PREFIX)wheel_download-$(WHEEL_NAME)_done
else
WHEEL_DOWNLOAD_COOKIE = $(WORK_DIR)/.$(COOKIE_PREFIX)wheel_download-$(WHEEL_NAME)-$(WHEEL_VERSION)_done
endif

##

ifeq ($(strip $(PRE_WHEEL_DOWNLOAD_TARGET)),)
PRE_WHEEL_DOWNLOAD_TARGET = pre_wheel_download_target
else
$(PRE_WHEEL_DOWNLOAD_TARGET): wheel_download_msg_target
endif
ifeq ($(strip $(WHEEL_DOWNLOAD_TARGET)),)
WHEEL_DOWNLOAD_TARGET = wheel_download_target
else
$(WHEEL_DOWNLOAD_TARGET): $(BUILD_WHEEL_DOWNLOAD_TARGET)
endif
ifeq ($(strip $(POST_WHEEL_DOWNLOAD_TARGET)),)
POST_WHEEL_DOWNLOAD_TARGET = post_wheel_download_target
else
$(POST_WHEEL_DOWNLOAD_TARGET): $(WHEEL_DOWNLOAD_TARGET)
endif

wheel_download_msg_target:
@$(MSG) "Processing wheels of $(NAME)"

pre_wheel_download_target: wheel_download_msg_target

wheel_download_target: SHELL:=/bin/bash
wheel_download_target:
ifeq ($(wildcard $(PIP_DISTRIB_DIR)),)
@$(MSG) Creating pip download directory: $(PIP_DISTRIB_DIR)
@mkdir -p $(PIP_DISTRIB_DIR)
endif
ifeq ($(wildcard $(PIP_CACHE_DIR)),)
@$(MSG) Creating pip caching directory: $(PIP_CACHE_DIR)
@mkdir -p $(PIP_CACHE_DIR)
endif
@$(MSG) Downloading wheel [$(WHEEL_NAME)], version [$(WHEEL_VERSION)] ; \
if [ "$$(grep -Eo 'http://|https://' <<< $(REQUIREMENT))" ] ; then \
echo "WARNING: Skipping download URL - Downloaded at build time" ; \
elif [ "$(WHEEL_TYPE)" = "pure" ] && [ ! "$(WHEELS_PURE_PYTHON_PACKAGING_ENABLE)" = "1" ]; then \
echo "WARNING: Skipping download - pure python packaging disabled" ; \
else \
query="curl -s https://pypi.org/pypi/$(WHEEL_NAME)/json" ; \
query+=" | jq -r '.releases[][]" ; \
query+=" | select(.packagetype==\"sdist\")" ; \
query+=" | select((.filename|test(\"-$(WHEEL_VERSION).tar.gz\")) or (.filename|test(\"-$(WHEEL_VERSION).zip\"))) | .url'" ; \
outFile=$$(basename $$(eval $${query} 2>/dev/null) 2</dev/null) ; \
if [ "$${outFile}" = "" ]; then \
echo "ERROR: Unable to find version on pypi.org for [$(WHEEL_NAME)]" ; \
elif [ -s $(PIP_DISTRIB_DIR)/$${outFile} ]; then \
echo "INFO: File already exists [$${outFile}]" ; \
else \
echo "wget --secure-protocol=TLSv1_2 -nv -O $(PIP_DISTRIB_DIR)/$${outFile}.part -nc $$(eval $${query})" ; \
wget --secure-protocol=TLSv1_2 -nv -O $(PIP_DISTRIB_DIR)/$${outFile}.part -nc $$(eval $${query}) ; \
mv $(PIP_DISTRIB_DIR)/$${outFile}.part $(PIP_DISTRIB_DIR)/$${outFile} ; \
fi ; \
fi

post_wheel_download_target: $(WHEEL_DOWNLOAD_TARGET)

ifeq ($(wildcard $(WHEEL_DOWNLOAD_COOKIE)),)
wheel_download: $(WHEEL_DOWNLOAD_COOKIE)

$(WHEEL_DOWNLOAD_COOKIE): $(POST_WHEEL_DOWNLOAD_TARGET)
$(create_target_dir)
@touch -f $@
else
wheel_download: ;
endif
Loading

0 comments on commit 0e05b07

Please sign in to comment.