df468e949784af5fd91f0d3c838360defff507cf
[contrib/iotivity.git] / resource / csdk / makefile
1 # //******************************************************************
2 # //
3 # // Copyright 2014 Intel Mobile Communications GmbH All Rights Reserved.
4 # //
5 # //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6 # //
7 # // Licensed under the Apache License, Version 2.0 (the "License");
8 # // you may not use this file except in compliance with the License.
9 # // You may obtain a copy of the License at
10 # //
11 # //      http://www.apache.org/licenses/LICENSE-2.0
12 # //
13 # // Unless required by applicable law or agreed to in writing, software
14 # // distributed under the License is distributed on an "AS IS" BASIS,
15 # // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 # // See the License for the specific language governing permissions and
17 # // limitations under the License.
18 # //
19 # //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
20 #
21 # override with `make BUILD=debug`
22 # override with `make PLATFORM=arduinomega` or `make PLATFORM=arduinodue`
23 # default to release build
24 # default to build for linux
25 BUILD    := release
26 PLATFORM := linux
27
28 # override with `make PLATFORM=arduinomega ARDUINOWIFI=1` to enable Arduino WiFi shield
29 ARDUINOWIFI := 0
30
31 ifeq ($(ROOT_DIR), )
32 ROOT_DIR        = ./
33 endif
34
35 PLATFORM_TYPE = linux
36
37 ifeq ($(PLATFORM),linux)
38     CXX=g++
39     CC=gcc
40     AR=ar
41     RANLIB=ranlib
42     CFLAGS_PLATFORM = -DWITH_POSIX -std=c99
43     PLATFORM_TYPE=linux
44 else ifeq ($(PLATFORM),arduinomega)
45     include local.properties
46     include $(PLATFORM).properties
47     CC=$(ARDUINO_TOOLS_DIR)/avr-g++
48     ifeq ($(wildcard $(ARDUINO_DIR)/libraries/Time/Time/),)
49         $(error Arduino Time library needs to be moved from <ARDUINO_DIR>/libraries/Time \
50         to <ARDUINO_DIR>/libraries/Time/Time. You may need to create \
51         <ARDUINO_DIR>/libraries/Time/Time directory. Please refer to the wiki or readme \
52         for more information)
53     endif
54     PLATFORM_TYPE=arduino
55 else ifeq ($(PLATFORM),arduinodue)
56     include local.properties
57     include $(PLATFORM).properties
58     CC=$(ARDUINO_TOOLS_DIR)/arm-none-eabi-g++
59     PLATFORM_TYPE=arduino
60 else
61     $(error Wrong value for PLATFORM !!)
62 endif
63
64 ifeq ($(PLATFORM_TYPE),arduino)
65     ifeq ($(ARDUINOWIFI),0)
66     ARDUINO_SHIELD_TYPE := "/ethernet_shield"
67     else ifeq ($(ARDUINOWIFI), 1)
68     ARDUINO_SHIELD_TYPE := "/wifi_shield"
69     endif
70     PLATFORM_SPECIFIC_BACKOUT:= ../../../../
71 else
72     PLATFORM_SPECIFIC_BACKOUT := ../../../
73 endif
74
75 ifeq ($(OUT_DIR), )
76 OUT_DIR = $(PLATFORM)$(ARDUINO_SHIELD_TYPE)/$(BUILD)
77 endif
78
79 ifeq ($(OBJ_DIR), )
80 OBJ_DIR = $(OUT_DIR)/obj
81 endif
82
83 OCLOGGER_DIR    = logger
84 OC_LOG_DIR      = ../oc_logger
85 OCRANDOM_DIR    = ocrandom
86 OCSOCKET_DIR    = ocsocket
87 LCOAP_DIR       = libcoap-4.1.1
88 OCCOAP_DIR      = occoap
89 OCTBSTACK_DIR   = stack
90 OCMALLOC_DIR    = ocmalloc
91 EXTLIBS_DIR     = ../../extlibs
92 CJSON_DIR       = $(EXTLIBS_DIR)/cjson
93
94 OCCOAP_SRC      = $(OCCOAP_DIR)/src
95 OCTBSTACK_SRC   = $(OCTBSTACK_DIR)/src
96 OCMALLOC_SRC    = $(OCMALLOC_DIR)/src
97 CJSON_SRC       = $(CJSON_DIR)
98
99 OCLOGGER_INC    = $(OCLOGGER_DIR)/include
100 OC_LOG_INC      = $(OC_LOG_DIR)/include
101 OCRANDOM_INC    = $(OCRANDOM_DIR)/include
102 OCSOCKET_INC    = $(OCSOCKET_DIR)/include
103 LCOAP_INC       = $(LCOAP_DIR)
104 OCCOAP_INC      = $(OCCOAP_DIR)/include
105 OCTBSTACK_INC   = $(OCTBSTACK_DIR)/include
106 OCMALLOC_INC    = $(OCMALLOC_DIR)/include
107 CJSON_INC       = $(CJSON_DIR)
108
109 INC_DIRS        := -I$(OCLOGGER_INC)
110 INC_DIRS        += -I$(OC_LOG_INC)
111 INC_DIRS        += -I$(OCRANDOM_INC)
112 INC_DIRS        += -I$(OCSOCKET_INC)
113 INC_DIRS        += -I$(LCOAP_INC)
114 INC_DIRS        += -I$(OCCOAP_INC)
115 INC_DIRS        += -I$(OCMALLOC_INC)
116 INC_DIRS        += -I$(OCTBSTACK_INC)
117 INC_DIRS        += -I$(OCTBSTACK_INC)/internal
118 INC_DIRS        += -I$(CJSON_INC)
119
120 CC_FLAGS.debug          := -O0 -g3 -Wall -c -fmessage-length=0 -pedantic -fpic -DTB_LOG
121 CC_FLAGS.release        := -Os -Wall -c -fmessage-length=0 -fpic
122
123 CFLAGS          += $(CC_FLAGS.$(BUILD)) $(INC_DIRS) $(CFLAGS_PLATFORM) $(INC_DIR_PLATFORM)
124 LDLIBS          += -lcoap
125
126 CJSON_SOURCES           := $(CJSON_SRC)/cJSON.c
127
128 OCCOAP_SOURCES          := $(OCCOAP_SRC)/occoap.c
129 OCCOAP_SOURCES          += $(OCCOAP_SRC)/occoaphelper.c
130
131 OCTBSTACK_SOURCES       := $(OCTBSTACK_SRC)/ocstack.c
132 OCTBSTACK_SOURCES       += $(OCTBSTACK_SRC)/occlientcb.c
133 OCTBSTACK_SOURCES       += $(OCTBSTACK_SRC)/ocresource.c
134 OCTBSTACK_SOURCES       += $(OCTBSTACK_SRC)/ocobserve.c
135 OCTBSTACK_SOURCES       += $(OCTBSTACK_SRC)/occollection.c
136
137 SOURCES                 := $(CJSON_SOURCES)
138 SOURCES                 += $(OCCOAP_SOURCES)
139 SOURCES                 += $(OCTBSTACK_SOURCES)
140
141 all:    make_lcoap objdirs obj_build liboctbstack.a
142
143 buildScript_all: objdirs obj_build liboctbstack.a
144
145 make_lcoap: 
146         $(MAKE) -C $(LCOAP_DIR) "BUILD=$(BUILD)" "PLATFORM=$(PLATFORM)" "ARDUINOWIFI=$(ARDUINOWIFI)"
147
148 objdirs: 
149         mkdir -p $(PLATFORM)
150         mkdir -p $(PLATFORM)/$(ARDUINO_SHIELD_TYPE)
151         mkdir -p $(OUT_DIR)
152         mkdir -p $(OBJ_DIR)
153
154 obj_build:
155         @echo "Building $@"
156         # Output all *.o files to $(OUT_DIR)/$(BUILD)/$(OBJ_DIR)
157         $(foreach source,$(SOURCES), $(CC) $(CFLAGS) $(source) -o $(patsubst %.c, %.o, $(patsubst %, $(OBJ_DIR)/%, $(notdir $(source))));)
158
159 liboctbstack.a: obj_build
160         @echo "Building $@" 
161         # Unpackage libcoap.a to $(OBJ_DIR)/$(BUILD). The output objects from OCStack and OCCoap are already at this location
162         @cd $(OBJ_DIR) && $(AR) -x $(PLATFORM_SPECIFIC_BACKOUT)$(LCOAP_DIR)/$(PLATFORM)$(ARDUINO_SHIELD_TYPE)/$(BUILD)/libcoap.a
163         # Repackage all the objects at this location into a single archive. This is OCStack, OCCoap, and LibCoap (LibCoap contains OCRandom, OCLogger, and OCSocket.).
164         $(AR) -r $(OUT_DIR)/$@ $(OBJ_DIR)/*.o
165
166 .PHONY: clean print_vars
167
168 clean: legacy_clean
169         -rm -rf linux
170         -rm -rf arduinomega
171         -rm -rf arduinodue
172
173 deepclean: legacy_deepclean
174         -rm -rf linux
175         -rm -rf arduinomega
176         -rm -rf arduinodue
177
178 legacy_clean:
179         @echo "Cleaning all."
180         rm -f $(OBJ_DIR)/$(BUILD)/*.o
181         rm -f $(ROOT_DIR)/$(BUILD)/liboctbstack.a
182         rm -rf $(OBJ_DIR)
183         rm -rf release
184         rm -rf debug
185
186 legacy_deepclean:
187         @echo "Deep-Cleaning all."
188         rm -f $(OBJ_DIR)/$(BUILD)/*.o
189         rm -f $(ROOT_DIR)/liboctbstack.a
190         rm -rf $(OBJ_DIR)
191         $(MAKE) clean -C $(LCOAP_DIR)
192         rm -rf release
193         rm -rf debug