From a00df38265567bd0d1a35d17202a7308a7c724c5 Mon Sep 17 00:00:00 2001 From: Finagolfin Date: Sun, 16 Feb 2025 17:36:10 +0530 Subject: [PATCH] [Unix] Use the new `-sysroot` flag for all non-Darwin Unix platforms, not just Android This makes two changes: 1. Use the new flag on all Unix platforms, as in the original frontend pull where it was introduced, swiftlang/swift#72352. 2. When compiling for Android and `ANDROID_NDK_ROOT` is unset, fall back to the `-sdk` as the sysroot when linking. --- .../GenericUnixToolchain+LinkerSupport.swift | 16 ++++++++-------- .../Toolchains/GenericUnixToolchain.swift | 17 ++++++++--------- Tests/SwiftDriverTests/SwiftDriverTests.swift | 2 +- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift b/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift index 35e50abb9..4959eebbf 100644 --- a/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift +++ b/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift @@ -217,14 +217,14 @@ extension GenericUnixToolchain { commandLine.appendPath(try VirtualPath(path: opt.argument.asSingle)) } - if targetTriple.environment == .android { - if let sysroot = parsedOptions.getLastArgument(.sysroot)?.asSingle { - commandLine.appendFlag("--sysroot") - try commandLine.appendPath(VirtualPath(path: sysroot)) - } else if let sysroot = AndroidNDK.getDefaultSysrootPath(in: self.env) { - commandLine.appendFlag("--sysroot") - try commandLine.appendPath(VirtualPath(path: sysroot.pathString)) - } + if let sysroot = parsedOptions.getLastArgument(.sysroot)?.asSingle { + commandLine.appendFlag("--sysroot") + try commandLine.appendPath(VirtualPath(path: sysroot)) + } else if targetTriple.environment == .android, + let sysroot = AndroidNDK.getDefaultSysrootPath(in: self.env) + { + commandLine.appendFlag("--sysroot") + try commandLine.appendPath(VirtualPath(path: sysroot.pathString)) } else if let path = targetInfo.sdkPath?.path { commandLine.appendFlag("--sysroot") commandLine.appendPath(VirtualPath.lookup(path)) diff --git a/Sources/SwiftDriver/Toolchains/GenericUnixToolchain.swift b/Sources/SwiftDriver/Toolchains/GenericUnixToolchain.swift index 6f143b525..11efe7c3e 100644 --- a/Sources/SwiftDriver/Toolchains/GenericUnixToolchain.swift +++ b/Sources/SwiftDriver/Toolchains/GenericUnixToolchain.swift @@ -152,17 +152,16 @@ public final class GenericUnixToolchain: Toolchain { frontendTargetInfo: FrontendTargetInfo, driver: inout Driver ) throws { - if driver.targetTriple.environment == .android { - if let sysroot = driver.parsedOptions.getLastArgument(.sysroot)?.asSingle { - commandLine.appendFlag("-sysroot") - try commandLine.appendPath(VirtualPath(path: sysroot)) - } else if let sysroot = AndroidNDK.getDefaultSysrootPath(in: self.env) { - commandLine.appendFlag("-sysroot") - try commandLine.appendPath(VirtualPath(path: sysroot.pathString)) - } + if let sysroot = driver.parsedOptions.getLastArgument(.sysroot)?.asSingle { + commandLine.appendFlag("-sysroot") + try commandLine.appendPath(VirtualPath(path: sysroot)) + } else if driver.targetTriple.environment == .android, + let sysroot = AndroidNDK.getDefaultSysrootPath(in: self.env) + { + commandLine.appendFlag("-sysroot") + try commandLine.appendPath(VirtualPath(path: sysroot.pathString)) } - if driver.targetTriple.os == .openbsd && driver.targetTriple.arch == .aarch64 { commandLine.appendFlag(.Xcc) commandLine.appendFlag("-Xclang=-msign-return-address=non-leaf") diff --git a/Tests/SwiftDriverTests/SwiftDriverTests.swift b/Tests/SwiftDriverTests/SwiftDriverTests.swift index 3652fe70c..2d7724f56 100644 --- a/Tests/SwiftDriverTests/SwiftDriverTests.swift +++ b/Tests/SwiftDriverTests/SwiftDriverTests.swift @@ -7908,7 +7908,7 @@ final class SwiftDriverTests: XCTestCase { do { let sysroot = path.appending(component: "sysroot") var driver = try Driver(args: [ - "swiftc", "-target", "aarch64-unknown-linux-android", "-sysroot", sysroot.pathString, #file + "swiftc", "-target", "aarch64-unknown-linux-gnu", "-sysroot", sysroot.pathString, #file ], env: env) let jobs = try driver.planBuild().removingAutolinkExtractJobs() let frontend = try XCTUnwrap(jobs.first)