new file mode 100644
@@ -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