70 lines
1.9 KiB
Python
70 lines
1.9 KiB
Python
|
import logging
|
||
|
import os
|
||
|
import shutil
|
||
|
import subprocess
|
||
|
##
|
||
|
from . import constants
|
||
|
|
||
|
|
||
|
_log = logging.getLogger()
|
||
|
|
||
|
|
||
|
class Target(object):
|
||
|
def __init__(self, target_xml):
|
||
|
self.xml = target_xml
|
||
|
self.subdir = self.xml.attrib.get('subDir', '.')
|
||
|
self.base = self.xml.attrib.get('baseName')
|
||
|
self.target = self.xml.text
|
||
|
if not self.base:
|
||
|
self.base = os.path.basename(self.target)
|
||
|
|
||
|
|
||
|
class IpxeScript(object):
|
||
|
def __init__(self, script_dir, script_xml):
|
||
|
self.xml = script_xml
|
||
|
self.fpath = os.path.join(os.path.abspath(os.path.expanduser(script_dir)),
|
||
|
self.xml.text)
|
||
|
self.prefix = self.xml.attrib['prefix']
|
||
|
|
||
|
|
||
|
class Compiler(object):
|
||
|
def __init__(self, builddir, destdir, upstream, patches, monkey_patches, build_xml):
|
||
|
self.xml = build_xml
|
||
|
self.build = os.path.abspath(os.path.expanduser(builddir))
|
||
|
self.dest = os.path.abspath(os.path.expanduser(destdir))
|
||
|
self.src = upstream.dest
|
||
|
self.upstream = upstream
|
||
|
self.patches = patches
|
||
|
self.monkey_patches = monkey_patches
|
||
|
self.targets = []
|
||
|
self.scripts = []
|
||
|
self._add_targets()
|
||
|
|
||
|
def _add_targets(self):
|
||
|
roms = self.xml.findall('rom')
|
||
|
if roms is None:
|
||
|
|
||
|
|
||
|
def make(self):
|
||
|
# NOTE: 1af41000 is the firmware used by virtIO
|
||
|
self.prep()
|
||
|
self.patch()
|
||
|
|
||
|
def patch(self):
|
||
|
for m in self.monkey_patches:
|
||
|
for pf in m.files:
|
||
|
pf.patch()
|
||
|
for p in self.patches:
|
||
|
for pf in p.files:
|
||
|
pf.patch()
|
||
|
return()
|
||
|
|
||
|
def prep(self):
|
||
|
if self.src != self.build:
|
||
|
shutil.copytree(self.src, self.build, dirs_exist_ok = True)
|
||
|
os.makedirs(self.dest)
|
||
|
# These are standard.
|
||
|
for d in constants.IPXE_CATEGORIES:
|
||
|
dpath = os.path.join(self.dest, d)
|
||
|
os.makedirs(dpath, exist_ok = True)
|