diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..efef7e1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/flang-11.0.0rc2.src.tar.xz +/flang-11.0.0rc2.src.tar.xz.sig diff --git a/flang.spec b/flang.spec new file mode 100644 index 0000000..53b9cce --- /dev/null +++ b/flang.spec @@ -0,0 +1,173 @@ +%global rc_ver 2 +%global baserelease 0.1 +%global flang_srcdir flang-%{version}%{?rc_ver:rc%{rc_ver}}.src +%global maj_ver 11 +%global min_ver 0 +%global patch_ver 0 + +Name: flang +Version: %{maj_ver}.%{min_ver}.%{patch_ver} +Release: %{baserelease}%{?rc_ver:.rc%{rc_ver}}%{?dist} +Summary: a Fortran language front-end designed for integration with LLVM + +License: ASL 2.0 with exceptions +URL: https://github.com/llvm/llvm-project/tree/master/flang +Source0: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{version}%{?rc_ver:-rc%{rc_ver}}/%{flang_srcdir}.tar.xz +Source1: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{version}%{?rc_ver:-rc%{rc_ver}}/%{flang_srcdir}.tar.xz.sig +Source2: https://prereleases.llvm.org/%{version}/hans-gpg-key.asc + +# Otherwise fails when compiling with _GLIBCXX_DEBUG is defined. +Patch0: token-sequence.patch +# Needed to compile in shared libs mode. +Patch1: shared.patch +# Needed for llvm-googletest compatibility +Patch2: gtest.patch + +# because mlir doesn't build on arm (yet) +ExcludeArch: armv7hl + +# Avoid gcc reaching 4GB of memory +%ifarch %{ix86} s390x +%global _lto_cflags %{nil} +%global _smp_mflags -j1 +%endif + + +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: cmake +BuildRequires: zlib-devel +BuildRequires: llvm-devel = %{version} +BuildRequires: llvm-test = %{version} +BuildRequires: llvm-googletest = %{version} +BuildRequires: mlir-devel = %{version} +BuildRequires: ninja-build +BuildRequires: python3-lit +BuildRequires: python3-sphinx + +# For origin certification +BuildRequires: gnupg2 + +%description + +Flang is a ground-up implementation of a Fortran front end written in modern +C++. + +%package devel +Summary: Flang header files +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description devel +Flang header files. + +%package doc +Summary: Documentation for Flang +BuildArch: noarch +Requires: %{name} = %{version}-%{release} + +%description doc +Documentation for Flang + +%prep +%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}' +%autosetup -n %{flang_srcdir} -p1 + +%build + + +%cmake -GNinja \ + -DMLIR_TABLEGEN_EXE=%{_bindir}/mlir-tblgen \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_INSTALL_RPATH=";" \ + -DLLVM_MAIN_SRC_DIR=%{_datadir}/llvm/src \ + -DBUILD_SHARED_LIBS:BOOL=ON \ + -DLLVM_LINK_LLVM_DYLIB:BOOL=ON \ + -DLLVM_EXTERNAL_LIT=%{_bindir}/lit \ + -DCMAKE_PREFIX_PATH=%{_libdir}/cmake/llvm/ \ +\ + -DFLANG_INCLUDE_DOCS:BOOL=ON \ + -DLLVM_ENABLE_SPHINX:BOOL=ON \ + -DSPHINX_WARNINGS_AS_ERRORS=OFF \ + -DSPHINX_EXECUTABLE=%{_bindir}/sphinx-build-3 \ +\ +%if 0%{?__isa_bits} == 64 + -DLLVM_LIBDIR_SUFFIX=64 +%else + -DLLVM_LIBDIR_SUFFIX= +%endif + +# Avoid gcc reaching 4GB of memory +%ifarch %{ix86} s390x +sed -i -e 's/-g /-g1 /g' -e 's/-O2/-O1/g' %{_builddir}/%{flang_srcdir}/%{_build}/build.ninja +%endif + +export LD_LIBRARY_PATH=%{_builddir}/%{flang_srcdir}/%{_build}/lib +%cmake_build +%cmake_build --target docs-flang-html + + +%install +%cmake_install + +# this is a test binary +rm -f %{buildroot}%{_bindir}/f18-parse-demo + +install -d %{buildroot}%{_pkgdocdir}/html +cp -r %{_vpath_builddir}/docs/html/* %{buildroot}%{_pkgdocdir}/html/ + +chmod 0755 %{buildroot}%{_bindir}/flang + +%check + +# these tests fail on all or specific arches +rm test/Semantics/resolve63.f90 + +%ifarch s390x +rm test/Evaluate/folding07.f90 +%endif + +%ifarch %{ix86} +rm -f test/Fir/fir-ops.fir +rm -f test/Semantics/assign03.f90 +rm -f test/Semantics/data05.f90 +rm -f test/Semantics/offsets01.f90 +rm -f test/Semantics/offsets02.f90 +%endif + +export LD_LIBRARY_PATH=%{_builddir}/%{flang_srcdir}/%{_build}/lib +%cmake_build --target check-flang + +%files +%license LICENSE.txt +%{_bindir}/f18 +%{_bindir}/tco +%{_bindir}/flang +%{_libdir}/libFortranLower.so.%{maj_ver} +%{_libdir}/libFIROptimizer.so.%{maj_ver} +%{_libdir}/libFortranSemantics.so.%{maj_ver} +%{_libdir}/libFortranCommon.so.%{maj_ver} +%{_libdir}/libFortranRuntime.so.%{maj_ver} +%{_libdir}/libFortranDecimal.so.%{maj_ver} +%{_libdir}/libFortranEvaluate.so.%{maj_ver} +%{_libdir}/libFortranParser.so.%{maj_ver} + +%files devel +%{_libdir}/libFortranLower.so +%{_libdir}/libFortranParser.so +%{_libdir}/libFortranCommon.so +%{_libdir}/libFortranSemantics.so +%{_libdir}/libFIROptimizer.so +%{_libdir}/libFortranDecimal.so +%{_libdir}/libFortranRuntime.so +%{_libdir}/libFortranEvaluate.so +%{_includedir}/flang +%{_libdir}/cmake/ + +%files doc +%dir %{_pkgdocdir} +%doc %{_pkgdocdir}/html/ + +%changelog +* Tue Sep 01 2020 sguelton@redhat.com - 11.0.0-0.1.rc2 +- Initial version. + diff --git a/gtest.patch b/gtest.patch new file mode 100644 index 0000000..74365db Binary files /dev/null and b/gtest.patch differ diff --git a/hans-gpg-key.asc b/hans-gpg-key.asc new file mode 100644 index 0000000..4b3cdde --- /dev/null +++ b/hans-gpg-key.asc @@ -0,0 +1,52 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +67H2IH//2sf8dw== +=ADVe +-----END PGP PUBLIC KEY BLOCK----- diff --git a/shared.patch b/shared.patch new file mode 100644 index 0000000..c8dabf4 --- /dev/null +++ b/shared.patch @@ -0,0 +1,12 @@ +diff -Naur flang-11.0.0rc2.src/CMakeLists.txt flang-11.0.0rc2.src.cmake/CMakeLists.txt +--- flang-11.0.0rc2.src/CMakeLists.txt 2020-08-20 16:24:59.000000000 +0000 ++++ flang-11.0.0rc2.src.cmake/CMakeLists.txt 2020-09-03 13:44:24.226776260 +0000 +@@ -199,8 +199,6 @@ + # Always build tco tool + set(LLVM_BUILD_TOOLS ON) + message(STATUS "Linking driver with FIR and LLVM") +- llvm_map_components_to_libnames(LLVM_COMMON_LIBS support) +- message(STATUS "LLVM libraries: ${LLVM_COMMON_LIBS}") + endif() + + # Add Flang-centric modules to cmake path. diff --git a/sources b/sources new file mode 100644 index 0000000..1fbbb42 --- /dev/null +++ b/sources @@ -0,0 +1,2 @@ +SHA512 (flang-11.0.0rc2.src.tar.xz) = ec5aaafe51bf4e0844cbd70320770c583a505c5e00b109fd5c87a04f16ea01341d4b48fc775ba911483bc3effebdda20852be70a9f61b9fed58f3f5421fdf15f +SHA512 (flang-11.0.0rc2.src.tar.xz.sig) = e02e397ce84ed1c0879b128d9f478f828c2d640fa4bdd41855b58373edf76baf906ef3ea17f2c4bb69c2e4d444ed6cddaf86f4a416e10490bf2adfc1dcf0bc16 diff --git a/token-sequence.patch b/token-sequence.patch new file mode 100644 index 0000000..8f4577e --- /dev/null +++ b/token-sequence.patch @@ -0,0 +1,13 @@ +diff -Naur flang-11.0.0rc2.src.orig/lib/Parser/token-sequence.cpp flang-11.0.0rc2.src/lib/Parser/token-sequence.cpp +--- flang-11.0.0rc2.src.orig/lib/Parser/token-sequence.cpp 2020-09-03 12:01:15.278223312 +0000 ++++ flang-11.0.0rc2.src/lib/Parser/token-sequence.cpp 2020-09-03 12:51:40.082870848 +0000 +@@ -134,7 +134,8 @@ + std::size_t atToken{0}; + for (std::size_t j{0}; j < chars;) { + std::size_t nextStart{atToken + 1 < tokens ? start_[++atToken] : chars}; +- char *p{&char_[j]}, *limit{&char_[nextStart]}; ++ char *p{&char_[j]}; ++ char const* limit{char_.data() + nextStart}; + j = nextStart; + if (IsDecimalDigit(*p)) { + while (p < limit && IsDecimalDigit(*p)) {