Turned osdk into a python package.

This commit is contained in:
Sleepy Monax 2022-06-26 08:31:43 +02:00
parent d21f41448f
commit 7bf3c66ca7
8 changed files with 69 additions and 35 deletions

50
__main__.py → osdk/__init__.py Executable file → Normal file
View file

@ -3,11 +3,9 @@ import sys
import os
import random
import build
import utils
from utils import Colors
import environments
import osdk.build as build
import osdk.utils as utils
import osdk.environments as environments
CMDS = {}
@ -34,12 +32,12 @@ def parseOptions(args: list[str]) -> dict:
def runCmd(opts: dict, args: list[str]) -> None:
if len(args) == 0:
print(f"Usage: {sys.argv[0]} run <component>")
print(f"Usage: {args[0]} run <component>")
sys.exit(1)
out = build.buildOne(opts.get('env', 'host-clang'), args[0])
print(f"{Colors.BOLD}Running: {args[0]}{Colors.RESET}")
print(f"{utils.Colors.BOLD}Running: {args[0]}{utils.Colors.RESET}")
utils.runCmd(out, *args[1:])
@ -97,7 +95,7 @@ def bootCmd(opts: dict, args: list[str]) -> None:
def buildCmd(opts: dict, args: list[str]) -> None:
env = opts.get('env', 'host-clang')
if len(args) == 0:
build.buildAll(env)
else:
@ -121,11 +119,11 @@ def idCmd(opts: dict, args: list[str]) -> None:
def helpCmd(opts: dict, args: list[str]) -> None:
print(f"Usage: {sys.argv[0]} <command> [options...] [<args...>]")
print(f"Usage: osdk <command> [options...] [<args...>]")
print("")
print("Description:")
print(" The skift operating system build system.")
print(" Operating System Development Kit.")
print("")
print("Commands:")
@ -134,8 +132,12 @@ def helpCmd(opts: dict, args: list[str]) -> None:
print("")
print("Enviroments:")
for env in environments.available():
print(" " + env)
availableToolchains = environments.available()
if len(availableToolchains) == 0:
print(" No environments available")
else:
for env in environments.available():
print(" " + env)
print("")
print("Variants:")
@ -175,20 +177,22 @@ CMDS = {
},
}
if __name__ == "__main__":
def main():
argv = sys.argv
try:
if len(sys.argv) < 2:
if len(argv) < 2:
helpCmd({}, [])
else:
o = parseOptions(sys.argv[2:])
if not sys.argv[1] in CMDS:
print(f"Unknown command: {sys.argv[1]}")
o = parseOptions(argv[2:])
if not argv[1] in CMDS:
print(f"Unknown command: {argv[1]}")
print("")
print(f"Use '{sys.argv[0]} help' for a list of commands")
sys.exit(1)
CMDS[sys.argv[1]]["func"](o['opts'], o['args'])
sys.exit(0)
print(f"Use '{argv[0]} help' for a list of commands")
return 1
CMDS[argv[1]]["func"](o['opts'], o['args'])
return 0
except utils.CliException as e:
print()
print(f"{Colors.RED}{e.msg}{Colors.RESET}")
sys.exit(1)
print(f"{utils.Colors.RED}{e.msg}{utils.Colors.RESET}")
return 1

5
osdk/__main__.py Executable file
View file

@ -0,0 +1,5 @@
import sys
from . import main
sys.exit(main())

View file

@ -1,13 +1,12 @@
from os import environ
from typing import TextIO, Tuple
import json
import ninja
import manifests as m
import environments as e
import copy
import utils
from utils import Colors
from . import ninja
from . import manifests as m
from . import environments as e
from . import utils
def genNinja(out: TextIO, manifests: dict, env: dict) -> None:
@ -92,7 +91,7 @@ def prepare(envName: str) -> Tuple[dict, dict]:
def buildAll(envName: str) -> None:
environment, _ = prepare(envName)
print(f"{Colors.BOLD}Building all targets for {envName}{Colors.RESET}")
print(f"{utils.Colors.BOLD}Building all targets for {envName}{utils.Colors.RESET}")
try:
utils.runCmd("ninja", "-j", "1", "-f", environment["ninjafile"])
except:
@ -101,7 +100,7 @@ def buildAll(envName: str) -> None:
def buildOne(envName: str, target: str) -> str:
print(f"{Colors.BOLD}Building {target} for {envName}{Colors.RESET}")
print(f"{utils.Colors.BOLD}Building {target} for {envName}{utils.Colors.RESET}")
environment, manifests = prepare(envName)
if not target in manifests:

View file

@ -2,7 +2,7 @@
import copy
import os
import utils
from . import utils
PASSED_TO_BUILD = [
@ -46,7 +46,8 @@ def enableOptimizer(env: dict, level: str) -> dict:
def available() -> list:
return [file.removesuffix(".json") for file in os.listdir("meta/toolchains") if file.endswith(".json")]
return [file.removesuffix(".json") for file in utils.tryListDir("meta/toolchains")
if file.endswith(".json")]
VARIANTS = ["debug", "devel", "release", "sanatize"]

View file

@ -2,7 +2,7 @@ import os
import json
import copy
import utils
from . import utils
def loadJsons(basedir: str) -> dict:

View file

@ -7,7 +7,6 @@ import requests
import subprocess
import json
import copy
from types import SimpleNamespace
class Colors:
@ -187,3 +186,10 @@ def loadJson(filename: str) -> dict:
result = copy.deepcopy(result)
return result
def tryListDir(path: str) -> list[str]:
try:
return os.listdir(path)
except FileNotFoundError:
return []

19
setup.py Normal file
View file

@ -0,0 +1,19 @@
from setuptools import setup
setup(
name="osdk",
version="0.0.1",
description="Operating System Development Kit",
author="The DEVSE Community",
author_email="contact@devse.wiki",
url="https://devse.wiki/",
packages=["osdk"],
install_requires=[
"requests",
],
entry_points={
"console_scripts": [
"osdk = osdk:main",
],
}
)