pkgsrc/bootstrap/README.Linux
gdt 102621ce6d bootstrap: Rototill README.Linux
Convert to markdown because the previous style was too confusing.  A
lot of this is ancient; mark it as such.  Fold in comments from Peter
Lai about working/non-working gcc versions.
2022-04-07 15:16:55 +00:00

89 lines
2.8 KiB
Text

$NetBSD: README.Linux,v 1.10 2022/04/07 15:16:55 gdt 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
Long ago, it was reported that icc (Intel C++ Compiler) 8.0 and 8.1
have been tested on i386. See the old section at the end.
# 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
## Old, undated, information
Some versions of Linux (RHEL3 Update 2 for i386 for example) have a
/usr/lib/libacl.la libtool archive file that lists /lib/libattr.la as a
dependency. However, libattr.la does not exist in /lib/libattr.la. If
this is the case, the bootstrap will fail with
grep: /lib/libattr.la: No such file or directory
/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/.tools/bin/sed: can't read /lib/libattr.la: No such file or directory
libtool: link: `/lib/libattr.la' is not a valid libtool archive
The solution is to copy /usr/lib/libattr.la to /lib/libattr.la with:
cp -p /usr/lib/libattr.la /lib
# General old, undated information
## Details of using icc
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.