summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRon Olson <tachoknight@gmail.com>2018-12-19 11:39:27 -0600
committerRon Olson <tachoknight@gmail.com>2018-12-19 11:39:27 -0600
commit85376cdb2f0c9f07530e239c8cab62a58cddd599 (patch)
tree700353ba24a74e3db4d32af7df701f7a420468a9
parentc91eeeee58d97dc1c7cecb558f71fb6f70832565 (diff)
parentb892888408b23a34b370b54a50547815eb3ebc6a (diff)
downloadswift-lang-85376cdb2f0c9f07530e239c8cab62a58cddd599.tar.gz
swift-lang-85376cdb2f0c9f07530e239c8cab62a58cddd599.tar.xz
swift-lang-85376cdb2f0c9f07530e239c8cab62a58cddd599.zip
Merge branch 'nightly-builds' of fedorapeople.org:public_git/swift-lang into nightly-builds
-rw-r--r--aarch64-new-master-VarArgs.patch219
-rw-r--r--swift-lang.spec79
2 files changed, 290 insertions, 8 deletions
diff --git a/aarch64-new-master-VarArgs.patch b/aarch64-new-master-VarArgs.patch
new file mode 100644
index 0000000..c07cef0
--- /dev/null
+++ b/aarch64-new-master-VarArgs.patch
@@ -0,0 +1,219 @@
+diff --git a/lib/ClangImporter/ImportDecl.cpp b/lib/ClangImporter/ImportDecl.cpp
+index ff503bf..c601288 100644
+--- swift/lib/ClangImporter/ImportDecl.cpp
++++ swift/lib/ClangImporter/ImportDecl.cpp
+@@ -322,8 +322,11 @@ getSwiftStdlibType(const clang::TypedefNameDecl *D,
+ break;
+
+ case MappedCTypeKind::VaList:
+- if (ClangTypeSize != ClangCtx.getTypeSize(ClangCtx.VoidPtrTy))
+- return std::make_pair(Type(), "");
++ if (ClangTypeSize != ClangCtx.getTypeSize(ClangCtx.VoidPtrTy)) {
++ if (ClangCtx.getTargetInfo().getBuiltinVaListKind() !=
++ clang::TargetInfo::AArch64ABIBuiltinVaList)
++ return std::make_pair(Type(), "");
++ }
+ break;
+
+ case MappedCTypeKind::ObjCBool:
+diff --git a/stdlib/public/core/CTypes.swift b/stdlib/public/core/CTypes.swift
+index b46fa89..bdbe228 100644
+--- swift/stdlib/public/core/CTypes.swift
++++ swift/stdlib/public/core/CTypes.swift
+@@ -219,6 +219,29 @@ extension UInt {
+ }
+
+ /// A wrapper around a C `va_list` pointer.
++#if arch(arm64) && os(Linux)
++@_fixed_layout
++public struct CVaListPointer {
++ @usableFromInline // unsafe-performance
++ internal var value: (__stack: UnsafeMutablePointer<Int>?,
++ __gr_top: UnsafeMutablePointer<Int>?,
++ __vr_top: UnsafeMutablePointer<Int>?,
++ __gr_off: Int32,
++ __vr_off: Int32)
++
++ @inlinable // unsafe-performance
++ public // @testable
++ init(__stack: UnsafeMutablePointer<Int>?,
++ __gr_top: UnsafeMutablePointer<Int>?,
++ __vr_top: UnsafeMutablePointer<Int>?,
++ __gr_off: Int32,
++ __vr_off: Int32) {
++ value = (__stack, __gr_top, __vr_top, __gr_off, __vr_off)
++ }
++}
++
++#else
++
+ @_fixed_layout
+ public struct CVaListPointer {
+ @usableFromInline // unsafe-performance
+@@ -238,6 +261,8 @@ extension CVaListPointer : CustomDebugStringConvertible {
+ }
+ }
+
++#endif
++
+ @inlinable
+ internal func _memcpy(
+ dest destination: UnsafeMutableRawPointer,
+diff --git a/stdlib/public/core/VarArgs.swift b/stdlib/public/core/VarArgs.swift
+index 5d42c58..859d987 100644
+--- swift/stdlib/public/core/VarArgs.swift
++++ swift/stdlib/public/core/VarArgs.swift
+@@ -90,6 +90,23 @@ internal let _registerSaveWords = _countGPRegisters + _countFPRegisters * _fpReg
+ internal let _countGPRegisters = 16
+ @usableFromInline
+ internal let _registerSaveWords = _countGPRegisters
++
++#elseif arch(arm64) && os(Linux)
++// ARM Procedure Call Standard for aarch64. (IHI0055B)
++// The va_list type may refer to any parameter in a parameter list may be in one
++// of three memory locations depending on its type and position in the argument
++// list :
++// 1. GP register save area x0 - x7
++// 2. 128-bit FP/SIMD register save area q0 - q7
++// 3. Stack argument area
++@usableFromInline
++internal let _countGPRegisters = 8
++@usableFromInline
++internal let _countFPRegisters = 8
++@usableFromInline
++internal let _fpRegisterWords = 16 / MemoryLayout<Int>.size
++@usableFromInline
++internal let _registerSaveWords = _countGPRegisters + (_countFPRegisters * _fpRegisterWords)
+ #endif
+
+ #if arch(s390x)
+@@ -498,6 +515,129 @@ final internal class _VaListBuilder {
+ Builtin.addressof(&self.header)))
+ }
+ }
++#elseif arch(arm64) && os(Linux)
++
++@_fixed_layout // FIXME(sil-serialize-all)
++@usableFromInline // FIXME(sil-serialize-all)
++final internal class __VaListBuilder {
++ @usableFromInline // FIXME(sil-serialize-all)
++ internal init() {
++ // Prepare the register save area.
++ allocated = _registerSaveWords
++ storage = allocStorage(wordCount: allocated)
++ // Append stack arguments after register save area.
++ count = allocated
++ }
++
++ @usableFromInline // FIXME(sil-serialize-all)
++ deinit {
++ if let allocatedStorage = storage {
++ deallocStorage(wordCount: allocated, storage: allocatedStorage)
++ }
++ }
++
++ @usableFromInline // FIXME(sil-serialize-all)
++ internal func append(_ arg: CVarArg) {
++ var encoded = arg._cVarArgEncoding
++
++ if arg is _CVarArgPassedAsDouble
++ && fpRegistersUsed < _countFPRegisters {
++ var startIndex = (fpRegistersUsed * _fpRegisterWords)
++ for w in encoded {
++ storage[startIndex] = w
++ startIndex += 1
++ }
++ fpRegistersUsed += 1
++ } else if encoded.count == 1
++ && !(arg is _CVarArgPassedAsDouble)
++ && gpRegistersUsed < _countGPRegisters {
++ var startIndex = ( _fpRegisterWords * _countFPRegisters) + gpRegistersUsed
++ storage[startIndex] = encoded[0]
++ gpRegistersUsed += 1
++ } else {
++ // Arguments in stack slot.
++ appendWords(encoded)
++ }
++ }
++
++ @usableFromInline // FIXME(sil-serialize-all)
++ internal func va_list() -> CVaListPointer {
++ let vr_top = storage + (_fpRegisterWords * _countFPRegisters)
++ let gr_top = vr_top + _countGPRegisters
++
++ return CVaListPointer(__stack: gr_top, __gr_top: gr_top,
++ __vr_top: vr_top, __gr_off: -64, __vr_off: -128)
++ }
++
++ @usableFromInline // FIXME(sil-serialize-all)
++ internal func appendWords(_ words: [Int]) {
++ let newCount = count + words.count
++ if newCount > allocated {
++ let oldAllocated = allocated
++ let oldStorage = storage
++ let oldCount = count
++
++ allocated = max(newCount, allocated * 2)
++ let newStorage = allocStorage(wordCount: allocated)
++ storage = newStorage
++ // Count is updated below.
++ if let allocatedOldStorage = oldStorage {
++ newStorage.moveInitialize(from: allocatedOldStorage, count: oldCount)
++ deallocStorage(wordCount: oldAllocated, storage: allocatedOldStorage)
++ }
++ }
++
++ let allocatedStorage = storage!
++ for word in words {
++ allocatedStorage[count] = word
++ count += 1
++ }
++ }
++
++ @usableFromInline // FIXME(sil-serialize-all)
++ internal func rawSizeAndAlignment(
++ _ wordCount: Int
++ ) -> (Builtin.Word, Builtin.Word) {
++ return ((wordCount * MemoryLayout<Int>.stride)._builtinWordValue,
++ requiredAlignmentInBytes._builtinWordValue)
++ }
++
++ @usableFromInline // FIXME(sil-serialize-all)
++ internal func allocStorage(wordCount: Int) -> UnsafeMutablePointer<Int> {
++ let (rawSize, rawAlignment) = rawSizeAndAlignment(wordCount)
++ let rawStorage = Builtin.allocRaw(rawSize, rawAlignment)
++ return UnsafeMutablePointer<Int>(rawStorage)
++ }
++
++ @usableFromInline // FIXME(sil-serialize-all)
++ internal func deallocStorage(
++ wordCount: Int, storage: UnsafeMutablePointer<Int>
++ ) {
++ let (rawSize, rawAlignment) = rawSizeAndAlignment(wordCount)
++ Builtin.deallocRaw(storage._rawValue, rawSize, rawAlignment)
++ }
++
++ @usableFromInline // FIXME(sil-serialize-all)
++ internal let requiredAlignmentInBytes = MemoryLayout<Double>.alignment
++
++ @usableFromInline // FIXME(sil-serialize-all)
++ internal var count = 0
++
++ @usableFromInline // FIXME(sil-serialize-all)
++ internal var allocated = 0
++
++ @usableFromInline // FIXME(sil-serialize-all)
++ internal var storage: UnsafeMutablePointer<Int>!
++
++ @usableFromInline // FIXME(sil-serialize-all)
++ internal var gpRegistersUsed = 0
++
++ @usableFromInline // FIXME(sil-serialize-all)
++ internal var fpRegistersUsed = 0
++
++ @usableFromInline // FIXME(sil-serialize-all)
++ internal var overflowWordsUsed = 0
++}
+
+ #else
+
diff --git a/swift-lang.spec b/swift-lang.spec
index c11d9d0..d34519d 100644
--- a/swift-lang.spec
+++ b/swift-lang.spec
@@ -1,12 +1,12 @@
%global debug_package %{nil}
-%global swifttag DEVELOPMENT-SNAPSHOT-2018-11-16-a
-%global swiftgithash 201dcba
-%global swiftgitdate 20181116
+%global swifttag 5.0-DEVELOPMENT-SNAPSHOT-2018-12-17-a
+%global swiftgithash 109112f
+%global swiftgitdate 20181217
%global swiftbuild swift-source
%global __provides_exclude ^/usr/lib/swift-lldb/.*\\.so.*
Name: swift-lang
Version: 5.0
-Release: 0.11.%{swiftgitdate}git%{swiftgithash}%{?dist}
+Release: 0.32.%{swiftgitdate}git%{swiftgithash}%{?dist}
Summary: Apple's Swift programming language
License: ASL 2.0
URL: https://swift.org
@@ -26,8 +26,9 @@ Source12: https://github.com/apple/swift-xcode-playground-support/archive/
Source13: swift-lang.conf
Source14: swift-lang-runtime.conf
-Patch0: change-lldb-location.patch
+Patch0: change-lldb-location.patch
Patch1: no-ninja-build.patch
+Patch2: aarch64-new-master-VarArgs.patch
BuildRequires: clang
BuildRequires: cmake
@@ -54,9 +55,11 @@ BuildRequires: ninja-build
Requires: glibc-devel
Requires: clang
+Requires: ncurses-devel
+Requires: ncurses-compat-libs
Requires: %{name}-runtime = %{version}-%{release}
-ExclusiveArch: x86_64
+ExclusiveArch: x86_64 aarch64
%description
@@ -106,6 +109,11 @@ mv swift-xcode-playground-support-swift-%{swifttag} swift-xcode-playground-suppo
# Since we require ninja for building, there's no sense to rebuild it just for Swift
%patch1 -p0
+# Specific patch for VarArg handling for Swift on ARM
+%ifarch aarch64
+%patch2 -p0
+%endif
+
%build
export VERBOSE=1
@@ -151,6 +159,11 @@ ln -fs %{_bindir}/swift %{buildroot}%{_libexecdir}/swift-lldb/swift
mkdir -p %{buildroot}/usr/lib/swift
cp -r %{_builddir}/usr/lib/swift/* %{buildroot}/usr/lib/swift
ln -fs /usr/lib/swift %{buildroot}/usr/lib/swift-lldb/swift
+chmod 0755 %{buildroot}/usr/lib/swift/linux/libswiftDispatch.so
+chmod 0755 %{buildroot}/usr/lib/swift/linux/libFoundation.so
+chmod 0755 %{buildroot}/usr/lib/swift/linux/libXCTest.so
+chmod 0755 %{buildroot}/usr/lib/swift/pm/llbuild/libllbuild.so
+chmod 0755 %{buildroot}/usr/lib/swift/pm/llbuild/libllbuildSwift.so
mkdir -p %{buildroot}/usr/lib/swift_static
cp -r %{_builddir}/usr/lib/swift_static/* %{buildroot}/usr/lib/swift_static
@@ -177,15 +190,18 @@ install -m 0644 %{_builddir}/usr/share/man/man1/swift.1 %{buildroot}%{_mandir}/m
/usr/lib/swift/os/
/usr/lib/swift/pm/
/usr/lib/swift/shims/
+%ifarch aarch64
+/usr/lib/swift/linux/aarch64/
+%else
/usr/lib/swift/linux/x86_64/
+%endif
/usr/lib/swift_static/
%{_libexecdir}/swift-lldb/
%{_sysconfdir}/ld.so.conf.d/swift-lang.conf
%files runtime
-/usr/lib/swift/
-/usr/lib/swift/linux/
+/usr/lib/swift/linux/*
%{_sysconfdir}/ld.so.conf.d/swift-lang-runtime.conf
@@ -194,6 +210,53 @@ install -m 0644 %{_builddir}/usr/share/man/man1/swift.1 %{buildroot}%{_mandir}/m
%changelog
+* Tue Dec 18 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.32.20181217git109112f
+- Updated to swift-5.0-DEVELOPMENT-SNAPSHOT-2018-12-17-a
+* Mon Dec 17 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.31.20181216git109112f
+- Updated to swift-5.0-DEVELOPMENT-SNAPSHOT-2018-12-16-a
+* Sat Dec 15 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.31.20181212gite231ae1
+- First version that supports aarch64
+* Thu Dec 13 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.31.20181212gite231ae1
+- Updated to swift-5.0-DEVELOPMENT-SNAPSHOT-2018-12-12-a
+* Thu Dec 13 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.30.20181212gite231ae1
+- Updated to swift-5.0-DEVELOPMENT-SNAPSHOT-2018-12-12-a
+* Thu Dec 13 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.29.20181212gite231ae1
+- Updated to swift-5.0-DEVELOPMENT-SNAPSHOT-2018-12-12-a
+* Tue Dec 11 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.28.20181210gitf83ec0c
+- Updated to swift-5.0-DEVELOPMENT-SNAPSHOT-2018-12-10-a
+* Mon Dec 10 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.26.20181209gitc14e1a3
+- Updated to swift-5.0-DEVELOPMENT-SNAPSHOT-2018-12-09-a
+* Sun Dec 09 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.25.20181208git3945260
+- Updated to swift-5.0-DEVELOPMENT-SNAPSHOT-2018-12-08-a
+* Sat Dec 08 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.24.20181207git0a73e15
+- Updated to swift-5.0-DEVELOPMENT-SNAPSHOT-2018-12-07-a
+* Fri Dec 07 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.23.20181206git565e767
+- Updated to swift-5.0-DEVELOPMENT-SNAPSHOT-2018-12-06-a
+* Wed Dec 05 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.22.20181204gitb74d54a
+- Updated to swift-5.0-DEVELOPMENT-SNAPSHOT-2018-12-04-a
+* Wed Dec 05 2018 Egor Zhdan <egor.zhdan@gmail.com>
+- Include dependencies to ncurser which are required by SourceKit and
+ included in Apple installation guide
+* Wed Dec 05 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.21.20181204gitfacaad1
+- Updated to swift-DEVELOPMENT-SNAPSHOT-2018-12-04-a
+* Tue Dec 04 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.20.20181203git3376f9f
+- Updated to swift-DEVELOPMENT-SNAPSHOT-2018-12-03-a
+* Mon Dec 03 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.19.20181202gita8a8bdc
+- Updated to swift-DEVELOPMENT-SNAPSHOT-2018-12-02-a
+* Sun Dec 02 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.18.20181201gitb01ee72
+- Updated to swift-DEVELOPMENT-SNAPSHOT-2018-12-01-a
+* Sat Dec 01 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.17.20181130gitd8f12cb
+- Updated to swift-DEVELOPMENT-SNAPSHOT-2018-11-30-a
+* Thu Nov 29 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.16.20181128git806cf57
+- Updated to swift-DEVELOPMENT-SNAPSHOT-2018-11-28-a
+* Tue Nov 27 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.15.20181126gita820992
+- Updated to swift-DEVELOPMENT-SNAPSHOT-2018-11-26-a
+* Mon Nov 26 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.14.20181125gita820992
+- Updated to swift-DEVELOPMENT-SNAPSHOT-2018-11-25-a
+* Sat Nov 24 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.13.20181123gita820992
+- Updated to swift-DEVELOPMENT-SNAPSHOT-2018-11-23-a
+* Fri Nov 23 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.12.20181122gitfb52a2e
+- Updated to swift-DEVELOPMENT-SNAPSHOT-2018-11-22-a
* Mon Nov 19 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.11.20181116git201dcba
- Updated to swift-DEVELOPMENT-SNAPSHOT-2018-11-16-a
* Fri Nov 16 2018 Ron Olson <tachoknight@gmail.com> 5.0-0.10.20181115git739169d