unos-repository

APK repository for unos
git clone git://git.finwo.net/misc/unos-repository
Log | Files | Refs | README

kernel.inc (5347B)


      1 #!/bin/sh
      2 # mk/kernel.inc - shared kbuild recipe for the linux-{longterm,stable,
      3 # mainline} templates. Sourced at template top level via
      4 # . "${UNOS_MKDIR}/kernel.inc" (UNOS_MKDIR is exported by the driver before the
      5 # template is sourced).
      6 #
      7 # The template sets variables, then the standard phases call in:
      8 #   version=... (checksum, distfiles as usual)
      9 #   KDELTA_ENABLE="IKCONFIG IKCONFIG_PROC"   (forced =y, no CONFIG_ prefix)
     10 #   KDELTA_MODULE="NET_VRF"                   (forced =m)
     11 #   KDELTA_DISABLE="MODULE_SIG"               (forced n)
     12 #   KASSERT_Y="IPV6 ..."  KASSERT_M="NET_VRF" KASSERT_N="MODULE_SIG"
     13 #   do_configure() { kernel_configure; }
     14 #   do_build() { kernel_build; }
     15 #   do_install() { kernel_install; }
     16 #   sub_linux() { spick boot "lib/modules"; }                # linux
     17 #   sub_linux_headers() { spick usr/include; }               # linux-headers
     18 #   empty sub functions (`:`) for the two metas.
     19 #
     20 # Conventions (locked here, not per template):
     21 # - defconfig + explicit deltas + olddefconfig. Deltas and asserts are
     22 #   fail-loud: a renamed/vanished symbol breaks the build, never the boot.
     23 # - modules_install with INSTALL_MOD_STRIP=1; build/source symlinks removed
     24 #   (absolute links into the build tree must never ship). Module dependency
     25 #   maps are generated at build time with host kmod depmod -b (explicit
     26 #   version: uname lies in containers) and asserted present.
     27 # - headers = sanitized `headers_install` (user API). A module-build tree
     28 #   (full source for out-of-tree .ko like openbcm) is a separate follow-up,
     29 #   not silently half-shipped here.
     30 # - KREL (e.g. 6.18.51, 7.3.0-rc3) is derived via `make kernelrelease`,
     31 #   never assumed from ${version}: pre-release trees differ (7.3_rc3 apk
     32 #   version vs 7.3.0-rc3 uname). All install paths use KREL.
     33 # - Reproducibility: KBUILD_BUILD_USER/HOST/TIMESTAMP (from
     34 #   SOURCE_DATE_EPOCH, driver-exported).
     35 
     36 kernel_configure() {
     37   cd "${WRKSRC}"
     38   [ -f scripts/config ] || die "kernel: scripts/config missing"
     39   # ARCH defaults to x86_64 for the primary target; aarch64 when cross-building
     40   # (the conductor dispatches per-arch, builder calls ARCH=aarch64 make).
     41   : "${ARCH:=x86_64}"
     42   case "${ARCH}" in arm64) ARCH=aarch64 ;; esac
     43   msg "kernel: defconfig (ARCH=${ARCH})"
     44   make ARCH="${ARCH}" defconfig >/dev/null || die "kernel: defconfig failed"
     45   for s in ${KDELTA_ENABLE:-}; do
     46     ./scripts/config --enable "CONFIG_${s}" || die "kernel: cannot enable CONFIG_${s}"
     47   done
     48   for s in ${KDELTA_MODULE:-}; do
     49     ./scripts/config --module "CONFIG_${s}" || die "kernel: cannot modularize CONFIG_${s}"
     50   done
     51   for s in ${KDELTA_DISABLE:-}; do
     52     ./scripts/config --disable "CONFIG_${s}" || die "kernel: cannot disable CONFIG_${s}"
     53   done
     54   if [ -n "${KDELTA_ENABLE:-}${KDELTA_MODULE:-}${KDELTA_DISABLE:-}" ]; then
     55     make ARCH="${ARCH}" olddefconfig >/dev/null || die "kernel: olddefconfig failed"
     56   fi
     57   for s in ${KASSERT_Y:-}; do
     58     grep -qx "CONFIG_${s}=y" .config || die "kernel: CONFIG_${s} is not =y"
     59   done
     60   for s in ${KASSERT_M:-}; do
     61     grep -qx "CONFIG_${s}=m" .config || die "kernel: CONFIG_${s} is not =m"
     62   done
     63   for s in ${KASSERT_N:-}; do
     64     grep -qx "# CONFIG_${s} is not set" .config || die "kernel: CONFIG_${s} is set"
     65   done
     66   KREL=$(make -s ARCH="${ARCH}" kernelrelease) || die "kernel: kernelrelease failed"
     67   [ -n "${KREL}" ] || die "kernel: empty KREL"
     68   export KREL
     69   msg "kernel: release ${KREL}"
     70 }
     71 
     72 kernel_build() {
     73   cd "${WRKSRC}"
     74   : "${ARCH:=x86_64}"
     75   case "${ARCH}" in arm64) ARCH=aarch64 ;; esac
     76   make ARCH="${ARCH}" -j"$(nproc)" \
     77     KBUILD_BUILD_USER=unos \
     78     KBUILD_BUILD_HOST=unos \
     79     KBUILD_BUILD_TIMESTAMP="$(date -u -d "@${SOURCE_DATE_EPOCH}" '+%Y-%m-%d %H:%M:%S')" \
     80     bzImage modules || die "kernel: build failed"
     81   # bzImage path varies by arch
     82   case "${ARCH}" in
     83     x86_64) [ -f arch/x86/boot/bzImage ] || die "kernel: bzImage missing" ;;
     84     aarch64) [ -f arch/arm64/boot/Image ] || die "kernel: Image missing (aarch64)" ;;
     85   esac
     86 }
     87 
     88 kernel_install() {
     89   cd "${WRKSRC}"
     90   : "${ARCH:=x86_64}"
     91   case "${ARCH}" in arm64) ARCH=aarch64 ;; esac
     92   case "${ARCH}" in
     93     x86_64) install -D -m 644 arch/x86/boot/bzImage "${DESTDIR}/boot/vmlinuz-${KREL}" ;;
     94     aarch64) install -D -m 644 arch/arm64/boot/Image "${DESTDIR}/boot/vmlinuz-${KREL}" ;;
     95   esac
     96   ln -sf "vmlinuz-${KREL}" "${DESTDIR}/boot/vmlinuz"
     97   install -D -m 644 System.map "${DESTDIR}/boot/System.map-${KREL}"
     98   install -D -m 644 .config "${DESTDIR}/boot/config-${KREL}"
     99   make ARCH="${ARCH}" INSTALL_MOD_PATH="${DESTDIR}" INSTALL_MOD_STRIP=1 \
    100     modules_install >/dev/null || die "kernel: modules_install failed"
    101   # absolute build-tree symlinks must never ship
    102   rm -f "${DESTDIR}/lib/modules/${KREL}/build" "${DESTDIR}/lib/modules/${KREL}/source"
    103   make ARCH="${ARCH}" INSTALL_HDR_PATH="${DESTDIR}/usr" \
    104     headers_install >/dev/null || die "kernel: headers_install failed"
    105   # dependency maps at build time (explicit version: uname lies in userns)
    106   command -v depmod >/dev/null 2>&1 || die "kernel: host depmod missing"
    107   depmod -b "${DESTDIR}" "${KREL}" || die "kernel: depmod failed"
    108   [ -d "${DESTDIR}/lib/modules/${KREL}" ] || die "kernel: no modules dir"
    109   [ -f "${DESTDIR}/lib/modules/${KREL}/modules.dep" ] || die "kernel: no modules.dep"
    110   [ -f "${DESTDIR}/usr/include/linux/version.h" ] || die "kernel: no headers"
    111 }