Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions easybuild/easyconfigs/b/Bison/Bison-3.0.4-GCCcore-8.1.0.eb
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
easyblock = 'ConfigureMake'

name = 'Bison'
version = '3.0.4'

homepage = 'http://www.gnu.org/software/bison'
description = """Bison is a general-purpose parser generator that converts an annotated context-free grammar
into a deterministic LR or generalized LR (GLR) parser employing LALR(1) parser tables."""

toolchain = {'name': 'GCCcore', 'version': '8.1.0'}

source_urls = [GNU_SOURCE]
sources = [SOURCELOWER_TAR_GZ]
checksums = ['b67fd2daae7a64b5ba862c66c07c1addb9e6b1b05c5f2049392cfd8a2172952e']

builddependencies = [
('M4', '1.4.18'),
# use same binutils version that was used when building GCCcore toolchain
('binutils', '2.30', '', True),
]


sanity_check_paths = {
'files': ['bin/%s' % x for x in ['bison', 'yacc']] + [('lib/liby.a', 'lib64/liby.a')],
'dirs': [],
}

moduleclass = 'lang'
22 changes: 22 additions & 0 deletions easybuild/easyconfigs/b/binutils/binutils-2.30-GCCcore-8.1.0.eb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name = 'binutils'
version = '2.30'

homepage = 'http://directory.fsf.org/project/binutils/'
description = "binutils: GNU binary utilities"

toolchain = {'name': 'GCCcore', 'version': '8.1.0'}

sources = [SOURCE_TAR_GZ]
source_urls = [GNU_SOURCE]
checksums = ['8c3850195d1c093d290a716e20ebcaa72eda32abf5e3d8611154b39cff79e9ea']

builddependencies = [
('flex', '2.6.4'),
('Bison', '3.0.4'),
# zlib required, but being linked in statically, so not a runtime dep
('zlib', '1.2.11'),
# use same binutils version that was used when building GCC toolchain, to 'bootstrap' this binutils
('binutils', version, '', True)
]

moduleclass = 'tools'
30 changes: 30 additions & 0 deletions easybuild/easyconfigs/f/flex/flex-2.6.4-GCCcore-8.1.0.eb
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name = 'flex'
version = '2.6.4'

homepage = 'http://flex.sourceforge.net/'

description = """
Flex (Fast Lexical Analyzer) is a tool for generating scanners. A scanner,
sometimes called a tokenizer, is a program which recognizes lexical patterns
in text.
"""

toolchain = {'name': 'GCCcore', 'version': '8.1.0'}
toolchainopts = {'pic': True}

source_urls = ['https://github.com/westes/flex/releases/download/v%(version)s/']
sources = [SOURCELOWER_TAR_GZ]
checksums = ['e87aae032bf07c26f85ac0ed3250998c37621d95f8bd748b31f15b33c45ee995']

builddependencies = [
('Bison', '3.0.4'),
('help2man', '1.47.6'),
# use same binutils version that was used when building GCC toolchain
('binutils', '2.30', '', True),
]

dependencies = [
('M4', '1.4.18'),
]

moduleclass = 'lang'
25 changes: 25 additions & 0 deletions easybuild/easyconfigs/g/GCC/GCC-8.1.0-2.30.eb
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
easyblock = 'Bundle'

name = 'GCC'
version = '8.1.0'

binutilsver = '2.30'
versionsuffix = '-%s' % binutilsver

homepage = 'http://gcc.gnu.org/'
description = """The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Java, and Ada,
as well as libraries for these languages (libstdc++, libgcj,...)."""

toolchain = {'name': 'dummy', 'version': ''}

dependencies = [
('GCCcore', version),
# binutils built on top of GCCcore, which was built on top of (dummy-built) binutils
('binutils', binutilsver, '', ('GCCcore', version)),
]

altroot = 'GCCcore'
altversion = 'GCCcore'

