X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=Makefile;h=df20f94a5c7129c34e92acf57310497eeedff9d7;hb=d5f8394f6ea9549607567bd92de12a2446c15614;hp=02b44f8e54295909b41cc5175d7563826a4b34d3;hpb=f3ddd173806fd5c60b3f034528ca24542aecc5b9;p=musl diff --git a/Makefile b/Makefile index 02b44f8e..df20f94a 100644 --- a/Makefile +++ b/Makefile @@ -23,18 +23,22 @@ GENH = include/bits/alltypes.h GENH_INT = src/internal/version.h IMPH = src/internal/stdio_impl.h src/internal/pthread_impl.h src/internal/libc.h -LDFLAGS = +LDFLAGS = +LDFLAGS_AUTO = LIBCC = -lgcc CPPFLAGS = -CFLAGS = -Os -pipe +CFLAGS = +CFLAGS_AUTO = -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 += $(CPPFLAGS) $(CFLAGS_AUTO) $(CFLAGS) CFLAGS_ALL_STATIC = $(CFLAGS_ALL) CFLAGS_ALL_SHARED = $(CFLAGS_ALL) -fPIC -DSHARED +LDFLAGS_ALL = $(LDFLAGS_AUTO) $(LDFLAGS) + AR = $(CROSS_COMPILE)ar RANLIB = $(CROSS_COMPILE)ranlib INSTALL = ./tools/install.sh @@ -44,13 +48,16 @@ ALL_INCLUDES = $(sort $(wildcard include/*.h include/*/*.h) $(GENH) $(ARCH_INCLU 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 +CRT_LIBS = lib/crt1.o lib/Scrt1.o lib/rcrt1.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 +WRAPCC_GCC = gcc +WRAPCC_CLANG = clang + LDSO_PATHNAME = $(syslibdir)/ld-musl-$(ARCH)$(SUBARCH).so.1 -include config.mak @@ -83,19 +90,30 @@ include/bits/alltypes.h: include/bits/alltypes.h.in include/alltypes.h.in tools/ src/internal/version.h: $(wildcard VERSION .git) printf '#define VERSION "%s"\n' "$$(sh tools/version.sh)" > $@ -src/internal/version.lo: src/internal/version.h +src/internal/version.o src/internal/version.lo: src/internal/version.h + +crt/rcrt1.o src/ldso/dlstart.lo src/ldso/dynlink.lo: src/internal/dynlink.h arch/$(ARCH)/reloc.h -src/ldso/dlstart.lo src/ldso/dynlink.lo: src/internal/dynlink.h arch/$(ARCH)/reloc.h +crt/crt1.o crt/Scrt1.o crt/rcrt1.o src/ldso/dlstart.lo: $(wildcard arch/$(ARCH)/crt_arch.h) -crt/crt1.o crt/Scrt1.o: $(wildcard arch/$(ARCH)/crt_arch.h) +crt/rcrt1.o: src/ldso/dlstart.c -crt/Scrt1.o: CFLAGS += -fPIC +crt/Scrt1.o crt/rcrt1.o: CFLAGS_ALL += -fPIC OPTIMIZE_SRCS = $(wildcard $(OPTIMIZE_GLOBS:%=src/%)) $(OPTIMIZE_SRCS:%.c=%.o) $(OPTIMIZE_SRCS:%.c=%.lo): CFLAGS += -O3 MEMOPS_SRCS = src/string/memcpy.c src/string/memmove.c src/string/memcmp.c src/string/memset.c -$(MEMOPS_SRCS:%.c=%.o) $(MEMOPS_SRCS:%.c=%.lo): CFLAGS += $(CFLAGS_MEMOPS) +$(MEMOPS_SRCS:%.c=%.o) $(MEMOPS_SRCS:%.c=%.lo): CFLAGS_ALL += $(CFLAGS_MEMOPS) + +NOSSP_SRCS = $(wildcard crt/*.c) \ + src/env/__libc_start_main.c src/env/__init_tls.c \ + src/thread/__set_thread_area.c src/env/__stack_chk_fail.c \ + src/string/memset.c src/string/memcpy.c \ + src/ldso/dlstart.c src/ldso/dynlink.c +$(NOSSP_SRCS:%.c=%.o) $(NOSSP_SRCS:%.c=%.lo): CFLAGS_ALL += $(CFLAGS_NOSSP) + +$(CRT_LIBS:lib/%=crt/%): CFLAGS_ALL += -DCRT # This incantation ensures that changes to any subarch asm files will # force the corresponding object file to be rebuilt, even if the implicit @@ -105,11 +123,19 @@ $(dir $(patsubst %/,%,$(dir $(1))))$(notdir $(1:.s=.o)): $(1) endef $(foreach s,$(wildcard src/*/$(ARCH)*/*.s),$(eval $(call mkasmdep,$(s)))) +# Choose invocation of assembler to be used +# $(1) is input file, $(2) is output file, $(3) is assembler flags +ifeq ($(ADD_CFI),yes) + AS_CMD = LC_ALL=C awk -f tools/add-cfi.common.awk -f tools/add-cfi.$(ARCH).awk $< | $(CC) -x assembler -c -o $@ - +else + AS_CMD = $(CC) -c -o $@ $< +endif + %.o: $(ARCH)$(ASMSUBARCH)/%.sub $(CC) $(CFLAGS_ALL_STATIC) -c -o $@ $(dir $<)$(shell cat $<) %.o: $(ARCH)/%.s - $(CC) $(CFLAGS_ALL_STATIC) -c -o $@ $< + $(AS_CMD) $(CFLAGS_ALL_STATIC) %.o: %.c $(GENH) $(IMPH) $(CC) $(CFLAGS_ALL_STATIC) -c -o $@ $< @@ -118,13 +144,13 @@ $(foreach s,$(wildcard src/*/$(ARCH)*/*.s),$(eval $(call mkasmdep,$(s)))) $(CC) $(CFLAGS_ALL_SHARED) -c -o $@ $(dir $<)$(shell cat $<) %.lo: $(ARCH)/%.s - $(CC) $(CFLAGS_ALL_SHARED) -c -o $@ $< + $(AS_CMD) $(CFLAGS_ALL_SHARED) %.lo: %.c $(GENH) $(IMPH) $(CC) $(CFLAGS_ALL_SHARED) -c -o $@ $< lib/libc.so: $(LOBJS) - $(CC) $(CFLAGS_ALL_SHARED) $(LDFLAGS) -nostdlib -shared \ + $(CC) $(CFLAGS_ALL_SHARED) $(LDFLAGS_ALL) -nostdlib -shared \ -Wl,-e,_dlstart -Wl,-Bsymbolic-functions \ -o $@ $(LOBJS) $(LIBCC) @@ -144,7 +170,11 @@ 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)" > $@ + printf '#!/bin/sh\nexec "$${REALGCC:-$(WRAPCC_GCC)}" "$$@" -specs "%s/musl-gcc.specs"\n' "$(libdir)" > $@ + chmod +x $@ + +tools/%-clang: tools/%-clang.in config.mak + sed -e 's!@CC@!$(WRAPCC_CLANG)!g' -e 's!@PREFIX@!$(prefix)!g' -e 's!@INCDIR@!$(includedir)!g' -e 's!@LIBDIR@!$(libdir)!g' -e 's!@LDSO@!$(LDSO_PATHNAME)!g' $< > $@ chmod +x $@ $(DESTDIR)$(bindir)/%: tools/% @@ -177,6 +207,4 @@ musl-git-%.tar.gz: .git musl-%.tar.gz: .git git archive --format=tar.gz --prefix=$(patsubst %.tar.gz,%,$@)/ -o $@ v$(patsubst musl-%.tar.gz,%,$@) -.PRECIOUS: $(CRT_LIBS:lib/%=crt/%) - .PHONY: all clean install install-libs install-headers install-tools