From b47d0d4d9fcecc8cc550356cb89f8325d5176bb7 Mon Sep 17 00:00:00 2001 From: finagolfin Date: Thu, 20 Feb 2025 01:34:49 +0530 Subject: [PATCH] [Unix] Use the new `-sysroot` flag for all non-Darwin Unix platforms, not just Android (#1811) 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 | 16 ++++++++-------- Tests/SwiftDriverTests/SwiftDriverTests.swift | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift b/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift index ffdf2a406..5adc24a87 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 105104a78..04aa53577 100644 --- a/Sources/SwiftDriver/Toolchains/GenericUnixToolchain.swift +++ b/Sources/SwiftDriver/Toolchains/GenericUnixToolchain.swift @@ -152,14 +152,14 @@ 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)) } } } diff --git a/Tests/SwiftDriverTests/SwiftDriverTests.swift b/Tests/SwiftDriverTests/SwiftDriverTests.swift index d01f8e64f..646e08ef6 100644 --- a/Tests/SwiftDriverTests/SwiftDriverTests.swift +++ b/Tests/SwiftDriverTests/SwiftDriverTests.swift @@ -8149,7 +8149,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)