Skip to content

Commit d43de5f

Browse files
authored
add support for oracle linux 8 (swiftlang#87)
motivation: with centos 8 deprecated, teams are moving to oracle linux 8 changes: * add RPM spec and auxilary setup for building RPMs for oracle linux 8
1 parent 17c3073 commit d43de5f

11 files changed

+290
-0
lines changed

Diff for: platforms/Linux/RPM/Oraclelinux/8/.dockerignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.output

Diff for: platforms/Linux/RPM/Oraclelinux/8/Dockerfile

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# This source file is part of the Swift.org open source project
2+
#
3+
# Copyright (c) 2022 Apple Inc. and the Swift project authors
4+
# Licensed under Apache License v2.0 with Runtime Library Exception
5+
#
6+
# See http://swift.org/LICENSE.txt for license information
7+
# See http://swift.org/CONTRIBUTORS.txt for Swift project authors
8+
9+
FROM oraclelinux:8
10+
LABEL PURPOSE="This image is configured to build Swift for the version of Oracle Linux listed above"
11+
12+
RUN yum -y update
13+
14+
# RPM and yum development tools
15+
RUN yum install -y rpmdevtools yum-utils createrepo
16+
17+
# Configure epel and codeready
18+
RUN yum install -y oracle-epel-release-el8
19+
RUN yum config-manager --set-enabled ol8_codeready_builder
20+
21+
# Optimization: Install Swift build requirements listed in the spec file
22+
ADD swiftlang.spec /tmp/swiftlang.spec
23+
# rewrite a minimal spec with the build requirements
24+
RUN echo -e "Name: optimization\nVersion: optimization\nRelease: optimization\nSummary: optimization\nLicense: optimization\n" > /tmp/optimization.spec
25+
RUN cat /tmp/swiftlang.spec | grep BuildRequires >> /tmp/optimization.spec
26+
RUN echo -e "\n%description" >> /tmp/optimization.spec
27+
# install the build requirements
28+
RUN cd /tmp && yum-builddep -y optimization.spec

Diff for: platforms/Linux/RPM/Oraclelinux/8/README.md

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Building Swift on Oracle Enterprise Linux
2+
3+
4+
### building with docker-compose
5+
6+
* to run the build end-to-end
7+
8+
```
9+
docker-compose run build
10+
```
11+
12+
* to enter the docker env in shell mode
13+
14+
```
15+
docker-compose run shell
16+
```
17+
18+
then you can run `./build_rpm.sh` to run the build manually inside the docker
19+
20+
21+
* to rebuild the base image
22+
23+
```
24+
docker-compose build --pull
25+
```
26+
27+
note this still uses the docker cache, so will rebuild only if the version of the underlying base image changed upstream
28+
29+
30+
### Open Issues / TODO
31+
* 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 for: platforms/Linux/RPM/Oraclelinux/8/build_rpm.sh

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../Shared/scripts/build_rpm.sh

Diff for: platforms/Linux/RPM/Oraclelinux/8/createrepo_rpm.sh

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../Shared/scripts/createrepo_rpm.sh

Diff for: platforms/Linux/RPM/Oraclelinux/8/description.inc

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../Shared/metadata/description.inc
+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# This source file is part of the Swift.org open source project
2+
#
3+
# Copyright (c) 2022 Apple Inc. and the Swift project authors
4+
# Licensed under Apache License v2.0 with Runtime Library Exception
5+
#
6+
# See http://swift.org/LICENSE.txt for license information
7+
# See http://swift.org/CONTRIBUTORS.txt for Swift project authors
8+
9+
# this setup is designed to build the RPM with docker
10+
# usage:
11+
# docker-compose -f platforms/Linux/oraclelinux/8/docker-compose.yaml build
12+
# to shell into the container for debugging purposes:
13+
# docker-compose -f platforms/Linux/oraclelinux/8/docker-compose.yaml run build
14+
15+
version: "2"
16+
17+
services:
18+
19+
docker-setup:
20+
image: oraclelinux-8-rpm-builder
21+
build:
22+
context: .
23+
dockerfile: Dockerfile
24+
25+
common: &common
26+
image: oraclelinux-8-rpm-builder
27+
depends_on: [docker-setup]
28+
# https://bugs.swift.org/browse/SR-15343
29+
security_opt:
30+
- seccomp:unconfined
31+
volumes:
32+
- ../../Oraclelinux/8:/code/Oraclelinux/8:z
33+
- ../../Shared:/code/Shared:z
34+
- ./.output:/output:z
35+
working_dir: /code/Oraclelinux/8
36+
cap_drop:
37+
- CAP_NET_RAW
38+
- CAP_NET_BIND_SERVICE
39+
40+
build:
41+
<<: *common
42+
command: /bin/bash -cl "./build_rpm.sh"
43+
44+
createrepo:
45+
<<: *common
46+
command: /bin/bash -cl "./createrepo_rpm.sh"
47+
48+
shell:
49+
<<: *common
50+
entrypoint: /bin/bash -l

Diff for: platforms/Linux/RPM/Oraclelinux/8/global.inc

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../Shared/metadata/global.inc

Diff for: platforms/Linux/RPM/Oraclelinux/8/metadata.inc

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../Shared/metadata/metadata.inc
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
diff --git a/llvm-project/compiler-rt/lib/hwasan/scripts/hwasan_symbolize b/llvm-project/compiler-rt/lib/hwasan/scripts/hwasan_symbolize
2+
index dd5f859561e1..21d18998cf31 100755
3+
--- a/llvm-project/compiler-rt/lib/hwasan/scripts/hwasan_symbolize
4+
+++ b/llvm-project/compiler-rt/lib/hwasan/scripts/hwasan_symbolize
5+
@@ -1,4 +1,4 @@
6+
-#!/usr/bin/env python
7+
+#!/usr/bin/env python3
8+
#===- lib/hwasan/scripts/hwasan_symbolize ----------------------------------===#
9+
#
10+
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.

Diff for: platforms/Linux/RPM/Oraclelinux/8/swiftlang.spec

+165
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
%include global.inc
2+
%include metadata.inc
3+
4+
Source0: https://github.com/apple/swift/archive/swift-%{swift_version}.tar.gz#/swift.tar.gz
5+
Source1: https://github.com/apple/swift-corelibs-libdispatch/archive/swift-%{swift_version}.tar.gz#/corelibs-libdispatch.tar.gz
6+
Source2: https://github.com/apple/swift-corelibs-foundation/archive/swift-%{swift_version}.tar.gz#/corelibs-foundation.tar.gz
7+
Source3: https://github.com/apple/swift-integration-tests/archive/swift-%{swift_version}.tar.gz#/swift-integration-tests.tar.gz
8+
Source4: https://github.com/apple/swift-corelibs-xctest/archive/swift-%{swift_version}.tar.gz#/corelibs-xctest.tar.gz
9+
Source5: https://github.com/apple/swift-package-manager/archive/swift-%{swift_version}.tar.gz#/package-manager.tar.gz
10+
Source6: https://github.com/apple/swift-llbuild/archive/swift-%{swift_version}.tar.gz#/llbuild.tar.gz
11+
Source7: https://github.com/apple/swift-cmark/archive/swift-%{swift_version}.tar.gz#/cmark.tar.gz
12+
Source8: https://github.com/apple/swift-xcode-playground-support/archive/swift-%{swift_version}.tar.gz#/swift-xcode-playground-support.tar.gz
13+
Source9: https://github.com/apple/sourcekit-lsp/archive/swift-%{swift_version}.tar.gz#/sourcekit-lsp.tar.gz
14+
Source10: https://github.com/apple/indexstore-db/archive/swift-%{swift_version}.tar.gz#/indexstore-db.tar.gz
15+
Source11: https://github.com/apple/llvm-project/archive/swift-%{swift_version}.tar.gz#/llvm-project.tar.gz
16+
Source12: https://github.com/apple/swift-tools-support-core/archive/swift-%{swift_version}.tar.gz#/swift-tools-support-core.tar.gz
17+
Source13: https://github.com/apple/swift-argument-parser/archive/%{swift_argument_parser_version}.tar.gz#/swift-argument-parser.tar.gz
18+
Source14: https://github.com/apple/swift-driver/archive/swift-%{swift_version}.tar.gz#/swift-driver.tar.gz
19+
Source15: https://github.com/unicode-org/icu/archive/release-%{icu_version}.tar.gz#/icu.tar.gz
20+
Source16: https://github.com/apple/swift-syntax/archive/swift-%{swift_version}.zip#/swift-syntax.tar.gz
21+
Source17: https://github.com/jpsim/Yams/archive/%{yams_version}.tar.gz#/yams.tar.gz
22+
Source18: https://github.com/apple/swift-crypto/archive/refs/tags/%{swift_crypto_version}.tar.gz#/swift-crypto.tar.gz
23+
Source19: https://github.com/ninja-build/ninja/archive/refs/tags/v%{ninja_version}.tar.gz#/ninja.tar.gz
24+
Source20: https://github.com/KitWare/CMake/archive/refs/tags/v%{cmake_version}.tar.gz#/cmake.tar.gz
25+
Source21: https://github.com/apple/swift-atomics/archive/%{swift_atomics_version}.tar.gz#/swift-atomics.tar.gz
26+
Source22: https://github.com/apple/swift-cmark/archive/swift-%{swift_version}-gfm.tar.gz#/swift-cmark-gfm.tar.gz
27+
Source23: https://github.com/apple/swift-docc/archive/swift-%{swift_version}.tar.gz#/swift-docc.tar.gz
28+
Source24: https://github.com/apple/swift-docc-render-artifact/archive/swift-%{swift_version}.tar.gz#/swift-docc-render-artifact.tar.gz
29+
Source25: https://github.com/apple/swift-docc-symbolkit/archive/swift-%{swift_version}.tar.gz#/swift-docc-symbolkit.tar.gz
30+
Source26: https://github.com/apple/swift-collections/archive/%{swift_collections_version}.tar.gz#/swift-collections.tar.gz
31+
Source27: https://github.com/apple/swift-numerics/archive/%{swift_numerics_version}.tar.gz#/swift-numerics.tar.gz
32+
Source28: https://github.com/apple/swift-system/archive/%{swift_system_version}.tar.gz#/swift-system.tar.gz
33+
Source29: https://github.com/apple/swift-nio/archive/%{swift_nio_version}.tar.gz#/swift-nio.tar.gz
34+
Source30: https://github.com/apple/swift-nio-ssl/archive/%{swift_nio_ssl_version}.tar.gz#/swift-nio-ssl.tar.gz
35+
Source31: https://github.com/apple/swift-format/archive/swift-%{swift_version}.tar.gz#/swift-format.tar.gz
36+
Source32: https://github.com/apple/swift-lmdb/archive/swift-%{swift_version}.tar.gz#/swift-lmdb.tar.gz
37+
Source33: https://github.com/apple/swift-markdown/archive/swift-%{swift_version}.tar.gz#/swift-markdown.tar.gz
38+
39+
Patch0: patches/hwasan_symbolize.patch
40+
41+
BuildRequires: autoconf
42+
BuildRequires: clang
43+
BuildRequires: diffutils
44+
BuildRequires: git
45+
BuildRequires: glibc-static
46+
BuildRequires: libbsd-devel
47+
BuildRequires: libcurl-devel
48+
BuildRequires: libedit-devel
49+
BuildRequires: libicu-devel
50+
BuildRequires: libstdc++-static
51+
BuildRequires: libtool
52+
BuildRequires: libuuid-devel
53+
BuildRequires: libxml2-devel
54+
BuildRequires: make
55+
BuildRequires: ncurses-devel
56+
BuildRequires: pcre-devel
57+
BuildRequires: platform-python-devel
58+
BuildRequires: python2
59+
BuildRequires: python2-devel
60+
BuildRequires: python2-six
61+
BuildRequires: python3
62+
BuildRequires: python3-pexpect
63+
BuildRequires: python3-six
64+
BuildRequires: rsync
65+
BuildRequires: sqlite-devel
66+
BuildRequires: swig
67+
BuildRequires: tar
68+
BuildRequires: which
69+
70+
Requires: binutils
71+
Requires: gcc
72+
Requires: git
73+
Requires: glibc-static
74+
Requires: libbsd-devel
75+
Requires: libcurl-devel
76+
Requires: libedit
77+
Requires: libedit-devel
78+
Requires: libicu-devel
79+
Requires: libstdc++-static
80+
Requires: libxml2-devel
81+
Requires: pkg-config
82+
Requires: python3
83+
Requires: sqlite
84+
Requires: zlib-devel
85+
86+
ExclusiveArch: x86_64 aarch64
87+
88+
%description
89+
%include description.inc
90+
91+
%prep
92+
%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
93+
94+
# The Swift build script requires directories to be named
95+
# in a specific way so renaming the source directories is
96+
# necessary
97+
mv CMake-%{cmake_version} cmake
98+
mv icu-release-%{icu_version} icu
99+
mv indexstore-db-swift-%{swift_version} indexstore-db
100+
mv llvm-project-swift-%{swift_version} llvm-project
101+
mv ninja-%{ninja_version} ninja
102+
mv sourcekit-lsp-swift-%{swift_version} sourcekit-lsp
103+
mv swift-argument-parser-%{swift_argument_parser_version} swift-argument-parser
104+
mv swift-atomics-%{swift_atomics_version} swift-atomics
105+
mv swift-cmark-swift-%{swift_version} cmark
106+
mv swift-cmark-swift-%{swift_version}-gfm swift-cmark-gfm
107+
mv swift-collections-%{swift_collections_version} swift-collections
108+
mv swift-corelibs-foundation-swift-%{swift_version} swift-corelibs-foundation
109+
mv swift-corelibs-libdispatch-swift-%{swift_version} swift-corelibs-libdispatch
110+
mv swift-corelibs-xctest-swift-%{swift_version} swift-corelibs-xctest
111+
mv swift-crypto-%{swift_crypto_version} swift-crypto
112+
mv swift-docc-render-artifact-swift-%{swift_version} swift-docc-render-artifact
113+
mv swift-docc-swift-%{swift_version} swift-docc
114+
mv swift-docc-symbolkit-swift-%{swift_version} swift-docc-symbolkit
115+
mv swift-driver-swift-%{swift_version} swift-driver
116+
mv swift-format-swift-%{swift_version} swift-format
117+
mv swift-integration-tests-swift-%{swift_version} swift-integration-tests
118+
mv swift-llbuild-swift-%{swift_version} llbuild
119+
mv swift-lmdb-swift-%{swift_version} swift-lmdb
120+
mv swift-markdown-swift-%{swift_version} swift-markdown
121+
mv swift-nio-%{swift_nio_version} swift-nio
122+
mv swift-nio-ssl-%{swift_nio_ssl_version} swift-nio-ssl
123+
mv swift-numerics-%{swift_numerics_version} swift-numerics
124+
mv swift-package-manager-swift-%{swift_version} swiftpm
125+
mv swift-swift-%{swift_version} swift
126+
mv swift-syntax-swift-%{swift_version} swift-syntax
127+
mv swift-system-%{swift_system_version} swift-system
128+
mv swift-tools-support-core-swift-%{swift_version} swift-tools-support-core
129+
mv swift-xcode-playground-support-swift-%{swift_version} swift-xcode-playground-support
130+
mv Yams-%{yams_version} yams
131+
132+
# Adjust python version hwasan_symbolize
133+
%patch0 -p1
134+
135+
# Fix python to python3
136+
ln -s /usr/bin/python3 /usr/bin/python
137+
138+
%build
139+
export VERBOSE=1
140+
141+
# Run the build
142+
swift/utils/build-script --preset=buildbot_linux,no_assertions,no_test install_destdir=%{_builddir} installable_package=%{_builddir}/swift-%{version}-oel8.tar.gz
143+
144+
%install
145+
mkdir -p %{buildroot}%{_libexecdir}/swift/%{package_version}
146+
cp -r %{_builddir}/usr/* %{buildroot}%{_libexecdir}/swift/%{package_version}
147+
mkdir -p %{buildroot}%{_bindir}
148+
ln -fs %{_libexecdir}/swift/%{package_version}/bin/swift %{buildroot}%{_bindir}/swift
149+
ln -fs %{_libexecdir}/swift/%{package_version}/bin/swiftc %{buildroot}%{_bindir}/swiftc
150+
ln -fs %{_libexecdir}/swift/%{package_version}/bin/sourcekit-lsp %{buildroot}%{_bindir}/sourcekit-lsp
151+
mkdir -p %{buildroot}%{_mandir}/man1
152+
cp %{_builddir}/usr/share/man/man1/swift.1 %{buildroot}%{_mandir}/man1/swift.1
153+
154+
%files
155+
%license swift/LICENSE.txt
156+
%{_bindir}/swift
157+
%{_bindir}/swiftc
158+
%{_bindir}/sourcekit-lsp
159+
%{_mandir}/man1/swift.1.gz
160+
%{_libexecdir}/swift/
161+
162+
%post -p /sbin/ldconfig
163+
%postun -p /sbin/ldconfig
164+
165+
%changelog

0 commit comments

Comments
 (0)