From: Ahmad Fatoum <a.fatoum@pengutronix.de>
To: barebox@lists.infradead.org
Cc: Masahiro Yamada <masahiroy@kernel.org>,
Ahmad Fatoum <a.fatoum@pengutronix.de>
Subject: [PATCH 1/2] Makefile: allow setting pkg-config binary via PKG_CONFIG
Date: Thu, 27 Jul 2023 10:48:11 +0200 [thread overview]
Message-ID: <20230727084812.880438-1-a.fatoum@pengutronix.de> (raw)
Unlike Linux, barebox build system does build both host and
target tools in the same build, each using a different pkg-config.
This is done by using `pkg-config` for the host tools and
`$CROSS_PKG_CONFIG` for the target tools. In Yocto, `pkg-config` is for
target tools and `pkg-config-native` is for host tools, which we can't
represent with the current scheme.
The usual work around that Yocto employs for the kernel is to
override PKG_CONFIG_PATH to always point into the native sysroot and
resetting PKG_CONFIG_SYSROOT_DIR, but this breaks build of target tools
that use pkg-config.
Fix this by providing a PKG_CONFIG variable that can be overridden
when necessary.
This intentionally skips the scripts/kconfig directory to make it easier
to sync with the kernel. While we should eventually switch that over to
use PKG_CONFIG as well, Yocto will set PKG_CONFIG_PATH and
PKG_CONFIG_SYSROOT_DIR appropriately in cm1.bbclass' do_menuconfig, so
this can wait until the change is done to the kernel and synced back.
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
Documentation/user/barebox.rst | 21 +++++++++++++++------
Makefile | 3 ++-
arch/sandbox/Makefile | 4 ++--
arch/sandbox/os/Makefile | 4 ++--
scripts/Makefile | 22 +++++++++++-----------
scripts/imx/Makefile | 6 +++---
6 files changed, 35 insertions(+), 25 deletions(-)
diff --git a/Documentation/user/barebox.rst b/Documentation/user/barebox.rst
index 7b37ddba77a9..c95adb78bb83 100644
--- a/Documentation/user/barebox.rst
+++ b/Documentation/user/barebox.rst
@@ -300,16 +300,25 @@ so it may be loaded by the boot ROM of the relevant SoCs.
In addition to these barebox also builds host and target tools that are useful
outside of barebox build: e.g. to manipulate the environment or to load an
-image over a boot ROM's USB recovery protocol.
+image over a boot ROM's USB recovery protocol. These tools may link against
+libraries, which are detected using ``PKG_CONFIG`` and ``CROSS_PKG_CONFIG``
+for native and cross build respectively. Their default values are::
-There are two ``ARCH=sandbox`` to make this more straight forward:
+ PKG_CONFIG=pkg-config
+ CROSS_PKG_CONFIG=${CROSS_COMPILE}pkg-config
+
+These can be overridden using environment or make variables.
+
+As use of pkg-config both for host and target tool in the same build can
+complicate build system integration. There are two ``ARCH=sandbox`` configuration
+to make this more straight forward:
Host Tools
^^^^^^^^^^
The ``hosttools_defconfig`` will compile standalone host tools for the
-host (build) system. To build the USB loaders, ``pkg-config`` needs to know
-about ``libusb-1.0``.
+host (build) system. To build the USB loaders, ``PKG_CONFIG`` needs to know
+about ``libusb-1.0``. This config won't build any target tools.
.. code-block:: console
@@ -322,9 +331,9 @@ Target Tools
The ``targettools_defconfig`` will cross-compile standalone target tools for the
target system. To build the USB loaders, ``CROSS_PKG_CONFIG`` needs to know
-about ``libusb-1.0``. This config won't built any host tools, so it's ok to
+about ``libusb-1.0``. This config won't build any host tools, so it's ok to
set ``CROSS_PKG_CONFIG=pkg-config`` if ``pkg-config`` is primed for target
-use. The default is ``CROSS_PKG_CONFIG=$(CROSS_COMPILE)pkg-config``. Example:
+use. Example:
.. code-block:: console
diff --git a/Makefile b/Makefile
index dd9bd86de03e..acf7b2006765 100644
--- a/Makefile
+++ b/Makefile
@@ -369,9 +369,10 @@ endif
KCONFIG_CONFIG ?= .config
+PKG_CONFIG ?= pkg-config
CROSS_PKG_CONFIG ?= $(CROSS_COMPILE)pkg-config
-export KCONFIG_CONFIG CROSS_PKG_CONFIG
+export KCONFIG_CONFIG CROSS_PKG_CONFIG PKG_CONFIG
# SHELL used by kbuild
CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
diff --git a/arch/sandbox/Makefile b/arch/sandbox/Makefile
index d5ba05ba866f..04fa426b1a61 100644
--- a/arch/sandbox/Makefile
+++ b/arch/sandbox/Makefile
@@ -42,11 +42,11 @@ archprepare: maketools
PHONY += maketools
ifeq ($(CONFIG_SDL),y)
-SDL_LIBS := $(shell pkg-config sdl2 --libs)
+SDL_LIBS := $(shell $(PKG_CONFIG) sdl2 --libs)
endif
ifeq ($(CONFIG_GPIO_LIBFTDI1),y)
-FTDI1_LIBS := $(shell pkg-config libftdi1 --libs)
+FTDI1_LIBS := $(shell $(PKG_CONFIG) libftdi1 --libs)
endif
ifeq ($(CONFIG_ASAN),y)
diff --git a/arch/sandbox/os/Makefile b/arch/sandbox/os/Makefile
index ebcbe5833b26..055ce1a316a7 100644
--- a/arch/sandbox/os/Makefile
+++ b/arch/sandbox/os/Makefile
@@ -20,8 +20,8 @@ endif
obj-y = common.o tap.o setjmp.o
obj-$(CONFIG_MALLOC_LIBC) += libc_malloc.o
-CFLAGS_sdl.o = $(shell pkg-config sdl2 --cflags)
+CFLAGS_sdl.o = $(shell $(PKG_CONFIG) sdl2 --cflags)
obj-$(CONFIG_SDL) += sdl.o
-CFLAGS_ftdi.o = $(shell pkg-config libftdi1 --cflags)
+CFLAGS_ftdi.o = $(shell $(PKG_CONFIG) libftdi1 --cflags)
obj-$(CONFIG_GPIO_LIBFTDI1) += ftdi.o
diff --git a/scripts/Makefile b/scripts/Makefile
index 72ad9ad7a648..01b21a61692c 100644
--- a/scripts/Makefile
+++ b/scripts/Makefile
@@ -12,8 +12,8 @@ hostprogs-always-y += bareboxcrc32
hostprogs-always-y += kernel-install
hostprogs-always-$(CONFIG_QOICONV) += qoiconv
hostprogs-always-$(CONFIG_CRYPTO_RSA_BUILTIN_KEYS) += rsatoc
-HOSTCFLAGS_rsatoc = `pkg-config --cflags openssl`
-HOSTLDLIBS_rsatoc = `pkg-config --libs openssl`
+HOSTCFLAGS_rsatoc = `$(PKG_CONFIG) --cflags openssl`
+HOSTLDLIBS_rsatoc = `$(PKG_CONFIG) --libs openssl`
hostprogs-always-$(CONFIG_IMD) += bareboximd
hostprogs-always-$(CONFIG_KALLSYMS) += kallsyms
hostprogs-always-$(CONFIG_MIPS) += mips-relocs
@@ -28,18 +28,18 @@ hostprogs-always-$(CONFIG_LAYERSCAPE_PBLIMAGE) += pblimage
hostprogs-always-$(CONFIG_STM32_IMAGE) += stm32image
hostprogs-always-$(CONFIG_RISCV) += prelink-riscv
hostprogs-always-$(CONFIG_RK_IMAGE) += rkimage
-HOSTCFLAGS_rkimage = `pkg-config --cflags openssl`
-HOSTLDLIBS_rkimage = `pkg-config --libs openssl`
+HOSTCFLAGS_rkimage = `$(PKG_CONFIG) --cflags openssl`
+HOSTLDLIBS_rkimage = `$(PKG_CONFIG) --libs openssl`
KBUILD_HOSTCFLAGS += -I$(srctree)/scripts/include/
-HOSTLDLIBS_mxsimage = `pkg-config --libs openssl`
-HOSTCFLAGS_omap3-usb-loader.o = `pkg-config --cflags libusb-1.0`
-HOSTLDLIBS_omap3-usb-loader = `pkg-config --libs libusb-1.0`
+HOSTLDLIBS_mxsimage = `$(PKG_CONFIG) --libs openssl`
+HOSTCFLAGS_omap3-usb-loader.o = `$(PKG_CONFIG) --cflags libusb-1.0`
+HOSTLDLIBS_omap3-usb-loader = `$(PKG_CONFIG) --libs libusb-1.0`
hostprogs-always-$(CONFIG_OMAP3_USB_LOADER) += omap3-usb-loader
-HOSTCFLAGS_omap4_usbboot.o = `pkg-config --cflags libusb-1.0`
-HOSTLDLIBS_omap4_usbboot = -lpthread `pkg-config --libs libusb-1.0`
+HOSTCFLAGS_omap4_usbboot.o = `$(PKG_CONFIG) --cflags libusb-1.0`
+HOSTLDLIBS_omap4_usbboot = -lpthread `$(PKG_CONFIG) --libs libusb-1.0`
hostprogs-always-$(CONFIG_OMAP4_HOSTTOOL_USBBOOT) += omap4_usbboot
-HOSTCFLAGS_rk-usb-loader.o = `pkg-config --cflags libusb-1.0`
-HOSTLDLIBS_rk-usb-loader = `pkg-config --libs libusb-1.0`
+HOSTCFLAGS_rk-usb-loader.o = `$(PKG_CONFIG) --cflags libusb-1.0`
+HOSTLDLIBS_rk-usb-loader = `$(PKG_CONFIG) --libs libusb-1.0`
hostprogs-always-$(CONFIG_RK_USB_LOADER) += rk-usb-loader
userprogs-always-$(CONFIG_BAREBOXENV_TARGET) += bareboxenv-target
diff --git a/scripts/imx/Makefile b/scripts/imx/Makefile
index d0d1f17e10bd..9544974d523f 100644
--- a/scripts/imx/Makefile
+++ b/scripts/imx/Makefile
@@ -3,8 +3,8 @@
hostprogs-always-$(CONFIG_ARCH_IMX_IMXIMAGE) += imx-image
hostprogs-always-$(CONFIG_ARCH_IMX_USBLOADER) += imx-usb-loader
-HOSTCFLAGS_imx-usb-loader.o = `pkg-config --cflags libusb-1.0` -include $(objtree)/include/generated/utsrelease.h
-HOSTLDLIBS_imx-usb-loader = `pkg-config --libs libusb-1.0`
+HOSTCFLAGS_imx-usb-loader.o = `$(PKG_CONFIG) --cflags libusb-1.0` -include $(objtree)/include/generated/utsrelease.h
+HOSTLDLIBS_imx-usb-loader = `$(PKG_CONFIG) --libs libusb-1.0`
imx-usb-loader-target-userccflags += `$(CROSS_PKG_CONFIG) --cflags libusb-1.0` -include $(objtree)/include/generated/utsrelease.h
imx-usb-loader-target-userldlibs += `$(CROSS_PKG_CONFIG) --libs libusb-1.0`
@@ -16,7 +16,7 @@ HOSTCFLAGS_imx-usb-loader.o += -I$(srctree) -I$(srctree)/include/mach
imx-usb-loader-target-userccflags += -I$(srctree) -I$(srctree)/include/mach
ifdef CONFIG_ARCH_IMX_IMXIMAGE_SSL_SUPPORT
HOSTCFLAGS_imx-image.o += -DIMXIMAGE_SSL_SUPPORT
-HOSTLDLIBS_imx-image = `pkg-config --libs openssl`
+HOSTLDLIBS_imx-image = `$(PKG_CONFIG) --libs openssl`
endif
imx-usb-loader-objs := imx-usb-loader.o imx.o
--
2.39.2
next reply other threads:[~2023-07-27 8:50 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-27 8:48 Ahmad Fatoum [this message]
2023-07-27 8:48 ` [PATCH 2/2] kbuild: Add environment variables for userprogs flags Ahmad Fatoum
2023-07-28 5:51 ` [PATCH 1/2] Makefile: allow setting pkg-config binary via PKG_CONFIG Sascha Hauer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230727084812.880438-1-a.fatoum@pengutronix.de \
--to=a.fatoum@pengutronix.de \
--cc=barebox@lists.infradead.org \
--cc=masahiroy@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox