diff options
author | Vladimir Azarov <avm@intermediate-node.net> | 2024-10-01 18:33:41 +0200 |
---|---|---|
committer | Vladimir Azarov <avm@intermediate-node.net> | 2024-10-01 18:33:41 +0200 |
commit | 47a781f03119d360ef2b2936234d381fd2f4c85d (patch) | |
tree | 0dd1cb1305b10a2f551c4a30f48589aca4324d87 /Makefile | |
parent | 4abab5ad6c8465a7528ccdd5f49367da05f78bbd (diff) |
Rewritten Makefile
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..aeb1325 --- /dev/null +++ b/Makefile @@ -0,0 +1,107 @@ +AR = ar +CC = gcc +CFLAGS = -Wall -g -O3 -march=native + +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) + +prefix = / +includedir = $(prefix)/include +libdir = $(prefix)/lib + +src_dirs = src/* src/mallocng crt +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 = $(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/%)) + +default: $(lib_obj) + +generated_dirs: + mkdir -p $(dir $(generated_headers)) + +$(generated_headers): | generated_dirs + +generated/include/bits/alltypes.h: arch/$(arch)/bits/alltypes.h.in \ + include/alltypes.h.in + sed -f tools/mkalltypes.sed $^ >$@ + +generated/include/bits/syscall.h: arch/$(arch)/bits/syscall.h.in + cp $< $@ + sed -n -e 's/__NR_/SYS_/p' < $< >>$@ + +src/internal/version.o: cflags += -DVERSION=\"$(shell cat VERSION)\" +crt/crt1.o: arch/$(arch)/crt_arch.h +$(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) + +%.o: crt/$(arch)/%.o + cp $< $@ +%.o: crt/%.o + cp $< $@ + +libc.a: $(all_obj) + rm -f $@ + $(AR) rcs $@ $^ + +$(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-libs: $(addprefix $(DESTDIR)$(libdir)/, $(lib_obj)) +install-headers: $(all_inc:include/%=$(DESTDIR)$(includedir)/%) +install: install-libs install-headers + +clean: + rm -rf generated + rm -f crt/*.o src/*/*.o libc.a crt1.o crti.o crtn.o |