musl/Makefile
Rich Felker 3c870263c5 two fixes for "make install" handling of shared libs
1. don't try to install (and thus build) shared libs when they were
disabled in config.mak

2. ensure that the path for the dynamic linker exists before
attempting to install it.
2012-02-17 23:17:48 -05:00

119 lines
2.8 KiB
Makefile

#
# Makefile for musl (requires GNU make)
#
# This is how simple every makefile should be...
# No, I take that back - actually most should be less than half this size.
#
# Use config.mak to override any of the following variables.
# Do not make changes here.
#
exec_prefix = /usr/local
bindir = $(exec_prefix)/bin
prefix = /usr/local/musl
includedir = $(prefix)/include
libdir = $(prefix)/lib
syslibdir = /lib
SRCS = $(sort $(wildcard src/*/*.c))
OBJS = $(SRCS:.c=.o)
LOBJS = $(OBJS:.o=.lo)
GENH = include/bits/alltypes.h
CFLAGS = -Os -nostdinc -ffreestanding -std=c99 -D_XOPEN_SOURCE=700 -pipe
LDFLAGS = -nostdlib -shared -fPIC -Wl,-e,_start -Wl,-Bsymbolic-functions
INC = -I./include -I./src/internal -I./arch/$(ARCH)
PIC = -fPIC -O3
AR = $(CROSS_COMPILE)ar
RANLIB = $(CROSS_COMPILE)ranlib
OBJCOPY = $(CROSS_COMPILE)objcopy
ALL_INCLUDES = $(sort $(wildcard include/*.h include/*/*.h) $(GENH))
EMPTY_LIB_NAMES = m rt pthread crypt util xnet resolv dl
EMPTY_LIBS = $(EMPTY_LIB_NAMES:%=lib/lib%.a)
CRT_LIBS = lib/crt1.o lib/crti.o lib/crtn.o
STATIC_LIBS = lib/libc.a $(EMPTY_LIBS)
SHARED_LIBS = lib/libc.so
ALL_LIBS = $(CRT_LIBS) $(STATIC_LIBS) $(SHARED_LIBS)
ALL_TOOLS = tools/musl-gcc
LDSO_PATHNAME = $(syslibdir)/ld-musl-$(ARCH).so.1
-include config.mak
all: $(ALL_LIBS) $(ALL_TOOLS)
install: $(ALL_LIBS:lib/%=$(DESTDIR)$(libdir)/%) $(ALL_INCLUDES:include/%=$(DESTDIR)$(includedir)/%) $(ALL_TOOLS:tools/%=$(DESTDIR)$(bindir)/%) $(if $(SHARED_LIBS),$(DESTDIR)$(LDSO_PATHNAME),)
clean:
rm -f crt/*.o
rm -f $(OBJS)
rm -f $(LOBJS)
rm -f $(ALL_LIBS) lib/*.[ao] lib/*.so
rm -f $(ALL_TOOLS)
rm -f $(GENH)
rm -f include/bits
include/bits:
@test "$(ARCH)" || { echo "Please set ARCH in config.mak before running make." ; exit 1 ; }
ln -sf ../arch/$(ARCH)/bits $@
include/bits/alltypes.h.sh: include/bits
include/bits/alltypes.h: include/bits/alltypes.h.sh
sh $< > $@
%.o: $(ARCH)/%.s
$(CC) $(CFLAGS) $(INC) -c -o $@ $<
%.o: %.c $(GENH)
$(CC) $(CFLAGS) $(INC) -c -o $@ $<
%.lo: $(ARCH)/%.s
$(CC) $(CFLAGS) $(INC) $(PIC) -c -o $@ $<
%.lo: %.c $(GENH)
$(CC) $(CFLAGS) $(INC) $(PIC) -c -o $@ $<
lib/libc.so: $(LOBJS)
$(CC) $(LDFLAGS) -Wl,-soname=libc.so -o $@ $(LOBJS) -lgcc
$(OBJCOPY) --weaken $@
lib/libc.a: $(OBJS)
rm -f $@
$(AR) rc $@ $(OBJS)
$(RANLIB) $@
$(EMPTY_LIBS):
rm -f $@
$(AR) rc $@
lib/%.o: crt/%.o
cp $< $@
tools/musl-gcc: tools/gen-musl-gcc.sh config.mak
sh $< "$(prefix)" "$(LDSO_PATHNAME)" > $@ || { rm -f $@ ; exit 1 ; }
chmod +x $@
$(DESTDIR)$(bindir)/%: tools/%
install -D $< $@
$(DESTDIR)$(libdir)/%.so: lib/%.so
install -D -m 755 $< $@
$(DESTDIR)$(libdir)/%: lib/%
install -D -m 644 $< $@
$(DESTDIR)$(includedir)/%: include/%
install -D -m 644 $< $@
$(DESTDIR)$(LDSO_PATHNAME): lib/libc.so
install -d -m 755 $(DESTDIR)$(syslibdir)
ln -sf $(libdir)/libc.so $@ || true
.PRECIOUS: $(CRT_LIBS:lib/%=crt/%)
.PHONY: all clean install