Skip to content

Commit 705ba85

Browse files
author
Elizabeth Fischer
authored
Add build instructions to front page.
1 parent 0d5d1fe commit 705ba85

1 file changed

Lines changed: 87 additions & 0 deletions

File tree

README.md

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,90 @@ Summary: you can do anything except sell this library in source
2121
form. Blitz is licensed under either the Lesser GPL version 3 license
2222
(see COPYING and COPYING.LESSER), the BSD license (see COPYRIGHT), and
2323
the less restrictive Perl "artistic license" version 2.0 (see LICENSE).
24+
25+
Installing Blitz
26+
================
27+
28+
We recommend that users consider using Spack to install Blitz++ (see
29+
below; use `spack install blitz`). For those who enjoy spending hours
30+
upon hours installing software by hand...
31+
32+
Blitz++ is distributed with a GNU Autotools build. Autotools was
33+
originally developed to address the non-portability of hand-built
34+
Makefiles. It was a big step forward, and for the first time allowed
35+
users to install programs on their own Unix/Linux system, without too
36+
many hassles due to minor differences between Unices. While
37+
frequently easy to use for end users, Autotools is also arcane and
38+
difficult to use. It has since been supplanted by `CMake`, which
39+
offers a somewhat more straightforward way of doing things. It is our
40+
recommendation that any new projects are produced with CMake builds
41+
--- not Autotools or hand-built Makefiles. See
42+
[here](https://devmanual.gentoo.org/general-concepts/autotools/index.html)
43+
--- or search around --- for more information on Autotools:
44+
45+
NOTES:
46+
47+
1. Autools-based tarballs are normally distributed with a
48+
`./configure` script. This is most convenient for the user, since
49+
nothing special must be installed on the system for it to work.
50+
Autotools-based Git repositories normally do *not* contain the
51+
`./configure` script: because that script is a generated file, not an
52+
original source file. Anyone checking out an Autotools-based project
53+
from a Git repository needs to run `autoreconf` to first generate the
54+
`./configure` file; this is a fundamental fact of life when using
55+
Autotools and Git. Search around for instructions on how to do so.
56+
57+
Auto-Builders: Spack
58+
=====================
59+
60+
Although Autotools is not in itself particularly difficult to use,
61+
modern open source software stacks frequently require dozens or even
62+
hundreds of packages for a particular project. Blitz++ does not have
63+
any dependencies, and is therefore pretty "easy" to install; but
64+
typical projects that involve Blitz++ could require the installation
65+
of many more packages. Installing a dozen or more packages by hand is
66+
slow, error-prone, and must be re-done every time something
67+
foundational changes (compiler or OS version) --- in other words, hand
68+
installation of packages is a waste of time. Nobody hand-builds
69+
assembly code today either. Some things are better automated.
70+
71+
[Spack](https://spack.io) is an auto-installer that automates the
72+
installation (and re-installation) of packages. People have
73+
successfully used it to manage software stacks for particular projects
74+
involving over 100 packages --- which would previously have taken
75+
weeks for one person to complete by hand. We recommend that people
76+
interested in Blitz++ use Spack for installation, for the following
77+
reaosns:
78+
79+
1. Spack already knows the intricacies of building and installing
80+
software --- including Autotools, Autoreconf, CMake, dependency
81+
management, compiler versions, shared libraries, etc. This is arcane,
82+
tricky stuff that should not be foisted on everybody just because they
83+
want to use open source software.
84+
85+
1. Spack already knows the package-specific "gotchas" involved in
86+
installing any particular piece of software. Many packages are quite
87+
standard, and don't require much special knowledge beyond a general
88+
understanding of Autotools or CMake --- but many others have a variety
89+
of "gotchas": they require patches or workardounds for particular
90+
situations, they use standard tools in non-standard ways, they have
91+
bugs that require patching, they involve a one-off hand-built
92+
Makefile; the list goes on. Every package-specific "gotcha" requires
93+
minutes or hours of effort to understand when installing that package
94+
--- effort that does not help in installing any other package, nor
95+
does it help the next person installing the same package. This is a
96+
big waste of time. Spack knows the "gotchas" for each package so you
97+
don't have to.
98+
99+
1. The use of Spack avoides the need for project authors (such as
100+
those at Blitz++) to answer an unending stream of build questions,
101+
almost all of which are entirely generic and have nothing to do with
102+
the actual project. If Spack fails on a particular package, and then
103+
questions are asked on the Spack forum --- then people who spend every
104+
day on build system minutea will be there to help.
105+
106+
1. Spack recipes provide a clear and concise explanation (in Python
107+
code) of how to install a particular package. For those who prefer to
108+
continue stone age traditions, inspection of the Spack package will
109+
tell exactly what is required to install a package by hand, including
110+
the package-specific "gotchas."

0 commit comments

Comments
 (0)