# this bundle serves as a compiler-only toolchain, so it should be marked as compiler (important for HMNS)
moduleclass = 'compiler'
53 changes: 53 additions & 0 deletions easybuild/easyconfigs/g/GCCcore/GCCcore-8.1.0.eb
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
easyblock = 'EB_GCC'

name = 'GCCcore'
version = '8.1.0'

homepage = 'http://gcc.gnu.org/'
description = """The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Java, and Ada,
as well as libraries for these languages (libstdc++, libgcj,...)."""
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@boegel Is it worth adding a line in the description about the distinction between GCC and GCCcore, to make the distinction clearer? It's a question that keeps coming up...

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, not sure if that'll make much difference...

I'm actually hoping we can get rid of the GCC vs GCCcore situation, we may have another way of dealing with this now, for example by using Bundle & components to perform a GCC installation that also includes binutils, but we need to check how this will impact sites using HMNS.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@boegel We have HMNS. What needs testing/checking?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Whether we can use GCC as a subtoolchain for both foss and intel (rather than GCCcore).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't work, the reason GCCcore exists is because it is not classed as a compiler in the hierarchy (i.e., it is not part of the compiler family), which allows it to be loaded at the same time as another compiler. It is there to provide a base for all the other compilers.
GCC is in the family so can't be loaded at the same time as another compiler. If we did not include it in the family we would not get the desired swapping behaviour. At JSC to avoid confusion we hide GCCcore.

Copy link
Collaborator

@jhein32 jhein32 May 18, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Folling @ocaisa 's input I did a simple test on our machine

load GCC/6.4.0-2.28
load intel/2018a

I don't see any unloading. Checking on environment variables, the ones related to GCC, eg. EBVERSIONGCC=6.4.0 is still there after loading intel (it is not there when I only load the intel). A "which gcc" is still pointing at the correct version, so is "mpicc -v". "mpiicc -v" points to the right intel compiler.

So if I were to go along and build software against this outside EasyBuild this should just work. Most likely I am still to ignorant on the internal workings of EB. Could someone clue me where the "explosion" comes?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

By the way, should we move this discussion out of the GCC 8.1.0 pull request? I think it belongs somewhere else.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed with @jhein32, I've opened an issue for this: #6366

Let's get this one merged @migueldiascosta?


toolchain = {'name': 'dummy', 'version': ''}

mpfr_version = '4.0.1'

source_urls = [
'http://ftpmirror.gnu.org/gnu/gcc/gcc-%(version)s', # GCC auto-resolving HTTP mirror
'http://ftpmirror.gnu.org/gnu/gmp', # idem for GMP
'http://ftpmirror.gnu.org/gnu/mpfr', # idem for MPFR
'http://ftpmirror.gnu.org/gnu/mpc', # idem for MPC
'ftp://gcc.gnu.org/pub/gcc/infrastructure/', # GCC dependencies
'http://gcc.cybermirror.org/infrastructure/', # HTTP mirror for GCC dependencies
'http://isl.gforge.inria.fr/', # original HTTP source for ISL
]
sources = [
'gcc-%(version)s.tar.gz',
'gmp-6.1.2.tar.bz2',
'mpfr-%s.tar.bz2' % mpfr_version,
'mpc-1.1.0.tar.gz',
'isl-0.19.tar.bz2',
]
patches = [
'GCCcore-6.2.0-fix-find-isl.patch',
]
checksums = [
'af300723841062db6ae24e38e61aaf4fbf3f6e5d9fd3bf60ebbdbf95db4e9f09', # gcc-8.1.0.tar.gz
'5275bb04f4863a13516b2f39392ac5e272f5e1bb8057b18aec1c9b79d73d8fb2', # gmp-6.1.2.tar.bz2
'a4d97610ba8579d380b384b225187c250ef88cfe1d5e7226b89519374209b86b', # mpfr-4.0.1.tar.bz2
'6985c538143c1208dcb1ac42cedad6ff52e267b47e5f970183a3e75125b43c2e', # mpc-1.1.0.tar.gz
'd59726f34f7852a081fbd3defd1ab2136f174110fc2e0c8d10bb122173fa9ed8', # isl-0.19.tar.bz2
'5ad909606d17d851c6ad629b4fddb6c1621844218b8d139fed18c502a7696c68', # GCCcore-6.2.0-fix-find-isl.patch
]

