2017-11-24 7 views
0

私は32ビットUbuntu仮想マシンのソースからSwiftをビルドしようとしています。Swiftへの32ビットUbuntuのサポートの追加

私は主にビルド​​スクリプトでは、以下の修正を行ってきた:Float80に関連するいくつかのエラーを与え、STDLIBを構築しようとしたときに (https://pastebin.com/rmWecTu7を参照)

diff --git a/CMakeLists.txt b/CMakeLists.txt 
index 112b5d6..16db3ba 100644 
--- a/CMakeLists.txt 
+++ b/CMakeLists.txt 
@@ -538,12 +538,16 @@ 
    endif() 
endif() 

+message(STATUS ">>> CMAKE_SYSTEM_PROCESSOR: " ${CMAKE_SYSTEM_PROCESSOR}) 
+ 
# If SWIFT_HOST_VARIANT_ARCH not given, try to detect from the CMAKE_SYSTEM_PROCESSOR. 
if(SWIFT_HOST_VARIANT_ARCH) 
    set(SWIFT_HOST_VARIANT_ARCH_default, "${SWIFT_HOST_VARIANT_ARCH}") 
else() 
    if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64") 
    set(SWIFT_HOST_VARIANT_ARCH_default "x86_64") 
+ elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686") 
+ set(SWIFT_HOST_VARIANT_ARCH_default "i686") 
    elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64") 
    set(SWIFT_HOST_VARIANT_ARCH_default "aarch64") 
    elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64") 
@@ -613,10 +617,14 @@ 
    set(SWIFT_HOST_VARIANT "linux" CACHE STRING 
     "Deployment OS for Swift host tools (the compiler) [linux].") 

+ message(STATUS ">>> SWIFT_HOST_VARIANT_ARCH: " ${SWIFT_HOST_VARIANT_ARCH}) 
+ 
    # Calculate the host triple 
    if("${SWIFT_HOST_TRIPLE}" STREQUAL "") 
    if("${SWIFT_HOST_VARIANT_ARCH}" STREQUAL "x86_64") 
     set(SWIFT_HOST_TRIPLE "x86_64-unknown-linux-gnu") 
+ elseif("${SWIFT_HOST_VARIANT_ARCH}" STREQUAL "i686") 
+  set(SWIFT_HOST_TRIPLE "i686-unknown-linux-gnu") 
    elseif("${SWIFT_HOST_VARIANT_ARCH}" STREQUAL "aarch64") 
     set(SWIFT_HOST_TRIPLE "aarch64-unknown-linux-gnu") 
    elseif("${SWIFT_HOST_VARIANT_ARCH}" MATCHES "(powerpc64|powerpc64le)") 
diff --git a/stdlib/public/SwiftShims/LibcShims.h b/stdlib/public/SwiftShims/LibcShims.h 
index e726a62..5fd7826 100644 
--- a/stdlib/public/SwiftShims/LibcShims.h 
+++ b/stdlib/public/SwiftShims/LibcShims.h 
@@ -33,7 +33,9 @@ 

// This declaration is not universally correct. We verify its correctness for 
// the current platform in the runtime code. 
-#if defined(__linux__) && defined (__arm__) 
+#if defined(__linux__) && defined(__arm__) 
+typedef   int __swift_ssize_t; 
+#elif defined(__linux__) && defined(__i386__) 
typedef   int __swift_ssize_t; 
#elif defined(_WIN32) 
#if defined(_M_ARM) || defined(_M_IX86) 
diff --git a/utils/build-script-impl b/utils/build-script-impl 
index 1bfbcc5..b058b22 100755 
--- a/utils/build-script-impl 
+++ b/utils/build-script-impl 
@@ -449,6 +449,9 @@ 
         --$(tolower "${PLAYGROUNDLOGGER_BUILD_TYPE}") 
        ) 
        ;; 
+    linux-i686) 
+     SWIFT_HOST_VARIANT_ARCH="i686" 
+     ;; 
       linux-armv6) 
        SWIFT_HOST_VARIANT_ARCH="armv6" 
        SWIFT_HOST_TRIPLE="armv6-unknown-linux-gnueabihf" 
