Removing classic flang. (#19350)
This commit is contained in:
parent
1a63baef4d
commit
8619e5b5ab
4 changed files with 0 additions and 523 deletions
|
@ -1,126 +0,0 @@
|
|||
# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other
|
||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||
#
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
|
||||
|
||||
from spack import *
|
||||
import os
|
||||
|
||||
|
||||
class Flang(CMakePackage):
|
||||
"""Flang is a Fortran compiler targeting LLVM."""
|
||||
|
||||
homepage = "https://github.com/flang-compiler/flang"
|
||||
|
||||
url = "https://github.com/flang-compiler/flang/archive/flang_20190329.tar.gz"
|
||||
git = "https://github.com/flang-compiler/flang.git"
|
||||
|
||||
maintainers = ['naromero77']
|
||||
|
||||
version('master', branch='master', preferred=True)
|
||||
version('20190329', sha256='b8c621da53829f8c53bad73125556fb1839c9056d713433b05741f7e445199f2')
|
||||
version('20181226', sha256='00e716bea258c3bb60d6a5bb0c82bc79f67000062dc89939693e75f501883c36')
|
||||
version('20180921', sha256='f33bd1f054e474f1e8a204bb6f78d42f8f6ecf7a894fdddc3999f7c272350784')
|
||||
version('20180612', sha256='6af858bea013548e091371a97726ac784edbd4ff876222575eaae48a3c2920ed')
|
||||
|
||||
# variants
|
||||
msg = ('Target OpenMP offloading to NVIDIA GPUs '
|
||||
'(experimental w/ no support). '
|
||||
'Only works with GCC compilers compatible with CUDA 9.x. '
|
||||
'Specify ^llvm-flang+cuda cuda_arch=<value> explictly.')
|
||||
|
||||
variant('nvptx',
|
||||
default=False,
|
||||
description=msg)
|
||||
|
||||
# Patched only relevant for March 2019 release with OpenMP Offload support
|
||||
patch('https://github.com/flang-compiler/flang/commit/b342225a64692d2b9c3aff7658a8e4f94a8923eb.diff',
|
||||
sha256='3bd2c7453131eaaf11328785a3031fa2298bdd0c02cfd5e2b478e6e847d5da43',
|
||||
when='@20190329 +nvptx')
|
||||
|
||||
# Build dependency
|
||||
depends_on('cmake@3.8:', type='build')
|
||||
depends_on('python@2.7:', type='build')
|
||||
|
||||
depends_on('llvm-flang@release_90', when='@master ~nvptx')
|
||||
depends_on('llvm-flang@20190329', when='@20190329 ~nvptx')
|
||||
depends_on('llvm-flang@20181226_70', when='@20181226')
|
||||
depends_on('llvm-flang@20180921', when='@20180921')
|
||||
depends_on('llvm-flang@20180612', when='@20180612')
|
||||
|
||||
depends_on('pgmath@master', when='@master')
|
||||
depends_on('pgmath@20190329', when='@20190329')
|
||||
depends_on('pgmath@20181226', when='@20181226')
|
||||
depends_on('pgmath@20180921', when='@20180921')
|
||||
depends_on('pgmath@20180612', when='@20180612')
|
||||
|
||||
depends_on('llvm-flang+cuda@release_70', when='@master +nvptx')
|
||||
depends_on('llvm-flang+cuda@20190329', when='@20190329 +nvptx')
|
||||
|
||||
# conflicts
|
||||
conflicts('+nvptx', when='@:20181226',
|
||||
msg='OpenMP offload to NVidia GPUs available 20190329 or later')
|
||||
|
||||
# Spurious problems running in parallel the Makefile
|
||||
# generated by the configure
|
||||
parallel = False
|
||||
|
||||
def cmake_args(self):
|
||||
spec = self.spec
|
||||
options = [
|
||||
'-DWITH_WERROR=OFF',
|
||||
'-DCMAKE_C_COMPILER=%s' % os.path.join(
|
||||
spec['llvm-flang'].prefix.bin, 'clang'),
|
||||
'-DCMAKE_CXX_COMPILER=%s' % os.path.join(
|
||||
spec['llvm-flang'].prefix.bin, 'clang++'),
|
||||
'-DCMAKE_Fortran_COMPILER=%s' % os.path.join(
|
||||
spec['llvm-flang'].prefix.bin, 'flang'),
|
||||
'-DFLANG_LIBOMP=%s' % find_libraries(
|
||||
'libomp', root=spec['llvm-flang'].prefix.lib),
|
||||
'-DPYTHON_EXECUTABLE={0}'.format(
|
||||
spec['python'].command.path)
|
||||
]
|
||||
|
||||
# Make sure llvm-flang can find GCC's libstdc++
|
||||
if self.compiler.name == "gcc":
|
||||
gcc_prefix = ancestor(self.compiler.cc, 2)
|
||||
options.append('-DGCC_INSTALL_PREFIX=' + gcc_prefix)
|
||||
|
||||
if '+cuda' in spec:
|
||||
options.append('-DFLANG_OPENMP_GPU_NVIDIA=ON')
|
||||
else:
|
||||
options.append('-DFLANG_OPENMP_GPU_NVIDIA=OFF')
|
||||
|
||||
return options
|
||||
|
||||
@run_after('install')
|
||||
def post_install(self):
|
||||
# we are installing flang in a path different from llvm, so we
|
||||
# create a wrapper with -L for e.g. libflangrti.so and -I for
|
||||
# e.g. iso_c_binding.mod. -B is needed to help flang to find
|
||||
# flang1 and flang2. rpath_arg is needed so that executables
|
||||
# generated by flang can find libflang later.
|
||||
flang = os.path.join(self.spec.prefix.bin, 'flang')
|
||||
with open(flang, 'w') as out:
|
||||
out.write('#!/bin/bash\n')
|
||||
out.write(
|
||||
'{0} -I{1} -L{2} -L{3} {4}{5} {6}{7} -B{8} "$@"\n'.format(
|
||||
self.spec['llvm-flang'].prefix.bin.flang,
|
||||
self.prefix.include, self.prefix.lib,
|
||||
self.spec['pgmath'].prefix.lib,
|
||||
self.compiler.fc_rpath_arg, self.prefix.lib,
|
||||
self.compiler.fc_rpath_arg,
|
||||
self.spec['pgmath'].prefix.lib, self.spec.prefix.bin))
|
||||
out.close()
|
||||
chmod = which('chmod')
|
||||
chmod('+x', flang)
|
||||
|
||||
def setup_build_environment(self, env):
|
||||
# to find llvm's libc++.so
|
||||
env.set('LD_LIBRARY_PATH', self.spec['llvm-flang'].prefix.lib)
|
||||
|
||||
def setup_run_environment(self, env):
|
||||
env.set('FC', self.spec.prefix.bin.flang)
|
||||
env.set('F77', self.spec.prefix.bin.flang)
|
||||
env.set('F90', self.spec.prefix.bin.flang)
|
|
@ -1,268 +0,0 @@
|
|||
# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other
|
||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||
#
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
|
||||
|
||||
from spack import *
|
||||
|
||||
|
||||
class LlvmFlang(CMakePackage, CudaPackage):
|
||||
"""LLVM-Flang is the Flang fork of LLVM needed by the Flang package."""
|
||||
|
||||
homepage = "https://github.com/flang-compiler"
|
||||
|
||||
git = "https://github.com/flang-compiler/llvm.git"
|
||||
|
||||
maintainer = ['naromero77']
|
||||
|
||||
version('release_90', branch='release_90', preferred=True)
|
||||
version('release_80', branch='release_80')
|
||||
version('release_70', branch='release_70')
|
||||
version('release_60', branch='release_60')
|
||||
version('20190329', tag='flang_20190329')
|
||||
version('20181226_70', tag='20181226_70')
|
||||
version('20181226_60', tag='20181226_60')
|
||||
version('20180921', tag='20180921')
|
||||
version('20180319', tag='20180319')
|
||||
version('20180328', tag='20180308')
|
||||
|
||||
# Variants
|
||||
variant('all_targets', default=False,
|
||||
description='Build all supported targets')
|
||||
|
||||
variant('build_type', default='Release',
|
||||
description='The CMake build type to build',
|
||||
values=('Debug', 'Release', 'RelWithDebInfo', 'MinSizeRel'))
|
||||
|
||||
# Universal dependency
|
||||
depends_on('cmake@3.8:', type='build')
|
||||
depends_on('python@2.7:', type='build')
|
||||
|
||||
# openmp dependencies
|
||||
depends_on('perl-data-dumper', type=('build'))
|
||||
depends_on('hwloc')
|
||||
|
||||
# libomptarget dependencies
|
||||
depends_on('libelf', when='+cuda')
|
||||
depends_on('libffi', when='+cuda')
|
||||
# note that there may be other llvm-flang + cuda conflicts, but these
|
||||
# are the only versions that are relevant for the flang+nvptx package
|
||||
# llvm 7 not compatible with newer version of cuda
|
||||
depends_on('cuda@:9', when='+cuda@release_70')
|
||||
depends_on('cuda@:9', when='+cuda@20190329')
|
||||
|
||||
# LLVM-Flang Componentes: Driver, OpenMP
|
||||
resource(name='flang-driver',
|
||||
git='https://github.com/flang-compiler/flang-driver.git',
|
||||
branch='release_90',
|
||||
destination='tools',
|
||||
placement='clang',
|
||||
when='@release_90')
|
||||
|
||||
resource(name='flang-driver',
|
||||
git='https://github.com/flang-compiler/flang-driver.git',
|
||||
branch='release_80',
|
||||
destination='tools',
|
||||
placement='clang',
|
||||
when='@release_80')
|
||||
|
||||
resource(name='flang-driver',
|
||||
git='https://github.com/flang-compiler/flang-driver.git',
|
||||
branch='release_70',
|
||||
destination='tools',
|
||||
placement='clang',
|
||||
when='@release_70')
|
||||
|
||||
resource(name='flang-driver',
|
||||
git='https://github.com/flang-compiler/flang-driver.git',
|
||||
branch='release_60',
|
||||
destination='tools',
|
||||
placement='clang',
|
||||
when='@release_60')
|
||||
|
||||
resource(name='flang-driver',
|
||||
git='https://github.com/flang-compiler/flang-driver.git',
|
||||
tag='flang_20190329',
|
||||
destination='tools',
|
||||
placement='clang',
|
||||
when='@20190329')
|
||||
|
||||
resource(name='flang-driver',
|
||||
git='https://github.com/flang-compiler/flang-driver.git',
|
||||
tag='flang_20181226_70',
|
||||
destination='tools',
|
||||
placement='clang',
|
||||
when='@20181226_70')
|
||||
|
||||
resource(name='flang-driver',
|
||||
git='https://github.com/flang-compiler/flang-driver.git',
|
||||
tag='flang_20181226_60',
|
||||
destination='tools',
|
||||
placement='clang',
|
||||
when='@20181226_60')
|
||||
|
||||
resource(name='flang-driver',
|
||||
git='https://github.com/flang-compiler/flang-driver.git',
|
||||
tag='flang_20180921',
|
||||
destination='tools',
|
||||
placement='clang',
|
||||
when='@20180921')
|
||||
|
||||
resource(name='flang-driver',
|
||||
git='https://github.com/flang-compiler/flang-driver.git',
|
||||
tag='flang_20180921',
|
||||
destination='tools',
|
||||
placement='clang',
|
||||
when='@20180308')
|
||||
|
||||
resource(name='openmp',
|
||||
git='https://github.com/llvm-mirror/openmp.git',
|
||||
branch='release_90',
|
||||
destination='projects',
|
||||
placement='openmp',
|
||||
when='@release_90')
|
||||
|
||||
resource(name='openmp',
|
||||
git='https://github.com/flang-compiler/openmp.git',
|
||||
branch='release_80',
|
||||
destination='projects',
|
||||
placement='openmp',
|
||||
when='@release_80')
|
||||
|
||||
resource(name='openmp',
|
||||
git='https://github.com/flang-compiler/openmp.git',
|
||||
branch='release_70',
|
||||
destination='projects',
|
||||
placement='openmp',
|
||||
when='@release_70')
|
||||
|
||||
resource(name='openmp',
|
||||
git='https://github.com/flang-compiler/openmp.git',
|
||||
branch='release_60',
|
||||
destination='projects',
|
||||
placement='openmp',
|
||||
when='@release_60')
|
||||
|
||||
resource(name='openmp',
|
||||
git='https://github.com/flang-compiler/openmp.git',
|
||||
tag='flang_20190329',
|
||||
destination='projects',
|
||||
placement='openmp',
|
||||
when='@20190329')
|
||||
|
||||
resource(name='openmp',
|
||||
git='https://github.com/flang-compiler/openmp.git',
|
||||
tag='flang_20181226_70',
|
||||
destination='projects',
|
||||
placement='openmp',
|
||||
when='@20181226_70')
|
||||
|
||||
resource(name='openmp',
|
||||
git='https://github.com/flang-compiler/openmp.git',
|
||||
tag='flang_20181226_60',
|
||||
destination='projects',
|
||||
placement='openmp',
|
||||
when='@20181226_60')
|
||||
|
||||
resource(name='openmp',
|
||||
git='https://github.com/flang-compiler/openmp.git',
|
||||
tag='flang_20180921',
|
||||
destination='projects',
|
||||
placement='openmp',
|
||||
when='@20180921')
|
||||
|
||||
def cmake_args(self):
|
||||
spec = self.spec
|
||||
# universal
|
||||
args = [
|
||||
'-DLLVM_ENABLE_RTTI:BOOL=ON',
|
||||
'-DLLVM_ENABLE_EH:BOOL=ON',
|
||||
'-DCLANG_DEFAULT_OPENMP_RUNTIME:STRING=libomp',
|
||||
]
|
||||
args.append('-DPYTHON_EXECUTABLE={0}'.format(
|
||||
spec['python'].command.path))
|
||||
|
||||
# needed by flang-driver
|
||||
args.append('-DFLANG_LLVM_EXTENSIONS=ON')
|
||||
|
||||
if '+all_targets' not in spec: # all is default in cmake
|
||||
if spec.target.family == 'x86' or spec.target.family == 'x86_64':
|
||||
target = 'X86'
|
||||
elif spec.target.family == 'arm':
|
||||
target = 'ARM'
|
||||
elif spec.target.family == 'aarch64':
|
||||
target = 'AArch64'
|
||||
elif (spec.target.family == 'ppc64' or
|
||||
spec.target.family == 'ppc64le' or
|
||||
spec.target.family == 'ppc' or
|
||||
spec.target.family == 'ppcle'):
|
||||
target = 'PowerPC'
|
||||
else:
|
||||
raise InstallError(
|
||||
'Unsupported architecture: ' + spec.target.family)
|
||||
|
||||
if '+cuda' in spec:
|
||||
args.append(
|
||||
'-DLLVM_TARGETS_TO_BUILD:STRING=NVPTX;' + target)
|
||||
else:
|
||||
args.append(
|
||||
'-DLLVM_TARGETS_TO_BUILD:STRING=' + target)
|
||||
|
||||
# used by openmp
|
||||
args.append('-DLIBOMP_USE_HWLOC=On')
|
||||
args.append('-DLIBOMP_FORTRAN_MODULES=ON')
|
||||
args.append('-DLIBOMP_ENABLE_SHARED=TRUE')
|
||||
|
||||
# Make sure llvm-flang can find GCC's libstdc++
|
||||
if self.compiler.name == "gcc":
|
||||
gcc_prefix = ancestor(self.compiler.cc, 2)
|
||||
args.append('-DGCC_INSTALL_PREFIX=' + gcc_prefix)
|
||||
|
||||
# used by libomptarget for NVidia gpu
|
||||
if '+cuda' in spec:
|
||||
args.append('-DOPENMP_ENABLE_LIBOMPTARGET=ON')
|
||||
cuda_arch_list = spec.variants['cuda_arch'].value
|
||||
args.append('-DCUDA_TOOLKIT_ROOT_DIR=%s' % spec['cuda'].prefix)
|
||||
args.append('-DLIBOMPTARGET_NVPTX_COMPUTE_CAPABILITIES={0}'.format(
|
||||
','.join(cuda_arch_list)))
|
||||
args.append('-DCLANG_OPENMP_NVPTX_DEFAULT_ARCH=sm_{0}'.format(
|
||||
cuda_arch_list[-1]))
|
||||
else:
|
||||
args.append('-DOPENMP_ENABLE_LIBOMPTARGET=OFF')
|
||||
|
||||
return args
|
||||
|
||||
@run_after("install")
|
||||
def post_install(self):
|
||||
spec = self.spec
|
||||
|
||||
# Manual bootstrap needed to get NVidia BC compiled with the
|
||||
# clang that was just built
|
||||
if '+cuda' in spec:
|
||||
ompdir = 'build-bootstrapped-omp'
|
||||
# rebuild libomptarget to get bytecode runtime library files
|
||||
with working_dir(ompdir, create=True):
|
||||
args = [
|
||||
self.stage.source_path + '/projects/openmp',
|
||||
'-DCMAKE_C_COMPILER:PATH={0}'.format(
|
||||
spec.prefix.bin + '/clang'),
|
||||
'-DCMAKE_CXX_COMPILER:PATH={0}'.format(
|
||||
spec.prefix.bin + '/clang++'),
|
||||
'-DCMAKE_INSTALL_PREFIX:PATH={0}'.format(
|
||||
spec.prefix)
|
||||
]
|
||||
args = args + self.cmake_args()
|
||||
# args = self.cmake_args()
|
||||
# enable CUDA bitcode
|
||||
args.append('-DLIBOMPTARGET_NVPTX_ENABLE_BCLIB=true')
|
||||
# work around bad libelf detection in libomptarget
|
||||
args.append(
|
||||
'-DCMAKE_CXX_FLAGS:String=-I{0} -I{1}'.format(
|
||||
spec['libelf'].prefix.include,
|
||||
spec['hwloc'].prefix.include))
|
||||
|
||||
# Only build if offload target.
|
||||
cmake(*args)
|
||||
make()
|
||||
make('install')
|
|
@ -1,91 +0,0 @@
|
|||
diff --git a/runtime/libpgmath/lib/common/ceil.c b/runtime/libpgmath/lib/common/ceil.c
|
||||
index 3b66ca5c..341c5194 100644
|
||||
--- a/runtime/libpgmath/lib/common/ceil.c
|
||||
+++ b/runtime/libpgmath/lib/common/ceil.c
|
||||
@@ -16,9 +16,11 @@
|
||||
*/
|
||||
|
||||
#include "mthdecls.h"
|
||||
+/*
|
||||
#if defined(__SSE4_1__) || defined(__AVX__)
|
||||
#include <immintrin.h>
|
||||
#endif
|
||||
+*/
|
||||
|
||||
float
|
||||
__mth_i_ceil(float x)
|
||||
diff --git a/runtime/libpgmath/lib/common/dceil.c b/runtime/libpgmath/lib/common/dceil.c
|
||||
index 67482ef2..5dae82f9 100644
|
||||
--- a/runtime/libpgmath/lib/common/dceil.c
|
||||
+++ b/runtime/libpgmath/lib/common/dceil.c
|
||||
@@ -16,6 +16,7 @@
|
||||
*/
|
||||
|
||||
#include "mthdecls.h"
|
||||
+/*
|
||||
#if defined(__SSE4_1__) || defined(__AVX__)
|
||||
#include <immintrin.h>
|
||||
#endif
|
||||
@@ -33,9 +34,12 @@ __mth_i_dceil_sse(double x)
|
||||
return _mm_cvtsd_f64(_mm_ceil_sd(_mm_set1_pd(x), _mm_set1_pd(x)));
|
||||
}
|
||||
#else
|
||||
+*/
|
||||
double
|
||||
__mth_i_dceil(double x)
|
||||
{
|
||||
return ceil(x);
|
||||
}
|
||||
+/*
|
||||
#endif
|
||||
+*/
|
||||
diff --git a/runtime/libpgmath/lib/common/dfloor.c b/runtime/libpgmath/lib/common/dfloor.c
|
||||
index f947ef33..8b955897 100644
|
||||
--- a/runtime/libpgmath/lib/common/dfloor.c
|
||||
+++ b/runtime/libpgmath/lib/common/dfloor.c
|
||||
@@ -16,6 +16,7 @@
|
||||
*/
|
||||
|
||||
#include "mthdecls.h"
|
||||
+/*
|
||||
#if defined(__SSE4_1__) || defined(__AVX__)
|
||||
#include <immintrin.h>
|
||||
#endif
|
||||
@@ -33,9 +34,12 @@ __mth_i_dfloor_sse(double x)
|
||||
return _mm_cvtsd_f64(_mm_floor_sd(_mm_set1_pd(x), _mm_set1_pd(x)));
|
||||
}
|
||||
#else
|
||||
+*/
|
||||
double
|
||||
__mth_i_dfloor(double x)
|
||||
{
|
||||
return floor(x);
|
||||
}
|
||||
+/*
|
||||
#endif
|
||||
+*/
|
||||
diff --git a/runtime/libpgmath/lib/common/floor.c b/runtime/libpgmath/lib/common/floor.c
|
||||
index 7865bedc..c13872df 100644
|
||||
--- a/runtime/libpgmath/lib/common/floor.c
|
||||
+++ b/runtime/libpgmath/lib/common/floor.c
|
||||
@@ -16,6 +16,7 @@
|
||||
*/
|
||||
|
||||
#include "mthdecls.h"
|
||||
+/*
|
||||
#if defined(__SSE4_1__) || defined(__AVX__)
|
||||
#include <immintrin.h>
|
||||
#endif
|
||||
@@ -33,9 +34,12 @@ __mth_i_floor_sse(float x)
|
||||
return _mm_cvtss_f32(_mm_floor_ss(_mm_set1_ps(x), _mm_set1_ps(x)));
|
||||
}
|
||||
#else
|
||||
+*/
|
||||
float
|
||||
__mth_i_floor(float x)
|
||||
{
|
||||
return floorf(x);
|
||||
}
|
||||
+/*
|
||||
#endif
|
||||
+*/
|
|
@ -1,38 +0,0 @@
|
|||
# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other
|
||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||
#
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
|
||||
|
||||
from spack import *
|
||||
|
||||
|
||||
class Pgmath(CMakePackage):
|
||||
"""Flang's math library"""
|
||||
|
||||
homepage = "https://github.com/flang-compiler/flang"
|
||||
url = "https://github.com/flang-compiler/flang/archive/flang_20190329.tar.gz"
|
||||
git = "https://github.com/flang-compiler/flang.git"
|
||||
|
||||
maintainers = ['naromero77']
|
||||
|
||||
version('master', branch='master')
|
||||
version('20190329', sha256='b8c621da53829f8c53bad73125556fb1839c9056d713433b05741f7e445199f2')
|
||||
version('20181226', sha256='00e716bea258c3bb60d6a5bb0c82bc79f67000062dc89939693e75f501883c36')
|
||||
version('20180921', sha256='f33bd1f054e474f1e8a204bb6f78d42f8f6ecf7a894fdddc3999f7c272350784')
|
||||
version('20180612', sha256='6af858bea013548e091371a97726ac784edbd4ff876222575eaae48a3c2920ed')
|
||||
|
||||
# work around for this issue
|
||||
# https://github.com/flang-compiler/flang/issues/602
|
||||
patch('https://github.com/flang-compiler/flang/commit/7fcd6346a9427977afe4534c0f19bbbba04c99a3.diff',
|
||||
sha256='4014df1e5855dd21242b0fc938a4e7835941c20f9a89c3a7a5314e74b6232bcb',
|
||||
when='@20190329')
|
||||
|
||||
# workaround for this issue
|
||||
# https://github.com/flang-compiler/flang/issues/838
|
||||
patch('libpgmath_symbols.patch', when='@20190329,master')
|
||||
|
||||
depends_on("awk", type="build")
|
||||
conflicts("%gcc@:7.1.9999")
|
||||
|
||||
root_cmakelists_dir = 'runtime/libpgmath'
|
Loading…
Reference in a new issue