-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmakefile
104 lines (85 loc) · 3.44 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
96
97
98
99
100
101
102
103
104
DVER_MAJOR := 1
DVER_MINOR := 0
DVER_REVISION := 0
NAME := hypstar
VERSION := $(DVER_MAJOR).$(DVER_MINOR).$(DVER_REVISION)
HYPSTAR_PORTNAME := /dev/radiometer0
#HYPSTAR_PORTNAME := /dev/ttyUSB1
#HYPSTAR_PORTNAME := /dev/ttyUSB0
CC := g++
BUILD_DIR := build
$(BUILD_DIR):
mkdir -p $(BUILD_DIR)
INSTALL_DIR := /usr/local
C_SOURCES := $(wildcard src/*.cpp)
C_SOURCES += $(wildcard src/serial/*.cpp)
C_SOURCES += $(wildcard src/utils/*.cpp)
OBJECTS := $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.cpp=.o)))
vpath %.cpp src:src/serial/:src/utils/
vpath %.h inc/:inc/serial/:inc/utils/
INCLUDES = -Iinc \
-Iinc/serial \
-Iinc/utils
CFLAGS := -std=gnu++11 -rdynamic -fPIC -O0 -g -Wall -Werror
LFLAGS := -rdynamic -fPIC -lrt -shared -Wl,--export-dynamic
$(shell git update-index -q --refresh > /dev/null 2>&1)
ifneq ($(shell git status --porcelain),)
COMMIT_HASH_MOD := -mod
endif
COMMIT_HASH := $(shell git rev-parse --short HEAD)$(COMMIT_HASH_MOD)
EXTRA_CFLAGS := -DDVER_MAJOR=$(DVER_MAJOR) -DDVER_MINOR=$(DVER_MINOR) -DDVER_REVISION=$(DVER_REVISION) -DDVER_HASH=\"$(COMMIT_HASH)\"
# If the first argument is "test_firmware_update"...
ifeq (test_firmware_update,$(firstword $(MAKECMDGOALS)))
# use the rest as arguments for "test_firmware_update"
RUN_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
# ...and turn them into do-nothing targets
$(eval $(RUN_ARGS):;@:)
endif
lib: $(BUILD_DIR)/lib$(NAME).so
test_%: $(BUILD_DIR)/lib$(NAME).so
@echo --------------------------
@echo Building $@
@echo --------------------------
$(CC) -DHYPSTAR_PORTNAME=\"$(HYPSTAR_PORTNAME)\" $(EXTRA_CFLAGS) -rdynamic $(INCLUDES) -L./$(BUILD_DIR) -Wl,-rpath=./$(BUILD_DIR) -o $(BUILD_DIR)/$@ test/[email protected] -lhypstar -lrt
@echo --------------------------
@echo Executing $@ $(RUN_ARGS)
@echo --------------------------
./$(BUILD_DIR)/$@ $(RUN_ARGS)
$(BUILD_DIR)/lib$(NAME).so: $(BUILD_DIR)/lib$(NAME).so.$(VERSION)
@echo ----- INFO: Linking lib
$(RM) $(BUILD_DIR)/lib$(NAME).so
ln -s lib$(NAME).so.$(VERSION) $(BUILD_DIR)/lib$(NAME).so
$(BUILD_DIR)/lib$(NAME).so.$(VERSION): $(OBJECTS)
@echo ----- INFO: Building lib
@echo C_SOURCES = $(C_SOURCES)
@echo OBJECTS = $(OBJECTS)
$(CC) $(EXTRA_CFLAGS) $(LFLAGS) -o $@ $(OBJECTS)
$(BUILD_DIR)/%.o : %.cpp | $(BUILD_DIR)
@echo ----- INFO: Building file $<
$(CC) $(EXTRA_CFLAGS) $(CFLAGS) $(INCLUDES) -c $< -o $@
.PHONY: clean install uninstall
clean:
$(RM) -r $(BUILD_DIR)
install: lib
@echo ----- INFO: Installing lib
$(RM) /usr/lib/lib$(NAME).so*
$(RM) $(INSTALL_DIR)/lib/lib$(NAME).so
$(RM) $(INSTALL_DIR)/lib/lib$(NAME).so.$(DVER_MAJOR)
$(RM) $(INSTALL_DIR)/lib/lib$(NAME).so.$(DVER_MAJOR).$(DVER_MINOR)
install -m 0644 $(BUILD_DIR)/lib$(NAME).so.$(VERSION) $(INSTALL_DIR)/lib/
ln -s lib$(NAME).so.$(VERSION) $(INSTALL_DIR)/lib/lib$(NAME).so
ln -s lib$(NAME).so.$(VERSION) $(INSTALL_DIR)/lib/lib$(NAME).so.$(DVER_MAJOR)
ln -s lib$(NAME).so.$(VERSION) $(INSTALL_DIR)/lib/lib$(NAME).so.$(DVER_MAJOR).$(DVER_MINOR)
install -m 0666 inc/hypstar.h $(INSTALL_DIR)/include
install -m 0666 inc/hypstar_typedefs.hpp $(INSTALL_DIR)/include
install -m 0666 inc/serial/libhypstar_linuxserial.h $(INSTALL_DIR)/include
echo "$(INSTALL_DIR)/lib" > /etc/ld.so.conf.d/hypstar.conf
ldconfig
uninstall:
@echo ----- INFO: Uninstalling lib
$(RM) /usr/lib/lib$(NAME).so*
$(RM) $(INSTALL_DIR)/lib/lib$(NAME).so*
$(RM) $(INSTALL_DIR)/include/hypstar*
$(RM) $(INSTALL_DIR)/include/libhypstar*
$(RM} /etc/ld.so.conf.d/hypstar.conf
ldconfig