[tools] Add toolchain detection in sdk packages (#8827)

This commit is contained in:
Bernard Xiong 2024-04-21 00:53:17 +08:00 committed by GitHub
parent 732d32be09
commit b76dca8f4f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 85 additions and 3 deletions

View File

@ -22,7 +22,7 @@
# 2015-01-20 Bernard Add copyright information
# 2015-07-25 Bernard Add LOCAL_CCFLAGS/LOCAL_CPPPATH/LOCAL_CPPDEFINES for
# group definition.
#
# 2024-04-21 Bernard Add toolchain detection in sdk packages
import os
import sys
@ -37,7 +37,6 @@ from utils import _make_path_relative
from mkdist import do_copy_file
from options import AddOptions
BuildOptions = {}
Projects = []
Rtt_Root = ''
@ -201,6 +200,22 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [
# del the 'RTT_EXEC_PATH' and using the 'EXEC_PATH' setting on rtconfig.py
del os.environ['RTT_EXEC_PATH']
try:
# try to detect toolchains in env
from utils import ImportModule
envm = ImportModule('env')
# from env import GetSDKPath
exec_path = envm.GetSDKPath(rtconfig.CC)
if 'gcc' in rtconfig.CC:
exec_path = os.path.join(exec_path, 'bin')
if os.path.exists(exec_path):
print('set CC to ' + exec_path)
rtconfig.EXEC_PATH = exec_path
os.environ['RTT_EXEC_PATH'] = exec_path
except Exception as e:
# detect failed, ignore
pass
exec_path = GetOption('exec-path')
if exec_path:
os.environ['RTT_EXEC_PATH'] = exec_path

55
tools/env.py Normal file
View File

@ -0,0 +1,55 @@
#! /usr/bin/env python
#coding=utf-8
#
# Copyright (c) 2024, RT-Thread Development Team
#
# SPDX-License-Identifier: GPL-2.0
#
# Change Logs:
# Date Author Notes
# 2024-04-20 Bernard the first version
import os
import json
import platform
def GetEnvPath():
env = os.environ.get('ENV_ROOT')
if env is None:
if platform.system() == 'Windows':
return os.path.join(os.environ['USERPROFILE'], '.env')
else:
return os.path.join(os.environ['HOME'], '.env')
return env
def GetSDKPackage():
env = GetEnvPath()
if env:
return os.path.join(env, 'tools', 'packages')
return None
def GetSDKPath(name):
env = GetEnvPath()
if env:
#read packages.json under env/tools/packages
with open(os.path.join(env, 'tools', 'packages', 'pkgs.json'), 'r', encoding='utf-8') as f:
# packages_json = f.read()
packages = json.load(f)
for item in packages:
package_path = os.path.join(GetEnvPath(), 'packages', item['path'], 'package.json')
# read package['path']/package.json under env/packages
with open(package_path, 'r', encoding='utf-8') as f:
# package_json = f.read()
package = json.load(f)
if package['name'] == name:
return os.path.join(GetSDKPackage(), package['name'] + '-' + item['ver'])
# not found named package
return None

View File

@ -20,7 +20,7 @@
# Change Logs:
# Date Author Notes
# 2015-01-20 Bernard Add copyright information
#
# 2024-04-21 Bernard Add ImportModule to import local module
import sys
import os
@ -291,3 +291,15 @@ def ReloadModule(module):
importlib.reload(module)
else:
reload(module)
def ImportModule(module):
import sys
if sys.version_info.major >= 3:
import importlib.util
path = os.path.dirname(__file__)
spec = importlib.util.spec_from_file_location(module, os.path.join(path, module+".py"))
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
return module
else:
return __import__(module, fromlist=[module])