|
| 1 | + |
1 | 2 | CXX=g++ |
| 3 | +SRC=src |
| 4 | +BUILD=build |
| 5 | +BIN=bin |
| 6 | +LIB=lib |
| 7 | +INSTALL_PATH?=./install |
2 | 8 |
|
3 | | -CXXFLAGS=-Iinclude -std=c++11 |
| 9 | +CXX_FLAGS=-Iinclude -std=c++11 -fPIC -Wall -g -O3 -Werror -Wpedantic |
| 10 | +LD_FLAGS=-lboost_program_options -lboost_system -Wl,-rpath=$(PWD)/lib |
4 | 11 |
|
5 | | -LD_FLAGS=-lfreeipmi -lboost_program_options |
| 12 | +#================================================================================ |
| 13 | +#== GRAPHITE_MONITOR |
| 14 | +#================================================================================ |
| 15 | +GRAPHITE_MONITOR_LD_FLAGS=$(LD_FLAGS) -L$(LIB) |
| 16 | +GRAPHITE_MONITOR_LIBS="" |
| 17 | +GRAPHITE_MONITOR_OBJ=$(BUILD)/graphite_monitor.o |
6 | 18 |
|
7 | | -SRC=src |
| 19 | +#================================================================================ |
| 20 | +#== Sensor's and Sensor factory |
| 21 | +#================================================================================ |
| 22 | +SENSOR_BASE_SRC=$(wildcard $(SRC)/base/*.cc) |
| 23 | +SENSOR_BASE_OBJ=$(patsubst $(SRC)/%.cc,$(BUILD)/%.o,$(SENSOR_BASE_SRC)) |
| 24 | +GRAPHITE_MONITOR_OBJ += $(SENSOR_BASE_OBJ) |
8 | 25 |
|
9 | | -DEPS=include/%.hh |
| 26 | +#================================================================================ |
| 27 | +#== FreeIPMI based Sensor |
| 28 | +#================================================================================ |
| 29 | +ATCA_LIB=$(LIB)/libATCA.so |
| 30 | +ATCA_SRC=$(wildcard $(SRC)/atca/*.cc) |
| 31 | +ATCA_OBJ=$(patsubst $(SRC)/%.cc,$(BUILD)/%.o,$(ATCA_SRC)) |
| 32 | +ATCA_LIBS=-lfreeipmi |
| 33 | +ATCA_LD_FLAGS=-shared -fPIC -Wall -g -O3 -rdynamic |
| 34 | +ifneq ("$(wildcard $(ATCA_LIB))","") |
| 35 | + GRAPHITE_MONITOR_LIB+=-lATCA |
| 36 | +endif |
10 | 37 |
|
11 | | -BUILD=build |
| 38 | +#================================================================================ |
| 39 | +#== Apoll Monitor Sensor |
| 40 | +#================================================================================ |
| 41 | +CACTUS_ROOT?=/opt/cactus |
| 42 | +APOLLO_PATH?=/opt/BUTool |
| 43 | +APOLLO_MONITOR_LIB=$(LIB)/libApolloMonitor.so |
| 44 | +APOLLO_MONITOR_SRC=$(wildcard $(SRC)/ApolloMonitor/*.cc) |
| 45 | +APOLLO_MONITOR_OBJ=$(patsubst $(SRC)/%.cc,$(BUILD)/%.o,$(APOLLO_MONITOR_SRC)) |
| 46 | +APOLLO_MONITOR_LIBS= -lBUTool_Helpers \ |
| 47 | + -lBUTool_ApolloSM \ |
| 48 | + -lToolException \ |
| 49 | + -lBUTool_IPBusIO |
| 50 | +APOLLO_MONITOR_CXX_FLAGS=-I$(APOLLO_PATH)/include -I$(CACTUS_ROOT)/include |
| 51 | +APOLLO_MONITOR_LD_FLAGS=-L$(APOLLO_PATH)/lib -Wl,-rpath=$(APOLLO_PATH)/lib -shared -fPIC -Wall -g -O3 -rdynamic |
| 52 | +ifneq ("$(wildcard $(APOLLO_MONITOR_LIB))","") |
| 53 | + GRAPHITE_MONITOR_LIB+=-lApolloMonitor |
| 54 | +endif |
12 | 55 |
|
13 | | -LIB=lib |
| 56 | +#================================================================================ |
| 57 | +#== Apoll Monitor Sensor |
| 58 | +#================================================================================ |
| 59 | +#SHELF_SCAN_OBJ=$(BUILD)/shelf_scan.o $(BASE_OBJ) $(ATCA_OBJ) |
| 60 | +SHELF_SCAN_OBJ=$(BUILD)/shelf_scan.o $(BUILD)/atca/FRUReader.o |
| 61 | +#LD_FLAGS += -Llib |
| 62 | +SHELF_SCAN_LIB=-lfreeipmi |
| 63 | +#================================================================================ |
14 | 64 |
|
15 | | -OBJ= main.o net_helpers.o TimeSensor.o Sensor.o IpmiTemperatureSensor.o IpmiFanSpeedSensor.o ApolloBlade.o |
16 | 65 |
|
17 | | -.PHONEY: all clean |
| 66 | +.PHONEY: all clean distclean graphite_monitor shelf_scan lib_ApolloMonitor lib_ATCA list install |
| 67 | +all: graphite_monitor |
18 | 68 |
|
19 | | -all: main |
| 69 | +#================================================================================ |
| 70 | +#== Aliases |
| 71 | +#================================================================================ |
| 72 | +graphite_monitor: $(BIN)/graphite_monitor |
| 73 | +shelf_scan: $(BIN)/shelf_scan |
| 74 | +lib_ApolloMonitor: $(APOLLO_MONITOR_LIB) |
| 75 | +lib_ATCA: $(ATCA_LIB) |
20 | 76 |
|
21 | | -main: $(OBJ) |
22 | | - $(CXX) -o $@ $^ $(LD_FLAGS) |
| 77 | +#================================================================================ |
| 78 | +#== EXEs |
| 79 | +#================================================================================ |
| 80 | +$(BIN)/graphite_monitor: $(GRAPHITE_MONITOR_OBJ) |
| 81 | + @mkdir -p $(dir $@) |
| 82 | + @echo $(GRAPHITE_MONITOR_OBJ) |
| 83 | + @echo $(SENSOR_BASE_OBJ) |
| 84 | + $(CXX) -o $@ $^ -Wl,--no-as-needed $(GRAPHITE_MONITOR_LD_FLAGS) $(GRAPHITE_MONITOR_LIB) $(INSTALL_LD_FLAGS) |
23 | 85 |
|
24 | | -%.o: $(SRC)/%.cc |
25 | | - $(CXX) -c -o $@ $< $(CXXFLAGS) |
| 86 | +$(BIN)/shelf_scan: $(SHELF_SCAN_OBJ) |
| 87 | + @mkdir -p $(dir $@) |
| 88 | + $(CXX) -o $@ $^ $(LD_FLAGS) $(SHELF_SCAN_LIB) |
26 | 89 |
|
| 90 | +#================================================================================ |
| 91 | +#== Sensor Libs |
| 92 | +#================================================================================ |
| 93 | +$(APOLLO_MONITOR_LIB) : $(APOLLO_MONITOR_OBJ) |
| 94 | + @mkdir -p $(LIB) |
| 95 | + $(CXX) -o $@ $^ $(LD_FLAGS) $(APOLLO_MONITOR_LD_FLAGS) $(APOLLO_MONITOR_LIBS) |
| 96 | + |
| 97 | +$(ATCA_LIB) : $(ATCA_OBJ) |
| 98 | + @mkdir -p $(LIB) |
| 99 | + $(CXX) -o $@ $^ $(LD_FLAGS) $(ATCA_LD_FLAGS) $(ATCA_LIBS) |
| 100 | + |
| 101 | +#================================================================================ |
| 102 | +#== Generic rules |
| 103 | +#================================================================================ |
| 104 | +#Build cc files |
| 105 | +$(BUILD)/%.o: $(SRC)/%.cc |
| 106 | + @mkdir -p $(dir $@) |
| 107 | + $(CXX) -c -o $@ $< $(CXX_FLAGS) |
| 108 | +#Build cxx files |
| 109 | +$(BUILD)/%.o: $(SRC)/%.cxx |
| 110 | + @mkdir -p $(dir $@) |
| 111 | + $(CXX) -c -o $@ $< $(CXX_FLAGS) |
| 112 | +#build ApolloMonitor cc files |
| 113 | +$(BUILD)/ApolloMonitor/%.o: $(SRC)/ApolloMonitor/%.cc |
| 114 | + @mkdir -p $(dir $@) |
| 115 | + $(CXX) -c -o $@ $< $(CXX_FLAGS) $(APOLLO_MONITOR_CXX_FLAGS) |
| 116 | + |
| 117 | +#================================================================================ |
| 118 | +#== Install |
| 119 | +#================================================================================ |
| 120 | + |
| 121 | +install: $(GRAPHITE_MONITOR_OBJ) |
| 122 | + rm -f $(BIN)/graphite_monitor |
| 123 | + make $(BIN)/graphite_monitor INSTALL_LD_FLAGS='-Wl,-rpath=$(INSTALL_PATH)/lib' |
| 124 | + install -m 775 -d $(INSTALL_PATH)/lib |
| 125 | + install -m 775 -d $(INSTALL_PATH)/bin |
| 126 | + install -b -m 775 $(BIN)/graphite_monitor ${INSTALL_PATH}/bin |
| 127 | + install -b -m 775 $(LIB)/* ${INSTALL_PATH}/lib |
| 128 | + |
| 129 | +#================================================================================ |
| 130 | +#== Cleanup & helpers |
| 131 | +#================================================================================ |
27 | 132 | clean: |
28 | | - rm -f $(OBJ) |
| 133 | + rm -rf $(BUILD) |
| 134 | +distclean: clean |
| 135 | + rm -rf $(BIN) |
| 136 | + rm -rf $(LIB) |
| 137 | + |
| 138 | +#list magic: https://stackoverflow.com/questions/4219255/how-do-you-get-the-list-of-targets-in-a-makefile |
| 139 | +list: |
| 140 | + @$(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$' | column |
| 141 | + |
0 commit comments