Files

98 lines
2.9 KiB
Python
Raw Permalink Normal View History

2025-02-12 09:54:05 -05:00
# 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()