Add build_system property to config file
This allows to pre-select the build system, specifically avoiding confusion when kas-container is accidentally not called with --isar for an isar config. For that, build_system needs to be defined in the lop-level config file passed to kas-container. Theoretically, this also allows to combine layers which have both oe-init-build-env and isar-init-build-env scripts. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
This commit is contained in:
		| @@ -86,3 +86,11 @@ Added | |||||||
|   property ``refspec`` and the repository patch property ``repo``. These |   property ``refspec`` and the repository patch property ``repo``. These | ||||||
|   default values will be used if the appropriate properties are not defined |   default values will be used if the appropriate properties are not defined | ||||||
|   for a given repository or patch. |   for a given repository or patch. | ||||||
|  |  | ||||||
|  | Version 10 | ||||||
|  | ---------- | ||||||
|  |  | ||||||
|  | Added | ||||||
|  | ~~~~~ | ||||||
|  |  | ||||||
|  | - ``build_system`` property to pre-select OE or Isar. | ||||||
|   | |||||||
| @@ -276,6 +276,15 @@ Configuration reference | |||||||
|       * ``file``: string [required] |       * ``file``: string [required] | ||||||
|           The path to the file relative to the root of the repository. |           The path to the file relative to the root of the repository. | ||||||
|  |  | ||||||
|  | * ``build_system``: string [optional] | ||||||
|  |     Defines the bitbake-based build system. Known build systems are | ||||||
|  |     ``openembedded`` (or ``oe``) and ``isar``. If set, this restricts the | ||||||
|  |     search of kas for the init script in the configured repositories to | ||||||
|  |     ``oe-init-build-env`` or ``isar-init-build-env``, respectively. If | ||||||
|  |     ``kas-container`` finds this property in the top-level kas configuration | ||||||
|  |     file (includes are not evaluated), it will automatically select the | ||||||
|  |     required container image and invocation mode. | ||||||
|  |  | ||||||
| * ``defaults``: dict [optional] | * ``defaults``: dict [optional] | ||||||
|     This key can be used to set default values for various properties. |     This key can be used to set default values for various properties. | ||||||
|     This may help you to avoid repeating the same property assignment in |     This may help you to avoid repeating the same property assignment in | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| # | # | ||||||
| # kas - setup tool for bitbake based projects | # kas - setup tool for bitbake based projects | ||||||
| # | # | ||||||
| # Copyright (c) Siemens AG, 2018-2019 | # Copyright (c) Siemens AG, 2018-2020 | ||||||
| # | # | ||||||
| # Authors: | # Authors: | ||||||
| #  Jan Kiszka <jan.kiszka@siemens.com> | #  Jan Kiszka <jan.kiszka@siemens.com> | ||||||
| @@ -64,6 +64,23 @@ trace() | |||||||
| 	"$@" | 	"$@" | ||||||
| } | } | ||||||
|  |  | ||||||
|  | enable_isar_mode() { | ||||||
|  | 	KAS_CONTAINER_IMAGE_NAME_DEFAULT="kas-isar" | ||||||
|  | 	KAS_ISAR_ARGS="--privileged" | ||||||
|  |  | ||||||
|  | 	case "${KAS_CONTAINER_ENGINE}" in | ||||||
|  | 	docker) | ||||||
|  | 		KAS_ISAR_ARGS="${KAS_ISAR_ARGS} --cap-add=SYS_ADMIN" | ||||||
|  | 		KAS_ISAR_ARGS="${KAS_ISAR_ARGS} --cap-add=MKNOD" | ||||||
|  | 		;; | ||||||
|  | 	podman) | ||||||
|  | 		# sudo is needed for a privileged podman container | ||||||
|  | 		KAS_CONTAINER_COMMAND="sudo ${KAS_CONTAINER_COMMAND}" | ||||||
|  | 		KAS_ISAR_ARGS="${KAS_ISAR_ARGS} --pid=host" | ||||||
|  | 		;; | ||||||
|  | 	esac | ||||||
|  | } | ||||||
|  |  | ||||||
| KAS_IMAGE_VERSION_DEFAULT="2.2" | KAS_IMAGE_VERSION_DEFAULT="2.2" | ||||||
| KAS_CONTAINER_IMAGE_PATH_DEFAULT="ghcr.io/siemens/kas" | KAS_CONTAINER_IMAGE_PATH_DEFAULT="ghcr.io/siemens/kas" | ||||||
| KAS_CONTAINER_IMAGE_NAME_DEFAULT="kas" | KAS_CONTAINER_IMAGE_NAME_DEFAULT="kas" | ||||||
| @@ -112,21 +129,7 @@ esac | |||||||
| while [ $# -gt 0 ]; do | while [ $# -gt 0 ]; do | ||||||
| 	case "$1" in | 	case "$1" in | ||||||
| 	--isar) | 	--isar) | ||||||
| 		KAS_CONTAINER_IMAGE_NAME_DEFAULT="kas-isar" | 		enable_isar_mode | ||||||
| 		KAS_ISAR_ARGS="--privileged" |  | ||||||
|  |  | ||||||
| 		case "${KAS_CONTAINER_ENGINE}" in |  | ||||||
| 		docker) |  | ||||||
| 			KAS_ISAR_ARGS="${KAS_ISAR_ARGS} --cap-add=SYS_ADMIN" |  | ||||||
| 			KAS_ISAR_ARGS="${KAS_ISAR_ARGS} --cap-add=MKNOD" |  | ||||||
| 			;; |  | ||||||
| 		podman) |  | ||||||
| 			# sudo is needed for a privileged podman container |  | ||||||
| 			KAS_CONTAINER_COMMAND="sudo ${KAS_CONTAINER_COMMAND}" |  | ||||||
| 			KAS_ISAR_ARGS="${KAS_ISAR_ARGS} --pid=host" |  | ||||||
| 			;; |  | ||||||
| 		esac |  | ||||||
|  |  | ||||||
| 		shift 1 | 		shift 1 | ||||||
| 		;; | 		;; | ||||||
| 	--with-loop-dev) | 	--with-loop-dev) | ||||||
| @@ -205,12 +208,12 @@ done | |||||||
| [ -n "${KAS_CMD}" ] || usage | [ -n "${KAS_CMD}" ] || usage | ||||||
|  |  | ||||||
| KAS_EXTRA_BITBAKE_ARGS=0 | KAS_EXTRA_BITBAKE_ARGS=0 | ||||||
| set_container_image_var |  | ||||||
|  |  | ||||||
| # parse kas sub-command (build or shell) options | # parse kas sub-command (build or shell) options | ||||||
| while [ $# -gt 0 ] && [ $KAS_EXTRA_BITBAKE_ARGS -eq 0 ]; do | while [ $# -gt 0 ] && [ $KAS_EXTRA_BITBAKE_ARGS -eq 0 ]; do | ||||||
| 	case "$1" in | 	case "$1" in | ||||||
| 	-h|--help) | 	-h|--help) | ||||||
|  | 		set_container_image_var | ||||||
| 		trace ${KAS_CONTAINER_COMMAND} run ${KAS_CONTAINER_IMAGE} ${KAS_CMD} --help | 		trace ${KAS_CONTAINER_COMMAND} run ${KAS_CONTAINER_IMAGE} ${KAS_CMD} --help | ||||||
| 		exit 0 | 		exit 0 | ||||||
| 		;; | 		;; | ||||||
| @@ -246,6 +249,13 @@ done | |||||||
|  |  | ||||||
| [ -n "${KAS_FIRST_FILE}" ] || usage | [ -n "${KAS_FIRST_FILE}" ] || usage | ||||||
|  |  | ||||||
|  | BUILD_SYSTEM=$(cat ${KAS_FIRST_FILE} 2>/dev/null| grep "^build_system: " | sed 's/build_system:[ ]\+//') | ||||||
|  | if [ "${BUILD_SYSTEM}" = "isar" ]; then | ||||||
|  | 	enable_isar_mode | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | set_container_image_var | ||||||
|  |  | ||||||
| KAS_FILE_DIR="$(dirname "${KAS_FIRST_FILE}")" | KAS_FILE_DIR="$(dirname "${KAS_FIRST_FILE}")" | ||||||
|  |  | ||||||
| KAS_REPO_DIR=$(git -C "${KAS_FILE_DIR}" rev-parse --show-toplevel 2>/dev/null) \ | KAS_REPO_DIR=$(git -C "${KAS_FILE_DIR}" rev-parse --show-toplevel 2>/dev/null) \ | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| # kas - setup tool for bitbake based projects | # kas - setup tool for bitbake based projects | ||||||
| # | # | ||||||
| # Copyright (c) Siemens AG, 2017-2018 | # Copyright (c) Siemens AG, 2017-2020 | ||||||
| # | # | ||||||
| # Permission is hereby granted, free of charge, to any person obtaining a copy | # Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| # of this software and associated documentation files (the "Software"), to deal | # of this software and associated documentation files (the "Software"), to deal | ||||||
| @@ -23,10 +23,10 @@ | |||||||
|     This module contains the version of kas. |     This module contains the version of kas. | ||||||
| """ | """ | ||||||
| __license__ = 'MIT' | __license__ = 'MIT' | ||||||
| __copyright__ = 'Copyright (c) Siemens AG, 2017-2018' | __copyright__ = 'Copyright (c) Siemens AG, 2017-2020' | ||||||
|  |  | ||||||
| __version__ = '2.2' | __version__ = '2.2' | ||||||
|  |  | ||||||
| # Please update docs/format-changelog.rst when changing the file version. | # Please update docs/format-changelog.rst when changing the file version. | ||||||
| __file_version__ = 9 | __file_version__ = 10 | ||||||
| __compatible_file_version__ = 1 | __compatible_file_version__ = 1 | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| # kas - setup tool for bitbake based projects | # kas - setup tool for bitbake based projects | ||||||
| # | # | ||||||
| # Copyright (c) Siemens AG, 2017-2018 | # Copyright (c) Siemens AG, 2017-2020 | ||||||
| # | # | ||||||
| # Permission is hereby granted, free of charge, to any person obtaining a copy | # Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| # of this software and associated documentation files (the "Software"), to deal | # of this software and associated documentation files (the "Software"), to deal | ||||||
| @@ -53,6 +53,12 @@ class Config: | |||||||
|         self.handler = IncludeHandler(self.filenames) |         self.handler = IncludeHandler(self.filenames) | ||||||
|         self.repo_dict = self._get_repo_dict() |         self.repo_dict = self._get_repo_dict() | ||||||
|  |  | ||||||
|  |     def get_build_system(self): | ||||||
|  |         """ | ||||||
|  |             Returns the pre-selected build system | ||||||
|  |         """ | ||||||
|  |         return self._config.get('build_system', '') | ||||||
|  |  | ||||||
|     def find_missing_repos(self): |     def find_missing_repos(self): | ||||||
|         """ |         """ | ||||||
|             Returns repos that are in config but not on disk |             Returns repos that are in config but not on disk | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| # kas - setup tool for bitbake based projects | # kas - setup tool for bitbake based projects | ||||||
| # | # | ||||||
| # Copyright (c) Siemens AG, 2017-2018 | # Copyright (c) Siemens AG, 2017-2020 | ||||||
| # | # | ||||||
| # Permission is hereby granted, free of charge, to any person obtaining a copy | # Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| # of this software and associated documentation files (the 'Software'), to deal | # of this software and associated documentation files (the 'Software'), to deal | ||||||
| @@ -72,6 +72,10 @@ CONFIGSCHEMA = { | |||||||
|                 }, |                 }, | ||||||
|             }, |             }, | ||||||
|         }, |         }, | ||||||
|  |         'build_system': { | ||||||
|  |             'type': 'string', | ||||||
|  |             'enum': ['openembedded', 'oe', 'isar'], | ||||||
|  |         }, | ||||||
|         'defaults': { |         'defaults': { | ||||||
|             'type': 'object', |             'type': 'object', | ||||||
|             'additionalProperties': False, |             'additionalProperties': False, | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| # kas - setup tool for bitbake based projects | # kas - setup tool for bitbake based projects | ||||||
| # | # | ||||||
| # Copyright (c) Siemens AG, 2017-2018 | # Copyright (c) Siemens AG, 2017-2020 | ||||||
| # | # | ||||||
| # Permission is hereby granted, free of charge, to any person obtaining a copy | # Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| # of this software and associated documentation files (the "Software"), to deal | # of this software and associated documentation files (the "Software"), to deal | ||||||
| @@ -225,7 +225,7 @@ class SetupEnviron(Command): | |||||||
|         return 'setup_environ' |         return 'setup_environ' | ||||||
|  |  | ||||||
|     def execute(self, ctx): |     def execute(self, ctx): | ||||||
|         ctx.environ.update(get_build_environ()) |         ctx.environ.update(get_build_environ(ctx.config.get_build_system())) | ||||||
|  |  | ||||||
|  |  | ||||||
| class WriteBBConfig(Command): | class WriteBBConfig(Command): | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| # kas - setup tool for bitbake based projects | # kas - setup tool for bitbake based projects | ||||||
| # | # | ||||||
| # Copyright (c) Siemens AG, 2017-2018 | # Copyright (c) Siemens AG, 2017-2020 | ||||||
| # | # | ||||||
| # Permission is hereby granted, free of charge, to any person obtaining a copy | # Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| # of this software and associated documentation files (the "Software"), to deal | # of this software and associated documentation files (the "Software"), to deal | ||||||
| @@ -183,7 +183,7 @@ def repos_apply_patches(repos): | |||||||
|             sys.exit(task.result()) |             sys.exit(task.result()) | ||||||
|  |  | ||||||
|  |  | ||||||
| def get_build_environ(): | def get_build_environ(build_system): | ||||||
|     """ |     """ | ||||||
|         Creates the build environment variables. |         Creates the build environment variables. | ||||||
|     """ |     """ | ||||||
| @@ -191,9 +191,15 @@ def get_build_environ(): | |||||||
|     # creates the conf directory |     # creates the conf directory | ||||||
|  |  | ||||||
|     init_repo = None |     init_repo = None | ||||||
|  |     if build_system in ['openembedded', 'oe']: | ||||||
|  |         scripts = ['oe-init-build-env'] | ||||||
|  |     elif build_system == 'isar': | ||||||
|  |         scripts = ['isar-init-build-env'] | ||||||
|  |     else: | ||||||
|  |         scripts = ['oe-init-build-env', 'isar-init-build-env'] | ||||||
|     permutations = \ |     permutations = \ | ||||||
|         [(repo, script) for repo in get_context().config.get_repos() |         [(repo, script) for repo in get_context().config.get_repos() | ||||||
|          for script in ['oe-init-build-env', 'isar-init-build-env']] |          for script in scripts] | ||||||
|     for (repo, script) in permutations: |     for (repo, script) in permutations: | ||||||
|         if os.path.exists(repo.path + '/' + script): |         if os.path.exists(repo.path + '/' + script): | ||||||
|             if init_repo: |             if init_repo: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user