Skip to content

Commit 03a364e

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

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-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

+18-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
//
1111
//===----------------------------------------------------------------------===//
1212

13+
#include <fstream>
14+
1315
#include "ToolChains.h"
1416

1517
#include "swift/Basic/LLVM.h"
@@ -108,9 +110,24 @@ ToolChain::InvocationInfo toolchains::GenericUnix::constructInvocation(
108110

109111
return II;
110112
}
113+
// Amazon Linux 2023 requires lld as the default linker.
114+
bool isAmazonLinux2023Host() {
115+
std::ifstream file("/etc/os-release");
116+
std::string line;
117+
118+
while (std::getline(file, line)) {
119+
if (line.substr(0, 12) == "PRETTY_NAME=") {
120+
if (line.substr(12) == "\"Amazon Linux 2023\"") {
121+
file.close();
122+
return true;
123+
}
124+
}
125+
}
126+
return false;
127+
}
111128

112129
std::string toolchains::GenericUnix::getDefaultLinker() const {
113-
if (getTriple().isAndroid())
130+
if (getTriple().isAndroid() || isAmazonLinux2023Host())
114131
return "lld";
115132

116133
switch (getTriple().getArch()) {

0 commit comments

Comments
 (0)