blob: 5713cd49baf74224dc0246bd7067b36923ae2772 [file] [log] [blame]
Rich Felker0b44a032011-02-12 00:22:29 -05001
Rich Felkercec05e02014-03-20 00:55:28 -04002Quick Installation Guide for musl libc
3======================================
Rich Felker7dd86ec2011-09-21 19:39:40 -04004
Rich Felkercec05e02014-03-20 00:55:28 -04005There are many different ways to install musl depending on your usage
6case. This document covers only the build and installation of musl by
7itself, which is useful for upgrading an existing musl-based system or
8compiler toolchain, or for using the provided musl-gcc wrapper with an
9existing non-musl-based compiler.
Rich Felker7dd86ec2011-09-21 19:39:40 -040010
Rich Felkercec05e02014-03-20 00:55:28 -040011Building complete native or cross-compiler toolchains is outside the
12scope of this INSTALL file. More information can be found on the musl
13website and community wiki.
Rich Felker0b44a032011-02-12 00:22:29 -050014
15
Rich Felkercec05e02014-03-20 00:55:28 -040016Build Prerequisites
17-------------------
Rich Felker3ffb5562012-10-26 20:14:19 -040018
19The only build-time prerequisites for musl are GNU Make and a
20freestanding C99 compiler toolchain targeting the desired instruction
21set architecture and ABI, with support for gcc-style inline assembly,
22weak aliases, and stand-alone assembly source files.
23
24The system used to build musl does not need to be Linux-based, nor do
25the Linux kernel headers need to be available.
26
Rich Felker9f505372013-12-01 23:16:38 -050027If support for dynamic linking is desired, some further requirements
Rich Felker3ffb5562012-10-26 20:14:19 -040028are placed on the compiler and linker. In particular, the linker must
29support the -Bsymbolic-functions option.
30
31At present, GCC 4.6 or later is the recommended compiler for building
32musl. Any earlier version of GCC with full C99 support should also
33work, but may be subject to minor floating point conformance issues on
34i386 targets. Sufficiently recent versions of PCC and LLVM/clang are
35also believed to work, but have not been tested as heavily; prior to
Rich Felkercec05e02014-03-20 00:55:28 -040036Fall 2012, both had known bugs that affected musl. Firm/cparser is
37also believed to work but lacks support for producing shared
Rich Felker60276b92014-07-31 19:02:54 -040038libraries. GCC 4.9.0 and 4.9.1 are known to have a serious bug
39(#61144) which affects musl. Beginning with version 1.1.4 musl
40attempts to work around the bug, but these compiler versions are still
41considered unstable and unsupported.
Rich Felker3ffb5562012-10-26 20:14:19 -040042
43
44
Rich Felkercec05e02014-03-20 00:55:28 -040045Supported Targets
46-----------------
Rich Felker3ffb5562012-10-26 20:14:19 -040047
48musl can be built for the following CPU instruction set architecture
49and ABI combinations:
50
Rich Felkercec05e02014-03-20 00:55:28 -040051* i386
52 * Minimum CPU model is actually 80486 unless kernel emulation of
53 the `cmpxchg` instruction is added
Rich Felker3ffb5562012-10-26 20:14:19 -040054
Rich Felkercec05e02014-03-20 00:55:28 -040055* x86_64
Rich Felker3ffb5562012-10-26 20:14:19 -040056
Rich Felkercec05e02014-03-20 00:55:28 -040057* ARM
58 * EABI, standard or hard-float VFP variant
59 * Little-endian default; big-endian variants also supported
60 * Compiler toolchains only support armv4t and later
61
62* MIPS
63 * ABI is o32
64 * Big-endian default; little-endian variants also supported
65 * Default ABI variant uses FPU registers; alternate soft-float ABI
66 that does not use FPU registers or instructions is available
67 * MIPS2 or later, or kernel emulation of ll/sc (standard in Linux)
68 is required
69
70* PowerPC
71 * Only 32-bit is supported
72 * Compiler toolchain must provide 64-bit long double, not IBM
73 double-double or IEEE quad
74 * For dynamic linking, compiler toolchain must be configured for
75 "secure PLT" variant
76
77* Microblaze
78 * Big-endian default; little-endian variants also supported
79 * Soft-float
80 * Requires support for lwx/swx instructions
81
82The following additional targets are available for build, but may not
83work correctly and may not yet have ABI stability:
84
85* SuperH (SH)
86 * Little-endian by default; big-engian variant also supported
87 * Full FPU ABI or soft-float ABI is supported, but the
88 single-precision-only FPU ABI is not supported (musl always
89 requires IEEE single and double to be supported)
90
91* x32 (x86_64 ILP32 ABI)
Rich Felker3ffb5562012-10-26 20:14:19 -040092
93
94
Rich Felkercec05e02014-03-20 00:55:28 -040095Build and Installation Procedure
96--------------------------------
Rich Felker0b44a032011-02-12 00:22:29 -050097
Rich Felkercec05e02014-03-20 00:55:28 -040098To build and install musl:
Rich Felker0b44a032011-02-12 00:22:29 -050099
Rich Felkercec05e02014-03-20 00:55:28 -04001001. Run the provided configure script from the top-level source
101 directory, passing on its command line any desired options.
Rich Felker3ffb5562012-10-26 20:14:19 -0400102
Rich Felkercec05e02014-03-20 00:55:28 -04001032. Run "make" to compile.
Rich Felker0b44a032011-02-12 00:22:29 -0500104
Rich Felkercec05e02014-03-20 00:55:28 -04001053. Run "make install" with appropriate privileges to write to the
106 target locations.
Rich Felkerf9c9d8c2011-06-27 22:34:47 -0400107
Rich Felkercec05e02014-03-20 00:55:28 -0400108The configure script attempts to determine automatically the correct
109target architecture based on the compiler being used. For some
110compilers, this may not be possible. If detection fails or selects the
111wrong architecture, you can provide an explicit selection on the
112configure command line.
Rich Felker0b44a032011-02-12 00:22:29 -0500113
Rich Felkercec05e02014-03-20 00:55:28 -0400114By default, configure installs to a prefix of "/usr/local/musl". This
115differs from the behavior of most configure scripts, and is chosen
116specifically to avoid clashing with libraries already present on the
117system. DO NOT set the prefix to "/usr", "/usr/local", or "/" unless
118you're upgrading libc on an existing musl-based system. Doing so will
119break your existing system when you run "make install" and it may be
120difficult to recover.
Rich Felker0b44a032011-02-12 00:22:29 -0500121
Rich Felker0b44a032011-02-12 00:22:29 -0500122
Rich Felkercec05e02014-03-20 00:55:28 -0400123
124Notes on Dynamic Linking
125------------------------
126
127If dynamic linking is enabled, one file needs to be installed outside
128of the installation prefix: /lib/ld-musl-$ARCH.so.1. This is the
129dynamic linker. Its pathname is hard-coded into all dynamic-linked
130programs, so for the sake of being able to share binaries between
131systems, a consistent location should be used everywhere. Note that
132the same applies to glibc and its dynamic linker, which is named
133/lib/ld-linux.so.2 on i386 systems.
134
135If for some reason it is impossible to install the dynamic linker in
136its standard location (for example, if you are installing without root
137privileges), the --syslibdir option to configure can be used to
138provide a different location
139
140At runtime, the dynamic linker needs to know the paths to search for
141shared libraries. You should create a text file named
142/etc/ld-musl-$ARCH.path (where $ARCH matches the architecture name
143used in the dynamic linker) containing a list of directories where you
144want the dynamic linker to search for shared libraries, separated by
145colons or newlines. If the dynamic linker has been installed in a
146non-default location, the path file also needs to reside at that
147location (../etc relative to the chosen syslibdir).
148
149If you do not intend to use dynamic linking, you may disable it by
150passing --disable-shared to configure; this also cuts the build time
151in half.
152
153
154
155Checking for Successful Installation
156------------------------------------
157
158After installing, you should be able to use musl via the musl-gcc
159wrapper. For example:
Rich Felker0b44a032011-02-12 00:22:29 -0500160
161cat > hello.c <<EOF
162#include <stdio.h>
163int main()
164{
165 printf("hello, world!\n");
166 return 0;
167}
168EOF
Rich Felkercec05e02014-03-20 00:55:28 -0400169/usr/local/musl/bin/musl-gcc hello.c
Rich Felker0b44a032011-02-12 00:22:29 -0500170./a.out
171
Rich Felker7dd86ec2011-09-21 19:39:40 -0400172To configure autoconf-based program to compile and link against musl,
Rich Felkerc1a96582012-09-07 23:13:55 -0400173set the CC variable to musl-gcc when running configure, as in:
Rich Felker0b44a032011-02-12 00:22:29 -0500174
Rich Felkerc1a96582012-09-07 23:13:55 -0400175CC=musl-gcc ./configure ...
Rich Felkerf9c9d8c2011-06-27 22:34:47 -0400176
Rich Felker7dd86ec2011-09-21 19:39:40 -0400177You will probably also want to use --prefix when building libraries to
178ensure that they are installed under the musl prefix and not in the
179main host system library directories.