builddependencies = [
('M4', '1.4.18'),
('binutils', '2.30'),
# a sufficiently recent GCC is required (needs to support -flto), so can't rely on system GCC
('GCCcore', '6.4.0'),
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@geimer Thoughts on this? The gcc includes with CentOS 6.x is apparently not recent enough to build GCC 8.1...

]

languages = ['c', 'c++', 'fortran']

withisl = True

moduleclass = 'compiler'
25 changes: 25 additions & 0 deletions easybuild/easyconfigs/h/help2man/help2man-1.47.6-GCCcore-8.1.0.eb
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
easyblock = 'ConfigureMake'

name = 'help2man'
version = '1.47.6'

homepage = 'https://www.gnu.org/software/help2man/'
description = """help2man produces simple manual pages from the '--help' and '--version' output of other commands."""

toolchain = {'name': 'GCCcore', 'version': '8.1.0'}

source_urls = [GNU_SOURCE]
sources = [SOURCE_TAR_XZ]
checksums = ['d91b0295b72a638e4a564f643e4e6d1928779131f628c00f356c13bf336de46f']

builddependencies = [
# use same binutils version that was used when building GCC toolchain
('binutils', '2.30', '', True),
]

sanity_check_paths = {
'files': ['bin/help2man'],
'dirs': [],
}

moduleclass = 'tools'
29 changes: 29 additions & 0 deletions easybuild/easyconfigs/m/M4/M4-1.4.18-GCCcore-8.1.0.eb
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
easyblock = 'ConfigureMake'

name = 'M4'
version = '1.4.18'

homepage = 'http://www.gnu.org/software/m4/m4.html'
description = """GNU M4 is an implementation of the traditional Unix macro processor. It is mostly SVR4 compatible
although it has some extensions (for example, handling more than 9 positional parameters to macros).
GNU M4 also has built-in functions for including files, running shell commands, doing arithmetic, etc."""

toolchain = {'name': 'GCCcore', 'version': '8.1.0'}

source_urls = [GNU_SOURCE]
sources = [SOURCELOWER_TAR_GZ]
checksums = ['ab2633921a5cd38e48797bf5521ad259bdc4b979078034a3b790d7fec5493fab']

# use same binutils version that was used when building GCC toolchain
builddependencies = [('binutils', '2.30', '', True)]

# '-fgnu89-inline' is required to avoid linking errors with older glibc's,
# see https://github.com/easybuilders/easybuild-easyconfigs/issues/529
configopts = "--enable-c++ CPPFLAGS=-fgnu89-inline"

sanity_check_paths = {
'files': ['bin/m4'],
'dirs': [],
}

moduleclass = 'devel'
26 changes: 26 additions & 0 deletions easybuild/easyconfigs/z/zlib/zlib-1.2.11-GCCcore-8.1.0.eb
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
easyblock = 'ConfigureMake'

name = 'zlib'
version = '1.2.11'

homepage = 'http://www.zlib.net/'
description = """zlib is designed to be a free, general-purpose, legally unencumbered -- that is,
not covered by any patents -- lossless data-compression library for use on virtually any
computer hardware and operating system."""

toolchain = {'name': 'GCCcore', 'version': '8.1.0'}
toolchainopts = {'pic': True}

source_urls = ['http://zlib.net/fossils']
sources = [SOURCELOWER_TAR_GZ]
checksums = ['c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1']

# use same binutils version that was used when building GCC toolchain
builddependencies = [('binutils', '2.30', '', True)]

sanity_check_paths = {
'files': ['include/zconf.h', 'include/zlib.h', 'lib/libz.a', 'lib/libz.%s' % SHLIB_EXT],
'dirs': [],
}

moduleclass = 'lib'