diff --git a/utils/swift_build_support/swift_build_support/targets.py b/utils/swift_build_support/swift_build_support/targets.py 
index f4b5bb0..690a3d3 100644 
--- a/utils/swift_build_support/swift_build_support/targets.py 
+++ b/utils/swift_build_support/swift_build_support/targets.py 
@@ -112,6 +112,7 @@ 
              is_simulator=True) 

    Linux = Platform("linux", archs=[ 
+ "i686", 
     "x86_64", 
     "armv6", 
     "armv7", 
@@ -174,6 +175,8 @@ 
       return StdlibDeploymentTarget.Linux.powerpc64le 
      elif machine == 's390x': 
       return StdlibDeploymentTarget.Linux.s390x 
+  elif machine == 'i686': 
+  return StdlibDeploymentTarget.Linux.i686 

     elif system == 'Darwin': 
      if machine == 'x86_64': 

ビルドは失敗します(https://pastebin.com/ue8MRquUを参照してください)

swift: /home/gigi/local/Source/apple/swift/lib/IRGen/StructLayout.cpp:357: void swift::irgen::StructLayoutBuilder::setAsBodyOfStruct(llvm::StructType *) const: Assertion `(!isFixedLayout() || IGM.DataLayout.getStructLayout(type)->getSizeInBytes() == CurSize.getValue()) && "LLVM size of fixed struct type does not match StructLayout size"' failed. 
/home/gigi/local/Source/apple/build/Ninja-ReleaseAssert/swift-linux-i686/bin/swift[0xc335ea0] 
Stack dump: 
0. Program arguments: /home/gigi/local/Source/apple/build/Ninja-ReleaseAssert/swift-linux-i686/bin/swift -frontend -c -filelist /tmp/sources-628097 -disable-objc-attr-requires-foundation-module -target i686-unknown-linux-gnu -disable-objc-interop -sdk/-I /home/gigi/local/Source/apple/build/Ninja-ReleaseAssert/swift-linux-i686/./lib/swift/linux/i686 -warn-swift3-objc-inference-complete -module-cache-path /home/gigi/local/Source/apple/build/Ninja-ReleaseAssert/swift-linux-i686/./module-cache -module-link-name swiftCore -nostdimport -parse-stdlib -resource-dir /home/gigi/local/Source/apple/build/Ninja-ReleaseAssert/swift-linux-i686/./lib/swift -swift-version 3 -O -D INTERNAL_CHECKS_ENABLED -group-info-path /home/gigi/local/Source/apple/swift/stdlib/public/core/GroupInfo.json -enable-sil-ownership -Xllvm -sil-inline-generics -Xllvm -sil-partial-specialization -Xcc -D__SWIFT_CURRENT_DYLIB=swiftCore -parse-as-library -module-name Swift -o /home/gigi/local/Source/apple/build/Ninja-ReleaseAssert/swift-linux-i686/stdlib/public/core/linux/i686/Swift.o 
1. While running pass #147 SILFunctionTransform "SIL alloc_stack Hoisting" on SILFunction "@_T0s7Float80V15_representationAB01_A14RepresentationVvg". 
for getter for _representation at /home/gigi/local/Source/apple/swift/stdlib/public/core/FloatingPointTypes.swift.gyb:342:16 
2. While converting type 'Float80' (declared at [/home/gigi/local/Source/apple/swift/stdlib/public/core/FloatingPointTypes.swift.gyb:74:8 - line:3662:1] RangeText="struct Float80 { 
    public // @testable 
    var _value: Builtin.FPIEEE80 

    /// Creates a value initialized to zero. 
    @_inlineable // FIXME(sil-serialize-all) 
    @_transparent 
    public init() { 
    let zero: Int64 = 0 
    self._value = Builtin.sitofp_Int64_FPIEEE80(zero._value) 
    } 

    @_inlineable // FIXME(sil-serialize-all) 
    @_transparent 
    public // @testable 
    init(_bits v: Builtin.FPIEEE80) { 
    self._value = v 
    } 
}") 
<unknown>:0: error: unable to execute command: Aborted 
<unknown>:0: error: compile command failed due to signal 6 (use -v to see invocation) 
ninja: build stopped: subcommand failed. 
/home/gigi/local/Source/apple/swift/utils/build-script: fatal error: command terminated with a non-zero exit status 1, aborting 
[email protected]:~$ ] 

~/local/Source/apple/swift/utils/build-script --releaseを使用して構築します。私は、エラーを推測している

は、この変更に関係しています:

#elif defined(__linux__) && defined(__i386__) 
typedef   int __swift_ssize_t; 
+0

https://lists.swift.org/mailman/listinfo/swift-devに聞くのがよいかもしれません。 –

答えて

0

公式スウィフトプロジェクトはまだ32ビットアーキテクチャをサポートしていません。公式のチケットがあります:Port Swift to Linux x86 32-bit
このチケットを自分で追加したい場合は、このチケットのサポートを受ける機会が増えます。

関連する問題