1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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
|