~alpine/aports

This thread contains a patchset. You're looking at the original emails, but you may wish to use the patch review UI. Review patch

[PATCH] main/nodejs: enable cross-compilation

alpine-mips-patches <info@mobile-stream.com>
Details
Message ID
<20190913114043.1578763691@mx7.valuehost.ru>
DKIM signature
missing
Download raw message
Patch: +111 -4
- fix nodejs cross-build with shared dependencies: with GYP *all*
  bundled dependencies are set to link against nodejs 'libraries'
  (a variable filled by configure) though none of them needs it.
  This is harmless for native build because of --as-needed in the
  Alpine toolchain. The work-around semi-hardcodes all those '-lz'
  etc in the node.gypi and disables 'libraries' in the configure.py
  script completely.

- the above work-around is not complete for certain host-to-target
  combinations (e.g. x86_64 to ppc64le, s390x) because common.gypi
  adds machine-dependent cflags without the _toolset=target guard.
  Such cases are considered irrelevant wrt the problem cross-build
  tries to solve.

  And there is even stricter limitation imposed by V8 itself: only
  32-bit hosts can be used to build 32-bit targets because Alpine
  systems are not bi-arch. The same applies to 64-bit host/target
  pairs. One of V8 .gypi files was patched to make this limitation
  clearer.

  (Note: target/host in nodejs and V8 are CHOST/CBUILD in Alpine)

- remove ca-certificates from makedepends as it is not needed for
  the build (runtime ca-certificates dependency is left intact).

- remove binutils-gold from makedepends for the same reason.
---
 main/nodejs/APKBUILD                          | 25 +++++-
 ...t-link-bundled-deps-with-shared-deps.patch | 90 +++++++++++++++++++
 2 files changed, 111 insertions(+), 4 deletions(-)
 create mode 100644 main/nodejs/dont-link-bundled-deps-with-shared-deps.patch

diff --git a/main/nodejs/APKBUILD b/main/nodejs/APKBUILD
index d025612fd4..9aeebb599b 100644
--- a/main/nodejs/APKBUILD
+++ b/main/nodejs/APKBUILD
@@ -52,14 +52,15 @@ arch="all !mips64 !mips64el"
license="MIT"
depends="ca-certificates"
depends_dev="libuv"
# gold is needed for mksnapshot
makedepends="$depends_dev python2 openssl-dev zlib-dev libuv-dev linux-headers
	paxmark binutils-gold http-parser-dev ca-certificates c-ares-dev"
makedepends_build="linux-headers python2 paxmark"
makedepends_host="linux-headers
	zlib-dev http-parser-dev c-ares-dev libuv-dev openssl-dev"
subpackages="$pkgname-dev $pkgname-doc npm::noarch"
provides="nodejs-lts=$pkgver"  # for backward compatibility
replaces="nodejs-current nodejs-lts"  # nodejs-lts for backward compatibility
source="https://nodejs.org/dist/v$pkgver/node-v$pkgver.tar.gz
	dont-run-gyp-files-for-bundled-deps.patch
	dont-link-bundled-deps-with-shared-deps.patch
	link-with-libatomic-on-mips32.patch
	"
builddir="$srcdir/node-v$pkgver"
@@ -68,7 +69,7 @@ prepare() {
	default_prepare

	# Remove bundled dependencies that we're not using.
	rm -rf deps/http_parser deps/openssl deps/uv deps/zlib
	rm -rf deps/cares deps/http_parser deps/openssl deps/uv deps/zlib
}

build() {
@@ -78,6 +79,21 @@ build() {
	mips*) _carchflags="--with-mips-arch-variant=r1 --with-mips-float-abi=soft";;
	esac

	# 32-bit hosts require 32-bit build system
	if [ "$CBUILD" != "$CHOST" ]; then
		export CC_host=${HOSTCC:-gcc}
		export CXX_host=${HOSTCXX:-g++}
		export LINK_host=${HOSTCXX:-g++}
		case "$CARCH" in
		aarch64) _carchflags="$_carchflags --dest-cpu=arm64";;
		arm*) _carchflags="$_carchflags --dest-cpu=arm";;
		mipsel*) _carchflags="$_carchflags --dest-cpu=mipsel";;
		ppc64*) _carchflags="$_carchflags --dest-cpu=ppc64";;
		# this covers the rest of mips* and s390x/x86/x86_64
		*) _carchflags="$_carchflags --dest-cpu=$CARCH";;
		esac
	fi

	./configure --prefix=/usr \
		$_carchflags \
		--shared-zlib \
