[RFC,07/15] npm_build: add class to build and install an npm package and its dependencies

Message ID 20211124144739.2250-8-stefan.herbrechtsmeier-oss@weidmueller.com
State New
Headers show
Series Rework npm support | expand

Commit Message

Stefan Herbrechtsmeier Nov. 24, 2021, 2:47 p.m. UTC
From: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>

Signed-off-by: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
---

 meta/classes/npm_build.bbclass | 77 ++++++++++++++++++++++++++++++++++
 1 file changed, 77 insertions(+)
 create mode 100644 meta/classes/npm_build.bbclass

Patch

diff --git a/meta/classes/npm_build.bbclass b/meta/classes/npm_build.bbclass
new file mode 100644
index 0000000000..388eef9519
--- /dev/null
+++ b/meta/classes/npm_build.bbclass
@@ -0,0 +1,77 @@ 
+# Copyright (C) 2021 Weidmüller Interface GmbH & Co. KG
+# Author: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
+#
+# A bbclass to build and install an npm package and its dependencies.
+#
+# Usage:
+#  inherit npm_build
+#
+# Optional variables:
+#  EXTRA_OENPM_BUILD:
+#    Extra arguments for the npm build script.
+#
+#  NPM_BUILD_ARCH:
+#    Override the auto generated npm architecture for host build
+#
+#  NPM_BUILD_SCRIPT:
+#    Override the default `build` script
+
+inherit npm
+
+EXTRA_OENPM_BUILD ?= ""
+
+NPM_BUILD_ARCH ?= "${@npm_target_arch_map(d.getVar("BUILD_ARCH"))}"
+
+NPM_BUILD_SCRIPT ?= "build"
+
+# Override npm package source path with build package folder
+NPM_BUILD_SOURCEPATH = "${S}"
+NPM_SOURCEPATH = "${B}/src"
+
+oe_runnpm_run_script() {
+    script=$1
+    shift
+
+    oe_runnpm run-script \
+        ${script} \
+        -- \
+        "$@"
+}
+
+oe_npm_setup_host_env () {
+    export CC="${BUILD_CC}"
+    export CXX="${BUILD_CXX}"
+
+    export CPP="${BUILD_CPP}"
+    export LD="${BUILD_LD}"
+
+    export AR="${BUILD_AR}"
+    export STRIP="${BUILD_STRIP}"
+    export NM="${BUILD_NM}"
+    export READELF="${BUILD_READELF}"
+
+    export CPPFLAGS="${BUILD_CPPFLAGS}"
+    export CFLAGS="${BUILD_CFLAGS}"
+    export CXXFLAGS="${BUILD_CXXFLAGS}"
+    export LDFLAGS="${BUILD_LDFLAGS}"
+}
+
+do_compile_host() {
+    oe_npm_setup_host_env
+
+    # Copy sources without preserve mode and ownership
+    # to prevent ugly file permissions
+    cp -a --no-preserve=mode,ownership ${NPM_BUILD_SOURCEPATH}/. ${NPM_SOURCEPATH}/
+
+    # Rebuild dependencies
+    cd ${NPM_SOURCEPATH}
+    oe_runnpm_rebuild ${NPM_BUILD_ARCH} ${EXTRA_OENPM}
+
+    # Run Build script to build main npm package
+    if [ -n "${NPM_BUILD_SCRIPT}" ] ; then
+        cd ${NPM_SOURCEPATH}
+        oe_runnpm_run_script ${NPM_BUILD_SCRIPT} ${EXTRA_OENPM_BUILD}
+    fi
+}
+do_compile_host[cleandirs] = "${NPM_SOURCEPATH}"
+addtask compile_host after do_patch do_prepare_recipe_sysroot before do_compile do_install