Hi @zhuowei. I have been (somewhat verbosely) documenting my progress getting your SwiftAndroid build working on the reddit thread here https://www.reddit.com/r/swift/comments/3w0xrd/im_patching_the_opensource_swift_compiler_to/ <https://www.reddit.com/r/swift/comments/3w0xrd/im_patching_the_opensource_swift_compiler_to/> (as ephemer9). Given that I’ve now worked through a lot of issues, I think together we can make this build repeatable for everyone (that is if you need my help at all - you seem to be doing a mighty fine job yourself so far). What I’d like to do is work on the JNI integration part of this. Before I can though, I have to get through a few problems here still:
After dealing with the dependency issues (see reddit), the SwiftAndroid build
finally completed. It had plenty of warnings along the way, but in the end I
was left with binaries that seemed to do something. I was then able to use
swiftc to compile for linux x86_64 as usual. I couldn't figure out how to
cross-compile to armv7 though. This is what I tried:
swiftc -target armv7-none-linux-androideabi -target-cpu armv7 test.swift
This unfortunately produces a segfault on my machine: "<unknown>:0: error: the
clang compiler does not support '-mcpu=armv7'"
Removing -target-cpu from the `swiftc` call leads to an error about missing
`swift.ld` for architecture x86_64. It is looking under android/x86_64 - I
symlinked the linker file from android/armv7 into that path and got this
instead:
me@linuxbox:~# swiftc -target armv7-none-linux-androideabi test.swift
-vSwift version 2.2-dev (LLVM 7bae82deaa, Clang 53d04af5ce, Swift 65921fc110)
Target: armv7-none-linux-android
/me/swift/build/Ninja-Release/swift-linux-x86_64/bin/swift -frontend -c
-primary-file test.swift -target armv7-none-linux-android -disable-objc-interop
-color-diagnostics -module-name test -o /tmp/test-706f67.o
/me/swift/build/Ninja-Release/swift-linux-x86_64/bin/swift-autolink-extract
/tmp/test-706f67.o -o /tmp/test-58bef6.autolink
/usr/bin/clang++ /tmp/test-706f67.o -L
/me/swift/build/Ninja-Release/swift-linux-x86_64/lib/swift/android -Xlinker
-rpath -Xlinker
/me/swift/build/Ninja-Release/swift-linux-x86_64/lib/swift/android -lswiftCore
@/tmp/test-58bef6.autolink -Xlinker -T
/me/swift/build/Ninja-Release/swift-linux-x86_64/lib/swift/android/x86_64/swift.ld
-o test
/usr/bin/ld: /tmp/test-706f67.o: Relocations in generic ELF (EM: 40)
/usr/bin/ld: /tmp/test-706f67.o: Relocations in generic ELF (EM: 40)
/tmp/test-706f67.o: error adding symbols: File in wrong format
clang: error: linker command failed with exit code 1 (use -v to see
invocation)
<unknown>:0: error: link command failed with exit code 1 (use -v to see
invocation)
I’m assuming this is because it’s trying to link the armv7 binary with the
x86_64 standard library or something illogical like that. In any case I’m a
little stuck now as to how to proceed. Given that clang is telling me it
doesn’t support armv7, I imagine I’m just entering the wrong arguments for
swiftc. Or do I have to make LLVM-IR first and link using the android toolchain
for now? Can you or anyone else give me an idea as to how to cross-compile
using swiftc?
Many thanks,
Geordie
signature.asc
Description: Message signed with OpenPGP using GPGMail
_______________________________________________ swift-dev mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-dev
