1b41d920aSRiku Voipio#!/bin/sh 2b41d920aSRiku Voipio# 3b41d920aSRiku Voipio# Copyright 2003 Wichert Akkerman <wichert@wiggy.net> 4b41d920aSRiku Voipio# 5b41d920aSRiku Voipio# Simple script to generate a debian/ directory for a Linux kernel. 6b41d920aSRiku Voipio 7b41d920aSRiku Voipioset -e 8b41d920aSRiku Voipio 908d3892cSBen Hutchingsis_enabled() { 106fb7ef5aSMasahiro Yamada grep -q "^$1=y" include/config/auto.conf 1108d3892cSBen Hutchings} 1208d3892cSBen Hutchings 1308d3892cSBen Hutchingsif_enabled_echo() { 1408d3892cSBen Hutchings if is_enabled "$1"; then 1508d3892cSBen Hutchings echo -n "$2" 1608d3892cSBen Hutchings elif [ $# -ge 3 ]; then 1708d3892cSBen Hutchings echo -n "$3" 1808d3892cSBen Hutchings fi 1908d3892cSBen Hutchings} 2008d3892cSBen Hutchings 21b41d920aSRiku Voipioset_debarch() { 22f2abcc13SBen Hutchings if [ -n "$KBUILD_DEBARCH" ] ; then 23f2abcc13SBen Hutchings debarch="$KBUILD_DEBARCH" 24f2abcc13SBen Hutchings return 25f2abcc13SBen Hutchings fi 26f2abcc13SBen Hutchings 27b41d920aSRiku Voipio # Attempt to find the correct Debian architecture 28b41d920aSRiku Voipio case "$UTS_MACHINE" in 2975ebcee7SBen Hutchings i386|ia64|alpha|m68k|riscv*) 30b41d920aSRiku Voipio debarch="$UTS_MACHINE" ;; 31b41d920aSRiku Voipio x86_64) 32b41d920aSRiku Voipio debarch=amd64 ;; 33b41d920aSRiku Voipio sparc*) 347e548e9aSMasahiro Yamada debarch=sparc$(if_enabled_echo CONFIG_64BIT 64) ;; 35b41d920aSRiku Voipio s390*) 364260ecd0SBen Hutchings debarch=s390x ;; 37b41d920aSRiku Voipio ppc*) 387e548e9aSMasahiro Yamada if is_enabled CONFIG_64BIT; then 397e548e9aSMasahiro Yamada debarch=ppc64$(if_enabled_echo CONFIG_CPU_LITTLE_ENDIAN el) 4050d511baSBen Hutchings else 417e548e9aSMasahiro Yamada debarch=powerpc$(if_enabled_echo CONFIG_SPE spe) 4250d511baSBen Hutchings fi 4350d511baSBen Hutchings ;; 44b41d920aSRiku Voipio parisc*) 45b41d920aSRiku Voipio debarch=hppa ;; 46b41d920aSRiku Voipio mips*) 477e548e9aSMasahiro Yamada if is_enabled CONFIG_CPU_LITTLE_ENDIAN; then 487e548e9aSMasahiro Yamada debarch=mips$(if_enabled_echo CONFIG_64BIT 64)$(if_enabled_echo CONFIG_CPU_MIPSR6 r6)el 497e548e9aSMasahiro Yamada elif is_enabled CONFIG_CPU_MIPSR6; then 507e548e9aSMasahiro Yamada debarch=mips$(if_enabled_echo CONFIG_64BIT 64)r6 51159b3794SBen Hutchings else 52159b3794SBen Hutchings debarch=mips 53159b3794SBen Hutchings fi 54159b3794SBen Hutchings ;; 55b41d920aSRiku Voipio aarch64|arm64) 56b41d920aSRiku Voipio debarch=arm64 ;; 57b41d920aSRiku Voipio arm*) 587e548e9aSMasahiro Yamada if is_enabled CONFIG_AEABI; then 597e548e9aSMasahiro Yamada debarch=arm$(if_enabled_echo CONFIG_VFP hf el) 60b41d920aSRiku Voipio else 61b41d920aSRiku Voipio debarch=arm 62b41d920aSRiku Voipio fi 63b41d920aSRiku Voipio ;; 64822f44fbSBen Hutchings openrisc) 65822f44fbSBen Hutchings debarch=or1k ;; 6679a85b55SBen Hutchings sh) 677e548e9aSMasahiro Yamada if is_enabled CONFIG_CPU_SH3; then 687e548e9aSMasahiro Yamada debarch=sh3$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb) 697e548e9aSMasahiro Yamada elif is_enabled CONFIG_CPU_SH4; then 707e548e9aSMasahiro Yamada debarch=sh4$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb) 7179a85b55SBen Hutchings fi 7279a85b55SBen Hutchings ;; 7379a85b55SBen Hutchings esac 7479a85b55SBen Hutchings if [ -z "$debarch" ]; then 75091d30aeSBen Hutchings debarch=$(dpkg-architecture -qDEB_HOST_ARCH) 76b41d920aSRiku Voipio echo "" >&2 77b41d920aSRiku Voipio echo "** ** ** WARNING ** ** **" >&2 78b41d920aSRiku Voipio echo "" >&2 79b41d920aSRiku Voipio echo "Your architecture doesn't have its equivalent" >&2 80b41d920aSRiku Voipio echo "Debian userspace architecture defined!" >&2 81091d30aeSBen Hutchings echo "Falling back to the current host architecture ($debarch)." >&2 82b41d920aSRiku Voipio echo "Please add support for $UTS_MACHINE to ${0} ..." >&2 83b41d920aSRiku Voipio echo "" >&2 8479a85b55SBen Hutchings fi 85b41d920aSRiku Voipio} 86b41d920aSRiku Voipio 87*aa7d233fSMasahiro Yamada# Create debian/source/ if it is a source package build 88*aa7d233fSMasahiro Yamadagen_source () 89*aa7d233fSMasahiro Yamada{ 90*aa7d233fSMasahiro Yamada mkdir -p debian/source 91*aa7d233fSMasahiro Yamada 92*aa7d233fSMasahiro Yamada echo "3.0 (quilt)" > debian/source/format 93*aa7d233fSMasahiro Yamada 94*aa7d233fSMasahiro Yamada { 95*aa7d233fSMasahiro Yamada echo "diff-ignore" 96*aa7d233fSMasahiro Yamada echo "extend-diff-ignore = .*" 97*aa7d233fSMasahiro Yamada } > debian/source/local-options 98*aa7d233fSMasahiro Yamada 99*aa7d233fSMasahiro Yamada # Add .config as a patch 100*aa7d233fSMasahiro Yamada mkdir -p debian/patches 101*aa7d233fSMasahiro Yamada { 102*aa7d233fSMasahiro Yamada echo "Subject: Add .config" 103*aa7d233fSMasahiro Yamada echo "Author: ${maintainer}" 104*aa7d233fSMasahiro Yamada echo 105*aa7d233fSMasahiro Yamada echo "--- /dev/null" 106*aa7d233fSMasahiro Yamada echo "+++ linux/.config" 107*aa7d233fSMasahiro Yamada diff -u /dev/null "${KCONFIG_CONFIG}" | tail -n +3 108*aa7d233fSMasahiro Yamada } > debian/patches/config.patch 109*aa7d233fSMasahiro Yamada echo config.patch > debian/patches/series 110*aa7d233fSMasahiro Yamada 111*aa7d233fSMasahiro Yamada "${srctree}/scripts/package/gen-diff-patch" debian/patches/diff.patch 112*aa7d233fSMasahiro Yamada if [ -s debian/patches/diff.patch ]; then 113*aa7d233fSMasahiro Yamada sed -i " 114*aa7d233fSMasahiro Yamada 1iSubject: Add local diff 115*aa7d233fSMasahiro Yamada 1iAuthor: ${maintainer} 116*aa7d233fSMasahiro Yamada 1i 117*aa7d233fSMasahiro Yamada " debian/patches/diff.patch 118*aa7d233fSMasahiro Yamada 119*aa7d233fSMasahiro Yamada echo diff.patch >> debian/patches/series 120*aa7d233fSMasahiro Yamada else 121*aa7d233fSMasahiro Yamada rm -f debian/patches/diff.patch 122*aa7d233fSMasahiro Yamada fi 123*aa7d233fSMasahiro Yamada} 124*aa7d233fSMasahiro Yamada 1257bf4582dSMasahiro Yamadarm -rf debian 126*aa7d233fSMasahiro Yamadamkdir debian 127*aa7d233fSMasahiro Yamada 128*aa7d233fSMasahiro Yamadaemail=${DEBEMAIL-$EMAIL} 129*aa7d233fSMasahiro Yamada 130*aa7d233fSMasahiro Yamada# use email string directly if it contains <email> 131*aa7d233fSMasahiro Yamadaif echo "${email}" | grep -q '<.*>'; then 132*aa7d233fSMasahiro Yamada maintainer=${email} 133*aa7d233fSMasahiro Yamadaelse 134*aa7d233fSMasahiro Yamada # or construct the maintainer string 135*aa7d233fSMasahiro Yamada user=${KBUILD_BUILD_USER-$(id -nu)} 136*aa7d233fSMasahiro Yamada name=${DEBFULLNAME-${user}} 137*aa7d233fSMasahiro Yamada if [ -z "${email}" ]; then 138*aa7d233fSMasahiro Yamada buildhost=${KBUILD_BUILD_HOST-$(hostname -f 2>/dev/null || hostname)} 139*aa7d233fSMasahiro Yamada email="${user}@${buildhost}" 140*aa7d233fSMasahiro Yamada fi 141*aa7d233fSMasahiro Yamada maintainer="${name} <${email}>" 142*aa7d233fSMasahiro Yamadafi 143*aa7d233fSMasahiro Yamada 144*aa7d233fSMasahiro Yamadaif [ "$1" = --need-source ]; then 145*aa7d233fSMasahiro Yamada gen_source 146*aa7d233fSMasahiro Yamadafi 1477bf4582dSMasahiro Yamada 148b41d920aSRiku Voipio# Some variables and settings used throughout the script 149b41d920aSRiku Voipioversion=$KERNELRELEASE 150b41d920aSRiku Voipioif [ -n "$KDEB_PKGVERSION" ]; then 151b41d920aSRiku Voipio packageversion=$KDEB_PKGVERSION 152b41d920aSRiku Voipioelse 15305e96e96SMasahiro Yamada packageversion=$(${srctree}/scripts/setlocalversion --no-local ${srctree})-$($srctree/init/build-version) 154b41d920aSRiku Voipiofi 1556eabebb1SMasahiro Yamadasourcename=${KDEB_SOURCENAME:-linux-upstream} 156b41d920aSRiku Voipio 157b41d920aSRiku Voipioif [ "$ARCH" = "um" ] ; then 1580fa21cf4SMasahiro Yamada packagename=user-mode-linux 1590fa21cf4SMasahiro Yamadaelse 1600fa21cf4SMasahiro Yamada packagename=linux-image 161b41d920aSRiku Voipiofi 162b41d920aSRiku Voipio 1630fa21cf4SMasahiro Yamadadebarch= 1640fa21cf4SMasahiro Yamadaset_debarch 1650fa21cf4SMasahiro Yamada 166b41d920aSRiku Voipio# Try to determine distribution 167b41d920aSRiku Voipioif [ -n "$KDEB_CHANGELOG_DIST" ]; then 168b41d920aSRiku Voipio distribution=$KDEB_CHANGELOG_DIST 169b41d920aSRiku Voipio# In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog 170b41d920aSRiku Voipioelif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then 171b41d920aSRiku Voipio : # nothing to do in this case 172b41d920aSRiku Voipioelse 173b41d920aSRiku Voipio distribution="unstable" 174b41d920aSRiku Voipio echo >&2 "Using default distribution of 'unstable' in the changelog" 175b41d920aSRiku Voipio echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly" 176b41d920aSRiku Voipiofi 177b41d920aSRiku Voipio 178b41d920aSRiku Voipioecho $debarch > debian/arch 1798ffdc54bSArd Biesheuvelextra_build_depends=", $(if_enabled_echo CONFIG_UNWINDER_ORC libelf-dev:native)" 1807e548e9aSMasahiro Yamadaextra_build_depends="$extra_build_depends, $(if_enabled_echo CONFIG_SYSTEM_TRUSTED_KEYRING libssl-dev:native)" 181b41d920aSRiku Voipio 182b41d920aSRiku Voipio# Generate a simple changelog template 183b41d920aSRiku Voipiocat <<EOF > debian/changelog 184b41d920aSRiku Voipio$sourcename ($packageversion) $distribution; urgency=low 185b41d920aSRiku Voipio 186b41d920aSRiku Voipio * Custom built Linux kernel. 187b41d920aSRiku Voipio 188b41d920aSRiku Voipio -- $maintainer $(date -R) 189b41d920aSRiku VoipioEOF 190b41d920aSRiku Voipio 191b41d920aSRiku Voipio# Generate copyright file 192b41d920aSRiku Voipiocat <<EOF > debian/copyright 193b41d920aSRiku VoipioThis is a packacked upstream version of the Linux kernel. 194b41d920aSRiku Voipio 195b41d920aSRiku VoipioThe sources may be found at most Linux archive sites, including: 196b41d920aSRiku Voipiohttps://www.kernel.org/pub/linux/kernel 197b41d920aSRiku Voipio 198b41d920aSRiku VoipioCopyright: 1991 - 2018 Linus Torvalds and others. 199b41d920aSRiku Voipio 200b41d920aSRiku VoipioThe git repository for mainline kernel development is at: 201b41d920aSRiku Voipiogit://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 202b41d920aSRiku Voipio 203b41d920aSRiku Voipio This program is free software; you can redistribute it and/or modify 204b41d920aSRiku Voipio it under the terms of the GNU General Public License as published by 205b41d920aSRiku Voipio the Free Software Foundation; version 2 dated June, 1991. 206b41d920aSRiku Voipio 207b41d920aSRiku VoipioOn Debian GNU/Linux systems, the complete text of the GNU General Public 208b41d920aSRiku VoipioLicense version 2 can be found in \`/usr/share/common-licenses/GPL-2'. 209b41d920aSRiku VoipioEOF 210b41d920aSRiku Voipio 211b41d920aSRiku Voipio# Generate a control file 212b41d920aSRiku Voipiocat <<EOF > debian/control 213b41d920aSRiku VoipioSource: $sourcename 214b41d920aSRiku VoipioSection: kernel 215b41d920aSRiku VoipioPriority: optional 216b41d920aSRiku VoipioMaintainer: $maintainer 2173e854180SGuillem JoverRules-Requires-Root: no 21836862e14SMasahiro YamadaBuild-Depends: bc, debhelper, rsync, kmod, cpio, bison, flex $extra_build_depends 21916a122c7SAlexander A. KlimovHomepage: https://www.kernel.org/ 220b41d920aSRiku Voipio 2210fa21cf4SMasahiro YamadaPackage: $packagename-$version 222b41d920aSRiku VoipioArchitecture: $debarch 223b41d920aSRiku VoipioDescription: Linux kernel, version $version 224b41d920aSRiku Voipio This package contains the Linux kernel, modules and corresponding other 225b41d920aSRiku Voipio files, version: $version. 22636862e14SMasahiro YamadaEOF 22736862e14SMasahiro Yamada 22836862e14SMasahiro Yamadaif [ "${SRCARCH}" != um ]; then 22936862e14SMasahiro Yamadacat <<EOF >> debian/control 230b41d920aSRiku Voipio 231b41d920aSRiku VoipioPackage: linux-libc-dev 232b41d920aSRiku VoipioSection: devel 233b41d920aSRiku VoipioProvides: linux-kernel-headers 234b41d920aSRiku VoipioArchitecture: $debarch 235b41d920aSRiku VoipioDescription: Linux support headers for userspace development 236b41d920aSRiku Voipio This package provides userspaces headers from the Linux kernel. These headers 237b41d920aSRiku Voipio are used by the installed headers for GNU glibc and other system libraries. 2385a464217SCedric HombourgerMulti-Arch: same 239d9dac147SReinhard KarcherEOF 240d9dac147SReinhard Karcher 241bac977cbSMasahiro Yamadaif is_enabled CONFIG_MODULES; then 242bac977cbSMasahiro Yamadacat <<EOF >> debian/control 243bac977cbSMasahiro Yamada 2440fa21cf4SMasahiro YamadaPackage: linux-headers-$version 245bac977cbSMasahiro YamadaArchitecture: $debarch 246bac977cbSMasahiro YamadaDescription: Linux kernel headers for $version on $debarch 247bac977cbSMasahiro Yamada This package provides kernel header files for $version on $debarch 248bac977cbSMasahiro Yamada . 249bac977cbSMasahiro Yamada This is useful for people who need to build external modules 250bac977cbSMasahiro YamadaEOF 251bac977cbSMasahiro Yamadafi 25236862e14SMasahiro Yamadafi 253bac977cbSMasahiro Yamada 254d9dac147SReinhard Karcherif is_enabled CONFIG_DEBUG_INFO; then 255d9dac147SReinhard Karchercat <<EOF >> debian/control 256b41d920aSRiku Voipio 2570fa21cf4SMasahiro YamadaPackage: linux-image-$version-dbg 258b41d920aSRiku VoipioSection: debug 259b41d920aSRiku VoipioArchitecture: $debarch 260b41d920aSRiku VoipioDescription: Linux kernel debugging symbols for $version 261b41d920aSRiku Voipio This package will come in handy if you need to debug the kernel. It provides 262b41d920aSRiku Voipio all the necessary debug symbols for the kernel and its modules. 263b41d920aSRiku VoipioEOF 264d9dac147SReinhard Karcherfi 265b41d920aSRiku Voipio 266b41d920aSRiku Voipiocat <<EOF > debian/rules 267b41d920aSRiku Voipio#!$(command -v $MAKE) -f 268b41d920aSRiku Voipio 269175209ccSMasahiro Yamadasrctree ?= . 2702fd6c455SMasahiro YamadaKERNELRELEASE = ${KERNELRELEASE} 271175209ccSMasahiro Yamada 27276c37668SGuillem Joverbuild-indep: 27376c37668SGuillem Joverbuild-arch: 2743ab18a62SMasahiro Yamada \$(MAKE) -f \$(srctree)/Makefile ARCH=${ARCH} \ 2757a531c21SMasahiro Yamada KERNELRELEASE=\$(KERNELRELEASE) \ 2763ab18a62SMasahiro Yamada \$(shell \$(srctree)/scripts/package/deb-build-option) \ 2773ab18a62SMasahiro Yamada olddefconfig all 278b41d920aSRiku Voipio 27976c37668SGuillem Joverbuild: build-arch 28076c37668SGuillem Jover 28176c37668SGuillem Joverbinary-indep: 28276c37668SGuillem Joverbinary-arch: build-arch 2832fd6c455SMasahiro Yamada \$(MAKE) -f \$(srctree)/Makefile ARCH=${ARCH} \ 2842fd6c455SMasahiro Yamada KERNELRELEASE=\$(KERNELRELEASE) intdeb-pkg 2852fd6c455SMasahiro Yamada 286b41d920aSRiku Voipioclean: 287c9f9cf25SBastian Germann rm -rf debian/files debian/linux-* 288c5bf2efbSMasahiro Yamada \$(MAKE) -f \$(srctree)/Makefile ARCH=${ARCH} clean 289b41d920aSRiku Voipio 290b41d920aSRiku Voipiobinary: binary-arch 291b41d920aSRiku VoipioEOF 292f6d9db63SArseny Maslennikovchmod +x debian/rules 293b41d920aSRiku Voipio 294b41d920aSRiku Voipioexit 0 295