diff mbox series

[1/4,SRU,H] UBUNTU: [Packaging] Add support for ODM drivers

Message ID 20210611100131.15133-2-acelan.kao@canonical.com
State New
Headers show
Series Add support for selective build of special drivers | expand

Commit Message

AceLan Kao June 11, 2021, 10:01 a.m. UTC
From: Stefan Bader <stefan.bader@canonical.com>

BugLink: https://bugs.launchpad.net/bugs/1912789

We want to be able to selectively turn on ODM driver support for those
kernels/arches we have to but otherwise not inherit this to other
derivatives. This is done by a new config option which we will have to
depend on in the new drivers config options. Support is toggled by
changing a makefile rule variable. The new config option will be hidden
as long as not at least one of the arches supported turns on the rule
variable.

Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
Acked-by: Marcelo Henrique Cerri <marcelo.cerri@canonical.com>
Acked-by: Andy Whitcroft <apw@canonical.com>
Signed-off-by: Kelsey Skunberg <kelsey.skunberg@canonical.com>
(cherry picked from commit 4aeffc246531a666c1fad1925ebf1a6e68a704e4
focal)
Signed-off-by: Chia-Lin Kao (AceLan) <acelan.kao@canonical.com>
---
 debian/rules.d/0-common-vars.mk             |  4 ++++
 debian/rules.d/1-maintainer.mk              |  1 +
 debian/rules.d/2-binary-arch.mk             |  3 +++
 debian/scripts/misc/arch-has-odm-enabled.sh | 21 +++++++++++++++++++++
 debian/scripts/misc/kernelconfig            |  2 +-
 ubuntu/Kconfig                              |  6 ++++++
 6 files changed, 36 insertions(+), 1 deletion(-)
 create mode 100755 debian/scripts/misc/arch-has-odm-enabled.sh
diff mbox series

Patch

diff --git a/debian/rules.d/0-common-vars.mk b/debian/rules.d/0-common-vars.mk
index f642cda1a185..ad1c39b97bb3 100644
--- a/debian/rules.d/0-common-vars.mk
+++ b/debian/rules.d/0-common-vars.mk
@@ -187,6 +187,10 @@  do_common_headers_indep=true
 # add a 'full source' mode
 do_full_source=false
 
+# Add an option to enable special drivers which should only be build when
+# explicitly enabled.
+do_odm_drivers=false
+
 # build tools
 ifneq ($(wildcard $(CURDIR)/tools),)
 	ifeq ($(do_tools),)
diff --git a/debian/rules.d/1-maintainer.mk b/debian/rules.d/1-maintainer.mk
index a266b411ab50..48eb1441db15 100644
--- a/debian/rules.d/1-maintainer.mk
+++ b/debian/rules.d/1-maintainer.mk
@@ -86,6 +86,7 @@  printenv:
 	@echo "do_flavour_header_package = $(do_flavour_header_package)"
 	@echo "do_common_headers_indep   = $(do_common_headers_indep)"
 	@echo "do_full_source            = $(do_full_source)"
+	@echo "do_odm_drivers            = $(do_odm_drivers)"
 	@echo "do_tools                  = $(do_tools)"
 	@echo "do_any_tools              = $(do_any_tools)"
 	@echo "do_linux_tools            = $(do_linux_tools)"
diff --git a/debian/rules.d/2-binary-arch.mk b/debian/rules.d/2-binary-arch.mk
index 5ae9a989207c..453788fdba6b 100644
--- a/debian/rules.d/2-binary-arch.mk
+++ b/debian/rules.d/2-binary-arch.mk
@@ -31,6 +31,9 @@  $(stampdir)/stamp-prepare-tree-%: $(commonconfdir)/config.common.$(family) $(arc
 	[ "$(do_full_source)" != 'true' ] && true || \
 		rsync -a --exclude debian --exclude debian.master --exclude $(DEBIAN) * $(builddir)/build-$*
 	cat $(wordlist 1,3,$^) | sed -e 's/.*CONFIG_VERSION_SIGNATURE.*/CONFIG_VERSION_SIGNATURE="Ubuntu $(release)-$(revision)-$* $(raw_kernelversion)"/' > $(builddir)/build-$*/.config
+	[ "$(do_odm_drivers)" = 'true' ] && true || \
+		sed -ie 's/.*CONFIG_UBUNTU_ODM_DRIVERS.*/# CONFIG_UBUNTU_ODM_DRIVERS is not set/' \
+		    $(builddir)/build-$*/.config
 	find $(builddir)/build-$* -name "*.ko" | xargs rm -f
 	$(build_cd) $(kmake) $(build_O) -j1 syncconfig prepare scripts
 	touch $@
diff --git a/debian/scripts/misc/arch-has-odm-enabled.sh b/debian/scripts/misc/arch-has-odm-enabled.sh
new file mode 100755
index 000000000000..7bc8a5db0db0
--- /dev/null
+++ b/debian/scripts/misc/arch-has-odm-enabled.sh
@@ -0,0 +1,21 @@ 
+#!/bin/sh
+# Evaluate whether arch ($1) will be built with do_odm_drivers set to true.
+set -e
+
+if [ "$1" = "" ]; then
+	return 1
+fi
+
+TOPDIR=$(dirname $0)/../../..
+. $TOPDIR/debian/debian.env
+RULESDIR=$TOPDIR/$DEBIAN/rules.d
+
+do_odm_drivers=false
+for f in $1.mk hooks.mk; do
+	eval $(cat $RULESDIR/$f | sed -n -e '/do_odm_drivers/s/ \+//gp')
+done
+if [ "$do_odm_drivers" != "true" ]; then
+	return 1
+fi
+
+return 0
diff --git a/debian/scripts/misc/kernelconfig b/debian/scripts/misc/kernelconfig
index 888cc892d936..f95396e28f28 100755
--- a/debian/scripts/misc/kernelconfig
+++ b/debian/scripts/misc/kernelconfig
@@ -68,7 +68,7 @@  for arch in $archs; do
 	# for i386 since it is no longer supported after 19.04, however
 	# we maintain the configs for hwe.
 	modify_config=true
-	env="ARCH=$kernarch"
+	env="ARCH=$kernarch DEB_ARCH=$arch"
 	compiler_path=$(which "${cross_compile}gcc" || true)
 	if [ "$compiler_path" != '' ]; then
 		env="$env CROSS_COMPILE=$cross_compile"
diff --git a/ubuntu/Kconfig b/ubuntu/Kconfig
index 5056671223bb..5575ce574577 100644
--- a/ubuntu/Kconfig
+++ b/ubuntu/Kconfig
@@ -1,5 +1,11 @@ 
 menu "Ubuntu Supplied Third-Party Device Drivers"
 
+
+config UBUNTU_ODM_DRIVERS
+	def_bool $(success,$(srctree)/debian/scripts/misc/arch-has-odm-enabled.sh $(DEB_ARCH))
+	---help---
+	  Turn on support for Ubuntu ODM supplied drivers
+
 #
 # NOTE: to allow drivers to be added and removed without causing merge
 # collisions you should add new entries in the middle of the six lines