Skip to content

Commit be69270

Browse files
committed
set default linker to lld for Amazon Linux 2023
1 parent 7cbe2cf commit be69270

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

CMakeLists.txt

+6
Original file line numberDiff line numberDiff line change
@@ -948,6 +948,10 @@ if(XCODE)
948948
swift_common_xcode_cxx_config()
949949
endif()
950950

951+
# Check what linux distribution is being used.
952+
# This can be used to determine the default linker to use.
953+
cmake_host_system_information(RESULT DISTRO_NAME QUERY DISTRIB_PRETTY_NAME)
954+
951955
# Which default linker to use. Prefer LLVM_USE_LINKER if it set, otherwise use
952956
# our own defaults. This should only be possible in a unified (not stand alone)
953957
# build environment.
@@ -959,6 +963,8 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows" AND NOT CMAKE_HOST_SYSTEM_NAME STREQ
959963
set(SWIFT_USE_LINKER_default "lld")
960964
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
961965
set(SWIFT_USE_LINKER_default "")
966+
elseif(DISTRO_NAME STREQUAL "Amazon Linux 2023")
967+
set(SWIFT_USE_LINKER_default "lld")
962968
else()
963969
set(SWIFT_USE_LINKER_default "gold")
964970
endif()

lib/Driver/UnixToolChains.cpp

+17-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
1010
//
1111
//===----------------------------------------------------------------------===//
12+
#include <iostream>
13+
#include <fstream>
1214

1315
#include "ToolChains.h"
1416

@@ -108,8 +110,22 @@ ToolChain::InvocationInfo toolchains::GenericUnix::constructInvocation(
108110

109111
return II;
110112
}
111-
113+
// Amazon Linux 2023 requires lld as the default linker.
112114
std::string toolchains::GenericUnix::getDefaultLinker() const {
115+
if (getTriple().isOSLinux()) {
116+
std::ifstream file("/etc/os-release");
117+
std::string line;
118+
119+
while (std::getline(file, line)) {
120+
if (line.substr(0, 12) == "PRETTY_NAME=") {
121+
if (line.substr(12) == "\"Amazon Linux 2023\"") {
122+
file.close();
123+
return "lld";
124+
}
125+
}
126+
}
127+
}
128+
113129
if (getTriple().isAndroid())
114130
return "lld";
115131

0 commit comments

Comments
 (0)