-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add mold 142 as build system changed from makefiles to cmake #12881
Changes from 26 commits
ea1a264
2022a3c
0bd7e4a
b9e46d7
3841edd
8aeaf52
b4925e7
c564934
473570d
805e477
e36a0ed
836a8f6
c47338d
6e7d6c8
05e095b
a4df1d6
87684e3
3df5b3c
8317db8
56c555f
ab58739
b64d3b3
1e407af
0254b6e
fcc5aae
5271367
0b18808
65e95ba
e569462
ca1a600
5b3cb57
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
sources: | ||
"1.4.2": | ||
url: "https://github.com/rui314/mold/archive/refs/tags/v1.4.2.tar.gz" | ||
sha256: "47e6c48d20f49e5b47dfb8197dd9ffcb11a8833d614f7a03bd29741c658a69cd" |
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,99 @@ | ||||||
import os | ||||||
from conan import ConanFile | ||||||
from conan.tools.cmake import CMakeToolchain, CMake, cmake_layout, CMakeDeps | ||||||
from conan.tools.files import copy, get, rmdir | ||||||
from conan.errors import ConanInvalidConfiguration | ||||||
from conan.tools.scm import Version | ||||||
from conan.tools.env import VirtualBuildEnv | ||||||
|
||||||
class MoldConan(ConanFile): | ||||||
name = "mold" | ||||||
url = "https://github.com/conan-io/conan-center-index" | ||||||
homepage = "https://github.com/rui314/mold/" | ||||||
license = "AGPL-3.0" | ||||||
description = ("mold is a faster drop-in replacement for existing Unix linkers. It is several times faster than the LLVM lld linker") | ||||||
topics = ("mold", "ld", "linkage", "compilation") | ||||||
|
||||||
settings = "os", "arch", "compiler", "build_type" | ||||||
options = { | ||||||
"with_mimalloc": [True, False], | ||||||
} | ||||||
default_options = { | ||||||
"with_mimalloc": False, | ||||||
} | ||||||
|
||||||
def validate(self): | ||||||
if self.settings.build_type == "Debug": | ||||||
raise ConanInvalidConfiguration('Mold is a build tool, specify mold:build_type=Release in your build profile, see https://github.com/conan-io/conan-center-index/pull/11536#issuecomment-1195607330') | ||||||
if self.settings.compiler in ["gcc", "clang", "intel-cc"] and self.settings.compiler.libcxx != "libstdc++11": | ||||||
raise ConanInvalidConfiguration('Mold can only be built with libstdc++11; specify mold:compiler.libcxx=libstdc++11 in your build profile') | ||||||
if self.settings.os == "Windows": | ||||||
raise ConanInvalidConfiguration(f'{self.name} can not be built on {self.settings.os}.') | ||||||
if self.settings.compiler == "gcc" and Version(self.settings.compiler.version) < "10": | ||||||
raise ConanInvalidConfiguration("GCC version 10 or higher required") | ||||||
if self.settings.compiler in ('clang', 'apple-clang') and Version(self.settings.compiler.version) < "12": | ||||||
raise ConanInvalidConfiguration("Clang version 12 or higher required") | ||||||
if self.settings.compiler == "apple-clang" and "armv8" == self.settings.arch : | ||||||
raise ConanInvalidConfiguration(f'{self.name} is still not supported by Mac M1.') | ||||||
|
||||||
def layout(self): | ||||||
cmake_layout(self, src_folder="src") | ||||||
|
||||||
AndreyMlashkin marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
def package_id(self): | ||||||
del self.info.settings.compiler | ||||||
|
||||||
def build_requirements(self): | ||||||
self.tool_requires("cmake/3.24.1") | ||||||
|
||||||
def requirements(self): | ||||||
self.requires("zlib/1.2.12") | ||||||
self.requires("openssl/1.1.1q") | ||||||
self.requires("xxhash/0.8.1") | ||||||
self.requires("onetbb/2021.3.0") | ||||||
if self.options.with_mimalloc: | ||||||
self.requires("mimalloc/2.0.6") | ||||||
|
||||||
def source(self): | ||||||
get(self, **self.conan_data["sources"][self.version], | ||||||
destination=self.source_folder, strip_root=True) | ||||||
|
||||||
def generate(self): | ||||||
tc = CMakeToolchain(self) | ||||||
tc.variables["MOLD_USE_MIMALLOC"] = self.options.with_mimalloc | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You need to pass Se the PR I declined for reference: https://github.com/conan-io/conan-center-index/pull/12703/files#diff-28e9a0a062d6981cd6b8262e5d25f9ef8f0fc19582955a1a37bfb58be53baf4dR73 |
||||||
tc.variables["MOLD_USE_SYSTEM_MIMALLOC"] = True | ||||||
tc.variables["MOLD_USE_SYSTEM_TBB"] = True | ||||||
tc.generate() | ||||||
|
||||||
cd = CMakeDeps(self) | ||||||
cd.generate() | ||||||
tc = VirtualBuildEnv(self) | ||||||
tc.generate() | ||||||
|
||||||
AndreyMlashkin marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
def build(self): | ||||||
AndreyMlashkin marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
cmake = CMake(self) | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We should replace this double instantiation of the cmake object (the one here and the one on
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
I don't think so. All recipes updated recently declate CMake object in build and package. |
||||||
cmake.configure() | ||||||
cmake.build() | ||||||
|
||||||
def package(self): | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'd include a package_id method and delete the compiler info. After all this is a tool, we don't care about the compiler used to build it. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. As above: I am getting this error, while removing it
|
||||||
cmake = CMake(self) | ||||||
cmake.install() | ||||||
copy(self, "LICENSE", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses")) | ||||||
|
||||||
rmdir(self, os.path.join(self.package_folder, "lib", "cmake")) | ||||||
rmdir(self, os.path.join(self.package_folder, "share")) | ||||||
|
||||||
def package_info(self): | ||||||
bindir = os.path.join(self.package_folder, "bin") | ||||||
mold_location = os.path.join(bindir, "bindir") | ||||||
|
||||||
self.output.info('Appending PATH environment variable: {}'.format(bindir)) | ||||||
self.env_info.PATH.append(bindir) | ||||||
self.env_info.LD = mold_location | ||||||
self.buildenv_info.prepend_path("MOLD_ROOT", bindir) | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I have no clue what the right way to expose this 😱 |
||||||
self.cpp_info.includedirs = [] | ||||||
AndreyMlashkin marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
self.cpp_info.libdirs = [] | ||||||
self.cpp_info.frameworkdirs = [] | ||||||
self.cpp_info.resdirs = [] | ||||||
|
||||||
if self.settings.os == "Linux": | ||||||
self.cpp_info.system_libs.extend(["m", "pthread", "dl"]) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
import os | ||
AndreyMlashkin marked this conversation as resolved.
Show resolved
Hide resolved
|
||
from conan import ConanFile | ||
from conan.tools.build import can_run | ||
|
||
|
||
class MoldTestConan(ConanFile): | ||
settings = "os", "compiler", "build_type", "arch" | ||
generators = "VirtualRunEnv" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Missing build? |
||
test_type = "explicit" | ||
|
||
def build_requirements(self): | ||
self.tool_requires(self.tested_reference_str) | ||
|
||
def test(self): | ||
if can_run(self): | ||
self.run("mold -v", env="conanrun") | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,5 @@ | ||
versions: | ||
"1.3.1": | ||
folder: all | ||
folder: 1.3.1 | ||
"1.4.2": | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This got outdated since you included version 1.5. Would it make sense to rename the folder to There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes, makes sense |
||
folder: 1.4.x |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why did you remove this from
package_id
?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Because I've got an error in the CI:
Check build 16
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We need to keep this. Otherwise using these packages as tool_requirements becomes annoying
https://github.com/conan-io/conan-center-index/blob/master/docs/packaging_policy.md#settings
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Revert. We need to find a fix for it. Compiler should not be part of the package ID. It's documented here: https://github.com/conan-io/conan-center-index/blob/master/docs/packaging_policy.md#settings