@@ -139,4 +155,5 @@ npm() {

sha512sums="c3a95d8810599db8e9a17932c55ff57223cf9e66028e776088420023ab7ba393e9b60518a189fcab46ca2597d213f8a6414abba282a73c9501c294dbc7b041e6  node-v10.16.3.tar.gz
9d09a88074bf0093f35c5b610e73ebf4c5381df2a2b29feb69da1af0b18776a683b13f1276375bbcfc60936cc27769539e1f01b4ba94b22cad2d5f4daae14c46  dont-run-gyp-files-for-bundled-deps.patch
bf3adc95d6ddaa6f2c4a4eb784c94f50aba22052d7769aba45ee5fdf47d360e9e16a1ac09f0e84027f63816442b572b4901e67936dae9bacd4a2ca6ca4086533  dont-link-bundled-deps-with-shared-deps.patch
4fd3f10bd82d1e851ed000169c2635c001a4a051283edf96f1efb2260e2d395199dd5843f79f1cff8f2c0c65462c44241c508ea67835dfbd9880d9196fae290a  link-with-libatomic-on-mips32.patch"
diff --git a/main/nodejs/dont-link-bundled-deps-with-shared-deps.patch b/main/nodejs/dont-link-bundled-deps-with-shared-deps.patch
new file mode 100644
index 0000000000..b2ea137122
--- /dev/null
+++ b/main/nodejs/dont-link-bundled-deps-with-shared-deps.patch
@@ -0,0 +1,90 @@
--- a/configure.py
+++ b/configure.py
@@ -1128,7 +1128,7 @@
   shared_lib = 'shared_' + lib
   output['variables']['node_' + shared_lib] = b(getattr(options, shared_lib))
 
-  if getattr(options, shared_lib):
+  if getattr(options, shared_lib) and False:
     (pkg_libs, pkg_cflags, pkg_libpath, pkg_modversion) = pkg_config(lib)
 
     if options.__dict__[shared_lib + '_includes']:
--- a/deps/v8/gypfiles/toolchain.gypi
+++ b/deps/v8/gypfiles/toolchain.gypi
@@ -141,7 +141,7 @@
       host_arch=="s390" or host_arch=="s390x" or \
       clang==1', {
       'variables': {
-        'host_cxx_is_biarch%': 1,
+        'host_cxx_is_biarch%': 0,
        },
      }, {
       'variables': {
@@ -152,7 +152,7 @@
       target_arch=="ppc" or target_arch=="ppc64" or target_arch=="s390" or \
       target_arch=="s390x" or clang==1', {
       'variables': {
-        'target_cxx_is_biarch%': 1,
+        'target_cxx_is_biarch%': 0,
        },
      }, {
       'variables': {
--- a/node.gypi
+++ b/node.gypi
@@ -161,14 +161,26 @@
           ],
         }],
       ],
+    }, {
+      'link_settings': {
+        'libraries': [ '-lz' ],
+      },
     }],
 
     [ 'node_shared_http_parser=="false"', {
       'dependencies': [ 'deps/http_parser/http_parser.gyp:http_parser' ],
+    }, {
+      'link_settings': {
+        'libraries': [ '-lhttp_parser' ],
+      },
     }],
 
     [ 'node_shared_cares=="false"', {
       'dependencies': [ 'deps/cares/cares.gyp:cares' ],
+    }, {
+      'link_settings': {
+        'libraries': [ '-lcares' ],
+      },
     }],
 
     [ 'node_shared_libuv=="false"', {
@@ -199,10 +211,18 @@
           ],
         }],
       ],
+    }, {
+      'link_settings': {
+        'libraries': [ '-luv' ],
+      },
     }],
 
     [ 'node_shared_nghttp2=="false"', {
       'dependencies': [ 'deps/nghttp2/nghttp2.gyp:nghttp2' ],
+    }, {
+      'link_settings': {
+        'libraries': [ '-lnghttp2' ],
+      },
     }],
 
     [ 'OS=="mac"', {
@@ -351,6 +371,10 @@
               ],
             }],
           ],
+        }, {
+          'link_settings': {
+            'libraries': [ '-lcrypto', '-lssl' ],
+          },
         }]]
 
     }, {
-- 
2.23.0
Reply to thread Export thread (mbox)