-
Notifications
You must be signed in to change notification settings - Fork 128
/
Makerules
49 lines (35 loc) · 1.24 KB
/
Makerules
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
#
# Common Makefile targets to build a static library.
#
INCLUDE := -I../../include -I../../system/platforms/$(PLATFORM) -I../..
# Filter out source files that have been overridden on this platform. This is
# primarily intended to allow platforms to provide optimized implementations of
# libxc functions. For that use case, one would define LIBXC_OVERRIDE_CFILES in
# platformVars to be a list of C source files that are *not* to be compiled as
# part of libxc.
CFILES := $(filter-out $($(shell echo $(LIBNAME) | tr a-z A-Z)_OVERRIDE_CFILES), $(CFILES))
SFILES := $(filter-out $($(shell echo $(LIBNAME) | tr a-z A-Z)_OVERRIDE_SFILES), $(SFILES))
# Update the include flag
CFLAGS := $(CFLAGS:-I%=$(INCLUDE))
# C object files
COBJ := $(CFILES:%.c=%.o)
# Assembly object files
SOBJ := $(SFILES:%.S=%.o)
# All object files
OBJ := $(COBJ) $(SOBJ)
all: $(LIBNAME).a
$(COBJ): %.o: %.c
@echo -e "\tCompiling" $^
$(CC) $(CFLAGS) -c -o$@ $^
$(SOBJ): %.o: %.c
@echo -e "\tAssembling" $^
$(AS) $(AFLAGS) -o$@ $^
$(LIBNAME).a: $(OBJ)
rm -f $(LIBNAME).a
$(AR) cr $(LIBNAME).a $(OBJ)
$(LIBDIR)/$(LIBNAME).a: $(LIBNAME).a
cp $^ $@
install: $(LIBDIR)/$(LIBNAME).a
clean:
rm -f $(OBJ) $(LIBNAME).a $(LIBDIR)/$(LIBNAME).a
.PHONY: clean install all