17417: add the scaffolding for multi-arch support for our Python
authorWard Vandewege <ward@curii.com>
Wed, 22 Dec 2021 19:53:20 +0000 (14:53 -0500)
committerWard Vandewege <ward@curii.com>
Wed, 22 Dec 2021 19:53:20 +0000 (14:53 -0500)
       packages. Cross-compilation for Python does not work yet, though
       native compilation on an arm64 system works now.

Arvados-DCO-1.1-Signed-off-by: Ward Vandewege <ward@curii.com>

build/run-build-packages.sh
build/run-library.sh

index 1aa487a7bd408bc7f040d9da21db31f0a208609f..9406be71411e0eb2e3d6a2f79d12b4c0a177a544 100755 (executable)
@@ -251,7 +251,7 @@ if [[ -z "$ONLY_BUILD" ]] || [[ "arvados-src" == "$ONLY_BUILD" ]] ; then
       arvados_src_version="$(version_from_git)"
 
       cd $WORKSPACE/packages/$TARGET
-      test_package_presence arvados-src $arvados_src_version src ""
+      test_package_presence arvados-src "$arvados_src_version" src ""
 
       if [[ "$?" == "0" ]]; then
         cd "$WORKSPACE"
index dd8e4b274702e4a1e5a38c7dc18fd231092409b6..33bb09f8296fc34c298993948574d2128916528d 100755 (executable)
@@ -470,6 +470,32 @@ fpm_build_virtualenv () {
   shift
   PACKAGE_TYPE=${1:-python}
   shift
+  native_arch="amd64"
+  if [[ "$HOSTTYPE" == "aarch64" ]]; then
+    native_arch="arm64"
+  fi
+
+  if [[ -n "$ONLY_ARCH" ]] && [[ "$ONLY_ARCH" == "$native_arch" ]]; then
+      fpm_build_virtualenv_worker "$PKG" "$PKG_DIR" "$PACKAGE_TYPE" "$ONLY_ARCH"
+  elif [[ -z "$ONLY_ARCH" ]]; then
+    for arch in $native_arch; do
+      fpm_build_virtualenv_worker "$PKG" "$PKG_DIR" "$PACKAGE_TYPE" "$arch"
+    done
+  else
+    echo "Error: no cross compilation support for Python yet, can not build $PKG for $ONLY_ARCH"
+  fi
+}
+
+# Build python packages with a virtualenv built-in
+fpm_build_virtualenv_worker () {
+  PKG=$1
+  shift
+  PKG_DIR=$1
+  shift
+  PACKAGE_TYPE=${1:-python}
+  shift
+  arch=${1:-amd64}
+  shift
 
   # Set up
   STDOUT_IF_DEBUG=/dev/null
@@ -545,11 +571,11 @@ fpm_build_virtualenv () {
   # We can't do this earlier than here, because we need PYTHON_VERSION...
   # This isn't so bad; the sdist call above is pretty quick compared to
   # the invocation of virtualenv and fpm, below.
-  if ! test_package_presence "$PYTHON_PKG" $UNFILTERED_PYTHON_VERSION $PACKAGE_TYPE $ARVADOS_BUILDING_ITERATION; then
+  if ! test_package_presence "$PYTHON_PKG" "$UNFILTERED_PYTHON_VERSION" "$PACKAGE_TYPE" "$ARVADOS_BUILDING_ITERATION" "$arch"; then
     return 0
   fi
 
-  echo "Building $FORMAT package for $PKG from $PKG_DIR"
+  echo "Building $FORMAT ($arch) package for $PKG from $PKG_DIR"
 
   # Package the sdist in a virtualenv
   echo "Creating virtualenv..."
@@ -634,6 +660,10 @@ fpm_build_virtualenv () {
 
   declare -a COMMAND_ARR=("fpm" "-s" "dir" "-t" "$FORMAT")
 
+  if [[ "${arch}" != "amd64" ]]; then
+    COMMAND_ARR+=("-a${arch}")
+  fi
+
   if [[ "$MAINTAINER" != "" ]]; then
     COMMAND_ARR+=('--maintainer' "$MAINTAINER")
   fi