[Buildroot] [RFC 1/1] br2-external: Alow to include toolchain from external tree
Vadim Kochan
vadim4j at gmail.com
Wed Apr 17 20:46:30 UTC 2019
Add possibility to select toolchain from br2-external tree which
allows to easy use custom external toolchains by selecting them via
menuconfig as if they were integrated into buildroot.
The br2-external tree should contain:
${br2-external}/external-toolchain/Config.in
file to be included into external toolchains list.
All such picked toolchains are sourced in:
toolchain/toolchain-external/Config.in
from auto-generated file ${O}/build/.br2-external.in.toolchain.
Added new '-t' option in support/scripts/br2-external to generate
kconfig for the found toolchains from the all specified external trees.
Signed-off-by: Vadim Kochan <vadim4j at gmail.com>
---
This is just PoC to rise the discussion about this concept.
Makefile | 6 +++++-
support/scripts/br2-external | 36 ++++++++++++++++++++++++++++++++--
toolchain/toolchain-external/Config.in | 2 ++
3 files changed, 41 insertions(+), 3 deletions(-)
diff --git a/Makefile b/Makefile
index 522c0b0606..4eceb88813 100644
--- a/Makefile
+++ b/Makefile
@@ -938,7 +938,7 @@ HOSTCFLAGS = $(CFLAGS_FOR_BUILD)
export HOSTCFLAGS
.PHONY: prepare-kconfig
-prepare-kconfig: outputmakefile $(BUILD_DIR)/.br2-external.in
+prepare-kconfig: outputmakefile $(BUILD_DIR)/.br2-external.in $(BUILD_DIR)/.br2-external.in.toolchain
$(BUILD_DIR)/buildroot-config/%onf:
mkdir -p $(@D)/lxdialog
@@ -1042,6 +1042,10 @@ endif
$(BUILD_DIR)/.br2-external.in: $(BUILD_DIR)
$(Q)support/scripts/br2-external -k -o "$(@)" $(BR2_EXTERNAL)
+.PHONY: $(BUILD_DIR)/.br2-external.in.toolchain
+$(BUILD_DIR)/.br2-external.in.toolchain: $(BUILD_DIR)
+ $(Q)support/scripts/br2-external -t -o "$(@)" $(BR2_EXTERNAL)
+
# printvars prints all the variables currently defined in our
# Makefiles. Alternatively, if a non-empty VARS variable is passed,
# only the variables matching the make pattern passed in VARS are
diff --git a/support/scripts/br2-external b/support/scripts/br2-external
index 00cb57d1ed..3ec332d93e 100755
--- a/support/scripts/br2-external
+++ b/support/scripts/br2-external
@@ -16,10 +16,11 @@ main() {
local OPT OPTARG
local br2_ext ofile ofmt
- while getopts :hkmo: OPT; do
+ while getopts :htkmo: OPT; do
case "${OPT}" in
h) help; exit 0;;
o) ofile="${OPTARG}";;
+ t) ofmt="toolchain";;
k) ofmt="kconfig";;
m) ofmt="mk";;
:) error "option '%s' expects a mandatory argument\n" "${OPTARG}";;
@@ -30,7 +31,7 @@ main() {
shift $((OPTIND-1))
case "${ofmt}" in
- mk|kconfig)
+ mk|kconfig|toolchain)
;;
*) error "no output format specified (-m/-k)\n";;
esac
@@ -188,6 +189,37 @@ do_kconfig() {
printf "endmenu # User-provided options\n"
}
+# Generate the toolchain kconfig snippet for the br2-external tree.
+do_toolchain() {
+ local br2_name br2_ext
+
+ printf '#\n# Automatically generated file; DO NOT EDIT.\n#\n'
+ printf '\n'
+
+ if [ ${#BR2_EXT_NAMES[@]} -eq 0 ]; then
+ printf '# No br2-external tree defined.\n'
+ return
+ fi
+
+ for br2_name in "${BR2_EXT_NAMES[@]}"; do
+ eval br2_desc="\"\${BR2_EXT_DESCS_${br2_name}}\""
+ eval br2_ext="\"\${BR2_EXT_PATHS_${br2_name}}\""
+
+ if [ ! -f "${br2_ext}/toolchain-external/Config.in" ]; then
+ continue
+ fi
+
+ # we have to duplicate it here too because otherwise BR2_EXTERNAL_*
+ # is not evaluated in Config.in
+ printf 'config BR2_EXTERNAL_%s_PATH\n' "${br2_name}"
+ printf '\tstring\n'
+ printf '\tdefault "%s"\n' "${br2_ext}"
+
+ printf 'source "%s/toolchain-external/Config.in"\n' "${br2_ext}"
+ printf '\n'
+ done
+}
+
help() {
cat <<-_EOF_
Usage:
diff --git a/toolchain/toolchain-external/Config.in b/toolchain/toolchain-external/Config.in
index d234c1c552..70e8a89e5e 100644
--- a/toolchain/toolchain-external/Config.in
+++ b/toolchain/toolchain-external/Config.in
@@ -50,6 +50,8 @@ source "toolchain/toolchain-external/toolchain-external-codesourcery-amd64/Confi
# architecture.
source "toolchain/toolchain-external/toolchain-external-custom/Config.in"
+source "$BR2_BUILD_DIR/.br2-external.in.toolchain"
+
endchoice
choice
--
2.14.1
More information about the buildroot
mailing list