Source: nodejs Version: 18.19.0+dfsg-3 Tags: patch User: debian-cr...@lists.debian.org Usertags: ftcbfs
Hi, I can see that quite some effort went into cross build support for nodejs. Thank you. Unfortunately, it doesn't quite just work. For one thing, doing a cross build without --dest-os or --dest-cpu is doomed to fail in surprising ways. Hence, the build should fail when they are missing (for cross builds only). Then the computation of their values is subtly wrong: * There is no Debian architecture named aarch64. * Prefer matching of DEB_HOST_ARCH_CPU over DEB_HOST_ARCH to avoid repeating cases for different kernels. * Increase coverage for loong64, ppc64el and s390. * Simplify matching when DEB_HOST_ARCH_CPU is what --dest-cpu wants. This moves quite some cases further, but in the end it does not make nodejs cross buildable for any architecture I tried. The issues are strange and I have no solutions at this time. While this bug is about passing of --dest-os and --dest-cpu and I ask you to close it when addressing that aspect, I'll also go into some detail on what goes wrong next: * arm64: Somehow manages to pass arm64-specific compiler options to a build architecture compiler. Not sure how they escaped. * armel/armhf: Very strange failure about missing header "bits/libc-header-start.h". * s390x: deps/v8/src/execution/s390/simulator-s390.cc uses bare isnan and signbit. gcc suggests you may want to be using std::isnan and std::signbit here. Not sure why this works in native builds. The s390x one looks fixable at least. In any case, I'm attaching a patch for the debian/rules aspects that I understand well and hope you agree with it. Helmut
diff --minimal -Nru nodejs-18.19.0+dfsg/debian/changelog nodejs-18.19.0+dfsg/debian/changelog --- nodejs-18.19.0+dfsg/debian/changelog 2023-12-02 02:12:25.000000000 +0100 +++ nodejs-18.19.0+dfsg/debian/changelog 2023-12-02 19:10:51.000000000 +0100 @@ -1,3 +1,10 @@ +nodejs (18.19.0+dfsg-3.1) UNRELEASED; urgency=medium + + * Non-maintainer upload. + * Improve passing of --dest-* options. (Closes: #-1) + + -- Helmut Grohne <hel...@subdivi.de> Sat, 02 Dec 2023 19:10:51 +0100 + nodejs (18.19.0+dfsg-3) unstable; urgency=medium * patch: drop fixed openssl test patch diff --minimal -Nru nodejs-18.19.0+dfsg/debian/rules nodejs-18.19.0+dfsg/debian/rules --- nodejs-18.19.0+dfsg/debian/rules 2023-11-30 16:59:46.000000000 +0100 +++ nodejs-18.19.0+dfsg/debian/rules 2023-12-02 19:10:51.000000000 +0100 @@ -50,23 +50,13 @@ # map HOST ARCH AND OS, and if unknown let upstream guess destCpu = -destCpu := $(or $(destCpu),$(if $(filter i386,$(DEB_HOST_ARCH)),ia32)) -destCpu := $(or $(destCpu),$(if $(filter x32,$(DEB_HOST_ARCH)),x32)) -destCpu := $(or $(destCpu),$(if $(filter kfreebsd-i386,$(DEB_HOST_ARCH)),ia32)) -destCpu := $(or $(destCpu),$(if $(filter hurd-i386,$(DEB_HOST_ARCH)),ia32)) -destCpu := $(or $(destCpu),$(if $(filter amd64,$(DEB_HOST_ARCH)),x64)) -destCpu := $(or $(destCpu),$(if $(filter kfreebsd-amd64,$(DEB_HOST_ARCH)),x64)) -destCpu := $(or $(destCpu),$(if $(filter armel,$(DEB_HOST_ARCH)),arm)) -destCpu := $(or $(destCpu),$(if $(filter armhf,$(DEB_HOST_ARCH)),arm)) -destCpu := $(or $(destCpu),$(if $(filter aarch64,$(DEB_HOST_ARCH)),arm64)) -destCpu := $(or $(destCpu),$(if $(filter mipsel,$(DEB_HOST_ARCH)),mipsel)) -destCpu := $(or $(destCpu),$(if $(filter mips64el,$(DEB_HOST_ARCH)),mips64el)) -destCpu := $(or $(destCpu),$(if $(filter mips64r6el,$(DEB_HOST_ARCH)),mips64el)) -destCpu := $(or $(destCpu),$(if $(filter mips,$(DEB_HOST_ARCH)),mips)) -destCpu := $(or $(destCpu),$(if $(filter powerpc,$(DEB_HOST_ARCH)),ppc)) -destCpu := $(or $(destCpu),$(if $(filter ppc64,$(DEB_HOST_ARCH)),ppc64)) -destCpu := $(or $(destCpu),$(if $(filter riscv64,$(DEB_HOST_ARCH)),riscv64)) -destCpu := $(or $(destCpu),$(if $(filter s390x,$(DEB_HOST_ARCH)),s390x)) +destCpu := $(or $(destCpu),$(if $(filter i386,$(DEB_HOST_ARCH_CPU)),ia32)) +destCpu := $(or $(destCpu),$(if $(filter amd64_32,$(DEB_HOST_ARCH_CPU)_$(DEB_HOST_ARCH_BITS)),x32)) +destCpu := $(or $(destCpu),$(if $(filter amd64,$(DEB_HOST_ARCH_CPU)),x64)) +destCpu := $(or $(destCpu),$(if $(filter mips64r6el,$(DEB_HOST_ARCH_CPU)),mips64el)) +destCpu := $(or $(destCpu),$(if $(filter powerpc,$(DEB_HOST_ARCH_CPU)),ppc)) +destCpu := $(or $(destCpu),$(if $(filter ppc64el,$(DEB_HOST_ARCH_CPU)),ppc64)) +destCpu := $(or $(destCpu),$(filter arm arm64 loong64 mipsel mips64el mips ppc64 riscv64 s390 s390x,$(DEB_HOST_ARCH_CPU))) # solaris freebsd openbsd linux destOs = @@ -75,12 +65,20 @@ ifneq (, $(destOs)) DEB_CONFIGURE_EXTRA_FLAGS += --dest-os=$(destOs) +else +ifneq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH)) +$(error "unknown --dest-os for cross compiling nodejs to $(DEB_HOST_ARCH)") +endif endif ifeq (unsupported, $(destCpu)) $(error "nodejs cannot run on $(DEB_HOST_ARCH), please consult maintainers") endif ifneq (, $(destCpu)) DEB_CONFIGURE_EXTRA_FLAGS += --dest-cpu=$(destCpu) +else +ifneq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH)) +$(error "unknown --dest-cpu for cross compiling nodejs to $(DEB_HOST_ARCH)") +endif endif ifeq (freebsd, $(destOs))