tkclimb
(Takato Yamada)
1
I've recently been interested in swift c++ interoperability. I'm not quite sure how mature this is now but I found a repo cpp_example, which seems to use some C++ features like namespace or class.
However, this example doesn't use c++ header inside so, I tried but failed
- the headers were not found when I added c++ include statements like
#include <iostream> at the top
- build error occurred with the flag
swift build -Xcxx -I /{path-to-toolchain}/usr/include/c++/v1
Is there any way using c++ headers or not available?
nuclearace
(Erik Little)
2
Swift doesn't currently have any official direct C++ interop. The Swift for TensorFlow project has been dabbling with it I believe (as well as some other people individually), and I'm not sure if any of that work has been merged into the current master branch.
tkclimb
(Takato Yamada)
3
@nuclearace
Thanks! As you mentioned, I'm using Swift for Tensorflow 5. The cpp_example contains some c++ feature like namespace and class structure and it worked in my environment properly with S4TF so, I think the compiler implements at least some part of c++ compilation flow.
However, I couldn't find a way to include c++ header by S4TF, even it's possible or not.
Is there anyone who knows about this?
owenv
(Owen Voorhees)
4
I believe the limited c++ support currently in the compiler requires that you use a module map to define your c++ module, and then import that. You'll also need to pass the hidden -enable-cxx-interop option to the frontend. As @nuclearace said though, the feature is experimental, so a lot of c++ constructs won't import properly yet.
Karl
(👑🦆)
5
“experimental” is generous - AIUI, it’s even more preliminary than that. The last patch got hung up about how to represent C++ upcasts.
Take a look at the compiler tests to see what is supported.
tkclimb
(Takato Yamada)
6
Thanks, I got it. I'll check out the support and the tests.
@owenv Do we have any way to see which flags are used to build a pre-built swift compiler like swift --show-build-flags because I'm going to build from source if it's not built with it.
owenv
(Owen Voorhees)
7
Sorry for the confusion. The flag I was referring to is one you pass to the compiler when building your project, not one the compiler needs to be built with. It should work with any recent-sh master snapshot from swift.org, and you can pass it by including -Xfrontend -enable-cxx-interop when invoking swiftc. You can check and see if the compiler you have supports it by looking for it in the output of swift -frontend --help-hidden.
1 Like
tkclimb
(Takato Yamada)
8
Ok, I see. I'll try it. Many Thanks owenv!