Compare commits
2 Commits
747840ddfb
...
3b78d04dee
Author | SHA1 | Date |
---|---|---|
Sameer Rahmani | 3b78d04dee | |
Sameer Rahmani | 7a43de4b72 |
6
builder
6
builder
|
@ -43,11 +43,10 @@ CMAKE_VERSION="3.26.0"
|
||||||
NINJA_VERSION="1.11.1"
|
NINJA_VERSION="1.11.1"
|
||||||
ZLIB_VERSION="1.2.13"
|
ZLIB_VERSION="1.2.13"
|
||||||
ZSTD_VERSION="1.5.4"
|
ZSTD_VERSION="1.5.4"
|
||||||
KERNEL_VERSION="5.0"
|
KERNEL_VERSION="6.0"
|
||||||
MUSL_VERSION="1.2.3"
|
MUSL_VERSION="1.2.3"
|
||||||
|
|
||||||
TARGET=x86_64-pc-linux-musl
|
TARGET=x86_64-pc-linux-musl
|
||||||
BUILD_TARGET=x86_64-build-linux-musl
|
|
||||||
|
|
||||||
export LLVM_VERSION \
|
export LLVM_VERSION \
|
||||||
CMAKE_VERSION \
|
CMAKE_VERSION \
|
||||||
|
@ -57,8 +56,7 @@ export LLVM_VERSION \
|
||||||
KERNEL_VERSION \
|
KERNEL_VERSION \
|
||||||
LLVM_MAJOR_VERSION \
|
LLVM_MAJOR_VERSION \
|
||||||
MUSL_VERSION \
|
MUSL_VERSION \
|
||||||
TARGET \
|
TARGET
|
||||||
BUILD_TARGET
|
|
||||||
|
|
||||||
ME=$(cd "$(dirname "$0")/." >/dev/null 2>&1 ; pwd -P)
|
ME=$(cd "$(dirname "$0")/." >/dev/null 2>&1 ; pwd -P)
|
||||||
|
|
||||||
|
|
|
@ -95,3 +95,21 @@ def copy_template(conanfile, src, dest, varmap):
|
||||||
result = result.replace(f"@{k}@", str(v))
|
result = result.replace(f"@{k}@", str(v))
|
||||||
|
|
||||||
target_file.write_text(result)
|
target_file.write_text(result)
|
||||||
|
|
||||||
|
|
||||||
|
def copy_dependency_tree(conanfile, dependencies_to_copy=[], dest=None):
|
||||||
|
root = Path(conanfile.package_folder)
|
||||||
|
if dest:
|
||||||
|
root = Path(dest)
|
||||||
|
|
||||||
|
for dependency in dependencies_to_copy:
|
||||||
|
conanfile.output.info(f"Copy the tree of '{dependency}' to '{root}'")
|
||||||
|
dep = Path(conanfile.dependencies[dependency].package_folder)
|
||||||
|
|
||||||
|
for dir_path in ["include", "lib", "bin"]:
|
||||||
|
try:
|
||||||
|
copy_tree(dep / dir_path, root / dir_path)
|
||||||
|
except FileNotFoundError:
|
||||||
|
conanfile.output.info(
|
||||||
|
f"Dir '{dep / dir_path}' does not exist, skipping"
|
||||||
|
)
|
||||||
|
|
|
@ -22,22 +22,20 @@ from conan.tools.cmake import CMake, CMakeToolchain, CMakeDeps
|
||||||
|
|
||||||
from conan.tools.files import get
|
from conan.tools.files import get
|
||||||
|
|
||||||
from conf.utils import with_static_flags, current_dir, get_version
|
from conf.utils import (
|
||||||
|
with_static_flags,
|
||||||
|
current_dir,
|
||||||
|
get_version,
|
||||||
|
copy_tree,
|
||||||
|
copy_dependency_tree,
|
||||||
|
)
|
||||||
|
|
||||||
TOOLCHAIN_TARGETS = [
|
TOOLCHAIN_TARGETS = [
|
||||||
"runtimes",
|
"runtimes",
|
||||||
# lldb,
|
|
||||||
"compiler-rt",
|
"compiler-rt",
|
||||||
]
|
]
|
||||||
|
|
||||||
PROJECTS = [
|
PROJECTS = []
|
||||||
# "clang-tools-extra",
|
|
||||||
# "clang",
|
|
||||||
# "lld",
|
|
||||||
# "llvm",
|
|
||||||
# "mlir",
|
|
||||||
# "lldb"
|
|
||||||
]
|
|
||||||
RUNTIME_TARGETS = [
|
RUNTIME_TARGETS = [
|
||||||
"compiler-rt",
|
"compiler-rt",
|
||||||
"libcxx",
|
"libcxx",
|
||||||
|
@ -52,47 +50,25 @@ CMAKE_OPTIONS = {
|
||||||
"LLVM_ENABLE_ASSERTIONS": "OFF",
|
"LLVM_ENABLE_ASSERTIONS": "OFF",
|
||||||
"LLVM_ENABLE_LIBXML2": "OFF",
|
"LLVM_ENABLE_LIBXML2": "OFF",
|
||||||
"LLVM_ENABLE_TERMINFO": "OFF",
|
"LLVM_ENABLE_TERMINFO": "OFF",
|
||||||
"LLVM_ENABLE_ZLIB": "FORCE_ON",
|
|
||||||
"LLVM_INCLUDE_BENCHMARKS": "OFF",
|
|
||||||
"LLVM_INCLUDE_EXAMPLES": "OFF",
|
|
||||||
"LLVM_INCLUDE_TESTS": "OFF",
|
|
||||||
"LLVM_INCLUDE_GO_TESTS": "OFF",
|
|
||||||
"LLVM_ENABLE_BINDINGS": "OFF",
|
|
||||||
"LLVM_TARGETS_TO_BUILD": "X86",
|
|
||||||
"LLVM_STATIC_LINK_CXX_STDLIB": "ON",
|
"LLVM_STATIC_LINK_CXX_STDLIB": "ON",
|
||||||
"PACKAGE_VENDOR": "Plex",
|
|
||||||
"LLVM_ENABLE_PER_TARGET_RUNTIME_DIR": "ON",
|
"LLVM_ENABLE_PER_TARGET_RUNTIME_DIR": "ON",
|
||||||
"ENABLE_X86_RELAX_RELOCATIONS": "ON",
|
"ENABLE_X86_RELAX_RELOCATIONS": "ON",
|
||||||
"BUILD_SHARED_LIBS": "OFF",
|
"BUILD_SHARED_LIBS": "OFF",
|
||||||
"CLANG_ENABLE_BOOTSTRAP": "ON",
|
|
||||||
"LIBCXX_ENABLE_STATIC_ABI_LIBRARY": "ON",
|
"LIBCXX_ENABLE_STATIC_ABI_LIBRARY": "ON",
|
||||||
"LIBCXXABI_ENABLE_SHARED": "OFF",
|
"LIBCXXABI_ENABLE_SHARED": "OFF",
|
||||||
"LIBCXX_ABI_VERSION": "2",
|
"LIBCXX_ABI_VERSION": "2",
|
||||||
"LLVM_CCACHE_BUILD": "ON",
|
|
||||||
"LLVM_ENABLE_LTO": "THIN",
|
"LLVM_ENABLE_LTO": "THIN",
|
||||||
"CMAKE_POSITION_INDEPENDENT_CODE": "ON",
|
"CMAKE_POSITION_INDEPENDENT_CODE": "ON",
|
||||||
"CLANG_DEFAULT_CXX_STDLIB": "libc++",
|
|
||||||
"CLANG_DEFAULT_LINKER": "lld",
|
|
||||||
"CLANG_DEFAULT_OBJCOPY": "llvm-objcopy",
|
|
||||||
"CLANG_DEFAULT_RTLIB": "compiler-rt",
|
|
||||||
"CLANG_VENDOR_UTI": "serene.stage0",
|
|
||||||
"LLVM_ENABLE_LIBCXX": "ON",
|
"LLVM_ENABLE_LIBCXX": "ON",
|
||||||
"LLVM_ENABLE_ZSTD": "OFF",
|
|
||||||
"LLVM_OPTIMIZED_TABLEGEN": "ON",
|
|
||||||
"LLVM_THINLTO_CACHE_PATH": "/tmp/llvm-build-lto",
|
"LLVM_THINLTO_CACHE_PATH": "/tmp/llvm-build-lto",
|
||||||
"LLVM_ENABLE_PROJECTS": ";".join(PROJECTS),
|
"LLVM_ENABLE_PROJECTS": ";".join(PROJECTS),
|
||||||
"LLVM_CCACHE_BUILD": "ON",
|
|
||||||
"LIBCXX_HAS_MUSL_LIBC": "ON",
|
"LIBCXX_HAS_MUSL_LIBC": "ON",
|
||||||
"LLVM_DEFAULT_TARGET_TRIPLE": os.environ["TARGET"],
|
"LLVM_DEFAULT_TARGET_TRIPLE": os.environ["TARGET"],
|
||||||
"LIBCXX_CXX_ABI": "libcxxabi",
|
"LIBCXX_CXX_ABI": "libcxxabi",
|
||||||
"LIBCXX_USE_COMPILER_RT": "ON",
|
"LIBCXX_USE_COMPILER_RT": "ON",
|
||||||
"LIBCXX_ENABLE_STATIC_ABI_LIBRARY": "ON",
|
|
||||||
"LIBCXX_ABI_UNSTABLE": "ON",
|
"LIBCXX_ABI_UNSTABLE": "ON",
|
||||||
"LIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY": "ON",
|
"LIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY": "ON",
|
||||||
"LIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY": "ON",
|
"LIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY": "ON",
|
||||||
"LIBCXX_ABI_VERSION": "2",
|
|
||||||
"LIBCXX_HAS_MUSL_LIBC": "ON",
|
|
||||||
# musl doesn't have -latomic
|
|
||||||
"LIBCXX_HAS_ATOMIC_LIB": "OFF",
|
"LIBCXX_HAS_ATOMIC_LIB": "OFF",
|
||||||
"LIBCXXABI_ENABLE_THREADS": "ON",
|
"LIBCXXABI_ENABLE_THREADS": "ON",
|
||||||
"LIBCXXABI_HAS_CXA_THREAD_ATEXIT_IMPL": "OFF",
|
"LIBCXXABI_HAS_CXA_THREAD_ATEXIT_IMPL": "OFF",
|
||||||
|
@ -101,12 +77,26 @@ CMAKE_OPTIONS = {
|
||||||
"LIBCXXABI_ENABLE_STATIC_UNWINDER": "ON",
|
"LIBCXXABI_ENABLE_STATIC_UNWINDER": "ON",
|
||||||
"LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY": "ON",
|
"LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY": "ON",
|
||||||
"LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_STATIC_LIBRARY": "ON",
|
"LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_STATIC_LIBRARY": "ON",
|
||||||
"LIBCXXABI_ENABLE_SHARED": "OFF",
|
|
||||||
"CMAKE_C_COMPILER_TARGET": os.environ["TARGET"],
|
"CMAKE_C_COMPILER_TARGET": os.environ["TARGET"],
|
||||||
"CMAKE_CXX_COMPILER_TARGET": os.environ["TARGET"],
|
"CMAKE_CXX_COMPILER_TARGET": os.environ["TARGET"],
|
||||||
"CMAKE_ASM_COMPILER_TARGET": os.environ["TARGET"],
|
"CMAKE_ASM_COMPILER_TARGET": os.environ["TARGET"],
|
||||||
# Common
|
"CMAKE_INSTALL_RPATH": "\\$ORIGIN/../lib",
|
||||||
"CMAKE_POSITION_INDEPENDENT_CODE": "ON",
|
"CMAKE_BUILD_WITH_INSTALL_RPATH": "ON",
|
||||||
|
"COMPILER_RT_BAREMETAL_BUILD": "ON",
|
||||||
|
"COMPILER_RT_DEFAULT_TARGET_ONLY": "ON",
|
||||||
|
"CMAKE_VERBOSE_MAKEFILE": "ON",
|
||||||
|
"COMPILER_RT_SANITIZERS_TO_BUILD": "asan;msan;tsan",
|
||||||
|
"COMPILER_RT_USE_BUILTINS_LIBRARY": "ON",
|
||||||
|
"COMPILER_RT_USE_LIBCXX": "ON",
|
||||||
|
"COMPILER_RT_BUILD_SANITIZERS": "ON",
|
||||||
|
"COMPILER_RT_HAS_GNU_VERSION_SCRIPT_COMPAT": "OFF",
|
||||||
|
"COMPILER_RT_BUILD_XRAY": "OFF",
|
||||||
|
"COMPILER_RT_BUILD_MEMPROF": "ON",
|
||||||
|
"COMPILER_RT_BUILD_LIBFUZZER": "ON",
|
||||||
|
"COMPILER_RT_BUILD_ORC": "ON",
|
||||||
|
"SANITIZER_CXX_ABI": "libc++",
|
||||||
|
"SANITIZER_CXX_ABI_INTREE": "ON",
|
||||||
|
"LIBUNWIND_USE_COMPILER_RT": "ON",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -118,8 +108,11 @@ class LibCXX(ConanFile):
|
||||||
def build_requirements(self):
|
def build_requirements(self):
|
||||||
self.requires(f"llvm-source/{self.version}@{self.user}/{self.channel}")
|
self.requires(f"llvm-source/{self.version}@{self.user}/{self.channel}")
|
||||||
|
|
||||||
|
self.requires(f"musl/{get_version('musl')}@{self.user}/{self.channel}")
|
||||||
|
self.requires(f"zstd/{get_version('zstd')}@{self.user}/{self.channel}")
|
||||||
|
self.requires(f"zlib/{get_version('zlib')}@{self.user}/{self.channel}")
|
||||||
self.requires(
|
self.requires(
|
||||||
f"stage1-sysroot/{get_version('llvm')}@{self.user}/{self.channel}"
|
f"clang-bootstrap/{get_version('llvm')}@{self.user}/{self.channel}"
|
||||||
)
|
)
|
||||||
self.tool_requires(f"cmake/{get_version('cmake')}@{self.user}/{self.channel}")
|
self.tool_requires(f"cmake/{get_version('cmake')}@{self.user}/{self.channel}")
|
||||||
self.tool_requires(f"ninja/{get_version('ninja')}@{self.user}/{self.channel}")
|
self.tool_requires(f"ninja/{get_version('ninja')}@{self.user}/{self.channel}")
|
||||||
|
@ -128,8 +121,14 @@ class LibCXX(ConanFile):
|
||||||
def buildenv(self):
|
def buildenv(self):
|
||||||
return self.buildenv_info.vars(self, scope="build")
|
return self.buildenv_info.vars(self, scope="build")
|
||||||
|
|
||||||
|
def create_sysroot(self):
|
||||||
|
sysroot = Path(self.build_folder) / "sysroot"
|
||||||
|
sysroot.mkdir()
|
||||||
|
|
||||||
|
copy_dependency_tree(self, ["clang-bootstrap", "musl", "zlib", "zstd"], sysroot)
|
||||||
|
|
||||||
def add_compiler_options(self, opts):
|
def add_compiler_options(self, opts):
|
||||||
tc_dir = Path(self.dependencies["stage1-sysroot"].package_folder)
|
tc_dir = Path(self.build_folder) / "sysroot"
|
||||||
opts["CMAKE_C_COMPILER"] = str(tc_dir / "bin" / "clang")
|
opts["CMAKE_C_COMPILER"] = str(tc_dir / "bin" / "clang")
|
||||||
opts["CMAKE_CXX_COMPILER"] = str(tc_dir / "bin" / "clang++")
|
opts["CMAKE_CXX_COMPILER"] = str(tc_dir / "bin" / "clang++")
|
||||||
opts["LLVM_CONFIG_PATH"] = str(tc_dir / "bin" / "llvm-config")
|
opts["LLVM_CONFIG_PATH"] = str(tc_dir / "bin" / "llvm-config")
|
||||||
|
@ -142,104 +141,31 @@ class LibCXX(ConanFile):
|
||||||
|
|
||||||
opts["CMAKE_EXE_LINKER_FLAGS"] = f"-Wl,-rpath,{str(tc_dir)}/lib/{target}"
|
opts["CMAKE_EXE_LINKER_FLAGS"] = f"-Wl,-rpath,{str(tc_dir)}/lib/{target}"
|
||||||
opts["CMAKE_SHARED_LINKER_FLAGS"] = f"-Wl,-rpath,{str(tc_dir)}/lib/{target}"
|
opts["CMAKE_SHARED_LINKER_FLAGS"] = f"-Wl,-rpath,{str(tc_dir)}/lib/{target}"
|
||||||
# opts["CMAKE_C_FLAGS"] = "-v"
|
|
||||||
# opts["CMAKE_CXX_FLAGS"] = "-v"
|
|
||||||
|
|
||||||
def add_runtimes_and_builtins(self, opts):
|
def add_runtimes_and_builtins(self, opts):
|
||||||
builtin_targets = []
|
builtin_targets = []
|
||||||
target = os.environ["TARGET"]
|
target = os.environ["TARGET"]
|
||||||
sysroot_path = Path(self.dependencies["stage1-sysroot"].package_folder)
|
sysroot_path = Path(self.build_folder) / "sysroot"
|
||||||
|
|
||||||
target_builtin_opts = {
|
CMAKE_OPTIONS.update(
|
||||||
"CMAKE_SYSTEM_NAME": "Linux",
|
{
|
||||||
"CMAKE_BUILD_TYPE": "Release",
|
"CMAKE_SYSTEM_NAME": "Linux",
|
||||||
"CMAKE_SYSTEM_PROCESSOR": "X86_64",
|
"CMAKE_BUILD_TYPE": "Release",
|
||||||
"CMAKE_C_FLAGS": self.buildenv.get("CFLAGS", ""),
|
"CMAKE_SYSTEM_PROCESSOR": "X86_64",
|
||||||
"CMAKE_CXX_FLAGS": self.buildenv.get("CXXFLAGS", ""),
|
"CMAKE_C_FLAGS": self.buildenv.get("CFLAGS", ""),
|
||||||
"CMAKE_ASM_FLAGS": self.buildenv.get("ASFLAGS", ""),
|
"CMAKE_CXX_FLAGS": self.buildenv.get("CXXFLAGS", ""),
|
||||||
"CMAKE_C_COMPILER_TARGET": target,
|
"CMAKE_ASM_FLAGS": self.buildenv.get("ASFLAGS", ""),
|
||||||
"CMAKE_CXX_COMPILER_TARGET": target,
|
"CMAKE_C_COMPILER_TARGET": target,
|
||||||
"CMAKE_ASM_COMPILER_TARGET": target,
|
"CMAKE_CXX_COMPILER_TARGET": target,
|
||||||
"CMAKE_TRY_COMPILE_TARGET_TYPE": "STATIC_LIBRARY",
|
"CMAKE_ASM_COMPILER_TARGET": target,
|
||||||
"CMAKE_EXE_LINKER_FLAGS": f"--target={target} {self.buildenv.get('LDFLAGS', '')}",
|
"CMAKE_TRY_COMPILE_TARGET_TYPE": "STATIC_LIBRARY",
|
||||||
"CMAKE_SHARED_LINKER_FLAGS": f"--target={target} {self.buildenv.get('LDFLAGS', '')}",
|
"CMAKE_EXE_LINKER_FLAGS": f"--target={target} {self.buildenv.get('LDFLAGS', '')}",
|
||||||
"CMAKE_SYSROOT": str(sysroot_path),
|
"CMAKE_SHARED_LINKER_FLAGS": f"--target={target} {self.buildenv.get('LDFLAGS', '')}",
|
||||||
"CMAKE_INSTALL_RPATH": "\$ORIGIN/../lib",
|
"CMAKE_SYSROOT": str(sysroot_path),
|
||||||
"CMAKE_BUILD_WITH_INSTALL_RPATH": "ON",
|
}
|
||||||
"LLVM_USE_LINKER": "lld",
|
)
|
||||||
"COMPILER_RT_BAREMETAL_BUILD": "ON",
|
|
||||||
"COMPILER_RT_DEFAULT_TARGET_ONLY": "ON",
|
|
||||||
"LLVM_CCACHE_BUILD": opts["LLVM_CCACHE_BUILD"],
|
|
||||||
}
|
|
||||||
|
|
||||||
for k, v in target_builtin_opts.items():
|
|
||||||
opts[f"BUILTINS_{target}_{k}"] = v
|
|
||||||
|
|
||||||
target_runtime_opts = {
|
|
||||||
"CMAKE_SYSTEM_NAME": "Linux",
|
|
||||||
"CMAKE_BUILD_TYPE": "Release",
|
|
||||||
"CMAKE_C_FLAGS": self.buildenv.get("CFLAGS", ""),
|
|
||||||
"CMAKE_CXX_FLAGS": self.buildenv.get("CXXFLAGS", ""),
|
|
||||||
"CMAKE_ASM_FLAGS": self.buildenv.get("ASFLAGS", ""),
|
|
||||||
"CMAKE_C_COMPILER_TARGET": target,
|
|
||||||
"CMAKE_CXX_COMPILER_TARGET": target,
|
|
||||||
"CMAKE_ASM_COMPILER_TARGET": target,
|
|
||||||
"CMAKE_TRY_COMPILE_TARGET_TYPE": "STATIC_LIBRARY",
|
|
||||||
"CMAKE_EXE_LINKER_FLAGS": f"--target={target} {self.buildenv.get('LDFLAGS', '')}",
|
|
||||||
"CMAKE_SHARED_LINKER_FLAGS": f"--target={target} {self.buildenv.get('LDFLAGS', '')}",
|
|
||||||
"CMAKE_INSTALL_RPATH": "\$ORIGIN/../lib",
|
|
||||||
"CMAKE_BUILD_WITH_INSTALL_RPATH": "ON",
|
|
||||||
"CMAKE_SYSROOT": str(sysroot_path),
|
|
||||||
"CMAKE_VERBOSE_MAKEFILE": "ON",
|
|
||||||
"CMAKE_POSITION_INDEPENDENT_CODE": "ON",
|
|
||||||
"LLVM_USE_LINKER": "lld",
|
|
||||||
"LLVM_USE_LTO": "ON",
|
|
||||||
"LLVM_CCACHE_BUILD": opts["LLVM_CCACHE_BUILD"],
|
|
||||||
# TODO: Check for more sanitizers that work with musl
|
|
||||||
"COMPILER_RT_SANITIZERS_TO_BUILD": "asan;msan;tsan",
|
|
||||||
"COMPILER_RT_USE_BUILTINS_LIBRARY": "ON",
|
|
||||||
"COMPILER_RT_USE_LIBCXX": "ON",
|
|
||||||
"COMPILER_RT_BUILD_SANITIZERS": "ON",
|
|
||||||
# For some reason this flag is not correctly set if we don't
|
|
||||||
# manually set it and some strange gnu only LDFLAGS are injected.
|
|
||||||
"COMPILER_RT_HAS_GNU_VERSION_SCRIPT_COMPAT": "OFF",
|
|
||||||
# X-Ray doesn't seem to compiler with musl
|
|
||||||
"COMPILER_RT_BUILD_XRAY": "OFF",
|
|
||||||
# Only build these if we enable sanitizers since they depend
|
|
||||||
# on the sanitizer common runtime
|
|
||||||
"COMPILER_RT_BUILD_MEMPROF": "ON",
|
|
||||||
"COMPILER_RT_BUILD_LIBFUZZER": "ON",
|
|
||||||
# ORC is the JIT component of LLVM - we don't need that.
|
|
||||||
"COMPILER_RT_BUILD_ORC": "OFF",
|
|
||||||
# Make sure we use libc++ from the tree instead from the system.
|
|
||||||
"SANITIZER_CXX_ABI": "libc++",
|
|
||||||
"SANITIZER_CXX_ABI_INTREE": "ON",
|
|
||||||
"LIBCXX_CXX_ABI": "libcxxabi",
|
|
||||||
"LIBCXX_USE_COMPILER_RT": "ON",
|
|
||||||
"LIBCXX_ENABLE_STATIC_ABI_LIBRARY": "ON",
|
|
||||||
"LIBCXX_ABI_UNSTABLE": "ON",
|
|
||||||
"LIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY": "ON",
|
|
||||||
"LIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY": "ON",
|
|
||||||
"LIBCXX_ABI_VERSION": "2",
|
|
||||||
"LIBCXX_HAS_MUSL_LIBC": "ON",
|
|
||||||
# musl doesn't have -latomic
|
|
||||||
"LIBCXX_HAS_ATOMIC_LIB": "OFF",
|
|
||||||
"LIBCXXABI_ENABLE_THREADS": "ON",
|
|
||||||
"LIBCXXABI_HAS_CXA_THREAD_ATEXIT_IMPL": "OFF",
|
|
||||||
"LIBCXXABI_USE_COMPILER_RT": "ON",
|
|
||||||
"LIBCXXABI_USE_LLVM_UNWINDER": "ON",
|
|
||||||
"LIBCXXABI_ENABLE_STATIC_UNWINDER": "ON",
|
|
||||||
"LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY": "ON",
|
|
||||||
"LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_STATIC_LIBRARY": "ON",
|
|
||||||
"LIBCXXABI_ENABLE_SHARED": "OFF",
|
|
||||||
"LIBUNWIND_USE_COMPILER_RT": "ON",
|
|
||||||
}
|
|
||||||
|
|
||||||
for k, v in target_runtime_opts.items():
|
|
||||||
opts[f"RUNTIMES_{target}_{k}"] = v
|
|
||||||
|
|
||||||
opts["LLVM_RUNTIME_TARGETS"] = target
|
opts["LLVM_RUNTIME_TARGETS"] = target
|
||||||
opts["LLVM_BUILTIN_TARGETS"] = target
|
|
||||||
opts["LLVM_ENABLE_RUNTIMES"] = ";".join(RUNTIME_TARGETS)
|
opts["LLVM_ENABLE_RUNTIMES"] = ";".join(RUNTIME_TARGETS)
|
||||||
|
|
||||||
def generate(self):
|
def generate(self):
|
||||||
|
@ -253,15 +179,14 @@ class LibCXX(ConanFile):
|
||||||
deps.generate()
|
deps.generate()
|
||||||
|
|
||||||
def build(self):
|
def build(self):
|
||||||
|
self.create_sysroot()
|
||||||
opts = CMAKE_OPTIONS.copy()
|
opts = CMAKE_OPTIONS.copy()
|
||||||
sysroot = self.dependencies["stage1-sysroot"].package_folder
|
sysroot = f"{self.build_folder}/sysroot"
|
||||||
self.add_compiler_options(opts)
|
self.add_compiler_options(opts)
|
||||||
|
|
||||||
# zlib_dir = self.dependencies["zlib"].package_folder
|
|
||||||
opts["ZLIB_ROOT"] = sysroot
|
|
||||||
opts[
|
opts[
|
||||||
"CMAKE_REQUIRED_INCLUDES"
|
"CMAKE_REQUIRED_INCLUDES"
|
||||||
] = f"{sysroot}/lib/clang/17/include {sysroot}/include"
|
] = f"{sysroot}/lib/clang/{get_version('llvm_major')}/include {sysroot}/include"
|
||||||
opts["CMAKE_REQUIRED_LIBRARIES"] = f"-L{sysroot}/lib -lz"
|
opts["CMAKE_REQUIRED_LIBRARIES"] = f"-L{sysroot}/lib -lz"
|
||||||
|
|
||||||
self.add_runtimes_and_builtins(opts)
|
self.add_runtimes_and_builtins(opts)
|
||||||
|
@ -275,9 +200,7 @@ class LibCXX(ConanFile):
|
||||||
opts["LLVM_ENABLE_PROJECTS"] = ";".join(PROJECTS)
|
opts["LLVM_ENABLE_PROJECTS"] = ";".join(PROJECTS)
|
||||||
opts["LLVM_DISTRIBUTION_COMPONENTS"] = ";".join(TOOLCHAIN_TARGETS)
|
opts["LLVM_DISTRIBUTION_COMPONENTS"] = ";".join(TOOLCHAIN_TARGETS)
|
||||||
|
|
||||||
stage1 = Path(self.dependencies["stage1-sysroot"].package_folder)
|
stage1 = Path(sysroot)
|
||||||
opts["LLVM_TABLEGEN"] = str(stage1 / "bin" / "llvm-tblgen")
|
|
||||||
opts["CLANG_TABLEGEN"] = str(stage1 / "bin" / "clang-tblgen")
|
|
||||||
|
|
||||||
llvm_dir = self.dependencies["llvm-source"].buildenv_info.vars(
|
llvm_dir = self.dependencies["llvm-source"].buildenv_info.vars(
|
||||||
self, scope="build"
|
self, scope="build"
|
||||||
|
@ -300,10 +223,8 @@ class LibCXX(ConanFile):
|
||||||
cm.build(target="install-cxx")
|
cm.build(target="install-cxx")
|
||||||
cm.build(target="install-cxxabi")
|
cm.build(target="install-cxxabi")
|
||||||
cm.build(target="install-unwind")
|
cm.build(target="install-unwind")
|
||||||
# cm.build(target="install-distribution-stripped", args=["-v"])
|
|
||||||
|
|
||||||
def package_info(self):
|
def package_info(self):
|
||||||
# self.buildenv_info.PATH.append(os.path.join(self.package_folder, "bin"))
|
|
||||||
self.buildenv_info.prepend_path(
|
self.buildenv_info.prepend_path(
|
||||||
"LD_LIBRARY_PATH", os.path.join(self.package_folder, "lib")
|
"LD_LIBRARY_PATH", os.path.join(self.package_folder, "lib")
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,333 @@
|
||||||
|
# Toolchain builder for the Serene programming language
|
||||||
|
#
|
||||||
|
# Copyright (c) 2019-2023 Sameer Rahmani <lxsameer@gnu.org>
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, version 2.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
from conan import ConanFile
|
||||||
|
from conan.tools.cmake import CMake, CMakeToolchain, CMakeDeps
|
||||||
|
|
||||||
|
from conan.tools.files import get
|
||||||
|
|
||||||
|
from conf.utils import with_static_flags, current_dir, get_version
|
||||||
|
|
||||||
|
TOOLCHAIN_TARGETS = [
|
||||||
|
"runtimes",
|
||||||
|
"clang-apply-replacements",
|
||||||
|
"clang-format",
|
||||||
|
"clang-query",
|
||||||
|
"clang-resource-headers",
|
||||||
|
"clang-tidy",
|
||||||
|
"clang",
|
||||||
|
"clangd",
|
||||||
|
"clang-extdef-mapping",
|
||||||
|
"cmake-exports",
|
||||||
|
"dsymutil",
|
||||||
|
"lld",
|
||||||
|
"llvm-addr2line",
|
||||||
|
"llvm-ar",
|
||||||
|
"llvm-as",
|
||||||
|
"llvm-cov",
|
||||||
|
"llvm-cvtres",
|
||||||
|
"llvm-cxxmap",
|
||||||
|
"llvm-dlltool",
|
||||||
|
"llvm-dwp",
|
||||||
|
"llvm-dwarfdump",
|
||||||
|
"llvm-install-name-tool",
|
||||||
|
"llvm-lib",
|
||||||
|
"llvm-lipo",
|
||||||
|
"llvm-nm",
|
||||||
|
"llvm-objcopy",
|
||||||
|
"llvm-objdump",
|
||||||
|
"llvm-pdbutil",
|
||||||
|
"llvm-profdata",
|
||||||
|
"llvm-ranlib",
|
||||||
|
"llvm-rc",
|
||||||
|
"llvm-readelf",
|
||||||
|
"llvm-strings",
|
||||||
|
"llvm-strip",
|
||||||
|
"llvm-symbolizer",
|
||||||
|
"llvm-windres",
|
||||||
|
"LTO",
|
||||||
|
"builtins",
|
||||||
|
# lldb,
|
||||||
|
"compiler-rt",
|
||||||
|
"runtimes",
|
||||||
|
]
|
||||||
|
|
||||||
|
PROJECTS = ["clang-tools-extra", "clang", "lld", "llvm"]
|
||||||
|
RUNTIME_TARGETS = [
|
||||||
|
"compiler-rt",
|
||||||
|
"libcxx",
|
||||||
|
"libcxxabi",
|
||||||
|
"libunwind",
|
||||||
|
]
|
||||||
|
|
||||||
|
CMAKE_OPTIONS = {
|
||||||
|
"LLVM_USE_LINKER": "lld",
|
||||||
|
"LLVM_ENABLE_NEW_PASS_MANAGER": "ON",
|
||||||
|
"LLVM_BUILD_TESTS": "OFF",
|
||||||
|
"LLVM_ENABLE_ASSERTIONS": "OFF",
|
||||||
|
"LLVM_ENABLE_LIBXML2": "OFF",
|
||||||
|
"LLVM_ENABLE_TERMINFO": "OFF",
|
||||||
|
"LLVM_ENABLE_ZLIB": "FORCE_ON",
|
||||||
|
"LLVM_INCLUDE_BENCHMARKS": "OFF",
|
||||||
|
"LLVM_INCLUDE_EXAMPLES": "OFF",
|
||||||
|
"LLVM_INCLUDE_TESTS": "OFF",
|
||||||
|
"LLVM_INCLUDE_GO_TESTS": "OFF",
|
||||||
|
"LLVM_ENABLE_BINDINGS": "OFF",
|
||||||
|
"LLVM_TARGETS_TO_BUILD": "X86",
|
||||||
|
"LLVM_STATIC_LINK_CXX_STDLIB": "ON",
|
||||||
|
"PACKAGE_VENDOR": "Serene",
|
||||||
|
"LLVM_ENABLE_PER_TARGET_RUNTIME_DIR": "ON",
|
||||||
|
"ENABLE_X86_RELAX_RELOCATIONS": "ON",
|
||||||
|
"BUILD_SHARED_LIBS": "OFF",
|
||||||
|
"CLANG_ENABLE_BOOTSTRAP": "ON",
|
||||||
|
"LIBCXX_ENABLE_STATIC_ABI_LIBRARY": "ON",
|
||||||
|
"LIBCXXABI_ENABLE_SHARED": "OFF",
|
||||||
|
"LIBCXX_ABI_VERSION": "2",
|
||||||
|
"LLVM_CCACHE_BUILD": "ON",
|
||||||
|
"LLVM_ENABLE_LTO": "THIN",
|
||||||
|
"CMAKE_POSITION_INDEPENDENT_CODE": "ON",
|
||||||
|
"CLANG_DEFAULT_CXX_STDLIB": "libc++",
|
||||||
|
"CLANG_DEFAULT_LINKER": "lld",
|
||||||
|
"CLANG_DEFAULT_OBJCOPY": "llvm-objcopy",
|
||||||
|
"CLANG_DEFAULT_RTLIB": "compiler-rt",
|
||||||
|
"CLANG_VENDOR_UTI": "serene.stage0",
|
||||||
|
"LLVM_ENABLE_LIBCXX": "ON",
|
||||||
|
"LLVM_ENABLE_ZSTD": "OFF",
|
||||||
|
"LLVM_OPTIMIZED_TABLEGEN": "ON",
|
||||||
|
"LLVM_THINLTO_CACHE_PATH": "/tmp/llvm-build-lto",
|
||||||
|
"LLVM_ENABLE_PROJECTS": ";".join(PROJECTS),
|
||||||
|
"LLVM_CCACHE_BUILD": "ON",
|
||||||
|
"LIBCXX_HAS_MUSL_LIBC": "ON",
|
||||||
|
"LLVM_DEFAULT_TARGET_TRIPLE": os.environ["TARGET"],
|
||||||
|
# Common
|
||||||
|
"CMAKE_POSITION_INDEPENDENT_CODE": "ON",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class LLVM(ConanFile):
|
||||||
|
name = "llvm"
|
||||||
|
settings = "os", "arch", "compiler", "build_type"
|
||||||
|
version = get_version("llvm")
|
||||||
|
|
||||||
|
def build_requirements(self):
|
||||||
|
self.requires(f"llvm-source/{self.version}@{self.user}/{self.channel}")
|
||||||
|
|
||||||
|
# self.requires(f"zlib/{get_version('zlib')}@{self.user}/{self.channel}")
|
||||||
|
# self.requires(f"musl/{get_version('musl')}@{self.user}/{self.channel}")
|
||||||
|
# self.requires(f"zstd/{get_version('zstd')}@{self.user}/{self.channel}")
|
||||||
|
self.requires(
|
||||||
|
f"stage1-sysroot/{get_version('llvm')}@{self.user}/{self.channel}"
|
||||||
|
)
|
||||||
|
self.tool_requires(f"cmake/{get_version('cmake')}@{self.user}/{self.channel}")
|
||||||
|
self.tool_requires(f"ninja/{get_version('ninja')}@{self.user}/{self.channel}")
|
||||||
|
|
||||||
|
@property
|
||||||
|
def buildenv(self):
|
||||||
|
return self.buildenv_info.vars(self, scope="build")
|
||||||
|
|
||||||
|
def add_compiler_options(self, opts):
|
||||||
|
# We can't use the clang-bootstrap toolchain file here because it will be passed
|
||||||
|
# to the runtimes and bulitins subcmake stuff later and it will "poison" the cmake
|
||||||
|
# cache with the wrong compiler and options. So we do this manually the hard way.
|
||||||
|
|
||||||
|
tc_dir = Path(self.dependencies["stage1-sysroot"].package_folder)
|
||||||
|
opts["CMAKE_C_COMPILER"] = str(tc_dir / "bin" / "clang")
|
||||||
|
opts["CMAKE_CXX_COMPILER"] = str(tc_dir / "bin" / "clang++")
|
||||||
|
opts["LLVM_CONFIG_PATH"] = str(tc_dir / "bin" / "llvm-config")
|
||||||
|
|
||||||
|
target = os.environ["TARGET"]
|
||||||
|
|
||||||
|
opts["CMAKE_C_COMPILER_TARGET"] = target
|
||||||
|
opts["CMAKE_CXX_COMPILER_TARGET"] = target
|
||||||
|
opts["CMAKE_SYSROOT"] = str(tc_dir)
|
||||||
|
|
||||||
|
opts["CMAKE_EXE_LINKER_FLAGS"] = f"-Wl,-rpath,{str(tc_dir)}/lib/{target}"
|
||||||
|
opts["CMAKE_SHARED_LINKER_FLAGS"] = f"-Wl,-rpath,{str(tc_dir)}/lib/{target}"
|
||||||
|
opts["CMAKE_C_FLAGS"] = "-static"
|
||||||
|
opts["CMAKE_CXX_FLAGS"] = "-static"
|
||||||
|
|
||||||
|
def add_runtimes_and_builtins(self, opts):
|
||||||
|
builtin_targets = []
|
||||||
|
target = os.environ["TARGET"]
|
||||||
|
sysroot_path = Path(self.dependencies["stage1-sysroot"].package_folder)
|
||||||
|
|
||||||
|
target_builtin_opts = {
|
||||||
|
"CMAKE_SYSTEM_NAME": "Linux",
|
||||||
|
"CMAKE_BUILD_TYPE": self.settings.build_type,
|
||||||
|
"CMAKE_SYSTEM_PROCESSOR": "X86_64",
|
||||||
|
"CMAKE_C_FLAGS": self.buildenv.get("CFLAGS", ""),
|
||||||
|
"CMAKE_CXX_FLAGS": self.buildenv.get("CXXFLAGS", ""),
|
||||||
|
"CMAKE_ASM_FLAGS": self.buildenv.get("ASFLAGS", ""),
|
||||||
|
"CMAKE_C_COMPILER_TARGET": target,
|
||||||
|
"CMAKE_CXX_COMPILER_TARGET": target,
|
||||||
|
"CMAKE_ASM_COMPILER_TARGET": target,
|
||||||
|
"CMAKE_TRY_COMPILE_TARGET_TYPE": "STATIC_LIBRARY",
|
||||||
|
"CMAKE_EXE_LINKER_FLAGS": f"--target={target} {self.buildenv.get('LDFLAGS', '')}",
|
||||||
|
"CMAKE_SHARED_LINKER_FLAGS": f"--target={target} {self.buildenv.get('LDFLAGS', '')}",
|
||||||
|
"CMAKE_SYSROOT": str(sysroot_path),
|
||||||
|
"CMAKE_INSTALL_RPATH": "\$ORIGIN/../lib",
|
||||||
|
"CMAKE_BUILD_WITH_INSTALL_RPATH": "ON",
|
||||||
|
"LLVM_USE_LINKER": "lld",
|
||||||
|
"COMPILER_RT_BAREMETAL_BUILD": "ON",
|
||||||
|
"COMPILER_RT_DEFAULT_TARGET_ONLY": "ON",
|
||||||
|
"LLVM_CCACHE_BUILD": opts["LLVM_CCACHE_BUILD"],
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v in target_builtin_opts.items():
|
||||||
|
opts[f"BUILTINS_{target}_{k}"] = v
|
||||||
|
|
||||||
|
target_runtime_opts = {
|
||||||
|
"CMAKE_SYSTEM_NAME": "Linux",
|
||||||
|
"CMAKE_BUILD_TYPE": self.settings.build_type,
|
||||||
|
"CMAKE_C_FLAGS": self.buildenv.get("CFLAGS", ""),
|
||||||
|
"CMAKE_CXX_FLAGS": self.buildenv.get("CXXFLAGS", ""),
|
||||||
|
"CMAKE_ASM_FLAGS": self.buildenv.get("ASFLAGS", ""),
|
||||||
|
"CMAKE_C_COMPILER_TARGET": target,
|
||||||
|
"CMAKE_CXX_COMPILER_TARGET": target,
|
||||||
|
"CMAKE_ASM_COMPILER_TARGET": target,
|
||||||
|
"CMAKE_TRY_COMPILE_TARGET_TYPE": "STATIC_LIBRARY",
|
||||||
|
"CMAKE_EXE_LINKER_FLAGS": f"--target={target} {self.buildenv.get('LDFLAGS', '')}",
|
||||||
|
"CMAKE_SHARED_LINKER_FLAGS": f"--target={target} {self.buildenv.get('LDFLAGS', '')}",
|
||||||
|
"CMAKE_INSTALL_RPATH": "\$ORIGIN/../lib",
|
||||||
|
"CMAKE_BUILD_WITH_INSTALL_RPATH": "ON",
|
||||||
|
"CMAKE_SYSROOT": str(sysroot_path),
|
||||||
|
"CMAKE_VERBOSE_MAKEFILE": "ON",
|
||||||
|
"CMAKE_POSITION_INDEPENDENT_CODE": "ON",
|
||||||
|
"LLVM_USE_LINKER": "lld",
|
||||||
|
"LLVM_USE_LTO": "ON",
|
||||||
|
"LLVM_CCACHE_BUILD": opts["LLVM_CCACHE_BUILD"],
|
||||||
|
# TODO: Check for more sanitizers that work with musl
|
||||||
|
"COMPILER_RT_SANITIZERS_TO_BUILD": "asan;msan;tsan",
|
||||||
|
"COMPILER_RT_USE_BUILTINS_LIBRARY": "ON",
|
||||||
|
"COMPILER_RT_USE_LIBCXX": "ON",
|
||||||
|
"COMPILER_RT_BUILD_SANITIZERS": "ON",
|
||||||
|
# For some reason this flag is not correctly set if we don't
|
||||||
|
# manually set it and some strange gnu only LDFLAGS are injected.
|
||||||
|
"COMPILER_RT_HAS_GNU_VERSION_SCRIPT_COMPAT": "OFF",
|
||||||
|
# X-Ray doesn't seem to compiler with musl
|
||||||
|
"COMPILER_RT_BUILD_XRAY": "OFF",
|
||||||
|
# Only build these if we enable sanitizers since they depend
|
||||||
|
# on the sanitizer common runtime
|
||||||
|
"COMPILER_RT_BUILD_MEMPROF": "ON",
|
||||||
|
"COMPILER_RT_BUILD_LIBFUZZER": "ON",
|
||||||
|
"COMPILER_RT_BUILD_ORC": "ON",
|
||||||
|
# Make sure we use libc++ from the tree instead from the system.
|
||||||
|
"SANITIZER_CXX_ABI": "libc++",
|
||||||
|
"SANITIZER_CXX_ABI_INTREE": "ON",
|
||||||
|
"LIBCXX_CXX_ABI": "libcxxabi",
|
||||||
|
"LIBCXX_USE_COMPILER_RT": "ON",
|
||||||
|
"LIBCXX_ENABLE_STATIC_ABI_LIBRARY": "ON",
|
||||||
|
"LIBCXX_ABI_UNSTABLE": "ON",
|
||||||
|
"LIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY": "ON",
|
||||||
|
"LIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY": "ON",
|
||||||
|
"LIBCXX_ABI_VERSION": "2",
|
||||||
|
"LIBCXX_HAS_MUSL_LIBC": "ON",
|
||||||
|
# musl doesn't have -latomic
|
||||||
|
"LIBCXX_HAS_ATOMIC_LIB": "OFF",
|
||||||
|
"LIBCXXABI_ENABLE_THREADS": "ON",
|
||||||
|
"LIBCXXABI_HAS_CXA_THREAD_ATEXIT_IMPL": "OFF",
|
||||||
|
"LIBCXXABI_USE_COMPILER_RT": "ON",
|
||||||
|
"LIBCXXABI_USE_LLVM_UNWINDER": "ON",
|
||||||
|
"LIBCXXABI_ENABLE_STATIC_UNWINDER": "ON",
|
||||||
|
"LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY": "ON",
|
||||||
|
"LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_STATIC_LIBRARY": "ON",
|
||||||
|
"LIBCXXABI_ENABLE_SHARED": "OFF",
|
||||||
|
"LIBUNWIND_USE_COMPILER_RT": "ON",
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v in target_runtime_opts.items():
|
||||||
|
opts[f"RUNTIMES_{target}_{k}"] = v
|
||||||
|
|
||||||
|
opts["LLVM_RUNTIME_TARGETS"] = target
|
||||||
|
opts["LLVM_BUILTIN_TARGETS"] = target
|
||||||
|
opts["LLVM_ENABLE_RUNTIMES"] = ";".join(RUNTIME_TARGETS)
|
||||||
|
|
||||||
|
def generate(self):
|
||||||
|
tc = CMakeToolchain(self)
|
||||||
|
tc.preprocessor_definitions["_LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE"] = ""
|
||||||
|
tc.preprocessor_definitions["_LIBCPP_HAS_MUSL_LIBC"] = "ON"
|
||||||
|
|
||||||
|
tc.generate()
|
||||||
|
deps = CMakeDeps(self)
|
||||||
|
deps.set_property("zlib", "cmake_find_mode", "both")
|
||||||
|
deps.generate()
|
||||||
|
|
||||||
|
def build(self):
|
||||||
|
opts = CMAKE_OPTIONS.copy()
|
||||||
|
sysroot = self.dependencies["stage1-sysroot"].package_folder
|
||||||
|
self.add_compiler_options(opts)
|
||||||
|
|
||||||
|
# zlib_dir = self.dependencies["zlib"].package_folder
|
||||||
|
opts["ZLIB_ROOT"] = sysroot
|
||||||
|
opts[
|
||||||
|
"CMAKE_REQUIRED_INCLUDES"
|
||||||
|
] = f"{sysroot}/lib/clang/17/include {sysroot}/include"
|
||||||
|
opts["CMAKE_REQUIRED_LIBRARIES"] = f"-L{sysroot}/lib -lz"
|
||||||
|
|
||||||
|
self.add_runtimes_and_builtins(opts)
|
||||||
|
|
||||||
|
for target in opts["LLVM_RUNTIME_TARGETS"].split(";"):
|
||||||
|
extra_target = None
|
||||||
|
|
||||||
|
bin_dir = Path(self.package_folder) / "bin"
|
||||||
|
bin_dir.mkdir(exist_ok=True, parents=True)
|
||||||
|
|
||||||
|
opts["LLVM_ENABLE_PROJECTS"] = ";".join(PROJECTS)
|
||||||
|
opts["LLVM_DISTRIBUTION_COMPONENTS"] = ";".join(TOOLCHAIN_TARGETS)
|
||||||
|
|
||||||
|
stage1 = Path(self.dependencies["stage1-sysroot"].package_folder)
|
||||||
|
opts["LLVM_TABLEGEN"] = str(stage1 / "bin" / "llvm-tblgen")
|
||||||
|
opts["CLANG_TABLEGEN"] = str(stage1 / "bin" / "clang-tblgen")
|
||||||
|
|
||||||
|
llvm_dir = self.dependencies["llvm-source"].buildenv_info.vars(
|
||||||
|
self, scope="build"
|
||||||
|
)
|
||||||
|
|
||||||
|
build_dir = os.path.join(self.build_folder, "build")
|
||||||
|
os.makedirs(build_dir)
|
||||||
|
|
||||||
|
with current_dir(build_dir):
|
||||||
|
cm = CMake(self)
|
||||||
|
cm.configure(
|
||||||
|
opts,
|
||||||
|
build_script_folder=os.path.join(llvm_dir["LLVM_SOURCE_DIR"], "llvm"),
|
||||||
|
)
|
||||||
|
|
||||||
|
cm.build(target="builtins")
|
||||||
|
cm.build(target="compiler-rt")
|
||||||
|
cm.build(target="install-distribution-stripped")
|
||||||
|
|
||||||
|
def package_info(self):
|
||||||
|
bindir = Path(os.path.join(self.package_folder, "bin"))
|
||||||
|
clang_lib_dir = Path(
|
||||||
|
os.path.join(
|
||||||
|
self.package_folder, "lib", "clang", get_version("llvm_major"), "lib"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
self.runenv_info.prepend_path(
|
||||||
|
"PATH",
|
||||||
|
str(bindir),
|
||||||
|
)
|
||||||
|
|
||||||
|
self.buildenv_info.define("CC", str(bindir / "clang"))
|
||||||
|
self.buildenv_info.define("CXX", str(bindir / "clang++"))
|
||||||
|
self.buildenv_info.define("AR", str(bindir / "llvm-ar"))
|
||||||
|
self.buildenv_info.define("NM", str(bindir / "llvm-nm"))
|
||||||
|
self.buildenv_info.define("RANLIB", str(bindir / "llvm-ranlib"))
|
|
@ -21,7 +21,7 @@ from conan import ConanFile
|
||||||
from conan.tools.files import get
|
from conan.tools.files import get
|
||||||
from conan.tools.cmake import CMakeToolchain
|
from conan.tools.cmake import CMakeToolchain
|
||||||
|
|
||||||
from conf.utils import get_version, copy_template, copy_tree
|
from conf.utils import get_version, copy_template, copy_tree, copy_dependency_tree
|
||||||
|
|
||||||
|
|
||||||
class Stage1(ConanFile):
|
class Stage1(ConanFile):
|
||||||
|
@ -43,52 +43,16 @@ class Stage1(ConanFile):
|
||||||
self.requires(
|
self.requires(
|
||||||
f"musl/{get_version('musl')}@{self.user}/{self.channel}", visible=False
|
f"musl/{get_version('musl')}@{self.user}/{self.channel}", visible=False
|
||||||
)
|
)
|
||||||
|
self.requires(
|
||||||
|
f"libcxx/{get_version('llvm')}@{self.user}/{self.channel}", visible=False
|
||||||
|
)
|
||||||
|
|
||||||
def build(self):
|
def build(self):
|
||||||
musl = self.dependencies["musl"]
|
copy_dependency_tree(
|
||||||
clang = self.dependencies["clang-bootstrap"]
|
self,
|
||||||
zlib = self.dependencies["zlib"]
|
["clang-bootstrap", "musl", "zlib", "zstd", "libcxx"],
|
||||||
zstd = self.dependencies["zstd"]
|
self.package_folder,
|
||||||
|
|
||||||
include_dir = Path(self.package_folder) / "include"
|
|
||||||
lib_dir = Path(self.package_folder) / "lib"
|
|
||||||
bin_dir = Path(self.package_folder) / "bin"
|
|
||||||
|
|
||||||
include_dir.mkdir(parents=True, exist_ok=True)
|
|
||||||
lib_dir.mkdir(parents=True, exist_ok=True)
|
|
||||||
bin_dir.mkdir(parents=True, exist_ok=True)
|
|
||||||
|
|
||||||
musl_include_dir = Path(musl.package_folder) / "include"
|
|
||||||
musl_lib_dir = Path(musl.package_folder) / "lib"
|
|
||||||
|
|
||||||
zstd_include_dir = Path(zstd.package_folder) / "include"
|
|
||||||
zstd_lib_dir = Path(zstd.package_folder) / "lib"
|
|
||||||
|
|
||||||
zlib_include_dir = Path(zlib.package_folder) / "include"
|
|
||||||
zlib_lib_dir = Path(zlib.package_folder) / "lib"
|
|
||||||
|
|
||||||
clang_include_dir = Path(clang.package_folder) / "include"
|
|
||||||
clang_lib_dir = Path(clang.package_folder) / "lib"
|
|
||||||
clang_bin_dir = Path(clang.package_folder) / "bin"
|
|
||||||
|
|
||||||
self.output.info(
|
|
||||||
f"Copying musl stuff: {musl_include_dir.name} -- {musl_lib_dir.name}"
|
|
||||||
)
|
)
|
||||||
copy_tree(musl_include_dir, include_dir)
|
|
||||||
copy_tree(musl_lib_dir, lib_dir)
|
|
||||||
|
|
||||||
copy_tree(zstd_include_dir, include_dir)
|
|
||||||
copy_tree(zstd_lib_dir, lib_dir)
|
|
||||||
|
|
||||||
copy_tree(zlib_include_dir, include_dir)
|
|
||||||
copy_tree(zlib_lib_dir, lib_dir)
|
|
||||||
|
|
||||||
self.output.info(
|
|
||||||
f"Copying clang stuff: {clang_include_dir.name} -- {clang_lib_dir.name}"
|
|
||||||
)
|
|
||||||
copy_tree(clang_include_dir, include_dir)
|
|
||||||
copy_tree(clang_lib_dir, lib_dir)
|
|
||||||
copy_tree(clang_bin_dir, bin_dir)
|
|
||||||
|
|
||||||
toolchain = f"{self.recipe_folder}/toolchain.cmake"
|
toolchain = f"{self.recipe_folder}/toolchain.cmake"
|
||||||
copy_template(
|
copy_template(
|
||||||
|
|
|
@ -36,7 +36,7 @@ class Zlib(ZlibBase):
|
||||||
def generate(self):
|
def generate(self):
|
||||||
tc = CMakeToolchain(self)
|
tc = CMakeToolchain(self)
|
||||||
tc.variables["BUILD_SHARED_LIBS"] = False
|
tc.variables["BUILD_SHARED_LIBS"] = False
|
||||||
with_musl_toolchain(self, tc, "BUILD_TARGET")
|
with_musl_toolchain(self, tc, "TARGET")
|
||||||
tc.generate()
|
tc.generate()
|
||||||
deps = CMakeDeps(self)
|
deps = CMakeDeps(self)
|
||||||
deps.generate()
|
deps.generate()
|
||||||
|
|
|
@ -38,7 +38,7 @@ class Zstd(ZstdBase):
|
||||||
def generate(self):
|
def generate(self):
|
||||||
tc = CMakeToolchain(self)
|
tc = CMakeToolchain(self)
|
||||||
tc.variables["BUILD_SHARED_LIBS"] = False
|
tc.variables["BUILD_SHARED_LIBS"] = False
|
||||||
with_musl_toolchain(self, tc, "BUILD_TARGET")
|
with_musl_toolchain(self, tc, "TARGET")
|
||||||
tc.generate()
|
tc.generate()
|
||||||
deps = CMakeDeps(self)
|
deps = CMakeDeps(self)
|
||||||
deps.generate()
|
deps.generate()
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
[settings]
|
[settings]
|
||||||
os=Linux
|
os=Linux
|
||||||
arch=x86_64
|
arch=x86_64
|
||||||
build_type=Release
|
build_type=RelWithDebInfo
|
||||||
|
|
||||||
compiler=clang
|
compiler=clang
|
||||||
compiler.version=17
|
compiler.version=17
|
||||||
|
|
Loading…
Reference in New Issue