sistemas-cibernetico-fisicos/infotainment-mvp/dodo.py
Fábio Coutada 9973823d61 feat(infotainment-mvp): import BMW IDC23 infotainment project
BMW IDC23 (IDC23H) next-generation infotainment head unit
developed as Harman Becker/Garmin JV — GEN22 platform.

Source: git@cc-github.bmwgroup.net:icgen5/idc-project.git
Branch: master (gen22 release line)
Submodules pinned at gen22-11.8.0-internal-rc (April 2021)

Components:
- ioc: I/O Controller (AUTOSAR, CommonAPI)
- hmi: HMI framework (Qt/QML-based cluster graphics)
- ic-hmi: Instrument Cluster HMI
- sqhmi: Safety-Qualified HMI
- hudd: Head-Up Display driver
- muniic: Multi-NIC communication
- fubi: Functional Bus (check control, DIM, ECI, ELC, ERM, BC, CBS, CC, ATP)
- ramses: Runtimes for Adaptive AUTOSAR Middleware Services
- cidd: CID Driver (SP21)
- safegfxcmp: Safety GFX comparison
- sim-gc: Simulation Graphics Compositor
- sim-ui: UI Simulation harness
- idc-app: Application layer
- bin: Build toolchains (excluded from git)

Build system: CMake + doit (Python task runner)
Toolchain: GHS ARM32 for AUTOSAR, MSVC/Ninja for unittest
CI: Zuul (zuul.d/) + stale-branch management
2026-07-16 23:07:49 +01:00

91 lines
3 KiB
Python

"""Root entry point for doit-based automation of this project."""
import logging
import os
import pathlib
import doit.tools
import icci.doit.util
_logger = logging.getLogger(__name__)
# output directory for all generated artifacts:
_output_dir = icci.doit.util.determine_output_dir()
DOIT_DATA_DIR = _output_dir / 'doit'
DOIT_DATA_DIR.mkdir(parents=True, exist_ok=True)
DOIT_CONFIG = dict(
# ---- configuration of doit -------------------------------------------------------------------
# path to doit dependency database:
dep_file=str(DOIT_DATA_DIR / '.doit.db'), # no pathlib here
# no default tasks are executed when just calling doit:
default_tasks=[],
# generally show stdout:
verbosity=2,
# Windows multiprocessing restrictive, actions in most cases separate processes anyway (no GIL):
par_type='thread',
# cleaning a task will also forget it was executed:
cleanforget=True,
# ---- configuration of icci.doit --------------------------------------------------------------
# to ease debugging, show internal tasks, may be overridden with envvar ICCI_LOG_LEVEL:
show_hidden_tasks=False,
# logging level, may be overridden with envvar ICCI_LOG_LEVEL:
log_level='INFO',
# URL of conan package server, possibly taken from environment variable:
conan_server_url=os.environ.get(
'ICCI_CONAN_SERVER_URL',
'https://icgen5.artifactory.cc.bmwgroup.net/artifactory/api/conan/ic-gen5-tools'
),
# URL of swldata server, possibly taken from environment variable:
swldata_server_url=os.environ.get(
'ICCI_SWLDATA_URL',
'https://icgen5.artifactory.cc.bmwgroup.net/artifactory/ic-gen5-data'
),
# URL of ts4ic Teamscale
ts4ic_url=os.environ.get(
'ICCI_TS4IC_URL',
'https://ts4ic.bmwgroup.net'
),
# list of directories searched for build configuration yaml files, in given order:
build_config_dirs=[
pathlib.Path('config', 'builds'),
pathlib.Path('util', 'icci-common', 'builds'),
],
# path to folder, where build artifacts and non-shared tools are stored:
output_dir=_output_dir,
# list of directories searched for code analysis configurations, in given order:
code_analysis_config_dirs=[
pathlib.Path('util', 'icci-common', 'code-analysis'),
pathlib.Path('hmi', 'repo', 'Configurations', 'CodeAnalysis'),
pathlib.Path('ic-hmi', 'repo', 'Configurations', 'CodeAnalysis'),
pathlib.Path('ioc', 'repo', 'config', 'code-analysis'),
pathlib.Path('ramses', 'repo', 'proprietary', 'config', 'code-analysis'),
pathlib.Path('safegfxcmp', 'repo', 'config', 'code-analysis'),
],
)
# pass configuration dictionary to our library so we can use the data:
icci.doit.initialize(DOIT_CONFIG)
_logger.debug(f'Output directory: {_output_dir}')
# make all tasks from library known to doit:
# noinspection PyUnresolvedReferences
from icci.doit.tasks import *
# allow calling this file directly, e.g. for debugging:
if __name__ == '__main__':
doit.run(globals())