vxKernel/scripts/vxdev/core/build/__init__.py

109 lines
2.9 KiB
Python

"""
core.build - build abstraction
"""
import os
import sys
from core.logger import log
from core.build.bootloader import bootloader_configure, bootloader_build
from version import (
# VXGOS_OS_VERSION,
# VXGOS_KERNEL_VERSION,
VXGOS_BOOTLOADER_VERSION,
)
__all__ = [
'VxOSBuild',
]
#---
# Public
#---
class VxOSBuild():
""" performs build abstraction
The build system of vxGOS is particular
TODO
"""
def __new__(cls, *_, **__):
""" try to acquire boards required file and load external post-scripts
"""
obj = super().__new__(cls)
obj._target = os.environ['VXSDK_PKG_TARGET']
obj._prefix_base = f"{os.path.dirname(__file__)}/../../../../vxgos/"
obj._prefix_base = os.path.normpath(obj._prefix_base)
try:
sys.path.append(f"{obj._prefix_base}/boards/{obj._target}/")
mod = __import__(
'generate',
fromlist=[
'generate_kaslr_blob',
'generate_image'
]
)
error_base_str = f"{obj._target} : `generate.py` do not exposes"
if not hasattr(mod, 'generate_kaslr_blob'):
log.emergency(f"{error_base_str} : `generate_kaslr_blob()`")
if not hasattr(mod, 'generate_image'):
log.emergency(f"{error_base_str} : `generate_image()`")
obj._postscript = {
'kalsr' : mod.generate_kaslr_blob,
'image' : mod.generate_image
}
sys.path.pop()
except ImportError as _:
log.error(f"unable to aquire '{obj._target}' post-script")
return obj
def __init__(self, verbose=False):
""" create build abstraction object """
self._verbose = verbose
self._prefix = {
'build' : os.environ['VXSDK_PREFIX_BUILD'],
'bootloader' : f"{self._prefix_base}/bootloader",
'kernel' : f"{self._prefix_base}/kernel",
}
#---
# Attributes
#---
@property
def prefix(self):
""" return the prefix dictionary """
return self._prefix
@property
def target(self):
""" return the selected target """
return self._target
@property
def verbose(self):
""" return if the verbose mode is selected """
return self._verbose
@property
def postscript(self):
""" return if the verbose mode is selected """
return self._postscript
#---
# Public
#---
def configure(self):
""" compile OS/kernel, bootloader and perform post-build scripts """
bootloader_configure(self, VXGOS_BOOTLOADER_VERSION)
def build(self):
""" compile OS/kernel, bootloader and perform post-build scripts """
bootloader_path = bootloader_build(self)
return self.postscript['image'](
self.prefix['build'],
bootloader_path,
'',
)