forked from mirrors/gecko-dev
Bug 1799423 - link clang with lld r=firefox-build-system-reviewers,glandium
As a side effect, this obsoletes the "link" config as clang always uses the lld linker alongside its own install. Differential Revision: https://phabricator.services.mozilla.com/D161436
This commit is contained in:
parent
55d36f428b
commit
c04dd9a256
2 changed files with 27 additions and 15 deletions
|
|
@ -25,6 +25,10 @@ from shutil import which
|
||||||
import zstandard
|
import zstandard
|
||||||
|
|
||||||
|
|
||||||
|
def is_llvm_toolchain(cc, cxx):
|
||||||
|
return "clang" in cc and "clang" in cxx
|
||||||
|
|
||||||
|
|
||||||
def check_run(args):
|
def check_run(args):
|
||||||
print(" ".join(args), file=sys.stderr, flush=True)
|
print(" ".join(args), file=sys.stderr, flush=True)
|
||||||
if args[0] == "cmake":
|
if args[0] == "cmake":
|
||||||
|
|
@ -173,10 +177,10 @@ def build_one_stage(
|
||||||
cc,
|
cc,
|
||||||
cxx,
|
cxx,
|
||||||
asm,
|
asm,
|
||||||
ld,
|
|
||||||
ar,
|
ar,
|
||||||
ranlib,
|
ranlib,
|
||||||
libtool,
|
libtool,
|
||||||
|
ldflags,
|
||||||
src_dir,
|
src_dir,
|
||||||
stage_dir,
|
stage_dir,
|
||||||
package_name,
|
package_name,
|
||||||
|
|
@ -197,7 +201,7 @@ def build_one_stage(
|
||||||
def slashify_path(path):
|
def slashify_path(path):
|
||||||
return path.replace("\\", "/")
|
return path.replace("\\", "/")
|
||||||
|
|
||||||
def cmake_base_args(cc, cxx, asm, ld, ar, ranlib, libtool, inst_dir):
|
def cmake_base_args(cc, cxx, asm, ar, ranlib, libtool, ldflags, inst_dir):
|
||||||
machine_targets = targets if is_final_stage and targets else "X86"
|
machine_targets = targets if is_final_stage and targets else "X86"
|
||||||
|
|
||||||
cmake_args = [
|
cmake_args = [
|
||||||
|
|
@ -205,13 +209,12 @@ def build_one_stage(
|
||||||
"-DCMAKE_C_COMPILER=%s" % slashify_path(cc[0]),
|
"-DCMAKE_C_COMPILER=%s" % slashify_path(cc[0]),
|
||||||
"-DCMAKE_CXX_COMPILER=%s" % slashify_path(cxx[0]),
|
"-DCMAKE_CXX_COMPILER=%s" % slashify_path(cxx[0]),
|
||||||
"-DCMAKE_ASM_COMPILER=%s" % slashify_path(asm[0]),
|
"-DCMAKE_ASM_COMPILER=%s" % slashify_path(asm[0]),
|
||||||
"-DCMAKE_LINKER=%s" % slashify_path(ld[0]),
|
|
||||||
"-DCMAKE_AR=%s" % slashify_path(ar),
|
"-DCMAKE_AR=%s" % slashify_path(ar),
|
||||||
"-DCMAKE_C_FLAGS=%s" % " ".join(cc[1:]),
|
"-DCMAKE_C_FLAGS=%s" % " ".join(cc[1:]),
|
||||||
"-DCMAKE_CXX_FLAGS=%s" % " ".join(cxx[1:]),
|
"-DCMAKE_CXX_FLAGS=%s" % " ".join(cxx[1:]),
|
||||||
"-DCMAKE_ASM_FLAGS=%s" % " ".join(asm[1:]),
|
"-DCMAKE_ASM_FLAGS=%s" % " ".join(asm[1:]),
|
||||||
"-DCMAKE_EXE_LINKER_FLAGS=%s" % " ".join(ld[1:]),
|
"-DCMAKE_EXE_LINKER_FLAGS=%s" % " ".join(ldflags),
|
||||||
"-DCMAKE_SHARED_LINKER_FLAGS=%s" % " ".join(ld[1:]),
|
"-DCMAKE_SHARED_LINKER_FLAGS=%s" % " ".join(ldflags),
|
||||||
"-DCMAKE_BUILD_TYPE=%s" % build_type,
|
"-DCMAKE_BUILD_TYPE=%s" % build_type,
|
||||||
"-DCMAKE_INSTALL_PREFIX=%s" % inst_dir,
|
"-DCMAKE_INSTALL_PREFIX=%s" % inst_dir,
|
||||||
"-DLLVM_TARGETS_TO_BUILD=%s" % machine_targets,
|
"-DLLVM_TARGETS_TO_BUILD=%s" % machine_targets,
|
||||||
|
|
@ -221,13 +224,16 @@ def build_one_stage(
|
||||||
"-DLLVM_ENABLE_CURL=OFF",
|
"-DLLVM_ENABLE_CURL=OFF",
|
||||||
"-DLLVM_INCLUDE_TESTS=OFF",
|
"-DLLVM_INCLUDE_TESTS=OFF",
|
||||||
]
|
]
|
||||||
|
if is_llvm_toolchain(cc[0], cxx[0]):
|
||||||
|
cmake_args += ["-DLLVM_ENABLE_LLD=ON"]
|
||||||
|
|
||||||
if "TASK_ID" in os.environ:
|
if "TASK_ID" in os.environ:
|
||||||
cmake_args += [
|
cmake_args += [
|
||||||
"-DCLANG_REPOSITORY_STRING=taskcluster-%s" % os.environ["TASK_ID"],
|
"-DCLANG_REPOSITORY_STRING=taskcluster-%s" % os.environ["TASK_ID"],
|
||||||
]
|
]
|
||||||
projects = ["clang"]
|
projects = ["clang", "lld"]
|
||||||
if is_final_stage:
|
if is_final_stage:
|
||||||
projects.extend(("clang-tools-extra", "lld"))
|
projects.append("clang-tools-extra")
|
||||||
else:
|
else:
|
||||||
cmake_args.append("-DLLVM_TOOL_LLI_BUILD=OFF")
|
cmake_args.append("-DLLVM_TOOL_LLI_BUILD=OFF")
|
||||||
|
|
||||||
|
|
@ -303,7 +309,7 @@ def build_one_stage(
|
||||||
return cmake_args
|
return cmake_args
|
||||||
|
|
||||||
cmake_args = []
|
cmake_args = []
|
||||||
cmake_args += cmake_base_args(cc, cxx, asm, ld, ar, ranlib, libtool, inst_dir)
|
cmake_args += cmake_base_args(cc, cxx, asm, ar, ranlib, libtool, ldflags, inst_dir)
|
||||||
cmake_args += [src_dir]
|
cmake_args += [src_dir]
|
||||||
build_package(build_dir, cmake_args)
|
build_package(build_dir, cmake_args)
|
||||||
|
|
||||||
|
|
@ -592,7 +598,8 @@ def main():
|
||||||
cc = get_tool(config, "cc")
|
cc = get_tool(config, "cc")
|
||||||
cxx = get_tool(config, "cxx")
|
cxx = get_tool(config, "cxx")
|
||||||
asm = get_tool(config, "ml" if is_windows() else "as")
|
asm = get_tool(config, "ml" if is_windows() else "as")
|
||||||
ld = get_tool(config, "link" if is_windows() else "ld")
|
# Not using lld here as default here because it's not in PATH. But clang
|
||||||
|
# knows how to find it when they are installed alongside each others.
|
||||||
ar = get_tool(config, "lib" if is_windows() else "ar")
|
ar = get_tool(config, "lib" if is_windows() else "ar")
|
||||||
ranlib = None if is_windows() else get_tool(config, "ranlib")
|
ranlib = None if is_windows() else get_tool(config, "ranlib")
|
||||||
libtool = None
|
libtool = None
|
||||||
|
|
@ -646,7 +653,13 @@ def main():
|
||||||
# corresponding option to strip unused sections. We do it explicitly
|
# corresponding option to strip unused sections. We do it explicitly
|
||||||
# here. LLVM's build system is also picky about turning on ICF, so
|
# here. LLVM's build system is also picky about turning on ICF, so
|
||||||
# we do that explicitly here, too.
|
# we do that explicitly here, too.
|
||||||
extra_ldflags += ["-fuse-ld=gold", "-Wl,--gc-sections", "-Wl,--icf=safe"]
|
|
||||||
|
# It's unfortunately required to specify the linker used here because
|
||||||
|
# the linker flags are used in LLVM's configure step before
|
||||||
|
# -DLLVM_ENABLE_LLD is actually processed.
|
||||||
|
if is_llvm_toolchain(cc, cxx):
|
||||||
|
extra_ldflags += ["-fuse-ld=lld", "-Wl,--icf=safe"]
|
||||||
|
extra_ldflags += ["-Wl,--gc-sections"]
|
||||||
elif is_windows():
|
elif is_windows():
|
||||||
extra_cflags = []
|
extra_cflags = []
|
||||||
extra_cxxflags = []
|
extra_cxxflags = []
|
||||||
|
|
@ -706,10 +719,10 @@ def main():
|
||||||
[cc] + extra_cflags,
|
[cc] + extra_cflags,
|
||||||
[cxx] + extra_cxxflags,
|
[cxx] + extra_cxxflags,
|
||||||
[asm] + extra_asmflags,
|
[asm] + extra_asmflags,
|
||||||
[ld] + extra_ldflags,
|
|
||||||
ar,
|
ar,
|
||||||
ranlib,
|
ranlib,
|
||||||
libtool,
|
libtool,
|
||||||
|
extra_ldflags,
|
||||||
llvm_source_dir,
|
llvm_source_dir,
|
||||||
stage1_dir,
|
stage1_dir,
|
||||||
package_name,
|
package_name,
|
||||||
|
|
@ -732,10 +745,10 @@ def main():
|
||||||
[cc] + extra_cflags2,
|
[cc] + extra_cflags2,
|
||||||
[cxx] + extra_cxxflags2,
|
[cxx] + extra_cxxflags2,
|
||||||
[asm] + extra_asmflags,
|
[asm] + extra_asmflags,
|
||||||
[ld] + extra_ldflags,
|
|
||||||
ar,
|
ar,
|
||||||
ranlib,
|
ranlib,
|
||||||
libtool,
|
libtool,
|
||||||
|
extra_ldflags,
|
||||||
llvm_source_dir,
|
llvm_source_dir,
|
||||||
stage2_dir,
|
stage2_dir,
|
||||||
package_name,
|
package_name,
|
||||||
|
|
@ -759,10 +772,10 @@ def main():
|
||||||
[cc] + extra_cflags2,
|
[cc] + extra_cflags2,
|
||||||
[cxx] + extra_cxxflags2,
|
[cxx] + extra_cxxflags2,
|
||||||
[asm] + extra_asmflags,
|
[asm] + extra_asmflags,
|
||||||
[ld] + extra_ldflags,
|
|
||||||
ar,
|
ar,
|
||||||
ranlib,
|
ranlib,
|
||||||
libtool,
|
libtool,
|
||||||
|
extra_ldflags,
|
||||||
llvm_source_dir,
|
llvm_source_dir,
|
||||||
stage3_dir,
|
stage3_dir,
|
||||||
package_name,
|
package_name,
|
||||||
|
|
@ -802,10 +815,10 @@ def main():
|
||||||
[cc] + extra_cflags2,
|
[cc] + extra_cflags2,
|
||||||
[cxx] + extra_cxxflags2,
|
[cxx] + extra_cxxflags2,
|
||||||
[asm] + extra_asmflags,
|
[asm] + extra_asmflags,
|
||||||
[ld] + extra_ldflags,
|
|
||||||
ar,
|
ar,
|
||||||
ranlib,
|
ranlib,
|
||||||
libtool,
|
libtool,
|
||||||
|
extra_ldflags,
|
||||||
llvm_source_dir,
|
llvm_source_dir,
|
||||||
stage4_dir,
|
stage4_dir,
|
||||||
package_name,
|
package_name,
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,5 @@
|
||||||
"cc": "{MOZ_FETCHES_DIR}/clang/bin/clang-cl.exe",
|
"cc": "{MOZ_FETCHES_DIR}/clang/bin/clang-cl.exe",
|
||||||
"cxx": "{MOZ_FETCHES_DIR}/clang/bin/clang-cl.exe",
|
"cxx": "{MOZ_FETCHES_DIR}/clang/bin/clang-cl.exe",
|
||||||
"ml": "{MOZ_FETCHES_DIR}/clang/bin/clang-cl.exe",
|
"ml": "{MOZ_FETCHES_DIR}/clang/bin/clang-cl.exe",
|
||||||
"link": "{MOZ_FETCHES_DIR}/clang/bin/lld-link.exe",
|
|
||||||
"lib": "{MOZ_FETCHES_DIR}/clang/bin/llvm-lib.exe"
|
"lib": "{MOZ_FETCHES_DIR}/clang/bin/llvm-lib.exe"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue