/ / मैं किसी भी गतिशील पुस्तकालयों के बिना स्विफ्ट को कैसे संकलित करूं? - स्विफ्ट, xcode6, llvm, emscripten, asm.js

मैं किसी भी गतिशील पुस्तकालयों के बिना स्विफ्ट को कैसे संकलित करूं? - स्विफ्ट, xcode6, llvm, emscripten, asm.js

यह देखने के लिए कि क्या मैं उपयोग कर सकता हूं, एक "हैलो, वर्ल्ड" स्टाइल प्रोग्राम बनाने की कोशिश कर रहा हूं तीव्र वेब पर इसे चलाकर emscripten लेना asm.js उत्पादन।

समस्या यह है कि जब मैं इसे संकलित करता हूं, तो इसकीबिटकोड डायनेमिक लाइब्रेरी को लिंक करने की कोशिश करता है। यह "ऐसा नहीं लगता है कि इसे ऐसा करने की आवश्यकता होनी चाहिए, या ऐसा लगता है कि कोई ऐसा व्यक्ति है जो समझता है कि ये सभी टुकड़े एक साथ कैसे फिट होते हैं, मुझे बता सकता है कि इसे कैसे फ़ाइल प्रदान करने की आवश्यकता है (मैं कुछ कार्यों को लागू करने के लिए तैयार हूं जो इस पर निर्भर करता है" जावास्क्रिप्ट में, यदि आवश्यक हो)।

मेरे पास पर्यावरण की अधिक व्यापक व्याख्या है यहाँ, लेकिन यह मूल बातें है:

फ़ाइल:

$ cat f.swift
var message = 1

इसे बिटकोड में संकलित करें:

$ xcrun swiftc -emit-bc f.swift -o f.bc

बिटकोड को asm.js में संकलित करने में विफल:

$ emcc f.bc
WARNING: Linking two modules of different data layouts: "/Users/josh/.emscripten_cache/libc.bc" is "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-p:32:32:32-v128:32:128-n32-S128" whereas "/Users/josh/deleteme/swift-play/f.bc" is "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
WARNING: Linking two modules of different target triples: /Users/josh/.emscripten_cache/libc.bc" is "asmjs-unknown-emscripten" whereas "/Users/josh/deleteme/swift-play/f.bc" is "x86_64-apple-darwin13.2.0"
Unknown specifier in datalayout string
UNREACHABLE executed at /Users/clb/emscripten-fastcomp/lib/IR/DataLayout.cpp:300!
0  opt                      0x00000001086d04ae llvm::sys::PrintStackTrace(__sFILE*) + 46
1  opt                      0x00000001086d07bb PrintStackTraceSignalHandler(void*) + 27
2  opt                      0x00000001086d0b4c SignalHandler(int) + 412
3  libsystem_platform.dylib 0x00007fff8b0e35aa _sigtramp + 26
4  libsystem_platform.dylib 0x00007fff6492d380 _sigtramp + 3649347056
5  opt                      0x00000001086d07eb raise + 27
6  opt                      0x00000001086d08a2 abort + 18
7  opt                      0x000000010865a7a6 llvm::llvm_unreachable_internal(char const*, char const*, unsigned int) + 198
8  opt                      0x0000000108416b74 llvm::DataLayout::parseSpecifier(llvm::StringRef) + 2804
9  opt                      0x0000000108415c57 llvm::DataLayout::init(llvm::StringRef) + 471
10 opt                      0x000000010749b47e llvm::DataLayout::DataLayout(llvm::StringRef) + 158
11 opt                      0x0000000107482ba5 llvm::DataLayout::DataLayout(llvm::StringRef) + 37
12 opt                      0x000000010747943c main + 3756
13 libdyld.dylib            0x00007fff8a2865fd start + 1
Stack dump:
0.  Program arguments: /Users/josh/code/emsdk_portable/clang/e1.25.0_64bit/opt /var/folders/7g/mbft22555w3_2nqs_h1kbglw0000gn/T/tmp93OFuV/a.out.bc -strip-debug -internalize -internalize-public-api-list=main,malloc,free -globaldce -pnacl-abi-simplify-preopt -pnacl-abi-simplify-postopt -enable-emscripten-cxx-exceptions -o /var/folders/7g/mbft22555w3_2nqs_h1kbglw0000gn/T/tmp93OFuV/a.out.bc.opt.bc
Traceback (most recent call last):
File "/Users/josh/code/emsdk_portable/emscripten/1.25.0/emcc", line 1224, in <module>
shared.Building.llvm_opt(final, link_opts)
File "/Users/josh/code/emsdk_portable/emscripten/1.25.0/tools/shared.py", line 1357, in llvm_opt
assert os.path.exists(target), "Failed to run llvm optimizations: " + output
AssertionError: Failed to run llvm optimizations:

उत्तर:

उत्तर № 1 के लिए 1

लगता है कि आप "यहाँ भाग्य से बाहर हैं IR संकलक उत्पन्न कर रहा है मानक नहीं है - इसमें कुछ निजी Apple परिवर्तन शामिल हैं जो अपस्ट्रीम नहीं थे (विशेष रूप से, डेटा लेआउट स्ट्रिंग कम से कम गैर-मानक है)।

और नहीं, यह किसी भी गतिशील पुस्तकालयों को जोड़ने की कोशिश नहीं कर रहा है। यह (एलएलवीएम आईआर स्तर पर) सभी आवश्यक सामानों को, विशेष रूप से, सी मानक पुस्तकालय से जोड़ने की कोशिश करता है।