From 50eea5cb137d47aa565c141771c7eaacdcd1ca41 Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Mon, 11 Sep 2017 21:54:38 +0200 Subject: Added 'ldc' compiler for D language based on LLVM (#5279) --- .../builtin/packages/ldc-bootstrap/package.py | 65 +++++++++++++++++ var/spack/repos/builtin/packages/ldc/package.py | 85 ++++++++++++++++++++++ 2 files changed, 150 insertions(+) create mode 100644 var/spack/repos/builtin/packages/ldc-bootstrap/package.py create mode 100644 var/spack/repos/builtin/packages/ldc/package.py diff --git a/var/spack/repos/builtin/packages/ldc-bootstrap/package.py b/var/spack/repos/builtin/packages/ldc-bootstrap/package.py new file mode 100644 index 0000000000..9cc49f6a74 --- /dev/null +++ b/var/spack/repos/builtin/packages/ldc-bootstrap/package.py @@ -0,0 +1,65 @@ +############################################################################## +# Copyright (c) 2013-2017, Lawrence Livermore National Security, LLC. +# Produced at the Lawrence Livermore National Laboratory. +# +# This file is part of Spack. +# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. +# LLNL-CODE-647188 +# +# For details, see https://github.com/llnl/spack +# Please also see the NOTICE and LICENSE files for our notice and the LGPL. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License (as +# published by the Free Software Foundation) version 2.1, February 1999. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and +# conditions of the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +############################################################################## +from spack import * + + +class LdcBootstrap(CMakePackage): + """The LDC project aims to provide a portable D programming language + compiler with modern optimization and code generation capabilities. + + LDC is fully Open Source; the parts of the code not taken/adapted from + other projects are BSD-licensed (see the LICENSE file for details). + + Consult the D wiki for further information: http://wiki.dlang.org/LDC + + This old version of the compiler is needed to bootstrap newer ones. + """ + + homepage = "https://dlang.org/" + url = "https://github.com/ldc-developers/ldc/releases/download/v0.17.4/ldc-0.17.4-src.tar.gz" + + # This is the last version that does not require a D compiler to bootstrap + version('0.17.4', '000e006426d6094fabd2a2bdab0ff0b7') + + depends_on('llvm@3.7:') + depends_on('zlib') + depends_on('libconfig') + depends_on('curl') + depends_on('libedit') + depends_on('binutils') + + def setup_dependent_environment(self, build_env, run_env, dep_spec): + + # The code below relies on this function being executed after the + # environment has been sanitized (because LD_LIBRARY_PATH is among + # the variables that get unset) + + # We need libphobos in LD_LIBRARY_PATH + build_env.prepend_path('LD_LIBRARY_PATH', self.prefix.lib) + + def cmake_args(self): + return [ + '-DBUILD_SHARED_LIBS:BOOL=ON' + ] diff --git a/var/spack/repos/builtin/packages/ldc/package.py b/var/spack/repos/builtin/packages/ldc/package.py new file mode 100644 index 0000000000..001e3bfadf --- /dev/null +++ b/var/spack/repos/builtin/packages/ldc/package.py @@ -0,0 +1,85 @@ +############################################################################## +# Copyright (c) 2013-2017, Lawrence Livermore National Security, LLC. +# Produced at the Lawrence Livermore National Laboratory. +# +# This file is part of Spack. +# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. +# LLNL-CODE-647188 +# +# For details, see https://github.com/llnl/spack +# Please also see the NOTICE and LICENSE files for our notice and the LGPL. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License (as +# published by the Free Software Foundation) version 2.1, February 1999. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and +# conditions of the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +############################################################################## +from spack import * + + +class Ldc(CMakePackage): + """The LDC project aims to provide a portable D programming language + compiler with modern optimization and code generation capabilities. + + LDC is fully Open Source; the parts of the code not taken/adapted from + other projects are BSD-licensed (see the LICENSE file for details). + + Consult the D wiki for further information: http://wiki.dlang.org/LDC + """ + + homepage = "https://dlang.org/" + url = "https://github.com/ldc-developers/ldc/releases/download/v0.17.4/ldc-0.17.4-src.tar.gz" + + version('1.3.0', '537d992a361b0fd0440b24a5145c9107') + + variant( + 'shared', + default=True, + description='Build runtime and tooling as shared libs' + ) + + depends_on('llvm@3.9:') + depends_on('zlib') + depends_on('libconfig') + depends_on('curl') + depends_on('libedit') + depends_on('binutils', type=('build', 'link', 'run')) + depends_on('ldc-bootstrap', type=('build', 'link')) + + provides('D@2') + + def cmake_args(self): + ldmd2 = self.spec['ldc-bootstrap'].prefix.bin.ldmd2 + + args = [ + '-DD_COMPILER:STRING={0}'.format(ldmd2), + '-DBUILD_SHARED_LIBS:BOOL={0}'.format( + 'ON' if '+shared' in self.spec else 'OFF' + ), + '-DLDC_INSTALL_LTOPLUGIN:BOOL=ON', + '-DLDC_BUILD_WITH_LTO:BOOL=OFF' + ] + + return args + + @run_after('install') + def add_rpath_to_conf(self): + + # Here we modify the configuration file for ldc2 to inject flags + # that will rpath the standard library location + + config_file = join_path(self.prefix.etc, 'ldc2.conf') + + search_for = 'switches = \[' + substitute_with = 'switches = [\n' + \ + ' "-L-rpath={0}",'.format(self.prefix.lib) + + filter_file(search_for, substitute_with, config_file) -- cgit v1.2.3-70-g09d2