[swift-dev] Disable objc interop

Joe Groff jgroff at apple.com
Wed Feb 10 15:17:45 CST 2016

> On Feb 10, 2016, at 12:07 PM, Scott Knight via swift-dev <swift-dev at swift.org> wrote:
> I've been trying to look if there's a way with swift build or swiftc itself to disable objective-c interoperability. I've gotten as far as inspecting the IR output with the disable-obc-interop flag with this command
> swiftc -emit-ir -Xfrontend -disable-llvm-optzns -Xfrontend -disable-objc-interop -O Sources/main.swift 
> But I haven't been able to figure out if there's a way to do this with swift build. No matter what I do when I inspect the compiled binary
> otool -L .build/debug/Test
> .build/debug/Hello:
> 	/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
> 	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
> 	@rpath/libswiftCore.dylib (compatibility version 0.0.0, current version 0.0.0)
> libobjc is always linked in. I ran the emit-ir command above both with and without disable-obc-interop and could see in the emitted IR that this line was removed when using the disable-obc-interop flag
> !7 = !{!"-lobjc"}
> Is there something I'm missing or is this just not supported currently? I don't have a practical use case currently for this but was just curious to better understand the swift runtime and internals.

This is just a bug. In theory you should be able to just remove the emission of that autolink entry. However, not much energy has been put into supporting ObjC-less Swift on Darwin, so expect other problems.


More information about the swift-dev mailing list