mirror of
git://git.musl-libc.org/musl
synced 2024-12-15 19:25:55 +00:00
e765239f33
hopefully the annoyance of this will be minimal. these files all define internal interfaces which can change at any time; if different modules are using different versions of the interfaces, the library will badly break. ideally we would scan and add the dependency only for C files that actually reference the affected interfaces, but for now, err on the side of caution and force a rebuild of everything if any of them have changed. this commit is in preparation for the upcoming ssp overhaul commit, which will change internals of the pthread struct.
134 lines
3.3 KiB
Makefile
134 lines
3.3 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
|
|
IMPH = src/internal/stdio_impl.h src/internal/pthread_impl.h src/internal/libc.h
|
|
|
|
LDFLAGS =
|
|
CPPFLAGS =
|
|
CFLAGS = -Os -pipe
|
|
CFLAGS_C99FSE = -std=c99 -ffreestanding -nostdinc
|
|
|
|
CFLAGS_ALL = $(CFLAGS_C99FSE)
|
|
CFLAGS_ALL += -D_XOPEN_SOURCE=700 -I./src/internal -I./include -I./arch/$(ARCH)
|
|
CFLAGS_ALL += $(CPPFLAGS) $(CFLAGS)
|
|
CFLAGS_ALL_STATIC = $(CFLAGS_ALL)
|
|
CFLAGS_ALL_SHARED = $(CFLAGS_ALL) -fPIC -DSHARED -O3
|
|
|
|
AR = $(CROSS_COMPILE)ar
|
|
RANLIB = $(CROSS_COMPILE)ranlib
|
|
|
|
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/Scrt1.o lib/crti.o lib/crtn.o
|
|
STATIC_LIBS = lib/libc.a
|
|
SHARED_LIBS = lib/libc.so
|
|
TOOL_LIBS = lib/musl-gcc.specs
|
|
ALL_LIBS = $(CRT_LIBS) $(STATIC_LIBS) $(SHARED_LIBS) $(EMPTY_LIBS) $(TOOL_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
|
|
|
|
distclean: clean
|
|
rm -f config.mak
|
|
|
|
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_ALL_STATIC) -c -o $@ $<
|
|
|
|
%.o: %.c $(GENH) $(IMPH)
|
|
$(CC) $(CFLAGS_ALL_STATIC) -c -o $@ $<
|
|
|
|
%.lo: $(ARCH)/%.s
|
|
$(CC) $(CFLAGS_ALL_SHARED) -c -o $@ $<
|
|
|
|
%.lo: %.c $(GENH) $(IMPH)
|
|
$(CC) $(CFLAGS_ALL_SHARED) -c -o $@ $<
|
|
|
|
lib/libc.so: $(LOBJS)
|
|
$(CC) $(CFLAGS_ALL_SHARED) $(LDFLAGS) -nostdlib -shared \
|
|
-Wl,-e,_start -Wl,-Bsymbolic-functions \
|
|
-Wl,-soname=libc.so -o $@ $(LOBJS) -lgcc
|
|
|
|
lib/libc.a: $(OBJS)
|
|
rm -f $@
|
|
$(AR) rc $@ $(OBJS)
|
|
$(RANLIB) $@
|
|
|
|
$(EMPTY_LIBS):
|
|
rm -f $@
|
|
$(AR) rc $@
|
|
|
|
lib/%.o: crt/%.o
|
|
cp $< $@
|
|
|
|
lib/musl-gcc.specs: tools/musl-gcc.specs.sh config.mak
|
|
sh $< "$(includedir)" "$(libdir)" "$(LDSO_PATHNAME)" > $@
|
|
|
|
tools/musl-gcc: config.mak
|
|
printf '#!/bin/sh\nexec gcc "$$@" -specs "%s/musl-gcc.specs"\n' "$(libdir)" > $@
|
|
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) || true
|
|
ln -sf $(libdir)/libc.so $@ || true
|
|
|
|
.PRECIOUS: $(CRT_LIBS:lib/%=crt/%)
|
|
|
|
.PHONY: all clean install
|