summaryrefslogtreecommitdiff
path: root/bootstrap/README.Linux
blob: 80286efcdff34c05a43a14e40091b81cd47438bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
$NetBSD: README.Linux,v 1.14 2022/06/15 20:17:32 schmonz Exp $

# General

Generally, bootstrapping on GNU/Linux is expected to Just Work with
gcc.

# Compilers

## gcc

gcc is the standard approach.

As of 2022 it has been reported that systems with gcc 4.8 (e.g. RHEL7)
do not bootstrap, but that gcc7 (AWS-flavored RHEL7) and gcc8 (RHEL8) succeed.

## clang

There are no reports of success or failure with clang.

## icc

It was reported in 2008 that icc (Intel C++ Compiler) 8.0 and 8.1
have been tested on i386.  See the old section at the end.

# Alpine and derivatives

After bootstrap, if you want to be using pkgsrc build/install locking,
install a more featureful ps(1) than BusyBox's:

	apk add procps

You may also find that pkgsrc needs a more featureful date(1),
such as GNU's:

	apk add coreutils

# Debian and derivatives

For Debian and derivatives such as Ubuntu the following packages should be
installed prior to attempting bootstrap:

apt-get install cvs libncurses5 libncurses5-dev gcc g++ zlib1g-dev \
			zlib1g libssl-dev libudev-dev

# RedHat and derivatives

In 2022, pkgsrc bootstrapped ok on RHEL 8.5, and packages generally worked.

# NixOS

stdenv.cc should be installed prior to attempting bootstrap.

Please note that if you run the Nix garbage collector and it collects
libc, every pkgsrc binary (including binaries generated during bootstrap)
will need to be rebuilt.

# musl

Linux with musl was reported to work in 2022.

# Termux (Android)

In 2022, unprivileged bootstrap failed.

# Very old information

## Details of using icc (last update 2005

To bootstrap using icc, assuming the default icc installation
directory:

	env CC=/opt/intel_cc_80/bin/icc LDFLAGS=-static-libcxa \
		ac_cv___attribute__=yes ./bootstrap

note: icc 8.1 needs the `-i-static' argument instead of
-static-libcxa.

icc supports __attribute__, but the GNU configure test uses a nested
function, which icc does not support. #undef'ing __attribute__ has the
unfortunate side-effect of breaking many of the Linux header files, which
cannot be compiled properly without __attribute__. The test must be
overridden so that __attribute__ is assumed supported by the compiler.

After bootstrapping, you should set PKGSRC_COMPILER in mk.conf:

	PKGSRC_COMPILER=icc

The default installation directory for icc is /opt/intel_cc_80, which
is also the pkgsrc default. If you have installed it into a different
directory, set ICCBASE in mk.conf:

	ICCBASE=/opt/icc

pkgsrc uses the static linking method of the runtime libraries
provided by icc, so binaries can be run on other systems which do not
have the shared libraries installed.

Libtool, however, extracts a list of libraries from the ld(1) command
run when linking a C++ shared library and records it, throwing away
the -Bstatic and -Bdynamic options interspersed between the libraries.
This means that libtool-linked C++ shared libraries will have a
runtime dependency on the icc libraries until this is fixed in
libtool.