diff --git a/platforms/Linux/RPM/Amazonlinux/2023/Dockerfile-5.8 b/platforms/Linux/RPM/Amazonlinux/2023/Dockerfile-5.8 new file mode 100644 index 00000000..cc673429 --- /dev/null +++ b/platforms/Linux/RPM/Amazonlinux/2023/Dockerfile-5.8 @@ -0,0 +1,28 @@ +# This source file is part of the Swift.org open source project +# +# Copyright (c) 2021 Apple Inc. and the Swift project authors +# Licensed under Apache License v2.0 with Runtime Library Exception +# +# See http://swift.org/LICENSE.txt for license information +# See http://swift.org/CONTRIBUTORS.txt for Swift project authors + +FROM amazonlinux:2023 +LABEL PURPOSE="This image is configured to build Swift for the version of Amazon Linux listed above" + +# RPM and yum development tools +RUN dnf install -y rpmdevtools yum-utils createrepo diffutils + +# Compile ld.gold from the source and install it. +ADD install_ld.gold.sh /tmp/install_ld.gold.sh +RUN chmod u+x /tmp/install_ld.gold.sh +RUN cd tmp && ./install_ld.gold.sh + +# Optimization: Install Swift build requirements listed in the spec file +ADD swiftlang.spec /tmp/swiftlang.spec + +# rewrite a minimal spec with the build requirements +RUN echo -e "Name: optimization\nVersion: optimization\nRelease: optimization\nSummary: optimization\nLicense: optimization\n" > /tmp/optimization.spec +RUN cat /tmp/swiftlang.spec | grep BuildRequires >> /tmp/optimization.spec +RUN echo -e "\n%description" >> /tmp/optimization.spec +# install the build requirements +RUN cd /tmp && yum-builddep -y optimization.spec diff --git a/platforms/Linux/RPM/Amazonlinux/2023/Dockerfile-5.9 b/platforms/Linux/RPM/Amazonlinux/2023/Dockerfile-5.9 new file mode 100644 index 00000000..14cc278c --- /dev/null +++ b/platforms/Linux/RPM/Amazonlinux/2023/Dockerfile-5.9 @@ -0,0 +1,34 @@ +# This source file is part of the Swift.org open source project +# +# Copyright (c) 2021 Apple Inc. and the Swift project authors +# Licensed under Apache License v2.0 with Runtime Library Exception +# +# See http://swift.org/LICENSE.txt for license information +# See http://swift.org/CONTRIBUTORS.txt for Swift project authors + +FROM amazonlinux:2023 +LABEL PURPOSE="This image is configured to build Swift for the version of Amazon Linux listed above" + +# RPM and yum development tools +RUN dnf install -y rpmdevtools yum-utils createrepo diffutils + +# Compile ld.gold from the source and install it. +ADD install_ld.gold.sh /tmp/install_ld.gold.sh +RUN chmod u+x /tmp/install_ld.gold.sh +RUN cd tmp && ./install_ld.gold.sh + +# Add Swift 5.8 (be sure to have the Swift tar.gz file) +# ADD a tar.gz files automatically decompresses and expands it +# TODO: replace with a download from Swift.org when it will be available +ADD swift-5.8-amazonlinux2023.tar.gz / +RUN swift --version + +# Optimization: Install Swift build requirements listed in the spec file +ADD swiftlang.spec /tmp/swiftlang.spec + +# rewrite a minimal spec with the build requirements +RUN echo -e "Name: optimization\nVersion: optimization\nRelease: optimization\nSummary: optimization\nLicense: optimization\n" > /tmp/optimization.spec +RUN cat /tmp/swiftlang.spec | grep BuildRequires >> /tmp/optimization.spec +RUN echo -e "\n%description" >> /tmp/optimization.spec +# install the build requirements +RUN cd /tmp && yum-builddep -y optimization.spec diff --git a/platforms/Linux/RPM/Amazonlinux/2023/README.md b/platforms/Linux/RPM/Amazonlinux/2023/README.md new file mode 100644 index 00000000..6ad944d7 --- /dev/null +++ b/platforms/Linux/RPM/Amazonlinux/2023/README.md @@ -0,0 +1,59 @@ +# Building Swift on Amazon Linux 2023 + +## Install docker + +```sh +sudo dnf install docker -y +sudo usermod -a -G docker ec2-user +sudo newgrp docker +sudo systemctl enable docker.service +sudo systemctl start docker.service +``` + +## Install docker compose v2 + +```sh +DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} +mkdir -p $DOCKER_CONFIG/cli-plugins +curl -SL https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose +chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose +``` + +## Select the swift version to build + +Create a symlink `swiftlang.spec -> swiftlang-VERSION.spec` + +For example, to build Swift 5.9 : + +```sh +SWIFT_VERSION=5.9 +rm swiftlang.spec +ln -s swiftlang-${SWIFT)_VERSION}.spec swiftlang.spec +``` + +## Building with docker-compose + +### run the build end-to-end + +```sh +docker compose -f docker-compose-${SWIFT_VERSION}.yaml run build +``` + +### enter the docker env in shell mode + +```sh +docker compose -f docker-compose-${SWIFT_VERSION}.yaml run shell +``` + +then you can run `./build_rpm.sh` to run the build manually inside the docker + +### rebuild the base image + +```sh +docker compose -f docker-compose-${SWIFT_VERSION}.yaml build --pull +``` + +note this still uses the docker cache, so will rebuild only if the version of the underlying base image changed upstream + +### Open Issues / TODO +* the list of build requirements (BuildRequires) and especially requirements (Requires) should come from an external file, likely one per swift release version (which we can use it to also drive documentation) diff --git a/platforms/Linux/RPM/Amazonlinux/2023/build_rpm.sh b/platforms/Linux/RPM/Amazonlinux/2023/build_rpm.sh new file mode 120000 index 00000000..e83f0881 --- /dev/null +++ b/platforms/Linux/RPM/Amazonlinux/2023/build_rpm.sh @@ -0,0 +1 @@ +../../Shared/scripts/build_rpm.sh \ No newline at end of file diff --git a/platforms/Linux/RPM/Amazonlinux/2023/createrepo_rpm.sh b/platforms/Linux/RPM/Amazonlinux/2023/createrepo_rpm.sh new file mode 120000 index 00000000..11c58fd2 --- /dev/null +++ b/platforms/Linux/RPM/Amazonlinux/2023/createrepo_rpm.sh @@ -0,0 +1 @@ +../../Shared/scripts/createrepo_rpm.sh \ No newline at end of file diff --git a/platforms/Linux/RPM/Amazonlinux/2023/description.inc b/platforms/Linux/RPM/Amazonlinux/2023/description.inc new file mode 120000 index 00000000..a880ccf4 --- /dev/null +++ b/platforms/Linux/RPM/Amazonlinux/2023/description.inc @@ -0,0 +1 @@ +../../Shared/metadata/description.inc \ No newline at end of file diff --git a/platforms/Linux/RPM/Amazonlinux/2023/docker-compose-5.8.yaml b/platforms/Linux/RPM/Amazonlinux/2023/docker-compose-5.8.yaml new file mode 100644 index 00000000..8ff1f232 --- /dev/null +++ b/platforms/Linux/RPM/Amazonlinux/2023/docker-compose-5.8.yaml @@ -0,0 +1,47 @@ +# This source file is part of the Swift.org open source project +# +# Copyright (c) 2021 Apple Inc. and the Swift project authors +# Licensed under Apache License v2.0 with Runtime Library Exception +# +# See http://swift.org/LICENSE.txt for license information +# See http://swift.org/CONTRIBUTORS.txt for Swift project authors + +# this setup is designed to build the RPM with docker +# usage: +# docker-compose -f platforms/Linux/amazonlinux/2/docker-compose.yaml build +# to shell into the container for debugging purposes: +# docker-compose -f platforms/Linux/amazonlinux/2/docker-compose.yaml run build + +version: "3" + +services: + + docker-setup: + image: amazonlinux-2023-rpm-builder-5.8 + build: + context: . + dockerfile: Dockerfile-5.8 + + common: &common + image: amazonlinux-2023-rpm-builder-5.8 + depends_on: [docker-setup] + volumes: + - ../../Amazonlinux/2023:/code/Amazonlinux/2023:z + - ../../Shared:/code/Shared:z + - ./.output:/output:z + working_dir: /code/Amazonlinux/2023 + cap_drop: + - CAP_NET_RAW + - CAP_NET_BIND_SERVICE + + build: + <<: *common + command: /bin/bash -cl "./build_rpm.sh" + + createrepo: + <<: *common + command: /bin/bash -cl "./createrepo_rpm.sh" + + shell: + <<: *common + entrypoint: /bin/bash -l diff --git a/platforms/Linux/RPM/Amazonlinux/2023/docker-compose-5.9.yaml b/platforms/Linux/RPM/Amazonlinux/2023/docker-compose-5.9.yaml new file mode 100644 index 00000000..ea626343 --- /dev/null +++ b/platforms/Linux/RPM/Amazonlinux/2023/docker-compose-5.9.yaml @@ -0,0 +1,47 @@ +# This source file is part of the Swift.org open source project +# +# Copyright (c) 2021 Apple Inc. and the Swift project authors +# Licensed under Apache License v2.0 with Runtime Library Exception +# +# See http://swift.org/LICENSE.txt for license information +# See http://swift.org/CONTRIBUTORS.txt for Swift project authors + +# this setup is designed to build the RPM with docker +# usage: +# docker-compose -f platforms/Linux/amazonlinux/2/docker-compose.yaml build +# to shell into the container for debugging purposes: +# docker-compose -f platforms/Linux/amazonlinux/2/docker-compose.yaml run build + +version: "3" + +services: + + docker-setup: + image: amazonlinux-2023-rpm-builder-5.9 + build: + context: . + dockerfile: Dockerfile-5.9 + + common: &common + image: amazonlinux-2023-rpm-builder-5.9 + depends_on: [docker-setup] + volumes: + - ../../Amazonlinux/2023:/code/Amazonlinux/2023:z + - ../../Shared:/code/Shared:z + - ./.output:/output:z + working_dir: /code/Amazonlinux/2023 + cap_drop: + - CAP_NET_RAW + - CAP_NET_BIND_SERVICE + + build: + <<: *common + command: /bin/bash -cl "./build_rpm.sh" + + createrepo: + <<: *common + command: /bin/bash -cl "./createrepo_rpm.sh" + + shell: + <<: *common + entrypoint: /bin/bash -l diff --git a/platforms/Linux/RPM/Amazonlinux/2023/global-5.8.inc b/platforms/Linux/RPM/Amazonlinux/2023/global-5.8.inc new file mode 100644 index 00000000..1128b4c6 --- /dev/null +++ b/platforms/Linux/RPM/Amazonlinux/2023/global-5.8.inc @@ -0,0 +1,25 @@ +# versions + +%global package_version 5.8 +%global swift_version 5.8-RELEASE + +%global cmake_version 3.19.6 +%global icu_version 65-1 +%global ninja_version 1.10.2 +%global swift_argument_parser_version 1.0.3 +%global swift_atomics_version 1.0.2 +%global swift_collections_version 1.0.1 +%global swift_crypto_version 2.2.3 +%global swift_nio_ssl_version 2.15.0 +%global swift_nio_version 2.31.2 +%global swift_numerics_version 1.0.1 +%global swift_system_version 1.1.1 +%global yams_version 5.0.1 + +# locations + +%global swift_source_location swift-source + +# other + +%global debug_package %{nil} diff --git a/platforms/Linux/RPM/Amazonlinux/2023/global-5.9.inc b/platforms/Linux/RPM/Amazonlinux/2023/global-5.9.inc new file mode 100644 index 00000000..384e6f90 --- /dev/null +++ b/platforms/Linux/RPM/Amazonlinux/2023/global-5.9.inc @@ -0,0 +1,27 @@ +# versions + +%global package_version 5.9.1 +%global swift_version 5.9.1-RELEASE + +%global cmake_version 3.19.6 +%global icu_version 65-1 +%global ninja_version 1.10.2 +%global swift_argument_parser_version 1.2.2 +%global swift_atomics_version 1.0.2 +%global swift_collections_version 1.0.1 +%global swift_crypto_version 2.5.0 +%global swift_nio_ssl_version 2.15.0 +%global swift_nio_version 2.31.2 +%global swift_numerics_version 1.0.1 +%global swift_system_version 1.1.1 +%global swift_asn1_version 0.7.0 +%global swift_certificates_version 0.4.1 +%global yams_version 5.0.1 + +# locations + +%global swift_source_location swift-source + +# other + +%global debug_package %{nil} diff --git a/platforms/Linux/RPM/Amazonlinux/2023/global.inc b/platforms/Linux/RPM/Amazonlinux/2023/global.inc new file mode 120000 index 00000000..bee5c7e7 --- /dev/null +++ b/platforms/Linux/RPM/Amazonlinux/2023/global.inc @@ -0,0 +1 @@ +../../Shared/metadata/global.inc \ No newline at end of file diff --git a/platforms/Linux/RPM/Amazonlinux/2023/install_ld.gold.sh b/platforms/Linux/RPM/Amazonlinux/2023/install_ld.gold.sh new file mode 100644 index 00000000..50fdfa92 --- /dev/null +++ b/platforms/Linux/RPM/Amazonlinux/2023/install_ld.gold.sh @@ -0,0 +1,26 @@ +# This source file is part of the Swift.org open source project +# +# Copyright (c) 2021 Apple Inc. and the Swift project authors +# Licensed under Apache License v2.0 with Runtime Library Exception +# +# See http://swift.org/LICENSE.txt for license information +# See http://swift.org/CONTRIBUTORS.txt for Swift project authors + +#!/usr/bin/env bash + +dnf install gmp-devel mpfr-devel texinfo bison git gcc-c++ -y + +mkdir ld.gold && cd ld.gold +git clone --depth 1 git://sourceware.org/git/binutils-gdb.git binutils + +mkdir build && cd build +../binutils/configure --enable-gold --enable-plugins --disable-werror +make all-gold +cd gold +make all-am +cd .. + +cp gold/ld-new /usr/bin/ld.gold +cd ../.. + +/usr/bin/ld.gold -v \ No newline at end of file diff --git a/platforms/Linux/RPM/Amazonlinux/2023/metadata.inc b/platforms/Linux/RPM/Amazonlinux/2023/metadata.inc new file mode 120000 index 00000000..e0ad3078 --- /dev/null +++ b/platforms/Linux/RPM/Amazonlinux/2023/metadata.inc @@ -0,0 +1 @@ +../../Shared/metadata/metadata.inc \ No newline at end of file diff --git a/platforms/Linux/RPM/Amazonlinux/2023/patches/hwasan_symbolize.patch b/platforms/Linux/RPM/Amazonlinux/2023/patches/hwasan_symbolize.patch new file mode 100644 index 00000000..3f323825 --- /dev/null +++ b/platforms/Linux/RPM/Amazonlinux/2023/patches/hwasan_symbolize.patch @@ -0,0 +1,10 @@ +diff --git a/llvm-project/compiler-rt/lib/hwasan/scripts/hwasan_symbolize b/llvm-project/compiler-rt/lib/hwasan/scripts/hwasan_symbolize +index dd5f859561e1..21d18998cf31 100755 +--- a/llvm-project/compiler-rt/lib/hwasan/scripts/hwasan_symbolize ++++ b/llvm-project/compiler-rt/lib/hwasan/scripts/hwasan_symbolize +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + #===- lib/hwasan/scripts/hwasan_symbolize ----------------------------------===# + # + # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. diff --git a/platforms/Linux/RPM/Amazonlinux/2023/patches/llvm-graviton.patch b/platforms/Linux/RPM/Amazonlinux/2023/patches/llvm-graviton.patch new file mode 100644 index 00000000..ae293ea1 --- /dev/null +++ b/platforms/Linux/RPM/Amazonlinux/2023/patches/llvm-graviton.patch @@ -0,0 +1,13 @@ +diff --git a/llvm-project/clang/lib/Driver/ToolChains/Gnu.cpp b/llvm-project/clang/lib/Driver/ToolChains/Gnu.cpp +index 750b3c386753..fbf312908476 100644 +--- a/llvm-project/clang/lib/Driver/ToolChains/Gnu.cpp ++++ b/llvm-project/clang/lib/Driver/ToolChains/Gnu.cpp +@@ -2143,7 +2143,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes( + static const char *const AArch64LibDirs[] = {"/lib64", "/lib"}; + static const char *const AArch64Triples[] = { + "aarch64-none-linux-gnu", "aarch64-linux-gnu", "aarch64-redhat-linux", +- "aarch64-suse-linux"}; ++ "aarch64-suse-linux", "aarch64-amazon-linux"}; + static const char *const AArch64beLibDirs[] = {"/lib"}; + static const char *const AArch64beTriples[] = {"aarch64_be-none-linux-gnu", + "aarch64_be-linux-gnu"}; diff --git a/platforms/Linux/RPM/Amazonlinux/2023/swiftlang-5.8.spec b/platforms/Linux/RPM/Amazonlinux/2023/swiftlang-5.8.spec new file mode 100644 index 00000000..710ff550 --- /dev/null +++ b/platforms/Linux/RPM/Amazonlinux/2023/swiftlang-5.8.spec @@ -0,0 +1,173 @@ +%include global-5.8.inc +%include metadata.inc + +Source0: https://github.com/apple/swift/archive/swift-%{swift_version}.tar.gz#/swift.tar.gz +Source1: https://github.com/apple/swift-corelibs-libdispatch/archive/swift-%{swift_version}.tar.gz#/corelibs-libdispatch.tar.gz +Source2: https://github.com/apple/swift-corelibs-foundation/archive/swift-%{swift_version}.tar.gz#/corelibs-foundation.tar.gz +Source3: https://github.com/apple/swift-integration-tests/archive/swift-%{swift_version}.tar.gz#/swift-integration-tests.tar.gz +Source4: https://github.com/apple/swift-corelibs-xctest/archive/swift-%{swift_version}.tar.gz#/corelibs-xctest.tar.gz +Source5: https://github.com/apple/swift-package-manager/archive/swift-%{swift_version}.tar.gz#/package-manager.tar.gz +Source6: https://github.com/apple/swift-llbuild/archive/swift-%{swift_version}.tar.gz#/llbuild.tar.gz +Source7: https://github.com/apple/swift-cmark/archive/swift-%{swift_version}.tar.gz#/cmark.tar.gz +Source8: https://github.com/apple/swift-xcode-playground-support/archive/swift-%{swift_version}.tar.gz#/swift-xcode-playground-support.tar.gz +Source9: https://github.com/apple/sourcekit-lsp/archive/swift-%{swift_version}.tar.gz#/sourcekit-lsp.tar.gz +Source10: https://github.com/apple/indexstore-db/archive/swift-%{swift_version}.tar.gz#/indexstore-db.tar.gz +Source11: https://github.com/apple/llvm-project/archive/swift-%{swift_version}.tar.gz#/llvm-project.tar.gz +Source12: https://github.com/apple/swift-tools-support-core/archive/swift-%{swift_version}.tar.gz#/swift-tools-support-core.tar.gz +Source13: https://github.com/apple/swift-argument-parser/archive/%{swift_argument_parser_version}.tar.gz#/swift-argument-parser.tar.gz +Source14: https://github.com/apple/swift-driver/archive/swift-%{swift_version}.tar.gz#/swift-driver.tar.gz +Source15: https://github.com/unicode-org/icu/archive/release-%{icu_version}.tar.gz#/icu.tar.gz +Source16: https://github.com/apple/swift-syntax/archive/swift-%{swift_version}.zip#/swift-syntax.tar.gz +Source17: https://github.com/jpsim/Yams/archive/%{yams_version}.tar.gz#/yams.tar.gz +Source18: https://github.com/apple/swift-crypto/archive/refs/tags/%{swift_crypto_version}.tar.gz#/swift-crypto.tar.gz +Source19: https://github.com/ninja-build/ninja/archive/refs/tags/v%{ninja_version}.tar.gz#/ninja.tar.gz +Source20: https://github.com/KitWare/CMake/archive/refs/tags/v%{cmake_version}.tar.gz#/cmake.tar.gz +Source21: https://github.com/apple/swift-atomics/archive/%{swift_atomics_version}.tar.gz#/swift-atomics.tar.gz +Source23: https://github.com/apple/swift-docc/archive/swift-%{swift_version}.tar.gz#/swift-docc.tar.gz +Source24: https://github.com/apple/swift-docc-render-artifact/archive/swift-%{swift_version}.tar.gz#/swift-docc-render-artifact.tar.gz +Source25: https://github.com/apple/swift-docc-symbolkit/archive/swift-%{swift_version}.tar.gz#/swift-docc-symbolkit.tar.gz +Source26: https://github.com/apple/swift-collections/archive/%{swift_collections_version}.tar.gz#/swift-collections.tar.gz +Source27: https://github.com/apple/swift-numerics/archive/%{swift_numerics_version}.tar.gz#/swift-numerics.tar.gz +Source28: https://github.com/apple/swift-system/archive/%{swift_system_version}.tar.gz#/swift-system.tar.gz +Source29: https://github.com/apple/swift-nio/archive/%{swift_nio_version}.tar.gz#/swift-nio.tar.gz +Source30: https://github.com/apple/swift-nio-ssl/archive/%{swift_nio_ssl_version}.tar.gz#/swift-nio-ssl.tar.gz +Source31: https://github.com/apple/swift-format/archive/swift-%{swift_version}.tar.gz#/swift-format.tar.gz +Source32: https://github.com/apple/swift-lmdb/archive/swift-%{swift_version}.tar.gz#/swift-lmdb.tar.gz +Source33: https://github.com/apple/swift-markdown/archive/swift-%{swift_version}.tar.gz#/swift-markdown.tar.gz +Source34: https://github.com/apple/swift-experimental-string-processing/archive/swift-%{swift_version}.tar.gz#/swift-experimental-string-processing.tar.gz + +Patch0: patches/hwasan_symbolize.patch +Patch1: patches/llvm-graviton.patch + +BuildRequires: clang +BuildRequires: curl-devel +BuildRequires: gcc-c++ +BuildRequires: git +BuildRequires: glibc-static +BuildRequires: libbsd-devel +BuildRequires: libedit-devel +BuildRequires: libicu-devel +BuildRequires: libuuid-devel +BuildRequires: libxml2-devel +BuildRequires: make +BuildRequires: ncurses-devel +BuildRequires: python-pexpect +BuildRequires: pkgconfig +BuildRequires: procps-ng +BuildRequires: python +BuildRequires: python-devel +BuildRequires: python3-pkgconfig +BuildRequires: python-six +BuildRequires: python3-devel +BuildRequires: rsync +BuildRequires: sqlite-devel +BuildRequires: swig +BuildRequires: tzdata +BuildRequires: uuid-devel +BuildRequires: wget +BuildRequires: which + +Requires: binutils +Requires: gcc +Requires: git +Requires: glibc-static +Requires: gzip +Requires: libbsd +Requires: libcurl-devel +Requires: libedit +Requires: libicu +Requires: libstdc++-static +Requires: libuuid +Requires: libxml2-devel +Requires: sqlite +Requires: tar +Requires: tzdata +Requires: unzip +Requires: zip + +ExclusiveArch: x86_64 aarch64 + +%description +%include description.inc + +%prep +%setup -q -c -n %{swift_source_location} -a 0 -a 1 -a 2 -a 3 -a 4 -a 5 -a 6 -a 7 -a 8 -a 9 -a 10 -a 11 -a 12 -a 13 -a 14 -a 15 -a 16 -a 17 -a 18 -a 19 -a 20 -a 21 -a 23 -a 24 -a 25 -a 26 -a 27 -a 28 -a 29 -a 30 -a 31 -a 32 -a 33 -a 34 + +# The Swift build script requires directories to be named +# in a specific way so renaming the source directories is +# necessary +mv CMake-%{cmake_version} cmake +mv icu-release-%{icu_version} icu +mv indexstore-db-swift-%{swift_version} indexstore-db +mv llvm-project-swift-%{swift_version} llvm-project +mv ninja-%{ninja_version} ninja +mv sourcekit-lsp-swift-%{swift_version} sourcekit-lsp +mv swift-argument-parser-%{swift_argument_parser_version} swift-argument-parser +mv swift-atomics-%{swift_atomics_version} swift-atomics +mv swift-cmark-swift-%{swift_version} cmark +mv swift-collections-%{swift_collections_version} swift-collections +mv swift-corelibs-foundation-swift-%{swift_version} swift-corelibs-foundation +mv swift-corelibs-libdispatch-swift-%{swift_version} swift-corelibs-libdispatch +mv swift-corelibs-xctest-swift-%{swift_version} swift-corelibs-xctest +mv swift-crypto-%{swift_crypto_version} swift-crypto +mv swift-docc-render-artifact-swift-%{swift_version} swift-docc-render-artifact +mv swift-docc-swift-%{swift_version} swift-docc +mv swift-docc-symbolkit-swift-%{swift_version} swift-docc-symbolkit +mv swift-driver-swift-%{swift_version} swift-driver +mv swift-format-swift-%{swift_version} swift-format +mv swift-integration-tests-swift-%{swift_version} swift-integration-tests +mv swift-llbuild-swift-%{swift_version} llbuild +mv swift-lmdb-swift-%{swift_version} swift-lmdb +mv swift-markdown-swift-%{swift_version} swift-markdown +mv swift-nio-%{swift_nio_version} swift-nio +mv swift-nio-ssl-%{swift_nio_ssl_version} swift-nio-ssl +mv swift-numerics-%{swift_numerics_version} swift-numerics +mv swift-package-manager-swift-%{swift_version} swiftpm +mv swift-swift-%{swift_version} swift +mv swift-syntax-swift-%{swift_version} swift-syntax +mv swift-system-%{swift_system_version} swift-system +mv swift-tools-support-core-swift-%{swift_version} swift-tools-support-core +mv swift-xcode-playground-support-swift-%{swift_version} swift-xcode-playground-support +mv Yams-%{yams_version} yams +mv swift-experimental-string-processing-swift-%{swift_version} swift-experimental-string-processing + +# Adjust python version hwasan_symbolize +%patch0 -p1 + +# Add Amazon Linux aarch64 triplet +%patch1 -p1 + +%build +export VERBOSE=1 +# the flags positioned by rpmbuild conflict with the ones set by build-script. It causes this error: +# /BUILD/swift-source/build/buildbot_linux/llvm-linux-x86_64/bin/../lib/LLVMgold.so: cannot open shared object file: No such file or directory +# I tried this, but it does not change anything: +# export LDFLAGS="-Wl,-L/usr/lib64 ${LDFLAGS}" +# so, I decided to get rid of all rpmbuild's flags +unset CFLAGS CXXFLAGS FFLAGS FCFLAGS LDFLAGS CC CXX + +# Run the build +swift/utils/build-script --preset=buildbot_linux,no_assertions,no_test install_destdir=%{_builddir} installable_package=%{_builddir}/swift-%{version}-amazonlinux2023.tar.gz + +%install +mkdir -p %{buildroot}%{_libexecdir}/swift/%{package_version} +cp -r %{_builddir}/usr/* %{buildroot}%{_libexecdir}/swift/%{package_version} +mkdir -p %{buildroot}%{_bindir} +ln -fs %{_libexecdir}/swift/%{package_version}/bin/swift %{buildroot}%{_bindir}/swift +ln -fs %{_libexecdir}/swift/%{package_version}/bin/swiftc %{buildroot}%{_bindir}/swiftc +ln -fs %{_libexecdir}/swift/%{package_version}/bin/sourcekit-lsp %{buildroot}%{_bindir}/sourcekit-lsp +mkdir -p %{buildroot}%{_mandir}/man1 +cp %{_builddir}/usr/share/man/man1/swift.1 %{buildroot}%{_mandir}/man1/swift.1 + +%files +%license swift/LICENSE.txt +%{_bindir}/swift +%{_bindir}/swiftc +%{_bindir}/sourcekit-lsp +%{_mandir}/man1/swift.1.gz +%{_libexecdir}/swift/ + +%post -p /sbin/ldconfig +%postun -p /sbin/ldconfig + +%changelog diff --git a/platforms/Linux/RPM/Amazonlinux/2023/swiftlang-5.9.spec b/platforms/Linux/RPM/Amazonlinux/2023/swiftlang-5.9.spec new file mode 100644 index 00000000..383fa369 --- /dev/null +++ b/platforms/Linux/RPM/Amazonlinux/2023/swiftlang-5.9.spec @@ -0,0 +1,175 @@ +%include global-5.9.inc +%include metadata.inc + +Source0: https://github.com/apple/swift/archive/swift-%{swift_version}.tar.gz#/swift.tar.gz +Source1: https://github.com/apple/swift-corelibs-libdispatch/archive/swift-%{swift_version}.tar.gz#/corelibs-libdispatch.tar.gz +Source2: https://github.com/apple/swift-corelibs-foundation/archive/swift-%{swift_version}.tar.gz#/corelibs-foundation.tar.gz +Source3: https://github.com/apple/swift-integration-tests/archive/swift-%{swift_version}.tar.gz#/swift-integration-tests.tar.gz +Source4: https://github.com/apple/swift-corelibs-xctest/archive/swift-%{swift_version}.tar.gz#/corelibs-xctest.tar.gz +Source5: https://github.com/apple/swift-package-manager/archive/swift-%{swift_version}.tar.gz#/package-manager.tar.gz +Source6: https://github.com/apple/swift-llbuild/archive/swift-%{swift_version}.tar.gz#/llbuild.tar.gz +Source7: https://github.com/apple/swift-cmark/archive/swift-%{swift_version}.tar.gz#/cmark.tar.gz +Source8: https://github.com/apple/swift-xcode-playground-support/archive/swift-%{swift_version}.tar.gz#/swift-xcode-playground-support.tar.gz +Source9: https://github.com/apple/sourcekit-lsp/archive/swift-%{swift_version}.tar.gz#/sourcekit-lsp.tar.gz +Source10: https://github.com/apple/indexstore-db/archive/swift-%{swift_version}.tar.gz#/indexstore-db.tar.gz +Source11: https://github.com/apple/llvm-project/archive/swift-%{swift_version}.tar.gz#/llvm-project.tar.gz +Source12: https://github.com/apple/swift-tools-support-core/archive/swift-%{swift_version}.tar.gz#/swift-tools-support-core.tar.gz +Source13: https://github.com/apple/swift-argument-parser/archive/%{swift_argument_parser_version}.tar.gz#/swift-argument-parser.tar.gz +Source14: https://github.com/apple/swift-driver/archive/swift-%{swift_version}.tar.gz#/swift-driver.tar.gz +Source15: https://github.com/unicode-org/icu/archive/release-%{icu_version}.tar.gz#/icu.tar.gz +Source16: https://github.com/apple/swift-syntax/archive/swift-%{swift_version}.zip#/swift-syntax.tar.gz +Source17: https://github.com/jpsim/Yams/archive/%{yams_version}.tar.gz#/yams.tar.gz +Source18: https://github.com/apple/swift-crypto/archive/refs/tags/%{swift_crypto_version}.tar.gz#/swift-crypto.tar.gz +Source19: https://github.com/ninja-build/ninja/archive/refs/tags/v%{ninja_version}.tar.gz#/ninja.tar.gz +Source20: https://github.com/KitWare/CMake/archive/refs/tags/v%{cmake_version}.tar.gz#/cmake.tar.gz +Source21: https://github.com/apple/swift-atomics/archive/%{swift_atomics_version}.tar.gz#/swift-atomics.tar.gz +Source22: https://github.com/apple/swift-asn1/archive/%{swift_asn1_version}.tar.gz#/swift-asn1.tar.gz +Source23: https://github.com/apple/swift-docc/archive/swift-%{swift_version}.tar.gz#/swift-docc.tar.gz +Source24: https://github.com/apple/swift-docc-render-artifact/archive/swift-%{swift_version}.tar.gz#/swift-docc-render-artifact.tar.gz +Source25: https://github.com/apple/swift-docc-symbolkit/archive/swift-%{swift_version}.tar.gz#/swift-docc-symbolkit.tar.gz +Source26: https://github.com/apple/swift-collections/archive/%{swift_collections_version}.tar.gz#/swift-collections.tar.gz +Source27: https://github.com/apple/swift-numerics/archive/%{swift_numerics_version}.tar.gz#/swift-numerics.tar.gz +Source28: https://github.com/apple/swift-system/archive/%{swift_system_version}.tar.gz#/swift-system.tar.gz +Source29: https://github.com/apple/swift-nio/archive/%{swift_nio_version}.tar.gz#/swift-nio.tar.gz +Source30: https://github.com/apple/swift-nio-ssl/archive/%{swift_nio_ssl_version}.tar.gz#/swift-nio-ssl.tar.gz +Source31: https://github.com/apple/swift-format/archive/swift-%{swift_version}.tar.gz#/swift-format.tar.gz +Source32: https://github.com/apple/swift-lmdb/archive/swift-%{swift_version}.tar.gz#/swift-lmdb.tar.gz +Source33: https://github.com/apple/swift-markdown/archive/swift-%{swift_version}.tar.gz#/swift-markdown.tar.gz +Source34: https://github.com/apple/swift-experimental-string-processing/archive/swift-%{swift_version}.tar.gz#/swift-experimental-string-processing.tar.gz +Source35: https://github.com/apple/swift-certificates/archive/%{swift_certificates_version}.tar.gz#/swift-certificates.tar.gz + +Patch1: patches/llvm-graviton.patch + +BuildRequires: clang +BuildRequires: curl-devel +BuildRequires: gcc-c++ +BuildRequires: git +BuildRequires: glibc-static +BuildRequires: libbsd-devel +BuildRequires: libedit-devel +BuildRequires: libicu-devel +BuildRequires: libuuid-devel +BuildRequires: libxml2-devel +BuildRequires: lld +BuildRequires: make +BuildRequires: ncurses-devel +BuildRequires: ninja-build +BuildRequires: pkgconfig +BuildRequires: procps-ng +BuildRequires: python +BuildRequires: python-devel +BuildRequires: python-pexpect +BuildRequires: python-six +BuildRequires: python3-devel +BuildRequires: rsync +BuildRequires: sqlite-devel +BuildRequires: swig +BuildRequires: tzdata +BuildRequires: uuid-devel +BuildRequires: wget +BuildRequires: which + +Requires: binutils +Requires: lld +Requires: gcc +Requires: git +Requires: glibc-static +Requires: gzip +Requires: libbsd +Requires: libcurl-devel +Requires: libedit +Requires: libicu +Requires: libstdc++-static +Requires: libuuid +Requires: libxml2-devel +Requires: sqlite +Requires: tar +Requires: tzdata +Requires: unzip +Requires: zip + +ExclusiveArch: x86_64 aarch64 + +%description +%include description.inc + +%prep +%setup -q -c -n %{swift_source_location} -a 0 -a 1 -a 2 -a 3 -a 4 -a 5 -a 6 -a 7 -a 8 -a 9 -a 10 -a 11 -a 12 -a 13 -a 14 -a 15 -a 16 -a 17 -a 18 -a 19 -a 20 -a 21 -a 22 -a 23 -a 24 -a 25 -a 26 -a 27 -a 28 -a 29 -a 30 -a 31 -a 32 -a 33 -a 34 -a 35 + +# The Swift build script requires directories to be named +# in a specific way so renaming the source directories is +# necessary +mv CMake-%{cmake_version} cmake +mv icu-release-%{icu_version} icu +mv indexstore-db-swift-%{swift_version} indexstore-db +mv llvm-project-swift-%{swift_version} llvm-project +mv ninja-%{ninja_version} ninja +mv sourcekit-lsp-swift-%{swift_version} sourcekit-lsp +mv swift-argument-parser-%{swift_argument_parser_version} swift-argument-parser +mv swift-atomics-%{swift_atomics_version} swift-atomics +mv swift-cmark-swift-%{swift_version} cmark +mv swift-asn1-%{swift_asn1_version} swift-asn1 +mv swift-collections-%{swift_collections_version} swift-collections +mv swift-corelibs-foundation-swift-%{swift_version} swift-corelibs-foundation +mv swift-corelibs-libdispatch-swift-%{swift_version} swift-corelibs-libdispatch +mv swift-corelibs-xctest-swift-%{swift_version} swift-corelibs-xctest +mv swift-crypto-%{swift_crypto_version} swift-crypto +mv swift-docc-render-artifact-swift-%{swift_version} swift-docc-render-artifact +mv swift-docc-swift-%{swift_version} swift-docc +mv swift-docc-symbolkit-swift-%{swift_version} swift-docc-symbolkit +mv swift-driver-swift-%{swift_version} swift-driver +mv swift-format-swift-%{swift_version} swift-format +mv swift-integration-tests-swift-%{swift_version} swift-integration-tests +mv swift-llbuild-swift-%{swift_version} llbuild +mv swift-lmdb-swift-%{swift_version} swift-lmdb +mv swift-markdown-swift-%{swift_version} swift-markdown +mv swift-nio-%{swift_nio_version} swift-nio +mv swift-nio-ssl-%{swift_nio_ssl_version} swift-nio-ssl +mv swift-numerics-%{swift_numerics_version} swift-numerics +mv swift-package-manager-swift-%{swift_version} swiftpm +mv swift-swift-%{swift_version} swift +mv swift-syntax-swift-%{swift_version} swift-syntax +mv swift-system-%{swift_system_version} swift-system +mv swift-tools-support-core-swift-%{swift_version} swift-tools-support-core +mv swift-xcode-playground-support-swift-%{swift_version} swift-xcode-playground-support +mv Yams-%{yams_version} yams +mv swift-experimental-string-processing-swift-%{swift_version} swift-experimental-string-processing +mv swift-certificates-%{swift_certificates_version} swift-certificates + +# Add Amazon Linux aarch64 triplet +%patch1 -p1 + +%build +export VERBOSE=1 +# the flags positioned by rpmbuild conflict with the ones set by build-script. It causes this error: +# /BUILD/swift-source/build/buildbot_linux/llvm-linux-x86_64/bin/../lib/LLVMgold.so: cannot open shared object file: No such file or directory +# I tried this, but it does not change anything: +# export LDFLAGS="-Wl,-L/usr/lib64 ${LDFLAGS}" +# so, I decided to get rid of all rpmbuild's flags +unset CFLAGS CXXFLAGS FFLAGS FCFLAGS LDFLAGS CC CXX + +# Run the build +swift/utils/build-script --preset=buildbot_linux,no_assertions,no_test install_destdir=%{_builddir} installable_package=%{_builddir}/swift-%{version}-amazonlinux2023.tar.gz + +%install +mkdir -p %{buildroot}%{_libexecdir}/swift/%{package_version} +cp -r %{_builddir}/usr/* %{buildroot}%{_libexecdir}/swift/%{package_version} +mkdir -p %{buildroot}%{_bindir} +ln -fs %{_libexecdir}/swift/%{package_version}/bin/swift %{buildroot}%{_bindir}/swift +ln -fs %{_libexecdir}/swift/%{package_version}/bin/swiftc %{buildroot}%{_bindir}/swiftc +ln -fs %{_libexecdir}/swift/%{package_version}/bin/sourcekit-lsp %{buildroot}%{_bindir}/sourcekit-lsp +mkdir -p %{buildroot}%{_mandir}/man1 +cp %{_builddir}/usr/share/man/man1/swift.1 %{buildroot}%{_mandir}/man1/swift.1 + +%files +%license swift/LICENSE.txt +%{_bindir}/swift +%{_bindir}/swiftc +%{_bindir}/sourcekit-lsp +%{_mandir}/man1/swift.1.gz +%{_libexecdir}/swift/ + +%post -p /sbin/ldconfig +%postun -p /sbin/ldconfig + +%changelog diff --git a/platforms/Linux/RPM/Amazonlinux/2023/swiftlang.spec b/platforms/Linux/RPM/Amazonlinux/2023/swiftlang.spec new file mode 120000 index 00000000..647a050c --- /dev/null +++ b/platforms/Linux/RPM/Amazonlinux/2023/swiftlang.spec @@ -0,0 +1 @@ +swiftlang-5.8.spec \ No newline at end of file