Skip to content

Commit f624525

Browse files
nordicjmhenrikbrixandersen
authored andcommitted
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 Signed-off-by: Jamie McCrae <[email protected]>
1 parent 7e6013c commit f624525

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

@@ -155,7 +157,7 @@ def kconfig_load(app: Sphinx) -> tuple[kconfiglib.Kconfig, kconfiglib.Kconfig, d
155157

156158
os.environ["BOARD"] = "boards"
157159
os.environ["KCONFIG_BOARD_DIR"] = str(Path(td) / "boards")
158-
os.environ["KCONFIG_ENV_FILE"] = str(Path(td) / "kconfig_module_dirs.env")
160+
load_dotenv(str(Path(td) / "kconfig_module_dirs.env"))
159161

160162
# Sysbuild runs first
161163
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
@@ -700,14 +702,14 @@ def parse_kconfig(self):
700702
os.environ["KCONFIG_BINARY_DIR"] = kconfiglib_dir
701703
os.environ['DEVICETREE_CONF'] = "dummy"
702704
os.environ['TOOLCHAIN_HAS_NEWLIB'] = "y"
703-
os.environ['KCONFIG_ENV_FILE'] = os.path.join(kconfiglib_dir, "kconfig_module_dirs.env")
705+
kconfig_env_file = os.path.join(kconfiglib_dir, "kconfig_module_dirs.env")
704706

705707
# Older name for DEVICETREE_CONF, for compatibility with older Zephyr
706708
# versions that don't have the renaming
707709
os.environ["GENERATED_DTS_BOARD_CONF"] = "dummy"
708710

709711
# For multi repo support
710-
self.get_modules(os.environ['KCONFIG_ENV_FILE'],
712+
self.get_modules(kconfig_env_file,
711713
os.path.join(kconfiglib_dir, "Kconfig.modules"),
712714
os.path.join(kconfiglib_dir, "Kconfig.sysbuild.modules"),
713715
os.path.join(kconfiglib_dir, "settings_file.txt"))
@@ -721,6 +723,8 @@ def parse_kconfig(self):
721723
# symbols within Kconfig files
722724
os.environ["KCONFIG_WARN_UNDEF"] = "y"
723725

726+
load_dotenv(kconfig_env_file)
727+
724728
try:
725729
# Note this will both print warnings to stderr _and_ return
726730
# 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):
@@ -870,6 +873,7 @@ def main():
870873
args = parser.parse_args()
871874

872875
kconfig_module_dirs = ""
876+
kconfig_module_dirs_cmake = "set(kconfig_env_dirs)\n"
873877
kconfig = ""
874878
cmake = ""
875879
sysbuild_kconfig = ""
@@ -882,7 +886,8 @@ def main():
882886
args.modules, args.extra_modules)
883887

884888
for module in modules:
885-
kconfig_module_dirs += process_kconfig_module_dir(module.project, module.meta)
889+
kconfig_module_dirs += process_kconfig_module_dir(module.project, module.meta, False)
890+
kconfig_module_dirs_cmake += process_kconfig_module_dir(module.project, module.meta, True)
886891
kconfig += process_kconfig(module.project, module.meta)
887892
cmake += process_cmake(module.project, module.meta)
888893
sysbuild_kconfig += process_sysbuildkconfig(
@@ -894,13 +899,20 @@ def main():
894899
if args.kconfig_out or args.sysbuild_kconfig_out:
895900
if args.kconfig_out:
896901
kconfig_module_dirs_out = PurePath(args.kconfig_out).parent / 'kconfig_module_dirs.env'
902+
kconfig_module_dirs_cmake_out = PurePath(args.kconfig_out).parent / \
903+
'kconfig_module_dirs.cmake'
897904
elif args.sysbuild_kconfig_out:
898905
kconfig_module_dirs_out = PurePath(args.sysbuild_kconfig_out).parent / \
899906
'kconfig_module_dirs.env'
907+
kconfig_module_dirs_cmake_out = PurePath(args.sysbuild_kconfig_out).parent / \
908+
'kconfig_module_dirs.cmake'
900909

901910
with open(kconfig_module_dirs_out, 'w', encoding="utf-8") as fp:
902911
fp.write(kconfig_module_dirs)
903912

913+
with open(kconfig_module_dirs_cmake_out, 'w', encoding="utf-8") as fp:
914+
fp.write(kconfig_module_dirs_cmake)
915+
904916
if args.kconfig_out:
905917
with open(args.kconfig_out, 'w', encoding="utf-8") as fp:
906918
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)