-
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 all 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.3.1": | ||
url: "https://github.com/rui314/mold/archive/refs/tags/v1.3.1.tar.gz" | ||
sha256: "d436e2d4c1619a97aca0e28f26c4e79c0242d10ce24e829c1b43cfbdd196fd77" |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
from conan import ConanFile | ||
from conan.tools.scm import Version | ||
from conan.tools import files | ||
from conan.tools.files import copy | ||
from conan.errors import ConanInvalidConfiguration | ||
from conans import AutoToolsBuildEnvironment | ||
import os | ||
|
||
required_conan_version = ">=1.47.0" | ||
|
||
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" | ||
|
||
generators = "make" | ||
|
||
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 == "clang" or self.settings.compiler == "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.') | ||
|
||
@property | ||
def _source_subfolder(self): | ||
return "source_subfolder" | ||
|
||
@property | ||
def _build_subfolder(self): | ||
return "build_subfolder" | ||
|
||
def _get_include_path(self, dependency): | ||
include_path = self.deps_cpp_info[dependency].rootpath | ||
include_path = os.path.join(include_path, "include") | ||
return include_path | ||
|
||
def _patch_sources(self): | ||
if self.settings.compiler == "apple-clang" or (self.settings.compiler == "gcc" and Version(self.settings.compiler.version) < "11"): | ||
files.replace_in_file(self, "source_subfolder/Makefile", "-std=c++20", "-std=c++2a") | ||
|
||
files.replace_in_file(self, "source_subfolder/Makefile", "-Ithird-party/xxhash ", "-I{} -I{} -I{} -I{} -I{}".format( | ||
self._get_include_path("zlib"), | ||
self._get_include_path("openssl"), | ||
self._get_include_path("xxhash"), | ||
self._get_include_path("mimalloc"), | ||
self._get_include_path("onetbb") | ||
)) | ||
|
||
files.replace_in_file(self, "source_subfolder/Makefile", "MOLD_LDFLAGS += -ltbb", "MOLD_LDFLAGS += -L{} -ltbb".format( | ||
self.deps_cpp_info["onetbb"].lib_paths[0])) | ||
|
||
files.replace_in_file(self, "source_subfolder/Makefile", "MOLD_LDFLAGS += -lmimalloc", "MOLD_LDFLAGS += -L{} -lmimalloc".format( | ||
self.deps_cpp_info["mimalloc"].lib_paths[0])) | ||
|
||
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") | ||
self.requires("mimalloc/2.0.6") | ||
|
||
def source(self): | ||
files.get(self, **self.conan_data["sources"][self.version], | ||
destination=self._source_subfolder, strip_root=True) | ||
|
||
def build(self): | ||
self._patch_sources() | ||
with files.chdir(self, self._source_subfolder): | ||
autotools = AutoToolsBuildEnvironment(self) | ||
autotools.make(target="mold", args=['SYSTEM_TBB=1', 'SYSTEM_MIMALLOC=1']) | ||
|
||
def package(self): | ||
copy(self, "LICENSE", src=self._source_subfolder, dst=os.path.join(self.package_folder, "licenses")) | ||
copy(self, "mold", src="bin", dst=os.path.join(self.package_folder, "bin"), keep_path=False) | ||
copy(self, "mold", src=self._source_subfolder, dst=os.path.join(self.package_folder, "bin"), keep_path=False) | ||
|
||
def package_id(self): | ||
del self.info.settings.compiler | ||
|
||
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) | ||
self.cpp_info.includedirs = [] | ||
|
||
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,9 @@ | ||
from conan import ConanFile | ||
from conan.tools.build import cross_building | ||
|
||
class TestPackageConan(ConanFile): | ||
settings = "os", "arch", "build_type", "compiler" | ||
|
||
def test(self): | ||
if not cross_building(self): | ||
self.run("mold -v", run_environment=True) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,7 @@ | ||
sources: | ||
"1.3.1": | ||
url: "https://github.com/rui314/mold/archive/refs/tags/v1.3.1.tar.gz" | ||
sha256: "d436e2d4c1619a97aca0e28f26c4e79c0242d10ce24e829c1b43cfbdd196fd77" | ||
"1.4.2": | ||
url: "https://github.com/rui314/mold/archive/refs/tags/v1.4.2.tar.gz" | ||
sha256: "47e6c48d20f49e5b47dfb8197dd9ffcb11a8833d614f7a03bd29741c658a69cd" | ||
"1.5.1": | ||
url: "https://github.com/rui314/mold/archive/refs/tags/v1.5.1.tar.gz" | ||
sha256: "ec94aa74758f1bc199a732af95c6304ec98292b87f2f4548ce8436a7c5b054a1" |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,16 @@ | ||
import os | ||
from conans import ConanFile, tools | ||
from conan.tools.build import cross_building | ||
from conan import ConanFile | ||
from conan.tools.build import can_run | ||
|
||
class TestPackageConan(ConanFile): | ||
settings = "os", "arch", "build_type", "compiler" | ||
|
||
class MoldTestConan(ConanFile): | ||
settings = "os", "compiler", "build_type", "arch" | ||
generators = "VirtualBuildEnv" | ||
test_type = "explicit" | ||
|
||
def build_requirements(self): | ||
self.tool_requires(self.tested_reference_str) | ||
|
||
def test(self): | ||
if not cross_building(self): | ||
self.run("mold -v", run_environment=True) | ||
if can_run(self): | ||
self.run("mold -v") | ||
uilianries marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
import os | ||
from conans import ConanFile, tools | ||
from conan.tools.build import cross_building | ||
|
||
class TestPackageConan(ConanFile): | ||
settings = "os", "arch", "build_type", "compiler" | ||
|
||
def test(self): | ||
if not cross_building(self): | ||
self.run("mold -v", run_environment=True) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,7 @@ | ||
versions: | ||
"1.3.1": | ||
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: all | ||
"1.5.1": | ||
folder: all |
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.
Now I see why it's not working with
VirtuanRunEnv
, there is no configuration forself.runenv_info
but it's fine, as it's a linker, there is no reason for using on runtime environment.