diff --git a/packages/zlib/conanfile.py b/packages/zlib/conanfile.py index fde78f5..dc446c0 100644 --- a/packages/zlib/conanfile.py +++ b/packages/zlib/conanfile.py @@ -14,29 +14,65 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . import os +from pathlib import Path -from conan.tools.cmake import CMakeToolchain, CMakeDeps +from conan.tools.cmake import CMakeToolchain, CMakeDeps, CMake from conf.base.zlib import ZlibBase -from conf.utils import get_version, with_musl_toolchain +from conf.utils import get_version, with_musl_toolchain, copy_dependency_tree class Zlib(ZlibBase): name = "zlib" + options = { + "stage": [1, 2], + } + default_options = {"stage": 1} + def build_requirements(self): super().build_requirements() - self.tool_requires( - f"clang-bootstrap/{get_version('llvm')}@{self.user}/{self.channel}", - visible=False, - ) + if self.options.stage == 1: + self.requires( + f"clang-bootstrap/{get_version('llvm')}@{self.user}/{self.channel}", + visible=False, + ) + else: + self.requires( + f"clang/{get_version('llvm')}@{self.user}/{self.channel}", + visible=False, + ) self.requires(f"musl/{get_version('musl')}@{self.user}/{self.channel}") def generate(self): tc = CMakeToolchain(self) tc.variables["BUILD_SHARED_LIBS"] = False - with_musl_toolchain(self, tc, "TARGET") + self.buildenv_info.prepend_path("PATH", f"{self.build_folder}/sysroot") + with_musl_toolchain(self, tc, sysroot=f"{self.build_folder}/sysroot") tc.generate() deps = CMakeDeps(self) deps.generate() + + def create_sysroot(self): + sysroot = Path(self.build_folder) / "sysroot" + sysroot.mkdir() + + clang = "clang-bootstrap" if self.options.stage == 1 else "clang" + copy_dependency_tree(self, [clang, "musl"], sysroot) + + def build(self): + self.create_sysroot() + + sysroot = f"{self.build_folder}/sysroot" + + cmake = CMake(self) + cmake.configure( + { + "BUILD_SHARED_LIBS": False, + "CMAKE_POSITION_INDEPENDENT_CODE": "ON", + "CMAKE_SYSROOT": sysroot, + }, + build_script_folder=f"zlib-{self.version}", + ) + self.run("ninja zlibstatic") diff --git a/packages/zstd/conanfile.py b/packages/zstd/conanfile.py index e3fb7d8..0d8d7c9 100644 --- a/packages/zstd/conanfile.py +++ b/packages/zstd/conanfile.py @@ -15,24 +15,37 @@ # along with this program. If not, see . import os +from pathlib import Path + from conan import ConanFile from conan.tools.cmake import CMake, CMakeToolchain, CMakeDeps from conan.tools.files import get, copy from conf.base.zstd import ZstdBase -from conf.utils import get_version, with_musl_toolchain +from conf.utils import get_version, with_musl_toolchain, copy_dependency_tree class Zstd(ZstdBase): name = "zstd" + options = { + "stage": [1, 2], + } + default_options = {"stage": 1} + def build_requirements(self): super().build_requirements() - self.tool_requires( - f"clang-bootstrap/{get_version('llvm')}@{self.user}/{self.channel}", - visible=False, - ) + if self.options.stage == 1: + self.requires( + f"clang-bootstrap/{get_version('llvm')}@{self.user}/{self.channel}", + visible=False, + ) + else: + self.requires( + f"clang/{get_version('llvm')}@{self.user}/{self.channel}", + visible=False, + ) self.requires(f"musl/{get_version('musl')}@{self.user}/{self.channel}") def generate(self): @@ -42,3 +55,31 @@ class Zstd(ZstdBase): tc.generate() deps = CMakeDeps(self) deps.generate() + + def create_sysroot(self): + sysroot = Path(self.build_folder) / "sysroot" + sysroot.mkdir() + + clang = "clang-bootstrap" if self.options.stage == 1 else "clang" + copy_dependency_tree(self, [clang, "musl"], sysroot) + + def build(self): + self.create_sysroot() + sysroot = f"{self.build_folder}/sysroot" + + cmake = CMake(self) + + cmake.configure( + { + "CMAKE_C_COMPILER": self.settings.compiler, + "CMAKE_CXX_COMPILER": self.settings.compiler, + "BUILD_SHARED_LIBS": False, + "ZSTD_BUILD_STATIC": True, + "ZSTD_BUILD_SHARED": False, + "CMAKE_POSITION_INDEPENDENT_CODE": "ON", + "CMAKE_SYSROOT": sysroot, + }, + build_script_folder=f"zstd-{self.version}/build/cmake/", + ) + cmake.build() + cmake.install()