157 lines
6.1 KiB
Python
157 lines
6.1 KiB
Python
import argparse
|
|
import sys
|
|
import subprocess
|
|
from pathlib import Path
|
|
from multiprocessing import Pool
|
|
|
|
# Mandatory Dependencies that is always fetched
|
|
# path, url, commit, family (Alphabet sorted by path)
|
|
deps_mandatory = {}
|
|
|
|
# Optional Dependencies per MCU
|
|
# path, url, commit, family (Alphabet sorted by path)
|
|
deps_optional = {
|
|
'lib/mcu/analog/msdk' : ['https://github.com/analogdevicesinc/msdk.git',
|
|
'b20b398d3e5e2007594e54a74ba3d2a2e50ddd75',
|
|
'maxim'],
|
|
'lib/mcu/nxp/mcux-sdk': ['https://github.com/nxp-mcuxpresso/mcux-sdk.git',
|
|
'9990f264f98430f6d885041ab0f24224d68f4958',
|
|
'kinetis_k kinetis_k32l2 kinetis_kl lpc51 lpc54 lpc55 mcx mimxrt10xx'],
|
|
'lib/mcu/st/cmsis_device_f3': ['https://github.com/STMicroelectronics/cmsis_device_f3.git',
|
|
'5e4ee5ed7a7b6c85176bb70a9fd3c72d6eb99f1b',
|
|
'stm32f3'],
|
|
'lib/mcu/st/cmsis_device_f4': ['https://github.com/STMicroelectronics/cmsis_device_f4.git',
|
|
'2615e866fa48fe1ff1af9e31c348813f2b19e7ec',
|
|
'stm32f4'],
|
|
'lib/mcu/st/cmsis_device_h5': ['https://github.com/STMicroelectronics/cmsis_device_h5.git',
|
|
'9a778e0f162bd21200647adafb922d50b2c60f81',
|
|
'stm32h5'],
|
|
'lib/mcu/st/cmsis_device_h7': ['https://github.com/STMicroelectronics/cmsis_device_h7.git',
|
|
'60dc2c913203dc8629dc233d4384dcc41c91e77f',
|
|
'stm32h7'],
|
|
'lib/mcu/st/cmsis_device_l4': ['https://github.com/STMicroelectronics/cmsis_device_l4.git',
|
|
'6ca7312fa6a5a460b5a5a63d66da527fdd8359a6',
|
|
'stm32l4'],
|
|
'lib/mcu/st/stm32f3xx_hal_driver': ['https://github.com/STMicroelectronics/stm32f3xx_hal_driver.git',
|
|
'1761b6207318ede021706e75aae78f452d72b6fa',
|
|
'stm32f3'],
|
|
'lib/mcu/st/stm32f4xx_hal_driver': ['https://github.com/STMicroelectronics/stm32f4xx_hal_driver.git',
|
|
'04e99fbdabd00ab8f370f377c66b0a4570365b58',
|
|
'stm32f4'],
|
|
'lib/mcu/st/stm32h5xx_hal_driver': ['https://github.com/STMicroelectronics/stm32h5xx_hal_driver.git',
|
|
'7e8c7d8e91c15321864f513f8458ce7f6555eb4e',
|
|
'stm32h5'],
|
|
'lib/mcu/st/stm32h7xx_hal_driver': ['https://github.com/STMicroelectronics/stm32h7xx_hal_driver.git',
|
|
'd8461b980b59b1625207d8c4f2ce0a9c2a7a3b04',
|
|
'stm32h7'],
|
|
'lib/mcu/st/stm32l4xx_hal_driver': ['https://github.com/STMicroelectronics/stm32l4xx_hal_driver.git',
|
|
'aee3d5bf283ae5df87532b781bdd01b7caf256fc',
|
|
'stm32l4'],
|
|
'lib/mcu/wch/ch32v20x': ['https://github.com/openwch/ch32v20x.git',
|
|
'c4c38f507e258a4e69b059ccc2dc27dde33cea1b',
|
|
'ch32v20x'],
|
|
'lib/sct_neopixel': ['https://github.com/gsteiert/sct_neopixel.git',
|
|
'497ca8974927e3b853fd80c8fc35f4e557af79b9',
|
|
'lpc55'],
|
|
}
|
|
|
|
# combined 2 deps
|
|
deps_all = {**deps_mandatory, **deps_optional}
|
|
|
|
# TOP is tinyusb root dir
|
|
TOP = Path(__file__).parent.parent.resolve()
|
|
|
|
|
|
def run_cmd(cmd):
|
|
r = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
|
if r.returncode != 0:
|
|
print(f'Error: {cmd} failed with {r.returncode}')
|
|
print(r.stdout.decode("utf-8"))
|
|
return r
|
|
|
|
|
|
def get_a_dep(d):
|
|
if d not in deps_all.keys():
|
|
print('{} is not found in dependency list')
|
|
return 1
|
|
url = deps_all[d][0]
|
|
commit = deps_all[d][1]
|
|
families = deps_all[d][2]
|
|
|
|
print(f'cloning {d} with {url}')
|
|
|
|
p = Path(TOP / d)
|
|
git_cmd = f"git -C {p}"
|
|
|
|
# Init git deps if not existed
|
|
if not p.exists():
|
|
p.mkdir(parents=True)
|
|
run_cmd(f"{git_cmd} init")
|
|
run_cmd(f"{git_cmd} remote add origin {url}")
|
|
head = None
|
|
else:
|
|
# Check if commit is already fetched
|
|
result = run_cmd(f"{git_cmd} rev-parse HEAD")
|
|
head = result.stdout.decode("utf-8").splitlines()[0]
|
|
run_cmd(f"{git_cmd} reset --hard")
|
|
|
|
if commit != head:
|
|
run_cmd(f"{git_cmd} fetch --depth 1 origin {commit}")
|
|
run_cmd(f"{git_cmd} checkout FETCH_HEAD")
|
|
|
|
return 0
|
|
|
|
|
|
def find_family(board):
|
|
bsp_dir = Path(TOP / "ports")
|
|
for family_dir in bsp_dir.iterdir():
|
|
if family_dir.is_dir():
|
|
board_dir = family_dir / 'boards' / board
|
|
if board_dir.exists():
|
|
return family_dir.name
|
|
return None
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('families', nargs='*', default=[], help='Families to fetch')
|
|
parser.add_argument('-b', '--board', action='append', default=[], help='Boards to fetch')
|
|
parser.add_argument('--print', action='store_true', help='Print commit hash only')
|
|
args = parser.parse_args()
|
|
|
|
families = args.families
|
|
boards = args.board
|
|
print_only = args.print
|
|
|
|
status = 0
|
|
deps = list(deps_mandatory.keys())
|
|
|
|
if 'all' in families:
|
|
deps += deps_optional.keys()
|
|
else:
|
|
families = list(families)
|
|
if boards is not None:
|
|
for b in boards:
|
|
f = find_family(b)
|
|
if f is not None:
|
|
families.append(f)
|
|
|
|
for f in families:
|
|
for d in deps_optional:
|
|
if d not in deps and f in deps_optional[d][2]:
|
|
deps.append(d)
|
|
|
|
if print_only:
|
|
pvalue = {}
|
|
for d in deps:
|
|
commit = deps_all[d][1]
|
|
pvalue[d] = commit
|
|
print(pvalue)
|
|
else:
|
|
with Pool() as pool:
|
|
status = sum(pool.map(get_a_dep, deps))
|
|
return status
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|