# # This file is part of musl-mod: modified version of Musl libc library. # musl-mod in general and this file specifically are available under # MIT license. See COPYRIGHT file. # CC = gcc AR = ar CFLAGS = -g -O3 arch = x86_64 cflags = -pipe -std=c99 -nostdinc -D_XOPEN_SOURCE=700 \ -ffreestanding -fexcess-precision=standard -fno-strict-aliasing \ -frounding-math -fno-pic -fno-stack-protector \ -fno-unwind-tables -fno-asynchronous-unwind-tables \ -ffunction-sections -fdata-sections \ -Iarch/$(arch) -Iarch/generic -Isrc/include -Isrc/internal \ -Igenerated/include -Iinclude $(CFLAGS) bindir = $(prefix)/bin includedir = $(prefix)/include libdir = $(prefix)/lib include config.mk src_dirs = crt src/* src/malloc/mallocng common_src = $(wildcard $(addsuffix /*.c, $(src_dirs))) arch_src = $(wildcard $(addsuffix /$(arch)/*.[csS], $(src_dirs))) common_obj = $(common_src:.c=.o) arch_obj = $(patsubst %, %.o, $(basename $(arch_src))) replaced_obj = $(subst /$(arch)/,/, $(arch_obj)) all_obj = $(sort $(filter-out $(replaced_obj), $(common_obj) $(arch_obj))) memops_obj = $(filter %/memcpy.o %/memmove.o %/memcmp.o %/memset.o, $(all_obj)) crt_obj = $(filter crt/%, $(all_obj)) generated_headers = $(addprefix generated/include/bits/, \ alltypes.h syscall.h) implementation_headers = $(addprefix src/internal/, \ stdio_impl.h pthread_impl.h locale_impl.h libc.h) lib_obj = libc.a crt1.o crti.o crtn.o arch_inc = $(wildcard arch/$(arch)/bits/*.h) generic_inc = $(wildcard arch/generic/bits/*.h) inc = $(wildcard include/*.h include/*/*.h) all_inc = $(sort $(inc) $(generated_headers:generated/%=%) \ $(arch_inc:arch/$(arch)/%=include/%) \ $(generic_inc:arch/generic/%=include/%)) dirs = $(sort $(dir $(generated_headers))) ### Tools ### musl_make = tools/musl-make gcc_prefix = $(dir $(shell gcc -print-libgcc-file-name)) tool_cflags = -Wall -nostdinc -Wno-main \ -ffreestanding -fno-pic -fno-stack-protector \ -Igenerated/include -Iarch/$(arch) \ -I$(gcc_prefix)include \ -Iarch/generic $(CFLAGS) .PRECIOUS: $(addprefix tools/, common.o sed.o make.o) tools/%.o: tools/%.c tools/common.h $(CC) $(tool_cflags) -c -o $@ $< tools/%: tools/%.o tools/common.o ld -L$(gcc_prefix) -nostdlib -o $@ $^ -lgcc ### Musl ### default: $(lib_obj) $(dirs): mkdir -p $@ generated/include/bits/alltypes.h: arch/$(arch)/bits/alltypes.h.in \ include/alltypes.h.in tools/sed | $(dirs) cat $(filter %.in, $^) | tools/sed -f tools/mkalltypes.sed >$@ generated/include/bits/syscall.h: arch/$(arch)/bits/syscall.h.in \ tools/sed | $(dirs) cp $< $@ tools/sed 's/__NR_/SYS_/' < $< >>$@ src/internal/version.o: cflags += -DVERSION=\"$(shell cat VERSION)\" $(memops_obj): cflags += -fno-tree-loop-distribute-patterns $(crt_obj): cflags += -DCRT cc_cmd = $(CC) $(cflags) -c -o $@ $< as_cmd = $(cc_cmd) install_cmd = install -D -m 644 $< $@ %.o: %.s $(as_cmd) %.o: %.S $(cc_cmd) %.o: %.c $(generated_headers) $(implementation_headers) $(cc_cmd) crt/crt1.o: crt/crt1.c arch/$(arch)/crt_arch.h $(generated_headers) $(implementation_headers) $(cc_cmd) %.o: crt/$(arch)/%.o cp $< $@ %.o: crt/%.o cp $< $@ libc.a: $(all_obj) rm -f $@ $(AR) rcs $@ $^ $(DESTDIR)$(bindir)/%: tools/% install -D -m 755 $< $@ $(DESTDIR)$(libdir)/%: % $(install_cmd) $(DESTDIR)$(includedir)/bits/%: arch/$(arch)/bits/% $(install_cmd) $(DESTDIR)$(includedir)/bits/%: arch/generic/bits/% $(install_cmd) $(DESTDIR)$(includedir)/bits/%: generated/include/bits/% $(install_cmd) $(DESTDIR)$(includedir)/%: include/% $(install_cmd) install-progs: $(musl_make:tools/%=$(DESTDIR)$(bindir)/%) install-libs: $(addprefix $(DESTDIR)$(libdir)/, $(lib_obj)) install-headers: $(all_inc:include/%=$(DESTDIR)$(includedir)/%) install: install-progs install-libs install-headers musl-1.2.5-mod.tar.gz: git archive --format=tar.gz --prefix=musl-1.2.5-mod/ -o $@ HEAD clean: rm -rf generated rm -f crt/*.o crt/*/*.o src/*/*.o src/*/*/*.o libc.a crt*.o rm -f tools/*.o tools/sed tools/musl-make rm -f musl-*.tar.gz distclean: clean rm -f config.mk