INSTALL 6.0 KB
Newer Older
R
Rich Felker 已提交
1

2 3
Quick Installation Guide for musl libc
======================================
R
Rich Felker 已提交
4

5 6 7 8 9
There are many different ways to install musl depending on your usage
case. This document covers only the build and installation of musl by
itself, which is useful for upgrading an existing musl-based system or
compiler toolchain, or for using the provided musl-gcc wrapper with an
existing non-musl-based compiler.
R
Rich Felker 已提交
10

11 12 13
Building complete native or cross-compiler toolchains is outside the
scope of this INSTALL file. More information can be found on the musl
website and community wiki.
R
Rich Felker 已提交
14 15


16 17
Build Prerequisites
-------------------
R
Rich Felker 已提交
18

R
Rich Felker 已提交
19 20
The only build-time prerequisites for musl are GNU Make and a
freestanding C99 compiler toolchain targeting the desired instruction
21 22 23 24 25 26 27 28
set architecture and ABI, with support for a minimal subset of "GNU C"
extensions consisting mainly of gcc-style inline assembly, weak
aliases, hidden visibility, and stand-alone assembly source files.

GCC, LLVM/clang, Firm/cparser, and PCC have all successfully built
musl, but GCC is the most widely used/tested. Recent compiler (and
binutils) versions should be used if possible since some older
versions have bugs which affect musl.
29

R
Rich Felker 已提交
30 31
The system used to build musl does not need to be Linux-based, nor do
the Linux kernel headers need to be available.
R
Rich Felker 已提交
32

R
Rich Felker 已提交
33 34


35 36
Supported Targets
-----------------
R
Rich Felker 已提交
37 38 39 40

musl can be built for the following CPU instruction set architecture
and ABI combinations:

41 42 43 44 45
* i386
    * Minimum CPU model is actually 80486 unless kernel emulation of
      the `cmpxchg` instruction is added

* x86_64
46 47
    * ILP32 ABI (x32) is available as a separate arch but is still
      experimental
48 49 50 51 52 53

* ARM
    * EABI, standard or hard-float VFP variant
    * Little-endian default; big-endian variants also supported
    * Compiler toolchains only support armv4t and later

54 55 56
* AArch64
    * Little-endian default; big-endian variants also supported

57 58 59 60 61 62 63 64
* MIPS
    * ABI is o32
    * Big-endian default; little-endian variants also supported
    * Default ABI variant uses FPU registers; alternate soft-float ABI
      that does not use FPU registers or instructions is available
    * MIPS2 or later, or kernel emulation of ll/sc (standard in Linux)
      is required

65 66 67 68 69 70
* MIPS64
    * ABI is n64 (LP64)
    * Big-endian default; little-endian variants also supported
    * Default ABI variant uses FPU registers; alternate soft-float ABI
      that does not use FPU registers or instructions is available

71 72 73 74 75 76 77
* PowerPC
    * Only 32-bit is supported
    * Compiler toolchain must provide 64-bit long double, not IBM
      double-double or IEEE quad
    * For dynamic linking, compiler toolchain must be configured for
      "secure PLT" variant

78 79 80 81 82 83
* SuperH (SH)
    * Standard ELF ABI or FDPIC ABI (shared-text without MMU)
    * Little-endian by default; big-engian variant also supported
    * Full FPU ABI or soft-float ABI is supported, but the
      single-precision-only FPU ABI is not

84 85 86 87 88
* Microblaze
    * Big-endian default; little-endian variants also supported
    * Soft-float
    * Requires support for lwx/swx instructions

89
* OpenRISC 1000 (or1k)
R
Rich Felker 已提交
90 91 92



93 94
Build and Installation Procedure
--------------------------------
R
Rich Felker 已提交
95

96
To build and install musl:
R
Rich Felker 已提交
97

98 99
1. Run the provided configure script from the top-level source
   directory, passing on its command line any desired options.
R
Rich Felker 已提交
100

101
2. Run "make" to compile.
R
Rich Felker 已提交
102

103 104
3. Run "make install" with appropriate privileges to write to the
   target locations.
R
Rich Felker 已提交
105

106 107 108 109 110
The configure script attempts to determine automatically the correct
target architecture based on the compiler being used. For some
compilers, this may not be possible. If detection fails or selects the
wrong architecture, you can provide an explicit selection on the
configure command line.
R
Rich Felker 已提交
111

112 113 114 115 116 117 118
By default, configure installs to a prefix of "/usr/local/musl". This
differs from the behavior of most configure scripts, and is chosen
specifically to avoid clashing with libraries already present on the
system. DO NOT set the prefix to "/usr", "/usr/local", or "/" unless
you're upgrading libc on an existing musl-based system. Doing so will
break your existing system when you run "make install" and it may be
difficult to recover.
R
Rich Felker 已提交
119 120


121

122 123
Notes on Dynamic Linking
------------------------
124

125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
If dynamic linking is enabled, one file needs to be installed outside
of the installation prefix: /lib/ld-musl-$ARCH.so.1. This is the
dynamic linker. Its pathname is hard-coded into all dynamic-linked
programs, so for the sake of being able to share binaries between
systems, a consistent location should be used everywhere. Note that
the same applies to glibc and its dynamic linker, which is named
/lib/ld-linux.so.2 on i386 systems.

If for some reason it is impossible to install the dynamic linker in
its standard location (for example, if you are installing without root
privileges), the --syslibdir option to configure can be used to
provide a different location

At runtime, the dynamic linker needs to know the paths to search for
shared libraries. You should create a text file named
/etc/ld-musl-$ARCH.path (where $ARCH matches the architecture name
used in the dynamic linker) containing a list of directories where you
want the dynamic linker to search for shared libraries, separated by
colons or newlines. If the dynamic linker has been installed in a
non-default location, the path file also needs to reside at that
location (../etc relative to the chosen syslibdir).

If you do not intend to use dynamic linking, you may disable it by
passing --disable-shared to configure; this also cuts the build time
in half.



Checking for Successful Installation
------------------------------------

After installing, you should be able to use musl via the musl-gcc
wrapper. For example:
R
Rich Felker 已提交
158 159 160 161 162 163 164 165 166

cat > hello.c <<EOF
#include <stdio.h>
int main()
{
	printf("hello, world!\n");
	return 0;
}
EOF
167
/usr/local/musl/bin/musl-gcc hello.c
R
Rich Felker 已提交
168 169
./a.out

170
To configure autoconf-based program to compile and link against musl,
171
set the CC variable to musl-gcc when running configure, as in:
172

173
CC=musl-gcc ./configure ...
174 175 176 177

You will probably also want to use --prefix when building libraries to
ensure that they are installed under the musl prefix and not in the
main host system library directories.