aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md70
1 files changed, 67 insertions, 3 deletions
diff --git a/README.md b/README.md
index 250f807..8f827a4 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
Reproducible source for XXXXXXXXXXXXXXXXX
-------------------------------------------------------------------------
-Copyright (C) 2018-2022 Mohammad Akhlaghi <mohammad@akhlaghi.org>\
+Copyright (C) 2018-2023 Mohammad Akhlaghi <mohammad@akhlaghi.org>\
See the end of the file for license conditions.
This is the reproducible project source for the paper titled "**XXX XXXXX
@@ -188,6 +188,56 @@ analysis and finally create the final paper).
+
+
+
+
+
+### Building on older systems (+10 year old compilers)
+
+Maneage builds almost all its software itself. But to do that, it needs a C
+and C++ compiler on the host. The C++ standard in particular is updated
+regularly. Therefore, gradually the basic software packages (that are used
+to build the internal Maneage C compiler and other necessary tools) will
+start using the newer language features in their newer versions. As a
+result, if a host doesn't update its compiler for more than a decade, some
+of the basic software may not get built.
+
+Note that this is only a problem for the "basic" software of Maneage (that
+are used to build Maneage's own C compiler), not the high-level (or
+science) software. On GNU/Linux systems, the high-level software get built
+with Maneage's own C compiler. Therefore once Maneage's C compiler is
+built, you don't need to worry about the versions of the high-level
+software.
+
+One solution to such cases is to downgrade the versions of the basic
+software that can't be built. For example, when building Maneage in August
+2022 on a old Debian GNU/Linux system from 2010 (with GCC 4.4.5 and GNU C
+Library 2.11.3 and Linux kernel 2.6.32-5 on an amd64 architecture), the
+following low-level packages needed to be downgraded to slightly earlier
+versions.
+
+| Program name | 2022-08 version | Version for old system |
+|:------------------------------|:---------------:|:----------------------:|
+| PatchELF | 0.13 | 0.9 |
+| GNU Binutils | 2.39 | 2.37 |
+| GNU Compiler Collection (GCC) | 12.1.0 | 10.2.0 |
+
+As you can see above, fortunately most basic software in Maneage respect
++10 year old compilers and are build-able there. So your higher-level
+science software should be buildable with out changing their versions. It
+is _highly improbable_ that these downgrades will affect your final science
+result.
+
+
+
+
+
+
+
+
+
+
### Building on ARM
As of 2021-10-13, very little testing of Maneage has been done on arm64
@@ -237,6 +287,11 @@ light and should be very fast.
+
+
+
+
+
### Building in Docker containers
Docker containers are a common way to build projects in an independent
@@ -534,7 +589,12 @@ steps.
following contents. Just replace `UID` with your user ID (found in
step 1 above). Note that we are manually setting the `maneager` (user)
password to `123` and the root password to '456' (both should be
- repeated because they must be confirmed by `passwd`).
+ repeated because they must be confirmed by `passwd`). To install other
+ operating systems, just change the contents on the `FROM` line. For
+ example, for CentOS 7 you can use `FROM centos:centos7`, for the
+ latest CentOS, you can use `FROM centos:latest` (you may need to add
+ this line `RUN yum install -y passwd` before the `RUN useradd ...`
+ line.).
```
FROM debian:stable-slim
@@ -658,7 +718,11 @@ steps.
versions of both and will use them. But for the very first packages,
they are necessary. In the process, by setting the `PS1` environment
variable, we'll define a color-coding for the interactive shell prompt
- (red for root and purple for the user).
+ (red for root and purple for the user). If you build another operating
+ system, replace the `apt` commands accordingly (for example on CentOS,
+ you don't need the `apt update` line and you should use `yum install
+ -y gcc gcc-c++ wget glibc-static` to install the three basic
+ dependencies).
```shell
su