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()