|
|
|
@@ -1,395 +1,327 @@
|
|
|
|
|
import glob
|
|
|
|
|
import os
|
|
|
|
|
import subprocess
|
|
|
|
|
import shutil
|
|
|
|
|
import glob
|
|
|
|
|
|
|
|
|
|
upstream_version = "22.1.8"
|
|
|
|
|
[upstream_major, upstream_minor, upstream_rev] = upstream_version.split(".")
|
|
|
|
|
|
|
|
|
|
# Begin of file lists
|
|
|
|
|
LLVM_TOOLS = [
|
|
|
|
|
"bugpoint",
|
|
|
|
|
"dsymutil",
|
|
|
|
|
"llc",
|
|
|
|
|
"lli",
|
|
|
|
|
"llvm-addr2line",
|
|
|
|
|
"llvm-ar",
|
|
|
|
|
"llvm-as",
|
|
|
|
|
"llvm-bcanalyzer",
|
|
|
|
|
"llvm-bitcode-strip",
|
|
|
|
|
"llvm-bolt",
|
|
|
|
|
"llvm-bolt-binary-analysis",
|
|
|
|
|
"llvm-bolt-heatmap",
|
|
|
|
|
"llvm-boltdiff",
|
|
|
|
|
"llvm-c-test",
|
|
|
|
|
"llvm-cas",
|
|
|
|
|
"llvm-cat",
|
|
|
|
|
"llvm-cfi-verify",
|
|
|
|
|
"llvm-cgdata",
|
|
|
|
|
"llvm-config",
|
|
|
|
|
"llvm-cov",
|
|
|
|
|
"llvm-ctxprof-util",
|
|
|
|
|
"llvm-cvtres",
|
|
|
|
|
"llvm-cxxdump",
|
|
|
|
|
"llvm-cxxfilt",
|
|
|
|
|
"llvm-cxxmap",
|
|
|
|
|
"llvm-debuginfo-analyzer",
|
|
|
|
|
"llvm-debuginfod",
|
|
|
|
|
"llvm-debuginfod-find",
|
|
|
|
|
"llvm-diff",
|
|
|
|
|
"llvm-dis",
|
|
|
|
|
"llvm-dlltool",
|
|
|
|
|
"llvm-dwarfdump",
|
|
|
|
|
"llvm-dwarfutil",
|
|
|
|
|
"llvm-dwp",
|
|
|
|
|
"llvm-exegesis",
|
|
|
|
|
"llvm-extract",
|
|
|
|
|
"llvm-gsymutil",
|
|
|
|
|
"llvm-ifs",
|
|
|
|
|
"llvm-install-name-tool",
|
|
|
|
|
"llvm-ir2vec",
|
|
|
|
|
"llvm-jitlink",
|
|
|
|
|
"llvm-lib",
|
|
|
|
|
"llvm-libtool-darwin",
|
|
|
|
|
"llvm-link",
|
|
|
|
|
"llvm-lipo",
|
|
|
|
|
"llvm-lto",
|
|
|
|
|
"llvm-lto2",
|
|
|
|
|
"llvm-mc",
|
|
|
|
|
"llvm-mca",
|
|
|
|
|
"llvm-ml",
|
|
|
|
|
"llvm-ml64",
|
|
|
|
|
"llvm-modextract",
|
|
|
|
|
"llvm-nm",
|
|
|
|
|
"llvm-objcopy",
|
|
|
|
|
"llvm-objdump",
|
|
|
|
|
"llvm-offload-binary",
|
|
|
|
|
"llvm-offload-wrapper",
|
|
|
|
|
"llvm-opt-report",
|
|
|
|
|
"llvm-otool",
|
|
|
|
|
"llvm-pdbutil",
|
|
|
|
|
"llvm-profdata",
|
|
|
|
|
"llvm-profgen",
|
|
|
|
|
"llvm-ranlib",
|
|
|
|
|
"llvm-rc",
|
|
|
|
|
"llvm-readelf",
|
|
|
|
|
"llvm-readobj",
|
|
|
|
|
"llvm-readtapi",
|
|
|
|
|
"llvm-reduce",
|
|
|
|
|
"llvm-remarkutil",
|
|
|
|
|
"llvm-rtdyld",
|
|
|
|
|
"llvm-sim",
|
|
|
|
|
"llvm-size",
|
|
|
|
|
"llvm-split",
|
|
|
|
|
"llvm-stress",
|
|
|
|
|
"llvm-strings",
|
|
|
|
|
"llvm-strip",
|
|
|
|
|
"llvm-symbolizer",
|
|
|
|
|
"llvm-tblgen",
|
|
|
|
|
"llvm-tli-checker",
|
|
|
|
|
"llvm-undname",
|
|
|
|
|
"llvm-windres",
|
|
|
|
|
"llvm-xray",
|
|
|
|
|
"merge-fdata",
|
|
|
|
|
"opt",
|
|
|
|
|
"perf2bolt",
|
|
|
|
|
"reduce-chunk-list",
|
|
|
|
|
"sancov",
|
|
|
|
|
"sanstats",
|
|
|
|
|
"verify-uselistorder",
|
|
|
|
|
]
|
|
|
|
|
LLDB_BINARIES = [
|
|
|
|
|
"lldb",
|
|
|
|
|
"lldb-argdumper",
|
|
|
|
|
"lldb-dap",
|
|
|
|
|
"lldb-instr",
|
|
|
|
|
"lldb-mcp",
|
|
|
|
|
"lldb-server",
|
|
|
|
|
"yaml2macho-core",
|
|
|
|
|
]
|
|
|
|
|
LLD_BINARIES = ["lld", "lld-link", "ld64.lld", "wasm-ld", "wrapper://ld.lld~ld.lld"]
|
|
|
|
|
CLANG_BINARIES = [
|
|
|
|
|
f"clang-{upstream_major}~llvm-clang",
|
|
|
|
|
"wrapper://clang~clang",
|
|
|
|
|
"wrapper://clang++~clang++",
|
|
|
|
|
f"wrapper://clang~clang-{upstream_major}",
|
|
|
|
|
"clang-check",
|
|
|
|
|
"clang-cl",
|
|
|
|
|
"clang-cpp",
|
|
|
|
|
"clang-extdef-mapping",
|
|
|
|
|
"clang-format",
|
|
|
|
|
"clang-installapi",
|
|
|
|
|
"clang-linker-wrapper",
|
|
|
|
|
"clang-nvlink-wrapper",
|
|
|
|
|
"clang-offload-bundler",
|
|
|
|
|
"clang-offload-packager",
|
|
|
|
|
"clang-refactor",
|
|
|
|
|
"clang-repl",
|
|
|
|
|
"clang-scan-deps",
|
|
|
|
|
"clang-sycl-linker",
|
|
|
|
|
"clang-tblgen",
|
|
|
|
|
"diagtool",
|
|
|
|
|
"git-clang-format",
|
|
|
|
|
"hmaptool",
|
|
|
|
|
"intercept-build",
|
|
|
|
|
"amdgpu-arch",
|
|
|
|
|
"c-index-test",
|
|
|
|
|
"analyze-build",
|
|
|
|
|
"nvptx-arch",
|
|
|
|
|
"offload-arch",
|
|
|
|
|
"scan-build",
|
|
|
|
|
"scan-build-py",
|
|
|
|
|
"scan-view",
|
|
|
|
|
"libexec/analyze-c++",
|
|
|
|
|
"libexec/analyze-cc",
|
|
|
|
|
"libexec/c++-analyzer",
|
|
|
|
|
"libexec/ccc-analyzer",
|
|
|
|
|
"libexec/intercept-c++",
|
|
|
|
|
"libexec/intercept-cc",
|
|
|
|
|
]
|
|
|
|
|
# End of file lists
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import lib.cpp as cpp
|
|
|
|
|
from lib import arch
|
|
|
|
|
import lib
|
|
|
|
|
from lib import arch, cpp
|
|
|
|
|
from lib.make import *
|
|
|
|
|
|
|
|
|
|
version(upstream_version)
|
|
|
|
|
source_url(
|
|
|
|
|
f"https://github.com/llvm/llvm-project/releases/download/llvmorg-{upstream_version}/llvm-project-{upstream_version}.src.tar.xz"
|
|
|
|
|
)
|
|
|
|
|
pkgver = "22.1.8"
|
|
|
|
|
[pkgver_major, pkgver_minor, pkgver_rev] = pkgver.split(".")
|
|
|
|
|
|
|
|
|
|
version(pkgver)
|
|
|
|
|
source_url(f"https://github.com/llvm/llvm-project/releases/download/llvmorg-{pkgver}/llvm-project-{pkgver}.src.tar.xz")
|
|
|
|
|
|
|
|
|
|
builddep("shortcut/c++")
|
|
|
|
|
builddep("shortcut/cmake")
|
|
|
|
|
builddep(f"linux-dev @{arch.get_target()}")
|
|
|
|
|
builddep(f"libffi-dev @{arch.get_target()}")
|
|
|
|
|
builddep(f"libz-ng-dev @{arch.get_target()}")
|
|
|
|
|
builddep(f"aws-lc-dev @{arch.get_target()}")
|
|
|
|
|
builddep(f"libunwind-dev @{arch.get_target()}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
srcdir = None
|
|
|
|
|
packname = None
|
|
|
|
|
|
|
|
|
|
def llvm_host_triple():
|
|
|
|
|
return arch.get_target().replace("-semios-linux", "-semios-linux-musl")
|
|
|
|
|
|
|
|
|
|
def cmake(sourcedir, args):
|
|
|
|
|
builddir = os.getcwd() + f"/../_build_{sourcedir}"
|
|
|
|
|
installdir = os.getcwd() + f"/../_cpp_install/{sourcedir}"
|
|
|
|
|
template_args = [
|
|
|
|
|
"cmake", "-G", "Ninja", "-S", sourcedir, "-B", builddir,
|
|
|
|
|
"-DCMAKE_BUILD_TYPE=Release",
|
|
|
|
|
|
|
|
|
|
f"-DLLVM_DEFAULT_TARGET_TRIPLE={llvm_host_triple()}",
|
|
|
|
|
f"-DLLVM_HOST_TRIPLE={llvm_host_triple()}",
|
|
|
|
|
|
|
|
|
|
"-DLLVM_ENABLE_EH=ON",
|
|
|
|
|
"-DLLVM_ENABLE_RTTI=ON",
|
|
|
|
|
"-DLLVM_ENABLE_ASSERTIONS=OFF",
|
|
|
|
|
"-DLLVM_BUILD_LLVM_DYLIB=ON",
|
|
|
|
|
"-DLLVM_LINK_LLVM_DYLIB=ON",
|
|
|
|
|
|
|
|
|
|
"-DLLVM_ENABLE_LIBCXX=ON",
|
|
|
|
|
"-DLLVM_ENABLE_LLD=ON",
|
|
|
|
|
"-DLLVM_ENABLE_FFI=ON",
|
|
|
|
|
]
|
|
|
|
|
subprocess.run(template_args + args, check=True)
|
|
|
|
|
subprocess.run(["cmake", "--build", builddir], check=True)
|
|
|
|
|
os.environ["DESTDIR"] = installdir
|
|
|
|
|
subprocess.run(["cmake", "--install", builddir], check=True)
|
|
|
|
|
|
|
|
|
|
def import_llvm():
|
|
|
|
|
return [f"-DLLVM_ROOT={os.getcwd()}/../_cpp_install/llvm/usr/local"]
|
|
|
|
|
|
|
|
|
|
def import_clang():
|
|
|
|
|
return [f"-DClang_DIR={os.getcwd()}/../_cpp_install/clang/usr/local"]
|
|
|
|
|
|
|
|
|
|
def enter_install(name):
|
|
|
|
|
global packname
|
|
|
|
|
packname = name
|
|
|
|
|
|
|
|
|
|
def auto_pack_static(composer):
|
|
|
|
|
composer.makedir("lib")
|
|
|
|
|
for i in os.listdir("lib"):
|
|
|
|
|
if ".a" in i:
|
|
|
|
|
composer.addfile(f"lib/{i}", f"lib/{i}")
|
|
|
|
|
|
|
|
|
|
def auto_pack_dev(composer, name, devbins=[], extdirs=["lib/cmake"]):
|
|
|
|
|
composer.add_dir("include", "include")
|
|
|
|
|
composer.makedir("lib")
|
|
|
|
|
for i in os.listdir("lib"):
|
|
|
|
|
prefix = None
|
|
|
|
|
if os.path.isdir(i) and f"lib/{i}" in extdirs:
|
|
|
|
|
composer.add_dir(f"lib/{i}", f"lib/{i}")
|
|
|
|
|
elif ".so" in i:
|
|
|
|
|
prefix = get_prefix(f"lib{name}")
|
|
|
|
|
elif ".a" in i:
|
|
|
|
|
prefix = get_prefix(f"lib{name}-static")
|
|
|
|
|
if prefix:
|
|
|
|
|
os.symlink(f"{prefix}/lib/{i}", f"{composer.workdir}/bundle/lib/{i}")
|
|
|
|
|
composer.makedir("bin")
|
|
|
|
|
for i in devbins:
|
|
|
|
|
composer.addfile(f"bin/{i}", f"bin/{i}")
|
|
|
|
|
for i in os.listdir("bin"):
|
|
|
|
|
if i in devbins:
|
|
|
|
|
continue
|
|
|
|
|
prefix = get_prefix(name)
|
|
|
|
|
os.symlink(f"{prefix}/bin/{i}", f"{composer.workdir}/bundle/bin/{i}")
|
|
|
|
|
|
|
|
|
|
def auto_pack_runtime_lib(composer, name):
|
|
|
|
|
composer.makedir("lib")
|
|
|
|
|
for i in os.listdir("lib"):
|
|
|
|
|
if name in i and ".so" in i:
|
|
|
|
|
composer.addfile(f"lib/{i}", f"lib/{i}")
|
|
|
|
|
|
|
|
|
|
def auto_pack_glob(composer, matches):
|
|
|
|
|
for matchable in matches:
|
|
|
|
|
for i in glob.glob(matchable):
|
|
|
|
|
composer.makedirs(f"{os.path.dirname(i)}")
|
|
|
|
|
if os.path.isdir(i):
|
|
|
|
|
composer.add_dir(i, i)
|
|
|
|
|
else:
|
|
|
|
|
composer.addfile(i, i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
old_on_pack = on_pack
|
|
|
|
|
def new_on_pack(f):
|
|
|
|
|
current_packname = packname
|
|
|
|
|
def wrap_f(composer):
|
|
|
|
|
pkgdir = f"{srcdir}/../_cpp_install/{current_packname}/usr/local"
|
|
|
|
|
os.chdir(pkgdir)
|
|
|
|
|
f(composer)
|
|
|
|
|
old_on_pack(wrap_f)
|
|
|
|
|
lib.make.on_pack = new_on_pack
|
|
|
|
|
on_pack = new_on_pack
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def build_llvm():
|
|
|
|
|
cmake("llvm", [])
|
|
|
|
|
|
|
|
|
|
def build_bolt():
|
|
|
|
|
cmake("bolt", import_llvm())
|
|
|
|
|
|
|
|
|
|
def build_clang():
|
|
|
|
|
options = [
|
|
|
|
|
"-DCLANG_DEFAULT_CXX_STDLIB=libc++",
|
|
|
|
|
"-DCLANG_DEFAULT_RTLIB=compiler-rt",
|
|
|
|
|
"-DLLVM_INCLUDE_TESTS=OFF",
|
|
|
|
|
]
|
|
|
|
|
cmake("clang", import_llvm() + options)
|
|
|
|
|
|
|
|
|
|
def build_lldb():
|
|
|
|
|
cmake("lldb", import_llvm() + import_clang())
|
|
|
|
|
|
|
|
|
|
def build_lld():
|
|
|
|
|
cmake("lld", import_llvm())
|
|
|
|
|
|
|
|
|
|
def build_polly():
|
|
|
|
|
cmake("polly", import_llvm())
|
|
|
|
|
|
|
|
|
|
def build_runtimes():
|
|
|
|
|
cflags = f"-isystem /lib/{arch.get_target()}/include -L/lib/{arch.get_target()} -B/lib/{arch.get_target()} -rtlib=compiler-rt"
|
|
|
|
|
shutil.rmtree("../_build_runtimes")
|
|
|
|
|
options = [
|
|
|
|
|
# Configure runtimes
|
|
|
|
|
"-DLLVM_ENABLE_RUNTIMES=libunwind;libcxxabi;libcxx",
|
|
|
|
|
|
|
|
|
|
# Configure libcxx
|
|
|
|
|
"-DLIBCXX_HAS_MUSL_LIBC=ON",
|
|
|
|
|
]
|
|
|
|
|
cmake("runtimes", options)
|
|
|
|
|
shutil.rmtree("../_build_runtimes")
|
|
|
|
|
options = [
|
|
|
|
|
# Configure runtimes
|
|
|
|
|
"-DLLVM_ENABLE_RUNTIMES=compiler-rt",
|
|
|
|
|
|
|
|
|
|
# Configure compiler-rt
|
|
|
|
|
"-DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON",
|
|
|
|
|
"-DCOMPILER_RT_BUILD_GWP_ASAN=OFF",
|
|
|
|
|
"-DCOMPILER_RT_BUILD_LIBFUZZER=OFF",
|
|
|
|
|
]
|
|
|
|
|
cmake("runtimes", options)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def build():
|
|
|
|
|
os.environ["CXXFLAGS"] = os.environ.get("CXXFLAGS", "") + " --rtlib=compiler-rt"
|
|
|
|
|
subprocess.run(
|
|
|
|
|
[
|
|
|
|
|
"cmake",
|
|
|
|
|
"-G",
|
|
|
|
|
"Ninja",
|
|
|
|
|
"-S",
|
|
|
|
|
"llvm",
|
|
|
|
|
"-B",
|
|
|
|
|
"build",
|
|
|
|
|
"-DCMAKE_BUILD_TYPE=Release",
|
|
|
|
|
f"-DLLVM_DEFAULT_TARGET_TRIPLE={llvm_host_triple()}",
|
|
|
|
|
f"-DLLVM_HOST_TRIPLE={llvm_host_triple()}",
|
|
|
|
|
"-DLLVM_ENABLE_PROJECTS=clang;lldb;lld;bolt",
|
|
|
|
|
"-DLLVM_ENABLE_RUNTIMES=libcxx;libcxxabi;libunwind;compiler-rt",
|
|
|
|
|
"-DLLVM_ENABLE_EH=ON",
|
|
|
|
|
"-DLLVM_ENABLE_RTTI=ON",
|
|
|
|
|
"-DCMAKE_INSTALL_PREFIX=/",
|
|
|
|
|
"-DLLVM_ENABLE_ASSERTIONS=OFF",
|
|
|
|
|
"-DLLVM_BUILD_LLVM_DYLIB=ON",
|
|
|
|
|
"-DLLVM_ENABLE_LIBCXX=ON",
|
|
|
|
|
"-DLLVM_ENABLE_LIBEDIT=ON",
|
|
|
|
|
"-DLLVM_ENABLE_LLD=ON",
|
|
|
|
|
"-DLLVM_LINK_LLVM_DYLIB=ON",
|
|
|
|
|
"-DLIBCXX_HAS_MUSL_LIBC=ON",
|
|
|
|
|
"-DCOMPILER_RT_BUILD_GWP_ASAN=OFF",
|
|
|
|
|
],
|
|
|
|
|
check=True,
|
|
|
|
|
)
|
|
|
|
|
subprocess.run(["cmake", "--build", "build"], check=True)
|
|
|
|
|
os.environ["DESTDIR"] = os.getcwd() + "/cpp_install"
|
|
|
|
|
subprocess.run(["cmake", "--install", "build"], check=True)
|
|
|
|
|
os.chdir("cpp_install")
|
|
|
|
|
|
|
|
|
|
global srcdir
|
|
|
|
|
srcdir = os.getcwd()
|
|
|
|
|
build_llvm()
|
|
|
|
|
build_bolt()
|
|
|
|
|
build_clang()
|
|
|
|
|
build_lldb()
|
|
|
|
|
build_lld()
|
|
|
|
|
build_polly()
|
|
|
|
|
build_runtimes()
|
|
|
|
|
|
|
|
|
|
on_build(build)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Begin of helper functions
|
|
|
|
|
package_dir = os.getcwd()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def install_wrapper(composer, name: str, dst: str):
|
|
|
|
|
composer.addfile(f"{package_dir}/wrapper/{name}.wrapper", dst)
|
|
|
|
|
with open(f"{composer.workdir}/bundle/{dst}", "r") as f:
|
|
|
|
|
s = f.read()
|
|
|
|
|
s = s.replace("LLVM_VERSION=", f"LLVM_VERSION={upstream_version}").replace(
|
|
|
|
|
"ARCHITECTURE=", "ARCHITECTURE=" + arch.get_target()
|
|
|
|
|
).replace("LLVM_ARCH=", "LLVM_ARCH=" + llvm_host_triple())
|
|
|
|
|
with open(f"{composer.workdir}/bundle/{dst}", "w") as f:
|
|
|
|
|
f.write(s)
|
|
|
|
|
os.chmod(f"{composer.workdir}/bundle/{dst}", 0o755)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def auto_pack_llvm_runtime(composer, prefix, dev):
|
|
|
|
|
composer.makedirs("lib")
|
|
|
|
|
parent_dir = f"./lib/{llvm_host_triple()}"
|
|
|
|
|
for i in os.listdir(parent_dir):
|
|
|
|
|
fullpath = f"{parent_dir}/{i}"
|
|
|
|
|
if i.split(".")[0] != prefix:
|
|
|
|
|
continue
|
|
|
|
|
if dev:
|
|
|
|
|
if ".so" in i:
|
|
|
|
|
continue
|
|
|
|
|
else:
|
|
|
|
|
if not ".so" in i:
|
|
|
|
|
continue
|
|
|
|
|
composer.addfile(fullpath, f"lib/{i}")
|
|
|
|
|
if not dev:
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def auto_pack_llvm_runtime_dev(composer, condition):
|
|
|
|
|
composer.makedir("include")
|
|
|
|
|
parent_include = f"./usr/include"
|
|
|
|
|
for i in condition:
|
|
|
|
|
if i.startswith("lib:"):
|
|
|
|
|
auto_pack_llvm_runtime(composer, i.replace("lib:", ""), True)
|
|
|
|
|
continue
|
|
|
|
|
i = i.replace("include:", "")
|
|
|
|
|
for file in glob.glob(f"{parent_include}/{i}"):
|
|
|
|
|
name = file.replace(f"{parent_include}/", "")
|
|
|
|
|
if "/" in name:
|
|
|
|
|
composer.makedirs(f"include/{os.path.dirname(name)}")
|
|
|
|
|
if os.path.isdir(file):
|
|
|
|
|
composer.add_dir(file, f"include/{name}")
|
|
|
|
|
else:
|
|
|
|
|
composer.addfile(file, f"include/{name}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def use_llvm_runtime_auto_pack(prefix: str):
|
|
|
|
|
on_pack(lambda composer: auto_pack_llvm_runtime(composer, prefix, False))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def use_llvm_runtime_dev_auto_pack(des: list[str]):
|
|
|
|
|
on_pack(lambda composer: auto_pack_llvm_runtime_dev(composer, des))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def auto_pack_llvm_libs(composer, prefixes: list[str]):
|
|
|
|
|
composer.makedirs("lib")
|
|
|
|
|
parent_dir = f"./lib/"
|
|
|
|
|
for i in os.listdir(parent_dir):
|
|
|
|
|
fullpath = f"{parent_dir}/{i}"
|
|
|
|
|
if not i.split(".")[0] in prefixes:
|
|
|
|
|
continue
|
|
|
|
|
if not ".so" in i:
|
|
|
|
|
continue
|
|
|
|
|
composer.addfile(fullpath, f"lib/{i}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def use_llvm_libs_auto_pack(prefixes: list[str]):
|
|
|
|
|
on_pack(lambda composer: auto_pack_llvm_libs(composer, prefixes))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def auto_pack_bin(composer, conditions: list[str]):
|
|
|
|
|
for i in conditions:
|
|
|
|
|
prefix = "bin"
|
|
|
|
|
if i.startswith("libexec/"):
|
|
|
|
|
i = i.replace("libexec/", "")
|
|
|
|
|
prefix = "libexec"
|
|
|
|
|
composer.makedirs(prefix)
|
|
|
|
|
src = i
|
|
|
|
|
dst = f"{prefix}/{i}"
|
|
|
|
|
if len(i.split("~")) == 2:
|
|
|
|
|
src = i.split("~")[0]
|
|
|
|
|
dst = f"bin/{i.split('~')[1]}"
|
|
|
|
|
if src.startswith("wrapper://"):
|
|
|
|
|
src = src.replace("wrapper://", "")
|
|
|
|
|
if len(i.split("~")) == 1:
|
|
|
|
|
dst = f"bin/{src}.wrapper"
|
|
|
|
|
install_wrapper(composer, src, dst)
|
|
|
|
|
continue
|
|
|
|
|
if os.path.exists(f"{prefix}/{src}"):
|
|
|
|
|
src = f"{prefix}/{src}"
|
|
|
|
|
elif os.path.exists(f"usr/{prefix}/{src}"):
|
|
|
|
|
src = f"usr/{prefix}/{src}"
|
|
|
|
|
composer.addfile(src, dst)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def use_bin_auto_pack(conditions: list[str]):
|
|
|
|
|
on_pack(lambda composer: auto_pack_bin(composer, conditions))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# End of helper functions
|
|
|
|
|
|
|
|
|
|
# Begin of packages
|
|
|
|
|
|
|
|
|
|
package("libunwind")
|
|
|
|
|
dep("semi-libc @same-arch")
|
|
|
|
|
use_llvm_runtime_auto_pack("libunwind")
|
|
|
|
|
|
|
|
|
|
package("libunwind-dev")
|
|
|
|
|
dep("libunwind (same)")
|
|
|
|
|
use_llvm_runtime_dev_auto_pack(
|
|
|
|
|
["lib:libunwind", "include:mach-o", "include:*unwind*.h"]
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
package("libcxxabi")
|
|
|
|
|
dep("libunwind (same)")
|
|
|
|
|
use_llvm_runtime_auto_pack("libc++abi")
|
|
|
|
|
|
|
|
|
|
package("libcxxabi-dev")
|
|
|
|
|
dep("libcxxabi (same)")
|
|
|
|
|
use_llvm_runtime_dev_auto_pack(["lib:libc++abi"])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
package("libcxx")
|
|
|
|
|
dep("libcxxabi (same)")
|
|
|
|
|
use_llvm_runtime_auto_pack("libc++")
|
|
|
|
|
|
|
|
|
|
package("libcxx-dev")
|
|
|
|
|
dep("libcxx (same)")
|
|
|
|
|
use_llvm_runtime_dev_auto_pack(
|
|
|
|
|
[
|
|
|
|
|
"lib:libc++",
|
|
|
|
|
"lib:libc++experimental",
|
|
|
|
|
f"include:{llvm_host_triple()}/c++/v1/__config_site",
|
|
|
|
|
"include:c++/v1",
|
|
|
|
|
]
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
enter_install("llvm")
|
|
|
|
|
|
|
|
|
|
package("libllvm")
|
|
|
|
|
dep("semi-libc @same-arch")
|
|
|
|
|
dep("libunwind @same-arch")
|
|
|
|
|
dep("libcxx @same-arch")
|
|
|
|
|
use_llvm_libs_auto_pack(["libLLVM", "libLTO", "libRemarks"])
|
|
|
|
|
dep("libcxxabi @same-arch")
|
|
|
|
|
on_pack(lambda composer: auto_pack_glob(composer, ["lib/*.so*"]))
|
|
|
|
|
|
|
|
|
|
package("libllvm-dev")
|
|
|
|
|
dep("libllvm (same)")
|
|
|
|
|
on_pack(lambda composer: auto_pack_dev(composer, "llvm", ["llvm-config"]))
|
|
|
|
|
|
|
|
|
|
package("libllvm-static")
|
|
|
|
|
on_pack(auto_pack_static)
|
|
|
|
|
|
|
|
|
|
def pack_llvm(composer):
|
|
|
|
|
composer.add_dir("bin", "bin")
|
|
|
|
|
os.remove(f"{composer.workdir}/bundle/bin/llvm-config")
|
|
|
|
|
composer.add_dir("share", "share")
|
|
|
|
|
|
|
|
|
|
package("llvm")
|
|
|
|
|
dep("libllvm (same)")
|
|
|
|
|
use_bin_auto_pack(LLVM_TOOLS)
|
|
|
|
|
on_pack(pack_llvm)
|
|
|
|
|
for i in ["strip", "ar", "ranlib", "readelf", "objcopy", "objdump", "strings", "nm"]:
|
|
|
|
|
link(f"bin/llvm-{i}", f"/bin/{i}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
package("lld")
|
|
|
|
|
enter_install("bolt")
|
|
|
|
|
|
|
|
|
|
package("bolt")
|
|
|
|
|
dep("libcxx @same-arch")
|
|
|
|
|
use_bin_auto_pack(LLD_BINARIES)
|
|
|
|
|
link("bin/ld.lld", "/bin/ld")
|
|
|
|
|
|
|
|
|
|
package("liblldb")
|
|
|
|
|
dep("libcxx @same-arch")
|
|
|
|
|
use_llvm_libs_auto_pack(["liblldb", "liblldbIntelFeatures"])
|
|
|
|
|
cpp.use_auto_pack(["bin"])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
package("lldb")
|
|
|
|
|
dep("libcxx @same-arch")
|
|
|
|
|
dep("liblldb (same)")
|
|
|
|
|
use_bin_auto_pack(LLDB_BINARIES)
|
|
|
|
|
|
|
|
|
|
enter_install("clang")
|
|
|
|
|
|
|
|
|
|
package("libclang")
|
|
|
|
|
dep("libcxx @same-arch")
|
|
|
|
|
dep("libllvm (same)")
|
|
|
|
|
use_llvm_libs_auto_pack(["libclang", "libclang-cpp"])
|
|
|
|
|
cpp.use_auto_pack(["lib"])
|
|
|
|
|
|
|
|
|
|
package("libclang-static")
|
|
|
|
|
on_pack(auto_pack_static)
|
|
|
|
|
|
|
|
|
|
package("libclang-dev")
|
|
|
|
|
dep("libclang (same)")
|
|
|
|
|
on_pack(lambda composer: auto_pack_dev(composer, "clang"))
|
|
|
|
|
|
|
|
|
|
def pack_clang(composer):
|
|
|
|
|
auto_pack_bin(composer, CLANG_BINARIES)
|
|
|
|
|
composer.makedirs(f"lib/clang/{upstream_major}/lib")
|
|
|
|
|
composer.add_dir(
|
|
|
|
|
f"lib/clang/{upstream_major}/lib/{llvm_host_triple()}",
|
|
|
|
|
f"lib/clang/{upstream_major}/lib/{llvm_host_triple()}",
|
|
|
|
|
)
|
|
|
|
|
# Add base files
|
|
|
|
|
composer.add_dir("bin", "bin")
|
|
|
|
|
composer.add_dir("libexec", "libexec")
|
|
|
|
|
composer.makedir("share")
|
|
|
|
|
for i in ["clang", "scan-build", "scan-view"]:
|
|
|
|
|
composer.add_dir(f"share/{i}", f"share/{i}")
|
|
|
|
|
|
|
|
|
|
# Add resource files
|
|
|
|
|
composer.makedir("lib")
|
|
|
|
|
composer.add_dir("lib/clang", "lib/clang")
|
|
|
|
|
|
|
|
|
|
# Add compiler-rt for current architecture
|
|
|
|
|
linuxrtdir = "../../../runtimes/usr/local/lib/linux"
|
|
|
|
|
localrtdir = f"lib/clang/{pkgver_major}/lib/{llvm_host_triple()}"
|
|
|
|
|
composer.makedirs(localrtdir)
|
|
|
|
|
for rtlib in os.listdir(linuxrtdir):
|
|
|
|
|
larch = llvm_host_triple().split("-")[0]
|
|
|
|
|
lrtlib = rtlib.replace(f"-{larch}", "")
|
|
|
|
|
composer.addfile(f"{linuxrtdir}/{rtlib}", f"{localrtdir}/{lrtlib}")
|
|
|
|
|
|
|
|
|
|
# Add symlink to system directories
|
|
|
|
|
os.symlink(f"/lib/{arch.get_target()}/include", f"{composer.workdir}/bundle/include")
|
|
|
|
|
|
|
|
|
|
# Add configuration
|
|
|
|
|
clang_cfg = f"-L/lib/{arch.get_target()}\n-B/lib/{arch.get_target()}\n-rtlib=compiler-rt\n"
|
|
|
|
|
clangxx_cfg = f"-stdlib=libc++\n{clang_cfg}"
|
|
|
|
|
with open(f"{composer.workdir}/bundle/bin/clang.cfg", "wt+") as file:
|
|
|
|
|
file.write(clang_cfg)
|
|
|
|
|
with open(f"{composer.workdir}/bundle/bin/clang++.cfg", "wt+") as file:
|
|
|
|
|
file.write(clangxx_cfg)
|
|
|
|
|
|
|
|
|
|
package("clang")
|
|
|
|
|
dep("libclang (same)")
|
|
|
|
|
on_pack(pack_clang)
|
|
|
|
|
|
|
|
|
|
# End of packages
|
|
|
|
|
|
|
|
|
|
enter_install("lld")
|
|
|
|
|
|
|
|
|
|
package("lld")
|
|
|
|
|
dep("libllvm (same)")
|
|
|
|
|
cpp.use_auto_pack(["bin"])
|
|
|
|
|
link("bin/ld.lld", "/bin/ld")
|
|
|
|
|
|
|
|
|
|
package("lld-dev")
|
|
|
|
|
dep("lld (same)")
|
|
|
|
|
cpp.use_auto_pack(["dev"])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
enter_install("lldb")
|
|
|
|
|
|
|
|
|
|
package("liblldb")
|
|
|
|
|
dep("libclang (same)")
|
|
|
|
|
dep("libllvm (same)")
|
|
|
|
|
cpp.use_auto_pack(["lib"])
|
|
|
|
|
|
|
|
|
|
package("liblldb-dev")
|
|
|
|
|
dep("liblldb (same)")
|
|
|
|
|
cpp.use_auto_pack(["dev"])
|
|
|
|
|
|
|
|
|
|
package("lldb")
|
|
|
|
|
dep("liblldb (same)")
|
|
|
|
|
cpp.use_auto_pack(["bin"])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
enter_install("polly")
|
|
|
|
|
|
|
|
|
|
package("polly")
|
|
|
|
|
dep("libcxx @same-arch")
|
|
|
|
|
on_pack(lambda composer: auto_pack_glob(composer, ["*"]))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
enter_install("runtimes")
|
|
|
|
|
|
|
|
|
|
package("libunwind")
|
|
|
|
|
dep("semi-libc @same-arch")
|
|
|
|
|
on_pack(lambda composer: auto_pack_runtime_lib(composer, "unwind"))
|
|
|
|
|
|
|
|
|
|
package("libunwind-dev")
|
|
|
|
|
dep("libunwind (same)")
|
|
|
|
|
on_pack(lambda composer: auto_pack_glob(composer, ["lib/libunwind.a", "include/*unwind*", "include/mach-o"]))
|
|
|
|
|
|
|
|
|
|
package("libcxxabi")
|
|
|
|
|
dep("libunwind (same)")
|
|
|
|
|
on_pack(lambda composer: auto_pack_runtime_lib(composer, "libc++abi"))
|
|
|
|
|
|
|
|
|
|
package("libcxxabi-dev")
|
|
|
|
|
dep("libcxxabi (same)")
|
|
|
|
|
on_pack(lambda composer: auto_pack_glob(composer, ["lib/libc++abi.a"]))
|
|
|
|
|
|
|
|
|
|
package("libcxx")
|
|
|
|
|
dep("libcxxabi (same)")
|
|
|
|
|
on_pack(lambda composer: auto_pack_runtime_lib(composer, "libc++"))
|
|
|
|
|
|
|
|
|
|
package("libcxx-dev")
|
|
|
|
|
dep("libcxx (same)")
|
|
|
|
|
on_pack(lambda composer: auto_pack_glob(composer, ["lib/libc++experimental.a", "lib/libc++.a", "lib/libc++.modules.json", "include/c++", "share/libc++"]))
|
|
|
|
|