Squash commits for public release
This commit is contained in:
109
build/third_party/PortingTools.py
vendored
Normal file
109
build/third_party/PortingTools.py
vendored
Normal file
@@ -0,0 +1,109 @@
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from git import Repo
|
||||
|
||||
|
||||
class PortTools:
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
@staticmethod
|
||||
def set_env(name, val):
|
||||
os.environ[name] = str(val)
|
||||
|
||||
@staticmethod
|
||||
def run_command_impl(cmd, cwd="."):
|
||||
result = subprocess.run(
|
||||
cmd, stdout=subprocess.PIPE, shell=True, cwd=cwd)
|
||||
return (result.stdout.decode("ascii"), result.returncode)
|
||||
|
||||
@staticmethod
|
||||
def run_command(cmd, cwd="."):
|
||||
return PortTools.run_command_impl(cmd, cwd)
|
||||
|
||||
@staticmethod
|
||||
def apply_patch(location, patch_name):
|
||||
src_dir = location+"/src"
|
||||
if not os.path.exists(src_dir):
|
||||
return ("", -1)
|
||||
|
||||
patch_path = location+"/patches/"+patch_name
|
||||
if not os.path.exists(patch_path):
|
||||
return ("", -1)
|
||||
|
||||
applied_patch_path = location+"/patches/.applied_"+patch_name
|
||||
if os.path.exists(applied_patch_path):
|
||||
return ("", 0)
|
||||
|
||||
cmd = ["patch"]
|
||||
myinput = open(patch_path)
|
||||
result = subprocess.run(
|
||||
cmd, stdin=myinput, stdout=subprocess.PIPE, cwd=src_dir)
|
||||
if result.returncode == 0:
|
||||
Path(applied_patch_path).touch()
|
||||
return (result.stdout.decode("ascii"), result.returncode)
|
||||
|
||||
@staticmethod
|
||||
def clone_git(location, url):
|
||||
src_dir = location+"/src"
|
||||
if os.path.exists(src_dir):
|
||||
return
|
||||
Repo.clone_from(url, src_dir)
|
||||
|
||||
|
||||
class StaticBuiler:
|
||||
def check_libs_present(self, lib_name):
|
||||
lib_desc = StaticBuiler.libs.get(lib_name, None)
|
||||
if lib_desc is None:
|
||||
return False
|
||||
|
||||
if not os.path.exists(lib_desc["bin"]):
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def __init__(self, rootdir, srcdir, libs):
|
||||
self.rootdir = rootdir
|
||||
self.srcdir = srcdir
|
||||
self.target_libs = libs
|
||||
self.libs = {
|
||||
"libc": {
|
||||
"include": self.rootdir + "/libs/libc/include",
|
||||
"bin": self.rootdir + "/out/base/libs/",
|
||||
}
|
||||
}
|
||||
|
||||
def libs_include_flags(self):
|
||||
flags = ""
|
||||
for lib_name in self.target_libs:
|
||||
lib_desc = self.libs.get(lib_name, None)
|
||||
assert(lib_desc is not None)
|
||||
|
||||
flags += "-I"
|
||||
flags += lib_desc["include"] + " "
|
||||
return flags
|
||||
|
||||
def libs_link_flags(self):
|
||||
flags = " "
|
||||
for lib_name in self.target_libs:
|
||||
lib_desc = self.libs.get(lib_name, None)
|
||||
assert(lib_desc is not None)
|
||||
|
||||
flags += "-L"
|
||||
flags += lib_desc["bin"] + " "
|
||||
flags += "-l" + lib_name[3:] + " "
|
||||
return flags
|
||||
|
||||
def run_command(self, cmd_str):
|
||||
return PortTools.run_command(cmd_str, self.srcdir)
|
||||
|
||||
def move_exec(self, execname, targetdir):
|
||||
if not os.path.exists(targetdir):
|
||||
os.makedirs(targetdir)
|
||||
return self.run_command("mv {0} {1}".format(execname, targetdir))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
pass
|
||||
Reference in New Issue
Block a user