b7da7fee52d0237d0380bb62f19eebc56cfe30e3
[libc-test] / src / functional / Makefile
1 CFLAGS+=-pipe -std=c99 -D_POSIX_C_SOURCE=200809L -Wall -Wno-unused-function -Wno-missing-braces
2 LDFLAGS+=
3 LDLIBS+=
4
5 SRC=$(sort $(wildcard *.c))
6 OBJ=$(SRC:.c=.o)
7 DSOOBJ=$(filter %_dso.o,$(OBJ))
8 BINOBJ=$(filter-out %_dso.o,$(OBJ))
9 NO_DL_OBJ=$(filter-out %dlopen.o,$(BINOBJ))
10 DSO=$(DSOOBJ:.o=.so)
11 BIN=$(BINOBJ:.o=)
12 BIN_STATIC=$(NO_DL_OBJ:.o=-static)
13 ALL=$(BIN) $(BIN_STATIC) $(DSO)
14
15 -include ../../config.mak
16
17 all: $(ALL)
18 run: all
19         @N=0; A=0; for i in $(BIN) $(BIN_STATIC);do \
20                 A=$$((A+1)); ./$$i || { N=$$((N+1)); echo FAIL $$i; } \
21         done; \
22         [ "$$N" = 0 ] && echo PASS || echo FAILS: $$N/$$A
23 clean:
24         rm -f $(OBJ) $(ALL)
25
26 $(OBJ): test.h
27 $(DSOOBJ): CFLAGS+=-fPIC
28 %.o: %.c
29         $(CC) $(CFLAGS) -c -o $@ $< || echo BUILDERROR $@
30 %.so: %.o
31         $(CC) -shared $(LDFLAGS) -o $@ $< $(LDLIBS) || echo BUILDERROR $@
32 %-static: %.o
33         $(CC) -static $(LDFLAGS) -o $@ $< $(LDLIBS) || echo BUILDERROR $@
34 %: %.o
35         $(CC) $(LDFLAGS) -o $@ $< $(LDLIBS) || echo BUILDERROR $@
36
37 dlopen: LDLIBS+=-ldl -rdynamic
38 pthread%: LDLIBS+=-lpthread
39 sem sem-static: LDLIBS+=-lpthread -lrt
40 strtod_simple strtod_simple-static: LDLIBS+=-lm
41 tgmath tgmath-static: LDLIBS+=-lm
42 # adding ./lib.so through LDLIBS instead of $^ in the implicit rule because make removes the leading ./ from dependencies
43 tls_align: LDLIBS+=./tls_align_dso.so
44 tls_align: tls_align_dso.so
45 # make bug: tls_align target specific flags are also set for tls_align_dso.so when both target is built
46 tls_align_dso.so: LDLIBS=
47 tls_align-static: LDLIBS+=tls_align_dso.o
48 tls_align-static: tls_align_dso.o
49 tls_align_dlopen: LDLIBS+=-ldl
50 tls_init tls_init-static: LDLIBS+=-lpthread
51