20797: Update cross compilation detection logic
authorBrett Smith <brett.smith@curii.com>
Mon, 31 Jul 2023 15:37:38 +0000 (11:37 -0400)
committerBrett Smith <brett.smith@curii.com>
Mon, 31 Jul 2023 15:37:38 +0000 (11:37 -0400)
The immediate bug that needs to be fixed is that we currently don't
support cross compilation on rocky8.

DRY up the code to try to make it easier to follow what's going on
here.

Arvados-DCO-1.1-Signed-off-by: Brett Smith <brett.smith@curii.com>

build/README
build/run-library.sh

index f31d39a21f8b175a52ce77339fba037086a0c827..212e4586c41e5d15818b6aeda43487bc95322aac 100644 (file)
@@ -14,13 +14,17 @@ Quickstart
 Build and test all the packages for debian10 on your architecture by
 running:
 
-    ./run-build-test-packages-one-target.sh --arch "$(arch)"
+    ./run-build-test-packages-one-target.sh
 
 This will build package build and test Docker images for debian10, build all
 packages in a build container, then test all packages in a test container.
 
 Use a different distro by adding the `--target TARGET` option.
 
+Limit the build to a single architecture by adding the `--arch ARCH`
+option. Supported architectures are amd64 and arm64. Note cross-compilation
+from amd64 to arm64 is currently only supported on Debian 11+.
+
 Limit the build to a single package by adding the `--only-build
 PACKAGE_NAME` option. This is helpful when a build is mostly in good shape
 and you're tracking down last bugs in one or two packages.
index 49cab6a0f1acef2fa9ccf670bcaf51ef4be46b65..0766b736425450a55e5bcdf473cda19dff2f6044 100755 (executable)
@@ -174,25 +174,23 @@ package_go_binary() {
     return 1
   fi
 
-  cross_compilation=1
-  if [[ "$TARGET" == "centos7" ]]; then
-    if [[ "$native_arch" == "amd64" ]] && [[ -n "$target_arch" ]] && [[ "$native_arch" != "$target_arch" ]]; then
-      echo "Error: no cross compilation support for Go on $native_arch for $TARGET, can not build $prog for $target_arch"
-      return 1
-    fi
-    cross_compilation=0
-  fi
-
-  if [[ "$package_format" == "deb" ]] &&
-     [[ "$TARGET" == "debian10" ]] || [[ "$TARGET" == "ubuntu1804" ]] || [[ "$TARGET" == "ubuntu2004" ]]; then
-    # Due to bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=983477 the libfuse-dev package for arm64 does
-    # not install properly side by side with the amd64 version before Debian 11.
-    if [[ "$native_arch" == "amd64" ]] && [[ -n "$target_arch" ]] && [[ "$native_arch" != "$target_arch" ]]; then
-      echo "Error: no cross compilation support for Go on $native_arch for $TARGET, can not build $prog for $target_arch"
-      return 1
-    fi
-    cross_compilation=0
-  fi
+  case "$package_format-$TARGET" in
+    # Older Debian/Ubuntu do not support cross compilation because the
+    # libfuse package does not support multiarch. See
+    # <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=983477>.
+    # Red Hat-based distributions do not support native cross compilation at
+    # all (they use a qemu-based solution we haven't implemented yet).
+    deb-debian10|deb-ubuntu1804|deb-ubuntu2004|rpm-*)
+      cross_compilation=0
+      if [[ "$native_arch" == "amd64" ]] && [[ -n "$target_arch" ]] && [[ "$native_arch" != "$target_arch" ]]; then
+        echo "Error: no cross compilation support for Go on $native_arch for $TARGET, can not build $prog for $target_arch"
+        return 1
+      fi
+      ;;
+    *)
+      cross_compilation=1
+      ;;
+  esac
 
   if [[ -n "$target_arch" ]]; then
     archs=($target_arch)