2014-06-10 18 views
6

kullanarak JavaScript Swift dan derleme almak için:Merhaba Kelime hızlı dosyaların en basit Verilen Emscripten

println("lol") 

Bu xcrun swift -i lol.swift ile komut satırında bu çalıştırın veya xcrun swift lol.swift -o lol ile yürütülebilir derlemeye Önemsiz ama nasıl emscripten için basit bir kavram kanıtı hakkında?

Daha önce emscripten kullanmamıştım, ancak C++ kullanarak http://kripken.github.io/emscripten-site/docs/getting_started/Tutorial.html numaralı telefondan merhaba bir dünya örneği aldım ve Swift kodumu da derlemek istedim.

Ben

xcrun swift lol.swift -emit-bc -o lol.bc 
emcc lol.bc 

Ama

Value: %1 = call { i8*, i64, i64 } @_TFSS37_convertFromBuiltinUTF16StringLiteralfMSSFTBp17numberOfCodeUnitsBw_SS(i8* bitcast ([4 x i16]* @0 to i8*), i64 3) 
LLVM ERROR: Unrecognized struct value 
Traceback (most recent call last): 
    File "/Users/glen/Downloads/emsdk_portable/emscripten/1.16.0/emcc", line 1540, in <module> 
shared.Building.llvm_opt(final, link_opts) 
    File "/Users/glen/Downloads/emsdk_portable/emscripten/1.16.0/tools/shared.py", line 1267, in llvm_opt 
assert os.path.exists(target), 'Failed to run llvm optimizations: ' + output 
AssertionError: Failed to run llvm optimizations: 

Düşünceler olsun çalıştı?

cevap

3

Sorun, LLVM, bağlantı sırasında bu çağrıda kullanılan bir tür/sembol bulamıyor. Bu semboller büyük olasılıkla hızlı çerçeveye özgüdür. -v seçeneği ile emcc seçeneğini çalıştırırsanız, daha fazla hata ayıklama bilgisi edinebilirsiniz. Ayrıca, bu bilginin nerede bulunabileceğini --llvm-opts sağlamayı da düşünebilirsiniz.

Hangi komutun gerçekte yürütüldüğünü görmek için xcrun swift -v test.swift numaralı telefonu çalıştırdım.

Swift version 1.0 (swift-600.0.34.4.5) 
Target: x86_64-apple-darwin13.2.0 
/Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -c -primary-file test.swift -enable-objc-attr-requires-objc-module -target x86_64-apple-darwin13.2.0 -module-name test -color-diagnostics -o  /var/folders/69/l9w0zkqn38s1td4_gm5c__km0000gn/T/test-d800d3.o 
/usr/bin/ld /var/folders/69/l9w0zkqn38s1td4_gm5c__km0000gn/T/test-d800d3.o -force_load /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_macosx.a -lSystem -arch x86_64 -L /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx -rpath /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx -macosx_version_min 10.9.0 -no_objc_category_merging -o test 

İstediğiniz şeyi almak için bu bağlama seçeneklerini nasıl emscripten uygulayacağınızı düşünebilirsiniz. Bununla ilgili herhangi bir dokümantasyon olmayacak, çünkü bunun gibi kullanılmasını çabuk düşünmediklerini düşünüyorum.

2

Eğer Emscripten repo dosyalanmış this GitHub issue göre, ne yapmaya çalışıyorsun mümkün değildir:

Ne yazık ki Emscripten dosyaları .dylib bağlamak mümkün değildir. Bunun nedeni .dylibs'in x86/x64 için yerel makine kodunu içermesi ve Emscripten'in "geri dönüp" tekrar LLVM IR formuna ulaşmamasıdır.

- JUJ (GitHub kullanıcı) ile 2014-06-14

İlgili konular