251 lines
8.8 KiB
Plaintext
251 lines
8.8 KiB
Plaintext
Requirements
|
|
------------
|
|
|
|
Tools are needed for LTP compilation. They should be available as a
|
|
package in any Linux distribution (no specific version is required).
|
|
|
|
Debian / Ubuntu
|
|
|
|
# apt install gcc git make pkgconf autoconf automake bison flex m4 linux-headers-$(uname -r) libc6-dev
|
|
|
|
OpenSUSE / SLES
|
|
|
|
# zypper install gcc git make pkgconf autoconf automake bison flex m4 linux-glibc-devel glibc-devel
|
|
|
|
Fedora / CentOS / RHEL
|
|
|
|
# yum install gcc git make pkgconf autoconf automake bison flex m4 kernel-headers glibc-headers
|
|
|
|
These are minimal build requirements for git compilation. Some tests require
|
|
extra development files of some libraries, see travis/*.sh. There is also
|
|
support for other Linux distributions not listed here.
|
|
|
|
autoconf, automake, m4 (autoconf requirement), git and pkgconf (or pkg-config
|
|
on older distros) are required only for compilation from git (used for creating
|
|
configure file).
|
|
|
|
pkgconf is recommended also for compilation from tarball as it
|
|
does automatic detection of some library support.
|
|
|
|
GNU Bison / Berkeley Yacc is required for ltp-scanner.
|
|
|
|
Configuration
|
|
-------------
|
|
|
|
Configuration requires autoconf:
|
|
|
|
$ cd $TOP_SRCDIR
|
|
$ make autotools
|
|
$ mkdir -p $TOP_BUILDDIR
|
|
$ cd $TOP_BUILDDIR && $TOP_SRCDIR/configure # configure args go here, e.g. CC=$CC, LDFLAGS=$LDFLAGS, etc
|
|
|
|
- $TOP_SRCDIR and $TOP_BUILDDIR are the same for in-build-tree scenarios.
|
|
- $TOP_SRCDIR and $TOP_BUILDDIR differ for out-of-build-tree scenarios.
|
|
|
|
See the In-build-tree and Out-of-build-tree sections below for more details on
|
|
what to do next.
|
|
|
|
Compiling LTP
|
|
-------------
|
|
|
|
In-build-tree
|
|
-------------
|
|
|
|
In-build-tree support is when you build binaries (applications, binary objects)
|
|
in the same directory where the source files reside.
|
|
|
|
$ make all
|
|
$ make \
|
|
"DESTDIR=$SYSROOT" \
|
|
SKIP_IDCHECK=[0|1] \
|
|
install
|
|
|
|
- Specifying DESTDIR is optional, but required when installing to a non-host
|
|
sysroot, as opposed to the host system's sysroot.
|
|
- Specify SKIP_IDCHECK=1 if and when you don't want to modify /etc/{group,passwd}
|
|
on the target system's sysroot.
|
|
|
|
If you get a build error, please report it to ltp@lists.linux.it with
|
|
following information,
|
|
|
|
1. The error output before the failure.
|
|
2. If you used configure:
|
|
i. include/config.h
|
|
ii. include/mk/config.mk
|
|
iii. config.log
|
|
|
|
Out-of-build-tree
|
|
-----------------
|
|
|
|
Out-of-build-tree support is when you build binaries (applications, binary
|
|
objects, generated files) outside of the directory where the source files
|
|
reside. This is typically used when cross-compiling for multiple targets.
|
|
|
|
NOTE: This is by and large correctly implemented, but there are several corner
|
|
cases, where this isn't implemented properly. Please see TODO for a list of
|
|
items which need fixing in the LTP tree.
|
|
|
|
$ mkdir "$OUT_OF_BUILD_TREE_DIR"
|
|
$ make \
|
|
-C "$OUT_OF_BUILD_TREE_DIR" \
|
|
-f "$TOP_SRCDIR/Makefile" \
|
|
"top_srcdir=$TOP_SRCDIR" \
|
|
"top_builddir=$OUT_OF_BUILD_TREE_DIR"
|
|
$ make \
|
|
-C "$OUT_OF_BUILD_TREE_DIR" \
|
|
-f "$TOP_SRCDIR/Makefile" \
|
|
"top_srcdir=$TOP_SRCDIR" \
|
|
"top_builddir=$OUT_OF_BUILD_TREE_DIR" \
|
|
"DESTDIR=$SYSROOT" \
|
|
SKIP_IDCHECK=[0|1]
|
|
install
|
|
|
|
- Specifying DESTDIR is optional, but required when installing to a non-host
|
|
sysroot, as opposed to the host system's sysroot.
|
|
- Specify SKIP_IDCHECK=1 if and when you don't want to modify /etc/{group,passwd}
|
|
on the target system's sysroot.
|
|
|
|
Quick Start
|
|
-----------
|
|
|
|
$ tar xzf ltp-XXXXXXXX.tar.gz
|
|
$ cd ltp
|
|
$ ./configure
|
|
$ make all
|
|
# make install
|
|
$ /opt/ltp/runltp
|
|
|
|
*NOTE:
|
|
- LTP assumes the existence of the nobody, bin, and daemon users and their
|
|
groups. If these IDs do not exist, certain tests will fail. The respective
|
|
user and group IDs should be the same, i.e. if `nobody's' user ID is 99, then
|
|
its group ID should also be 99. The names of the groups are irrelevant.
|
|
- The installation directory is /opt/ltp by default. Please see
|
|
"Using autoconf" above and specify the appropriate path via --prefix.
|
|
DESTDIR= is also honored for install and will install into $DESTDIR/$prefix,
|
|
if you want to install into a chroot or a rootfs for instance.
|
|
|
|
Detailed Installation
|
|
---------------------
|
|
|
|
Beyond the "Quick Start" instructions, there are only a few other things
|
|
that should be done. The Linux Test Project build process uses a
|
|
minimalist approach. There is a lot of room for improvement and
|
|
contributions are welcome.
|
|
|
|
1. Log in as root.
|
|
|
|
2. Untar the ltp tarball into a spare directory. There is not a
|
|
standard location for it yet. We put it in our home directory
|
|
while we're working on it.
|
|
Note that the full path to this location must be accessible for
|
|
unprivileged users, as some tests are run as a different user than root.
|
|
Hence /root is not a good choice on several distributions.
|
|
|
|
3. Build and install everything, as described above. Note the minimum software
|
|
requirements above before doing so.
|
|
|
|
4. The disk I/O tests can be run by executing the diskio.sh script. In order
|
|
for these tests to successfully operate a writable high-density 3.5" floppy
|
|
must be in the disk drive and a CD-ROM with more than 100Mb of data must be
|
|
in the CD-ROM drive. The corresponding tests will fail if either disk is
|
|
missing.
|
|
|
|
5. The network tests related installation see testcases/network/README.md.
|
|
|
|
Cross compiling
|
|
---------------
|
|
|
|
To cross compile, you must specify the correct variables when running configure.
|
|
e.g. CC, LDFLAGS, etc.
|
|
For correct pkgconf / pkg-config detection you need to set
|
|
PKG_CONFIG_SYSROOT_DIR=$SYSROOT
|
|
|
|
After configure has run, it will generate include/mk/config.mk. You can tweak
|
|
settings in there if need be, but you should not specificy settings on the
|
|
command-line when running make.
|
|
|
|
32 bit build on 64 bit machine
|
|
------------------------------
|
|
|
|
You need to set CFLAGS=-m32 LDFLAGS=-m32 and PKG_CONFIG_LIBDIR
|
|
|
|
* RPM based distributions (openSUSE, Fedora, etc.)
|
|
PKG_CONFIG_LIBDIR=/usr/lib/pkgconfig CFLAGS=-m32 LDFLAGS=-m32 ./configure
|
|
|
|
* Debian / Ubuntu and derivates
|
|
PKG_CONFIG_LIBDIR=/usr/lib/i386-linux-gnu/pkgconfig CFLAGS=-m32 LDFLAGS=-m32 ./configure
|
|
|
|
* Arch Linux
|
|
PKG_CONFIG_LIBDIR=/usr/lib32/pkgconfig CFLAGS=-m32 LDFLAGS=-m32 ./configure
|
|
|
|
Android Users
|
|
-------------
|
|
|
|
Specify ANDROID=1 when calling make. Many tests which would otherwise work are
|
|
currently not built because they share a directory with an incompatible test.
|
|
|
|
The shell scripts expect /bin/sh to exist, so create a symlink.
|
|
|
|
Variables in Makefile
|
|
---------------------
|
|
|
|
The conventions enforced are standard ones. Here's a quick summary:
|
|
|
|
CFLAGS - used when compiling/linking C code, e.g. -D_GNU_SOURCE (no CPPFLAGS!)
|
|
|
|
CPPFLAGS - used when preprocessor is run (so C/C++ compiling with $(CPP)
|
|
functions, e.g. -I$SYSROOT/usr/include -I$SYSROOT/include -I$SYSROOT
|
|
|
|
LDFLAGS - linker flags, e.g. "-L$SYSROOT/usr/lib" "-L$SYSROOT/lib". DO NOT
|
|
PUT LIBRARIES IN THIS LIST (see LDLIBS for that).
|
|
|
|
LDLIBS - libraries listed after objects during link, e.g. -lc, -lpthread,
|
|
-lltp.
|
|
|
|
For other variables and more info about the build systems see
|
|
doc/build-system-guide.txt.
|
|
|
|
Common Issues
|
|
-------------
|
|
|
|
Issue: When executing configure it says:
|
|
|
|
checking for a BSD-compatible install... /usr/bin/install -c
|
|
checking whether build environment is sane... yes
|
|
checking for gawk... gawk
|
|
checking whether make sets $(MAKE)... yes
|
|
configure: error: cannot run /bin/sh ./config.sub
|
|
|
|
Solution: You must upgrade autoconf to 0.10.2+ and m4 to 1.4.7+; config.guess and config.sub aren't necessarily generated with older revisions of the Gnu autotools chain.
|
|
|
|
Issue: When executing make [all] it says:
|
|
|
|
" *** No rule to make target `/$*', needed by `pan-all'. Stop."
|
|
|
|
Solution: You must upgrade to make 3.81. Please see the Requirements section above.
|
|
|
|
Issue: When executing make [all] it says something like:
|
|
|
|
# ...
|
|
install -m 00644 "/scratch/ltp-dev2/ltp/include/test.h" "/scratch/ltp-install12/include/test.h"
|
|
install -m 00644 "/scratch/ltp-dev2/ltp/include/tlibio.h" "/scratch/ltp-install12/include/tlibio.h"
|
|
install -m 00644 "/scratch/ltp-dev2/ltp/include/usctest.h" "/scratch/ltp-install12/include/usctest.h"
|
|
install -m 00644 "/scratch/ltp-dev2/ltp/include/write_log.h" "/scratch/ltp-install12/include/write_log.h"
|
|
make[1]: Leaving directory `/scratch/ltp-dev2/ltp/include'
|
|
make -C lib -f "/scratch/ltp-dev2/ltp/lib/Makefile" all
|
|
make[1]: Entering directory `/scratch/ltp-dev2/ltp/lib'
|
|
" *** No rule to make target `dataascii.o', needed by `libltp.a'. Stop." # <-- the error
|
|
|
|
Solution: You cannot build LTP with -r / --no-builtin-rules and/or
|
|
-R / --no-builtin-variables specified. LTP relies heavily on built-in
|
|
implicit rules and variables to function properly.
|
|
|
|
Issue: When executing make (no target, 3.80), it does the following, and doesn't execute all:
|
|
|
|
#
|
|
make -C testcases/realtime autotools
|
|
make[1]: Entering directory `/scratch/ltp/testcases/realtime'
|
|
autoheader
|
|
make[1]: Leaving directory `/scratch/ltp/testcases/realtime'
|