98 lines
2.9 KiB
Python
98 lines
2.9 KiB
Python
|
|
# fmt: off
|
||
|
|
import sys
|
||
|
|
from os import path
|
||
|
|
sys.path.append(path.dirname(path.dirname(path.abspath(__file__))))
|
||
|
|
from PortingTools import *
|
||
|
|
from PyBridgingTools import *
|
||
|
|
# fmt: on
|
||
|
|
|
||
|
|
state = PyBridgingTools.build_descriptor()
|
||
|
|
|
||
|
|
|
||
|
|
class TinyshPackage:
|
||
|
|
version = "1.0"
|
||
|
|
name = "tinysh"
|
||
|
|
exec_name = "simple-c-shell"
|
||
|
|
rootdir = state["rootdir"]
|
||
|
|
target_dir = state["rootdir"] + "/third_party/tinysh"
|
||
|
|
url = "https://github.com/jmreyes/simple-c-shell.git"
|
||
|
|
|
||
|
|
def __init__(self):
|
||
|
|
pass
|
||
|
|
|
||
|
|
def clean(self):
|
||
|
|
src_dir = self.target_dir + "/src"
|
||
|
|
PortTools.run_command("rm -rf {0}".format(src_dir))
|
||
|
|
|
||
|
|
def has_build(self):
|
||
|
|
cache_location = self.target_dir + \
|
||
|
|
"/bin_{0}/".format(state['target_arch'])
|
||
|
|
file_in_cache = cache_location + TinyshPackage.exec_name
|
||
|
|
return os.path.exists(file_in_cache)
|
||
|
|
|
||
|
|
def download(self):
|
||
|
|
PortTools.clone_git(self.target_dir, self.url)
|
||
|
|
|
||
|
|
def apply_patches(self):
|
||
|
|
txt, err = PortTools.apply_patch(
|
||
|
|
self.target_dir, "0001-llvm_support.patch")
|
||
|
|
if err:
|
||
|
|
print(txt)
|
||
|
|
exit(1)
|
||
|
|
txt, err = PortTools.apply_patch(
|
||
|
|
self.target_dir, "0002-disable_unsupported.patch")
|
||
|
|
if err:
|
||
|
|
print(txt)
|
||
|
|
exit(1)
|
||
|
|
|
||
|
|
def build(self):
|
||
|
|
cache_location = self.target_dir + \
|
||
|
|
"/bin_{0}/".format(state['target_arch'])
|
||
|
|
file_in_cache = cache_location + TinyshPackage.exec_name
|
||
|
|
if self.has_build():
|
||
|
|
return
|
||
|
|
|
||
|
|
src_dir = self.target_dir + "/src"
|
||
|
|
|
||
|
|
builder = StaticBuiler(state["rootdir"], src_dir, libs=["libc"])
|
||
|
|
PortTools.set_env("CC", state["toolchain"]["cc"])
|
||
|
|
PortTools.set_env("LD", state["toolchain"]["ld"])
|
||
|
|
|
||
|
|
cflags = ""
|
||
|
|
ldflags = ""
|
||
|
|
if state["host"] == "llvm":
|
||
|
|
cflags += "-target " + state["toolchain"]["target"] + " "
|
||
|
|
|
||
|
|
cflags += state["c_flags"]
|
||
|
|
cflags += builder.libs_include_flags()
|
||
|
|
PortTools.set_env("CFLAGS", cflags)
|
||
|
|
|
||
|
|
ldflags += state["ld_flags"]
|
||
|
|
ldflags += builder.libs_link_flags()
|
||
|
|
PortTools.set_env("LDFLAGS", ldflags)
|
||
|
|
|
||
|
|
_, err = builder.run_command(
|
||
|
|
"make CC=\"$CC\" LD=\"$LD\" CFLAGS=\"$CFLAGS\" LDFLAGS=\"$LDFLAGS\"")
|
||
|
|
if err:
|
||
|
|
exit(1)
|
||
|
|
|
||
|
|
exepath = src_dir + "/" + TinyshPackage.exec_name
|
||
|
|
builder.move_exec(exepath, cache_location)
|
||
|
|
builder.run_command("make clean")
|
||
|
|
|
||
|
|
def bin_is_ready(self):
|
||
|
|
cache_location = self.target_dir + \
|
||
|
|
"/bin_{0}/".format(state['target_arch'])
|
||
|
|
file_in_cache = cache_location + TinyshPackage.exec_name
|
||
|
|
if os.path.exists(state["outpath"]):
|
||
|
|
return
|
||
|
|
os.symlink(file_in_cache, state["outpath"])
|
||
|
|
|
||
|
|
|
||
|
|
package = TinyshPackage()
|
||
|
|
if not package.has_build():
|
||
|
|
package.download()
|
||
|
|
package.apply_patches()
|
||
|
|
package.build()
|
||
|
|
package.bin_is_ready()
|