Building executable project in Swift 5.2 with FoundationNetworking using -Xswiftc -static-stdlib failed

Hello there!

With Swift 5.2 is possible to building an executable project with statically linked libraries (also Foundation and swiftDispatch).

Unfortunately when I created a swift file that contains URLSession etc., although I imported FoundationNetworking, the swift build using -Xswiftc -static-stdlib failed where swift build succeeded.

The output is hundred of these lines:

/usr/lib/swift_static/linux/libFoundation.a(NSURL.swift.o):NSURL.swift.o:function $s10Foundation15NSURLComponentsC6schemeSSSgvg: error: undefined reference to '_CFURLComponentsCopyScheme'

Hey, I've been experimenting with -static-stdlib a bit on Android. The flag has been around for some time- it was added for linux with Swift 3.1- but 5.2 simply added the libdispatch and Foundation static libraries too. However, the linker flags aren't properly set for -static-stdlib, probably because it's not really tested.

With a small Swift test executable that links against swiftDispatch, I found that I had to also add the -lDispatchStubs flag to get it to link and run, ie swiftc -static-stdlib dispatchExample.swift -lDispatchStubs.

For a small Foundation executable, I had to modify usr/lib/swift_static/linux/static-stdlib-args.lnk to add -lCoreFoundation before the Swift ICU libs, ie before -licui18nswift and so on, because the CoreFoundation static library depends on ICU and must come before them (adding it on the command-line won't work, as it comes after them then). Then, the following command worked, swiftc -static-stdlib foundationExample.swift -lDispatchStubs -luuid.

I don't know if these are static libraries that swift-autolink-extract should be detecting, as I haven't looked into how that works, or if they should be added to the bash script that generates the static-stdlib linker file. You can always add them yourself for now.