Skip to content

Commit 25ced41

Browse files
committed
[nrf fromlist] kconfig: Load Kconfig env file better
Loads this file in a better way that means samples and modules should not have to source the file before referencing Kconfig module path variables Upstream PR #: 95771 Signed-off-by: Jamie McCrae <[email protected]>
1 parent 2fc387e commit 25ced41

File tree

6 files changed

+29
-11
lines changed

6 files changed

+29
-11
lines changed

Kconfig.zephyr

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
# SPDX-License-Identifier: Apache-2.0
77

88
source "Kconfig.constants"
9-
source "$(KCONFIG_ENV_FILE)"
109

1110
osource "$(APPLICATION_SOURCE_DIR)/VERSION"
1211

cmake/modules/kconfig.cmake

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,10 +132,13 @@ endif()
132132
# APP_DIR: Path to the main image (sysbuild) or synonym for APPLICATION_SOURCE_DIR (non-sysbuild)
133133
zephyr_get(APP_DIR VAR APP_DIR APPLICATION_SOURCE_DIR)
134134

135+
# Load the module Kconfig file into CMake
136+
include("${KCONFIG_BINARY_DIR}/kconfig_module_dirs.cmake")
137+
135138
set(COMMON_KCONFIG_ENV_SETTINGS
136139
PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}
137-
KCONFIG_ENV_FILE=${KCONFIG_BINARY_DIR}/kconfig_module_dirs.env
138140
srctree=${ZEPHYR_BASE}
141+
${kconfig_env_dirs}
139142
KERNELVERSION=${KERNELVERSION}
140143
APPVERSION=${APP_VERSION_STRING}
141144
APP_VERSION_EXTENDED_STRING=${APP_VERSION_EXTENDED_STRING}

doc/_extensions/zephyr/kconfig/__init__.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
from typing import Any
4545

4646
from docutils import nodes
47+
from dotenv import load_dotenv
4748
from sphinx.addnodes import pending_xref
4849
from sphinx.application import Sphinx
4950
from sphinx.builders import Builder
@@ -81,7 +82,8 @@ def kconfig_load(app: Sphinx) -> tuple[kconfiglib.Kconfig, kconfiglib.Kconfig, d
8182
sysbuild_kconfig = ""
8283
for module in modules:
8384
kconfig_module_dirs += zephyr_module.process_kconfig_module_dir(module.project,
84-
module.meta)
85+
module.meta,
86+
False)
8587
kconfig += zephyr_module.process_kconfig(module.project, module.meta)
8688
sysbuild_kconfig += zephyr_module.process_sysbuildkconfig(module.project, module.meta)
8789

