Index: fusl/INSTALL |
diff --git a/fusl/INSTALL b/fusl/INSTALL |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5713cd49baf74224dc0246bd7067b36923ae2772 |
--- /dev/null |
+++ b/fusl/INSTALL |
@@ -0,0 +1,179 @@ |
+ |
+Quick Installation Guide for musl libc |
+====================================== |
+ |
+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. |
+ |
+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. |
+ |
+ |
+Build Prerequisites |
+------------------- |
+ |
+The only build-time prerequisites for musl are GNU Make and a |
+freestanding C99 compiler toolchain targeting the desired instruction |
+set architecture and ABI, with support for gcc-style inline assembly, |
+weak aliases, and stand-alone assembly source files. |
+ |
+The system used to build musl does not need to be Linux-based, nor do |
+the Linux kernel headers need to be available. |
+ |
+If support for dynamic linking is desired, some further requirements |
+are placed on the compiler and linker. In particular, the linker must |
+support the -Bsymbolic-functions option. |
+ |
+At present, GCC 4.6 or later is the recommended compiler for building |
+musl. Any earlier version of GCC with full C99 support should also |
+work, but may be subject to minor floating point conformance issues on |
+i386 targets. Sufficiently recent versions of PCC and LLVM/clang are |
+also believed to work, but have not been tested as heavily; prior to |
+Fall 2012, both had known bugs that affected musl. Firm/cparser is |
+also believed to work but lacks support for producing shared |
+libraries. GCC 4.9.0 and 4.9.1 are known to have a serious bug |
+(#61144) which affects musl. Beginning with version 1.1.4 musl |
+attempts to work around the bug, but these compiler versions are still |
+considered unstable and unsupported. |
+ |
+ |
+ |
+Supported Targets |
+----------------- |
+ |
+musl can be built for the following CPU instruction set architecture |
+and ABI combinations: |
+ |
+* i386 |
+ * Minimum CPU model is actually 80486 unless kernel emulation of |
+ the `cmpxchg` instruction is added |
+ |
+* x86_64 |
+ |
+* ARM |
+ * EABI, standard or hard-float VFP variant |
+ * Little-endian default; big-endian variants also supported |
+ * Compiler toolchains only support armv4t and later |
+ |
+* 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 |
+ |
+* 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 |
+ |
+* Microblaze |
+ * Big-endian default; little-endian variants also supported |
+ * Soft-float |
+ * Requires support for lwx/swx instructions |
+ |
+The following additional targets are available for build, but may not |
+work correctly and may not yet have ABI stability: |
+ |
+* SuperH (SH) |
+ * 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 supported (musl always |
+ requires IEEE single and double to be supported) |
+ |
+* x32 (x86_64 ILP32 ABI) |
+ |
+ |
+ |
+Build and Installation Procedure |
+-------------------------------- |
+ |
+To build and install musl: |
+ |
+1. Run the provided configure script from the top-level source |
+ directory, passing on its command line any desired options. |
+ |
+2. Run "make" to compile. |
+ |
+3. Run "make install" with appropriate privileges to write to the |
+ target locations. |
+ |
+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. |
+ |
+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. |
+ |
+ |
+ |
+Notes on Dynamic Linking |
+------------------------ |
+ |
+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: |
+ |
+cat > hello.c <<EOF |
+#include <stdio.h> |
+int main() |
+{ |
+ printf("hello, world!\n"); |
+ return 0; |
+} |
+EOF |
+/usr/local/musl/bin/musl-gcc hello.c |
+./a.out |
+ |
+To configure autoconf-based program to compile and link against musl, |
+set the CC variable to musl-gcc when running configure, as in: |
+ |
+CC=musl-gcc ./configure ... |
+ |
+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. |