forked from zhaozhixu/TensorLight
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
109 lines (92 loc) · 3.25 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
105
106
107
108
109
include config.mk
include common.mk
TARGET ?= tensorlight
ABBR ?= tl
LIBTARGET_A = lib$(TARGET).a
LIBTARGET_SO = lib$(TARGET).so
LIBTARGET_SO_MM = $(LIBTARGET_SO).$(MAJOR).$(MINOR)
LIBTARGET_SO_MMM = $(LIBTARGET_SO).$(MAJOR).$(MINOR).$(MICRO)
SRC_DIR = src
OBJ_DIR = $(SRC_DIR)/obj
TEST_DIR = test
BUILD_DIR ?= build
BUILD_INCLUDE_DIR = $(BUILD_DIR)/include
BUILD_LIB_DIR = $(BUILD_DIR)/lib
INSTALL_DIR ?= /usr/local
INSTALL_INCLUDE_DIR = $(INSTALL_DIR)/include
INSTALL_LIB_DIR = $(INSTALL_DIR)/lib
PKGCONFIG_DIR ?= /usr/local/lib/pkgconfig
OBJ_A = $(OBJ_DIR)/$(LIBTARGET_A)
OBJ_SO = $(OBJ_DIR)/$(LIBTARGET_SO)
SRC_HEADERS = $(wildcard $(SRC_DIR)/$(ABBR)_*.h)
HEADERS = $(patsubst $(SRC_DIR)/%.h,%.h,$(SRC_HEADERS))
BUILD_A = $(BUILD_LIB_DIR)/$(LIBTARGET_A)
BUILD_SO = $(BUILD_LIB_DIR)/$(LIBTARGET_SO)
BUILD_SO_MM = $(BUILD_LIB_DIR)/$(LIBTARGET_SO_MM)
BUILD_SO_MMM = $(BUILD_LIB_DIR)/$(LIBTARGET_SO_MMM)
BUILD_HEADERS = $(patsubst %.h,$(BUILD_INCLUDE_DIR)/%.h,$(HEADERS))
CONFIG_HEADER = $(BUILD_INCLUDE_DIR)/$(ABBR)_tensor.h
CONFIG_DEFINES =
ifeq ($(WITH_CUDA), yes)
CONFIG_DEFINES += TL_CUDA
endif
INSTALL_A = $(INSTALL_LIB_DIR)/$(LIBTARGET_A)
INSTALL_SO = $(INSTALL_LIB_DIR)/$(LIBTARGET_SO)
INSTALL_SO_MM = $(INSTALL_LIB_DIR)/$(LIBTARGET_SO_MM)
INSTALL_SO_MMM = $(INSTALL_LIB_DIR)/$(LIBTARGET_SO_MMM)
INSTALL_HEADERS = $(patsubst %.h,$(INSTALL_INCLUDE_DIR)/%.h,$(HEADERS))
define add-config-defines
$(AT)tools/addconfig.pl $(CONFIG_HEADER) $(CONFIG_DEFINES)
endef
define make-build-dir
$(AT)if [ ! -d $(BUILD_DIR) ]; then mkdir -p $(BUILD_DIR); fi
$(AT)if [ ! -d $(BUILD_INCLUDE_DIR) ]; then mkdir -p $(BUILD_INCLUDE_DIR); fi
$(AT)if [ ! -d $(BUILD_LIB_DIR) ]; then mkdir -p $(BUILD_LIB_DIR); fi
cp $(SRC_HEADERS) $(BUILD_INCLUDE_DIR)
cp $(OBJ_A) $(BUILD_A)
cp $(OBJ_SO) $(BUILD_SO)
cp $(OBJ_SO) $(BUILD_SO_MM)
cp $(OBJ_SO) $(BUILD_SO_MMM)
endef
define make-install-dir
$(AT)if [ ! -d $(INSTALL_DIR) ]; then mkdir -p $(INSTALL_DIR); fi
$(AT)if [ ! -d $(INSTALL_INCLUDE_DIR) ]; then mkdir -p $(INSTALL_INCLUDE_DIR); fi
$(AT)if [ ! -d $(INSTALL_LIB_DIR) ]; then mkdir -p $(INSTALL_LIB_DIR); fi
$(AT)if [ ! -d $(PKGCONFIG_DIR) ]; then mkdir -p $(PKGCONFIG_DIR); fi
cp $(BUILD_HEADERS) $(INSTALL_INCLUDE_DIR)
cp $(BUILD_A) $(INSTALL_A)
cp $(BUILD_SO) $(INSTALL_SO)
cp $(BUILD_SO_MM) $(INSTALL_SO_MM)
cp $(BUILD_SO_MMM) $(INSTALL_SO_MMM)
endef
.PHONY: all lib test clean info install uninstall
all: lib test
install:
$(call make-install-dir)
$(AT)perl tools/gen_pkgconfig.pl $(TARGET) $(INSTALL_DIR) $(MAJOR).$(MINOR).$(MICRO) $(PKGCONFIG_DIR)
test: lib
$(AT)(cd $(TEST_DIR) && make)
lib:
$(AT)(cd $(SRC_DIR) && make)
$(call make-build-dir)
$(call add-config-defines)
clean:
$(AT)(cd $(SRC_DIR) && make clean);\
(cd $(TEST_DIR) && make clean)
rm -rf $(BUILD_DIR)
uninstall:
rm $(INSTALL_HEADERS)
rm $(INSTALL_A)
rm $(INSTALL_SO)
rm $(INSTALL_SO_MM)
rm $(INSTALL_SO_MMM)
rm $(PKGCONFIG_DIR)/$(TARGET).pc
info:
@echo "Available make targets:"
@echo " all: compile libraries and run tests"
@echo " lib: compile libraries"
@echo " test: compile and run tests"
@echo " install: install headers and libraries files"
@echo " clean: clean up all object files"
@echo " uninstall: uninstall headers and libraries files"
@echo " info: show this infomation"