mirror of
git://git.musl-libc.org/musl
synced 2024-12-16 19:55:38 +00:00
a80847d86a
the motivation for this patch is that the vast majority of libc is code that does not benefit at all from optimizations, but that certain components like string/memory operations can be major performance bottlenecks. at the same time, the old -falign-*=1 options are removed, since they were only beneficial for avoiding bloat when global -O3 was used, and in that case, they may have prevented some of the performance gains. to be the most useful, this patch will need further tuning. in particular, research is needed to determine which components should be built with -O3 by default, and it may be desirable to remove the hard-coded -O3 and instead allow more customization of the optimization level used for selected modules.
154 lines
3.9 KiB
Makefile
154 lines
3.9 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 arch/$(ARCH)/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 =
|
|
LIBCC = -lgcc
|
|
CPPFLAGS =
|
|
CFLAGS = -Os -pipe
|
|
CFLAGS_C99FSE = -std=c99 -ffreestanding -nostdinc
|
|
|
|
CFLAGS_ALL = $(CFLAGS_C99FSE)
|
|
CFLAGS_ALL += -D_XOPEN_SOURCE=700 -I./arch/$(ARCH) -I./src/internal -I./include
|
|
CFLAGS_ALL += $(CPPFLAGS) $(CFLAGS)
|
|
CFLAGS_ALL_STATIC = $(CFLAGS_ALL)
|
|
CFLAGS_ALL_SHARED = $(CFLAGS_ALL) -fPIC -DSHARED
|
|
|
|
AR = $(CROSS_COMPILE)ar
|
|
RANLIB = $(CROSS_COMPILE)ranlib
|
|
|
|
ARCH_INCLUDES = $(wildcard arch/$(ARCH)/bits/*.h)
|
|
ALL_INCLUDES = $(sort $(wildcard include/*.h include/*/*.h) $(GENH) $(ARCH_INCLUDES:arch/$(ARCH)/%=include/%))
|
|
|
|
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)$(SUBARCH).so.1
|
|
|
|
-include config.mak
|
|
|
|
all: $(ALL_LIBS) $(ALL_TOOLS)
|
|
|
|
install: install-libs install-headers install-tools
|
|
|
|
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.in: include/bits
|
|
|
|
include/bits/alltypes.h: include/bits/alltypes.h.in include/alltypes.h.in tools/mkalltypes.sed
|
|
sed -f tools/mkalltypes.sed include/bits/alltypes.h.in include/alltypes.h.in > $@
|
|
|
|
src/ldso/dynlink.lo: arch/$(ARCH)/reloc.h
|
|
|
|
OPTIMIZE_SRCS = $(wildcard $(OPTIMIZE_GLOBS:%=src/%))
|
|
$(OPTIMIZE_SRCS:%.c=%.o) $(OPTIMIZE_SRCS:%.c=%.lo): CFLAGS += -O3
|
|
|
|
%.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 \
|
|
-o $@ $(LOBJS) $(LIBCC)
|
|
|
|
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 "$${REALGCC:-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)/bits/%: arch/$(ARCH)/bits/%
|
|
install -D -m 644 $< $@
|
|
|
|
$(DESTDIR)$(includedir)/%: include/%
|
|
install -D -m 644 $< $@
|
|
|
|
$(DESTDIR)$(LDSO_PATHNAME): $(DESTDIR)$(syslibdir)
|
|
ln -sf $(libdir)/libc.so $@ || true
|
|
|
|
$(DESTDIR)$(syslibdir):
|
|
install -d -m 755 $(DESTDIR)$(syslibdir)
|
|
|
|
install-libs: $(ALL_LIBS:lib/%=$(DESTDIR)$(libdir)/%) $(if $(SHARED_LIBS),$(DESTDIR)$(LDSO_PATHNAME),)
|
|
|
|
install-headers: $(ALL_INCLUDES:include/%=$(DESTDIR)$(includedir)/%)
|
|
|
|
install-tools: $(ALL_TOOLS:tools/%=$(DESTDIR)$(bindir)/%)
|
|
|
|
|
|
|
|
.PRECIOUS: $(CRT_LIBS:lib/%=crt/%)
|
|
|
|
.PHONY: all clean install install-libs install-headers install-tools
|