@@ -158,7 +160,7 @@ def kconfig_load(app: Sphinx) -> tuple[kconfiglib.Kconfig, kconfiglib.Kconfig, d
158160

159161
os.environ["BOARD"] = "boards"
160162
os.environ["KCONFIG_BOARD_DIR"] = str(Path(td) / "boards")
161-
os.environ["KCONFIG_ENV_FILE"] = str(Path(td) / "kconfig_module_dirs.env")
163+
load_dotenv(str(Path(td) / "kconfig_module_dirs.env"))
162164

163165
# Sysbuild runs first
164166
os.environ["CONFIG_"] = "SB_CONFIG_"

scripts/ci/check_compliance.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import unidiff
2424
import yaml
2525

26+
from dotenv import load_dotenv
27+
2628
from yamllint import config, linter
2729

2830
from junitparser import TestCase, TestSuite, JUnitXml, Skipped, Error, Failure
@@ -730,14 +732,14 @@ def parse_kconfig(self):
730732
os.environ["KCONFIG_BINARY_DIR"] = kconfiglib_dir
731733
os.environ['DEVICETREE_CONF'] = "dummy"
732734
os.environ['TOOLCHAIN_HAS_NEWLIB'] = "y"
733-
os.environ['KCONFIG_ENV_FILE'] = os.path.join(kconfiglib_dir, "kconfig_module_dirs.env")
735+
kconfig_env_file = os.path.join(kconfiglib_dir, "kconfig_module_dirs.env")
734736

735737
# Older name for DEVICETREE_CONF, for compatibility with older Zephyr
736738
# versions that don't have the renaming
737739
os.environ["GENERATED_DTS_BOARD_CONF"] = "dummy"
738740

739741
# For multi repo support
740-
self.get_modules(os.environ['KCONFIG_ENV_FILE'],
742+
self.get_modules(kconfig_env_file,
741743
os.path.join(kconfiglib_dir, "Kconfig.modules"),
742744
os.path.join(kconfiglib_dir, "Kconfig.sysbuild.modules"),
743745
os.path.join(kconfiglib_dir, "settings_file.txt"))
@@ -751,6 +753,8 @@ def parse_kconfig(self):
751753
# symbols within Kconfig files
752754
os.environ["KCONFIG_WARN_UNDEF"] = "y"
753755

756+
load_dotenv(kconfig_env_file)
757+
754758
try:
755759
# Note this will both print warnings to stderr _and_ return
756760
# them: so some warnings might get printed

scripts/zephyr_module.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -386,10 +386,13 @@ def kconfig_snippet(meta, path, kconfig_file=None, blobs=False, taint_blobs=Fals
386386
return '\n'.join(snippet)
387387

388388

389-
def process_kconfig_module_dir(module, meta):
389+
def process_kconfig_module_dir(module, meta, cmake_output):
390390
module_path = PurePath(module)
391391
name_sanitized = meta['name-sanitized']
392-
return f'ZEPHYR_{name_sanitized.upper()}_MODULE_DIR={module_path.as_posix()}\n'
392+
393+
if cmake_output is False:
394+
return f'ZEPHYR_{name_sanitized.upper()}_MODULE_DIR={module_path.as_posix()}\n'
395+
return f'list(APPEND kconfig_env_dirs ZEPHYR_{name_sanitized.upper()}_MODULE_DIR={module_path.as_posix()})\n'
393396

394397

395398
def process_kconfig(module, meta):
@@ -865,6 +868,7 @@ def main():
865868
args = parser.parse_args()
866869

867870
kconfig_module_dirs = ""
871+
kconfig_module_dirs_cmake = "set(kconfig_env_dirs)\n"
868872
kconfig = ""
869873
cmake = ""
870874
sysbuild_kconfig = ""
@@ -877,7 +881,8 @@ def main():
877881
args.modules, args.extra_modules)
878882

879883
for module in modules:
880-
kconfig_module_dirs += process_kconfig_module_dir(module.project, module.meta)
884+
kconfig_module_dirs += process_kconfig_module_dir(module.project, module.meta, False)
885+
kconfig_module_dirs_cmake += process_kconfig_module_dir(module.project, module.meta, True)
881886
kconfig += process_kconfig(module.project, module.meta)
882887
cmake += process_cmake(module.project, module.meta)
883888
sysbuild_kconfig += process_sysbuildkconfig(
@@ -889,13 +894,20 @@ def main():
889894
if args.kconfig_out or args.sysbuild_kconfig_out:
890895
if args.kconfig_out:
891896
kconfig_module_dirs_out = PurePath(args.kconfig_out).parent / 'kconfig_module_dirs.env'
897+
kconfig_module_dirs_cmake_out = PurePath(args.kconfig_out).parent / \
898+
'kconfig_module_dirs.cmake'
892899
elif args.sysbuild_kconfig_out:
893900
kconfig_module_dirs_out = PurePath(args.sysbuild_kconfig_out).parent / \
894901
'kconfig_module_dirs.env'
902+
kconfig_module_dirs_cmake_out = PurePath(args.sysbuild_kconfig_out).parent / \
903+
'kconfig_module_dirs.cmake'
895904

896905
with open(kconfig_module_dirs_out, 'w', encoding="utf-8") as fp:
897906
fp.write(kconfig_module_dirs)
898907

908+
with open(kconfig_module_dirs_cmake_out, 'w', encoding="utf-8") as fp:
909+
fp.write(kconfig_module_dirs_cmake)
910+
899911
if args.kconfig_out:
900912
with open(args.kconfig_out, 'w', encoding="utf-8") as fp:
901913
fp.write(kconfig)

share/sysbuild/Kconfig

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
#
33
# SPDX-License-Identifier: Apache-2.0
44

5-
source "$(KCONFIG_ENV_FILE)"
6-
75
config BOARD
86
string
97
default "$(BOARD)"

0 commit comments

Comments
 (0)