meta: add sources from prototype meadow build system

This commit is contained in:
2026-07-19 17:54:05 +01:00
parent 5781a30ea0
commit 185de46621
18 changed files with 2171 additions and 0 deletions
+119
View File
@@ -0,0 +1,119 @@
import os
import sys
import tomli
from config import Config
from command import Command, UserCommand
all_platforms = {}
class Platform:
def all_platforms():
return all_platforms
def current_platform():
name = Config.get('target.platform')
if not name or name not in all_platforms:
return None
return all_platforms[name]
def load_file(self, path):
self.__path = path
with open(path, mode='rb') as f:
self.__data = tomli.load(f)
def __init__(self, **kwargs):
if 'path' in kwargs:
self.__platform_file = os.path.abspath(kwargs['path'])
self.load_file(kwargs['path'])
def base_directory(self):
return os.path.dirname(self.__platform_file)
def name(self):
if 'platform' not in self.__data:
return None
platform = self.__data['platform']
if 'name' in platform:
return platform['name']
return None
def arch(self):
if 'platform' not in self.__data:
return None
platform = self.__data['platform']
if 'arch' in platform:
return platform['arch']
return None
def load_extensions(self):
from seed import Seed
if 'extension' not in self.__data:
return
all_seeds = Seed.all_seeds()
extension_dir = os.path.dirname(self.__path)
extension = self.__data['extension']
if 'seeds' in extension:
seeds = extension['seeds']
for seed_filename in seeds:
seed_path = os.path.join(extension_dir, seed_filename)
seed = None
try:
seed = Seed(path=seed_path)
except tomli.TOMLDecodeError as e:
print('Err: Failed to parse seed file {}\n {}'.format(seed_path, e))
return -1
all_seeds[seed.name()] = seed
if 'commands' in extension:
commands = extension['commands']
for cmd_filename in commands:
cmd_path = os.path.join(extension_dir, cmd_filename)
cmd = None
try:
cmd = UserCommand(path=cmd_path)
except tomli.TOMLDecodeError as e:
print('Err: Failed to parse command file {}\n {}'.format(seed_path, e))
return -1
Command.register(cmd)
def get_component(self, name):
if name in self.__data:
return self.__data[name]
return None
def scan_directory(root_path):
for root, dirs, files in os.walk(root_path):
for f in files:
if not f.endswith('.platform'):
continue
platform_path = os.path.join(root, f)
platform = None
try:
platform = Platform(path=platform_path)
except tomli.TOMLDecodeError as e:
print('Err: Failed to parse platform file {}\n {}'.format(platform_path, e))
continue
all_platforms[platform.name()] = platform