-
Notifications
You must be signed in to change notification settings - Fork 22
/
Copy pathMakefile
95 lines (71 loc) · 2.22 KB
/
Makefile
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
## Copyright (c) 2015 Ahmad Fatoum
# define commands
CROSS_COMPILE ?= C:/CSLite/bin/arm-none-linux-gnueabi-
PREFIX ?= $(CROSS_COMPILE)
CC = $(PREFIX)gcc
AR = $(PREFIX)ar
SED = sed
MKDIR = mkdir -p
INSTALL = cp
RM = rm -rf
# define directories
# - for build
OBJDIR := .objs
# - for install
DESTDIR ?= $(CURDIR)/installed
INCLUDEDIR ?= $(DESTDIR)/include
LIBDIR ?= $(DESTDIR)/lib
# define files
SRCS = $(wildcard API/*.c API/**/*.c contrib/**/*.c)
OBJS = $(patsubst %.c,$(OBJDIR)/%.o,$(SRCS))
DEPFILES = $(patsubst %.c,$(OBJDIR)/%.d,$(SRCS))
# define flags
override CFLAGS += -std=c99
override CFLAGS += -fno-strict-aliasing -fwrapv
override CFLAGS += -Wall -Wextra -Wpointer-sign -Wno-unused-parameter
override CFLAGS += -D_GNU_SOURCE=1
# logging control
ifeq ($(VERBOSE)$(V),)
Q = @@
else
Q =
endif
-include api-config.mk
# library building
all: libev3api.a
libev3api.a: $(OBJS)
@echo " [AR] $@"
$(Q)$(AR) rcs $@ $^
$(OBJDIR)/%.o: %.c $(OBJDIR)/%.d
@echo " [CC] $<"
@$(MKDIR) $(@D)
$(Q)$(CC) -isystem include -MMD -MP -Os $(CFLAGS) -isystem. -I API -c $< -o $@
$(DEPFILES):
@$(MKDIR) $(@D)
-include $(DEPFILES)
# pkgconfig processing & installation
install: libev3api.a API/libev3api.pc.in
@# this cannot be a target because it depends on the variable value
@echo " [SED] libev3api.pc"
$(Q)$(SED) -e "s+@PREFIX@+$(DESTDIR)+" \
-e "s+@INCDIR@+$(INCLUDEDIR)+" \
-e "s+@LIBDIR@+$(LIBDIR)+" \
API/libev3api.pc.in > libev3api.pc
@echo " [INSTALL] libev3api.a"
$(Q)$(MKDIR) $(LIBDIR)/pkgconfig $(INCLUDEDIR)/ev3api
$(Q)$(INSTALL) libev3api.a $(LIBDIR)/
@echo " [INSTALL] libev3api.pc"
$(Q)$(INSTALL) libev3api.pc $(LIBDIR)/pkgconfig/
@echo " [INSTALL] API/*.h"
$(Q)$(INSTALL) API/*.h $(INCLUDEDIR)/ev3api/
uninstall:
$(RM) $(LIBDIR)/libev3api.a \
$(LIBDIR)/pkgconfig/libev3api.pc \
$(INCLUDEDIR)/ev3api
# sanity check helper
example:
echo 'int main(void) { return EV3IsInitialized() == 1; }' | $(CC) -xc $(CFLAGS) - -L. -lev3api -IAPI/include -oexample -include ev3.h
# cleanup
clean:
$(RM) $(OBJDIR) *.a *.pc example
.PHONY: all clean install uninstall