blob: 526c3f62ed2d4644755a46348b2a9ccbd14af51f [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
Rich Felker40891ae2016-02-02 17:35:06 -050021set architecture and ABI, with support for a minimal subset of "GNU C"
22extensions consisting mainly of gcc-style inline assembly, weak
23aliases, hidden visibility, and stand-alone assembly source files.
24
25GCC, LLVM/clang, Firm/cparser, and PCC have all successfully built
26musl, but GCC is the most widely used/tested. Recent compiler (and
27binutils) versions should be used if possible since some older
28versions have bugs which affect musl.
Rich Felker3ffb5562012-10-26 20:14:19 -040029
30The system used to build musl does not need to be Linux-based, nor do
31the Linux kernel headers need to be available.
32
Rich Felker3ffb5562012-10-26 20:14:19 -040033
34
Rich Felkercec05e02014-03-20 00:55:28 -040035Supported Targets
36-----------------
Rich Felker3ffb5562012-10-26 20:14:19 -040037
38musl can be built for the following CPU instruction set architecture
39and ABI combinations:
40
Rich Felkercec05e02014-03-20 00:55:28 -040041* i386
42 * Minimum CPU model is actually 80486 unless kernel emulation of
43 the `cmpxchg` instruction is added
Rich Felker3ffb5562012-10-26 20:14:19 -040044
Rich Felkercec05e02014-03-20 00:55:28 -040045* x86_64
Rich Felker40891ae2016-02-02 17:35:06 -050046 * ILP32 ABI (x32) is available as a separate arch but is still
47 experimental
Rich Felker3ffb5562012-10-26 20:14:19 -040048
Rich Felkercec05e02014-03-20 00:55:28 -040049* ARM
50 * EABI, standard or hard-float VFP variant
51 * Little-endian default; big-endian variants also supported
52 * Compiler toolchains only support armv4t and later
53
Rich Felker40891ae2016-02-02 17:35:06 -050054* AArch64
55 * Little-endian default; big-endian variants also supported
56
Rich Felkercec05e02014-03-20 00:55:28 -040057* MIPS
58 * ABI is o32
59 * Big-endian default; little-endian variants also supported
60 * Default ABI variant uses FPU registers; alternate soft-float ABI
61 that does not use FPU registers or instructions is available
62 * MIPS2 or later, or kernel emulation of ll/sc (standard in Linux)
63 is required
64
Rich Felker589aefa2016-03-06 17:48:58 +000065* MIPS64
66 * ABI is n64 (LP64)
67 * Big-endian default; little-endian variants also supported
68 * Default ABI variant uses FPU registers; alternate soft-float ABI
69 that does not use FPU registers or instructions is available
70
Rich Felkercec05e02014-03-20 00:55:28 -040071* PowerPC
72 * Only 32-bit is supported
73 * Compiler toolchain must provide 64-bit long double, not IBM
74 double-double or IEEE quad
75 * For dynamic linking, compiler toolchain must be configured for
76 "secure PLT" variant
77
Rich Felker40891ae2016-02-02 17:35:06 -050078* SuperH (SH)
79 * Standard ELF ABI or FDPIC ABI (shared-text without MMU)
80 * Little-endian by default; big-engian variant also supported
81 * Full FPU ABI or soft-float ABI is supported, but the
82 single-precision-only FPU ABI is not
83
Rich Felkercec05e02014-03-20 00:55:28 -040084* Microblaze
85 * Big-endian default; little-endian variants also supported
86 * Soft-float
87 * Requires support for lwx/swx instructions
88
Rich Felker40891ae2016-02-02 17:35:06 -050089* OpenRISC 1000 (or1k)
Rich Felker3ffb5562012-10-26 20:14:19 -040090
91
92
Rich Felkercec05e02014-03-20 00:55:28 -040093Build and Installation Procedure
94--------------------------------
Rich Felker0b44a032011-02-12 00:22:29 -050095
Rich Felkercec05e02014-03-20 00:55:28 -040096To build and install musl:
Rich Felker0b44a032011-02-12 00:22:29 -050097
Rich Felkercec05e02014-03-20 00:55:28 -0400981. Run the provided configure script from the top-level source
99 directory, passing on its command line any desired options.
Rich Felker3ffb5562012-10-26 20:14:19 -0400100
Rich Felkercec05e02014-03-20 00:55:28 -04001012. Run "make" to compile.
Rich Felker0b44a032011-02-12 00:22:29 -0500102
Rich Felkercec05e02014-03-20 00:55:28 -04001033. Run "make install" with appropriate privileges to write to the
104 target locations.
Rich Felkerf9c9d8c2011-06-27 22:34:47 -0400105
Rich Felkercec05e02014-03-20 00:55:28 -0400106The configure script attempts to determine automatically the correct
107target architecture based on the compiler being used. For some
108compilers, this may not be possible. If detection fails or selects the
109wrong architecture, you can provide an explicit selection on the
110configure command line.
Rich Felker0b44a032011-02-12 00:22:29 -0500111
Rich Felkercec05e02014-03-20 00:55:28 -0400112By default, configure installs to a prefix of "/usr/local/musl". This
113differs from the behavior of most configure scripts, and is chosen
114specifically to avoid clashing with libraries already present on the
115system. DO NOT set the prefix to "/usr", "/usr/local", or "/" unless
116you're upgrading libc on an existing musl-based system. Doing so will
117break your existing system when you run "make install" and it may be
118difficult to recover.
Rich Felker0b44a032011-02-12 00:22:29 -0500119
Rich Felker0b44a032011-02-12 00:22:29 -0500120
Rich Felkercec05e02014-03-20 00:55:28 -0400121
122Notes on Dynamic Linking
123------------------------
124
125If dynamic linking is enabled, one file needs to be installed outside
126of the installation prefix: /lib/ld-musl-$ARCH.so.1. This is the
127dynamic linker. Its pathname is hard-coded into all dynamic-linked
128programs, so for the sake of being able to share binaries between
129systems, a consistent location should be used everywhere. Note that
130the same applies to glibc and its dynamic linker, which is named
131/lib/ld-linux.so.2 on i386 systems.
132
133If for some reason it is impossible to install the dynamic linker in
134its standard location (for example, if you are installing without root
135privileges), the --syslibdir option to configure can be used to
136provide a different location
137
138At runtime, the dynamic linker needs to know the paths to search for
139shared libraries. You should create a text file named
140/etc/ld-musl-$ARCH.path (where $ARCH matches the architecture name
141used in the dynamic linker) containing a list of directories where you
142want the dynamic linker to search for shared libraries, separated by
143colons or newlines. If the dynamic linker has been installed in a
144non-default location, the path file also needs to reside at that
145location (../etc relative to the chosen syslibdir).
146
147If you do not intend to use dynamic linking, you may disable it by
148passing --disable-shared to configure; this also cuts the build time
149in half.
150
151
152
153Checking for Successful Installation
154------------------------------------
155
156After installing, you should be able to use musl via the musl-gcc
157wrapper. For example:
Rich Felker0b44a032011-02-12 00:22:29 -0500158
159cat > hello.c <<EOF
160#include <stdio.h>
161int main()
162{
163 printf("hello, world!\n");
164 return 0;
165}
166EOF
Rich Felkercec05e02014-03-20 00:55:28 -0400167/usr/local/musl/bin/musl-gcc hello.c
Rich Felker0b44a032011-02-12 00:22:29 -0500168./a.out
169
Rich Felker7dd86ec2011-09-21 19:39:40 -0400170To configure autoconf-based program to compile and link against musl,
Rich Felkerc1a96582012-09-07 23:13:55 -0400171set the CC variable to musl-gcc when running configure, as in:
Rich Felker0b44a032011-02-12 00:22:29 -0500172
Rich Felkerc1a96582012-09-07 23:13:55 -0400173CC=musl-gcc ./configure ...
Rich Felkerf9c9d8c2011-06-27 22:34:47 -0400174
Rich Felker7dd86ec2011-09-21 19:39:40 -0400175You will probably also want to use --prefix when building libraries to
176ensure that they are installed under the musl prefix and not in the
177main host system library directories.