From ff661b71ace34c40e70ee6e72da09cdc521287e6 Mon Sep 17 00:00:00 2001 From: alichinese Date: Tue, 30 Apr 2024 15:21:15 +0800 Subject: [PATCH] toolchain: adapt toolchain build * Adaptations have been made to the compilation of toolchains, specifying the library file download address during cross-compilation and the storage address for the compilation chain output. Signed-off-by: alichinese --- src/oebuild/app/plugins/generate/generate.py | 49 +++++++------------ .../app/plugins/toolchain/toolchain.py | 10 ++++ src/oebuild/const.py | 3 +- src/oebuild/util.py | 18 +++++++ 4 files changed, 47 insertions(+), 33 deletions(-) diff --git a/src/oebuild/app/plugins/generate/generate.py b/src/oebuild/app/plugins/generate/generate.py index 1aa8b56..2431f21 100644 --- a/src/oebuild/app/plugins/generate/generate.py +++ b/src/oebuild/app/plugins/generate/generate.py @@ -237,7 +237,7 @@ class Generate(OebuildCommand): build_dir = self._init_build_dir(args=args) if build_dir is None: sys.exit(0) - self.build_sdk(args.build_in, build_dir, auto_build) + self.build_nativesdk(args.build_in, build_dir, auto_build) self._print_nativesdk(build_dir=build_dir) sys.exit(0) @@ -310,35 +310,10 @@ class Generate(OebuildCommand): if os.path.exists(os.path.join(build_dir, 'compile.yaml')): os.remove(os.path.join(build_dir, 'compile.yaml')) - docker_image = oebuild_util.get_docker_image_from_yocto(yocto_dir=yocto_dir) - if docker_image is None: - check_docker_tag = CheckDockerTag(args.docker_tag, self.configure) - oebuild_config = self.configure.parse_oebuild_config() - if check_docker_tag.get_tag() is not None: - docker_tag = str(check_docker_tag.get_tag()) - else: - # select docker image - while True: - print(''' - If the system does not recognize which container image to use, select the - following container, enter it numerically, and enter q to exit:''') - image_list = check_docker_tag.get_tags() - - for key, value in enumerate(image_list): - print( - f"{key}, {oebuild_config.docker.repo_url}:{value}") - k = input("please entry number:") - if k == "q": - sys.exit(0) - try: - index = int(k) - docker_tag = image_list[index] - break - except IndexError: - print("please entry true number") - docker_tag = docker_tag.strip() - docker_tag = docker_tag.strip('\n') - docker_image = f"{oebuild_config.docker.repo_url}:{docker_tag}" + docker_image = get_docker_image( + yocto_dir=self.configure.source_yocto_dir(), + docker_tag=args.docker_tag, + configure=self.configure) out_dir = pathlib.Path(os.path.join(build_dir, 'compile.yaml')) @@ -728,7 +703,7 @@ Wrong platform, please run `oebuild generate -l` to view support feature""") return generate_command - def build_sdk(self, build_in, build_dir, auto_build): + def build_nativesdk(self, build_in, build_dir, auto_build): """ Args: @@ -791,7 +766,7 @@ Wrong platform, please run `oebuild generate -l` to view support feature""") sys.exit(-1) # add toolchain.yaml to compile docker_param = get_docker_param_dict( - docker_image=oebuild_const.DEFAULT_DOCKER, + docker_image=get_sdk_docker_image(yocto_dir=self.configure.source_yocto_dir()), src_dir=self.configure.source_dir(), compile_dir=build_dir, toolchain_dir=None, @@ -852,6 +827,16 @@ following container, enter it numerically, and enter q to exit:''') return docker_image +def get_sdk_docker_image(yocto_dir): + ''' + get toolchain docker image + ''' + docker_image = oebuild_util.get_sdk_docker_image_from_yocto(yocto_dir=yocto_dir) + if docker_image is None: + docker_image = oebuild_const.DEFAULT_SDK_DOCKER + return docker_image + + def basic_config(): """ Kconfig basic_config diff --git a/src/oebuild/app/plugins/toolchain/toolchain.py b/src/oebuild/app/plugins/toolchain/toolchain.py index d3db586..ecec1fa 100644 --- a/src/oebuild/app/plugins/toolchain/toolchain.py +++ b/src/oebuild/app/plugins/toolchain/toolchain.py @@ -87,6 +87,8 @@ class Toolchain(OebuildCommand): container=self.client.get_container(container_id=self.container_id), container_user=oebuild_const.CONTAINER_USER) + self._set_environment_param() + if unknown is None or len(unknown) == 0: content = self.bashrc.get_bashrc_content() for b_s in oebuild_const.TOOLCHAIN_BASH_BANNER.split('\n'): @@ -133,6 +135,14 @@ class Toolchain(OebuildCommand): for config in config_list: self._build_toolchain(config_name=config) + def _set_environment_param(self): + content = self.bashrc.get_bashrc_content() + open_source_cmd = 'export OPENSOURCE_DIR="$PWD/open_source"' + content = self.bashrc.add_bashrc(content=content, line=open_source_cmd) + x_tools_cmd = 'export X_TOOLS_DIR="$PWD/x-tools"' + content = self.bashrc.add_bashrc(content=content, line=x_tools_cmd) + self.bashrc.update_bashrc(content=content) + def _build_toolchain(self, config_name): ''' build toolchain with config diff --git a/src/oebuild/const.py b/src/oebuild/const.py index 0e2d434..6b96876 100644 --- a/src/oebuild/const.py +++ b/src/oebuild/const.py @@ -19,6 +19,7 @@ BASH_END_FLAG = " ###!!!###" CONTAINER_USER = "openeuler" CONTAINER_BUILD = '/home/openeuler/build' DEFAULT_DOCKER = "swr.cn-north-4.myhuaweicloud.com/openeuler-embedded/openeuler-container:latest" +DEFAULT_SDK_DOCKER = "swr.cn-north-4.myhuaweicloud.com/openeuler-embedded/openeuler-sdk:latest" CONTAINER_SRC = '/usr1/openeuler/src' CONTAINER_USER = "openeuler" NATIVESDK_DIR = "/opt/buildtools/nativesdk" @@ -45,7 +46,7 @@ BASH_BANNER = ''' TOOLCHAIN_BASH_BANNER = ''' Welcome to the openEuler Embedded build environment, where you can create openEuler Embedded cross-chains tools by follows: - "./cross-tools/prepare.sh" + "./cross-tools/prepare.sh ./" "cp config_aarch64 .config && ct-ng build" "cp config_aarch64-musl .config && ct-ng build" "cp config_arm32 .config && ct-ng build" diff --git a/src/oebuild/util.py b/src/oebuild/util.py index c51fe82..a979aac 100644 --- a/src/oebuild/util.py +++ b/src/oebuild/util.py @@ -316,6 +316,24 @@ def get_docker_image_from_yocto(yocto_dir): return None +def get_sdk_docker_image_from_yocto(yocto_dir): + ''' + determine yocto-meta-openeuler's supported sdk docker image in env.yaml + ''' + if not os.path.exists(yocto_dir): + raise ValueError("the yocto direction is not exists") + + env_path = os.path.join(yocto_dir, ".oebuild/env.yaml") + if not os.path.exists(env_path): + return None + + env_parse = read_yaml(yaml_path=env_path) + if "sdk_docker_image" in env_parse: + return str(env_parse['sdk_docker_image']) + + return None + + def deal_env_container(env: ParseEnv, docker_param: DockerParam): ''' This operation realizes the processing of the container, -- Gitee