Updating all of the makefiles to support separate directories for debug and release...
[platform/upstream/iotivity.git] / csdk / makefile
1 # override with `make BUILD=release`
2 # default to release build
3 BUILD    := release
4 PLATFORM := linux
5 CC       := gcc
6
7 ifeq ($(ROOT_DIR), )
8 ROOT_DIR        = $(PWD)
9 endif
10
11 ifeq ($(OBJ_DIR), )
12 OBJ_DIR = $(ROOT_DIR)/obj
13 endif
14
15 OCLOGGER_DIR    = $(ROOT_DIR)/logger
16 OCRANDOM_DIR    = $(ROOT_DIR)/ocrandom
17 OCSOCKET_DIR    = $(ROOT_DIR)/ocsocket
18 LCOAP_DIR       = $(ROOT_DIR)/libcoap-4.1.1
19 OCCOAP_DIR      = $(ROOT_DIR)/occoap
20 OCTBSTACK_DIR   = $(ROOT_DIR)/stack
21 UTILS_DIR       = $(ROOT_DIR)/../../ccf-utilities/tb
22 CJSON_DIR       = $(UTILS_DIR)/cJSON
23
24 OCCOAP_SRC      = $(OCCOAP_DIR)/src
25 OCTBSTACK_SRC   = $(OCTBSTACK_DIR)/src
26 CJSON_SRC       = $(CJSON_DIR)
27
28 OCLOGGER_INC    = $(OCLOGGER_DIR)/include
29 OCRANDOM_INC    = $(OCRANDOM_DIR)/include
30 OCSOCKET_INC    = $(OCSOCKET_DIR)/include
31 LCOAP_INC       = $(LCOAP_DIR)
32 OCCOAP_INC      = $(OCCOAP_DIR)/include
33 OCTBSTACK_INC   = $(OCTBSTACK_DIR)/include
34 CJSON_INC       = $(CJSON_DIR)
35
36 INC_DIRS        := -I$(OCLOGGER_INC)
37 INC_DIRS        += -I$(OCRANDOM_INC)
38 INC_DIRS        += -I$(OCSOCKET_INC)
39 INC_DIRS        += -I$(LCOAP_INC)
40 INC_DIRS        += -I$(OCCOAP_INC)
41 INC_DIRS        += -I$(OCTBSTACK_INC)
42 INC_DIRS        += -I$(OCTBSTACK_INC)/internal
43 INC_DIRS        += -I$(CJSON_INC)
44
45 CC_FLAGS.debug          := -O0 -g3 -Wall -c -fmessage-length=0 -pedantic -std=c99 -fpic \
46                         -DTB_LOG
47 CC_FLAGS.release        := -Os -Wall -c -fmessage-length=0 -std=c99 -fpic
48
49 CFLAGS          += $(CC_FLAGS.$(BUILD)) -DWITH_POSIX $(INC_DIRS)
50 LDLIBS          += -lcoap
51
52 CJSON_SOURCES           := $(CJSON_SRC)/cJSON.c
53
54 OCCOAP_SOURCES          := $(OCCOAP_SRC)/occoap.c
55 OCCOAP_SOURCES          += $(OCCOAP_SRC)/occoaphelper.c
56
57 OCTBSTACK_SOURCES       := $(OCTBSTACK_SRC)/ocstack.c
58 OCTBSTACK_SOURCES       += $(OCTBSTACK_SRC)/occlientcb.c
59 OCTBSTACK_SOURCES       += $(OCTBSTACK_SRC)/ocserverrequest.c
60 OCTBSTACK_SOURCES       += $(OCTBSTACK_SRC)/ocresource.c
61 OCTBSTACK_SOURCES       += $(OCTBSTACK_SRC)/ocobserve.c
62
63 SOURCES                 := $(CJSON_SOURCES)
64 SOURCES                 += $(OCCOAP_SOURCES)
65 SOURCES                 += $(OCTBSTACK_SOURCES)
66
67 all:    make_lcoap objdirs obj_build liboctbstack.a #print_vars
68
69 make_lcoap: 
70         $(MAKE) -C $(LCOAP_DIR) "BUILD=$(BUILD)" "PLATFORM=$(PLATFORM)"
71
72 objdirs: $(ROOT_DIR)
73         mkdir -p $(OBJ_DIR)
74         mkdir -p $(OBJ_DIR)/$(BUILD)
75         mkdir -p $(BUILD)
76
77 obj_build:
78         @echo "Building $@"
79         # Output all *.o files to $(OBJ_DIR)/$(BUILD)
80         $(foreach source,$(SOURCES), $(CC) $(LDLIBS) $(CFLAGS) $(source) -o $(patsubst %.c, %.o, $(patsubst %, $(OBJ_DIR)/$(BUILD)/%, $(notdir $(source))));) 
81
82 liboctbstack.a:
83         @echo "Building $@" 
84         # Unpackage libcoap.a to $(OBJ_DIR)/$(BUILD). The output objects from OCStack and OCCoap are already at this location
85         @cd $(OBJ_DIR)/$(BUILD) && ar -x $(LCOAP_DIR)/$(BUILD)/libcoap.a
86         # Repackage all the objects at this location into a single archive. This is OCStack, OCCoap, and LibCoap (LibCoap contains OCRandom, OCLogger, and OCSocket.).
87         ar -r $(BUILD)/$@ $(OBJ_DIR)/$(BUILD)/*.o 
88
89 .PHONY: clean print_vars
90
91 clean: legacy_clean
92         -rm -rf release
93         -rm -rf debug
94
95 deepclean: legacy_deepclean
96         -rm -rf release
97         -rm -rf debug
98
99 legacy_clean:   $(ROOT_DIR)
100         @echo "Cleaning all."
101         rm -f $(OBJ_DIR)/$(BUILD)/*.o
102         rm -f $(ROOT_DIR)/$(BUILD)/liboctbstack.a
103         rm -rf $(OBJ_DIR)
104
105 legacy_deepclean: $(ROOT_DIR)
106         @echo "Deep-Cleaning all."
107         rm -f $(OBJ_DIR)/$(BUILD)/*.o
108         rm -f $(ROOT_DIR)/liboctbstack.a
109         rm -rf $(OBJ_DIR)
110         $(MAKE) clean -C $(LCOAP_DIR)
111
112 print_vars:
113         @echo ""
114         @echo 'INCLUDES ARE: '$(value INC_DIRS)
115         @echo ""
116         @echo 'SOURCE FILES ARE: '$(value SOURCES)
117         @echo ""
118         @echo 'OBJ_DIR/BUILD is: '$(OBJ_DIR)'/'$(BUILD)
119         @echo ""
120         @echo 'ROOT_DIR is: '$(ROOT_DIR)