BUILD := release
#other options are android, arduino
PLATFORM=linux
+OUT_DIR := ./$(BUILD)
+OBJ_DIR := $(OUT_DIR)/obj
ROOT_DIR = ..
OCSOCK_DIR = $(ROOT_DIR)/ocsocket
CC_FLAGS.debug := -O0 -g3 -Wall -ffunction-sections -fdata-sections -fno-exceptions -pedantic \
-std=gnu99 -DTB_LOG
-CC_FLAGS.release := -Os -Wall -ffunction-sections -fdata-sections -fno-exceptions -std=gnu99 \
-
-CFLAGS += $(CC_FLAGS.$(BUILD))
-
+CC_FLAGS.release := -Os -Wall -ffunction-sections -fdata-sections -fno-exceptions -std=gnu99
SOURCES:= pdu.c net.c debug.c encode.c uri.c coap_list.c resource.c hashkey.c \
str.c option.c async.c subscribe.c block.c logger.c ocrandom.c
OBJECTS:= $(patsubst %.c, %.o, $(SOURCES))
+all: prep_dirs libcoap.a
+
+prep_dirs:
+ -mkdir $(OUT_DIR)
+ -mkdir $(OBJ_DIR)
+
%.o: %.c
- $(CC) -c $(CFLAGS) $(CFLAGS_PLATFORM) $(INC_DIRS) $(INC_DIR_PLATFORM) $< -o $@
+ $(CC) -c $(CC_FLAGS.$(BUILD)) $(CFLAGS_PLATFORM) $(INC_DIRS) $(INC_DIR_PLATFORM) $< -o $(OBJ_DIR)/$@
%.o: %.cpp
- $(CCPLUS) -c $(CFLAGS) $(CFLAGS_PLATFORM) $(INC_DIRS) $(INC_DIR_PLATFORM) $< -o $@
+ $(CCPLUS) -c $(CC_FLAGS.$(BUILD)) $(CFLAGS_PLATFORM) $(INC_DIRS) $(INC_DIR_PLATFORM) $< -o $(OBJ_DIR)/$@
libcoap.a: $(OBJECTS) $(OBJECTSCPP)
- $(AR) rcs $@ $^
- $(RANLIB) $@
+ $(AR) rcs $(OUT_DIR)/$@ $(addprefix $(OBJ_DIR)/,$^)
+ $(RANLIB) $(OUT_DIR)/$@
.PHONY: clean
-clean:
+clean: legacy_clean
+ -rm -rf release
+ -rm -rf debug
+
+legacy_clean:
rm -f *.o libcoap.a
# override with `make BUILD=release`
# default to release build
BUILD := release
-PLATFORM := linux
+PLATFORM := arduino
CC := gcc
ifeq ($(ROOT_DIR), )
all: make_lcoap objdirs obj_build liboctbstack.a #print_vars
make_lcoap:
- $(MAKE) -C $(LCOAP_DIR)
+ $(MAKE) -C $(LCOAP_DIR) "BUILD=$(BUILD)"
objdirs: $(ROOT_DIR)
mkdir -p $(OBJ_DIR)
liboctbstack.a:
@echo "Building $@"
# Unpackage libcoap.a to $(OBJ_DIR)/$(BUILD). The output objects from OCStack and OCCoap are already at this location
- @cd $(OBJ_DIR)/$(BUILD) && ar -x $(LCOAP_DIR)/libcoap.a
+ @cd $(OBJ_DIR)/$(BUILD) && ar -x $(LCOAP_DIR)/$(BUILD)/libcoap.a
# Repackage all the objects at this location into a single archive. This is OCStack, OCCoap, and LibCoap (LibCoap contains OCRandom, OCLogger, and OCSocket.).
ar -r $@ $(OBJ_DIR)/$(BUILD)/*.o
.PHONY: clean print_vars
-clean: $(ROOT_DIR)
+clean: legacy_clean
+ -rm -rf release
+ -rm -rf debug
+
+deepclean: legacy_deepclean
+ -rm -rf release
+ -rm -rf debug
+
+legacy_clean: $(ROOT_DIR)
@echo "Cleaning all."
rm -f $(OBJ_DIR)/$(BUILD)/*.o
rm -f $(ROOT_DIR)/liboctbstack.a
rm -rf $(OBJ_DIR)
-deepclean: $(ROOT_DIR)
+legacy_deepclean: $(ROOT_DIR)
@echo "Deep-Cleaning all."
rm -f $(OBJ_DIR)/$(BUILD)/*.o
rm -f $(ROOT_DIR)/liboctbstack.a
BUILD := release
PLATFORM := linux
CC := gcc
+OUT_DIR := $(PWD)/$(BUILD)
+OBJ_DIR := $(OUT_DIR)/obj
ifeq ($(ROOT_DIR), )
ROOT_DIR = $(PWD)/../../..
PROGRAMS += ocserver
PROGRAMS += occlient
-all: $(PROGRAMS)
+all: prep_dirs $(PROGRAMS)
+
+prep_dirs:
+ -mkdir $(OUT_DIR)
+ -mkdir $(OBJ_DIR)
%.o: %.cpp
- $(CC) -c $(CPPFLAGS) $< -o $@
+ $(CC) -c $(CPPFLAGS) $< -o $(OBJ_DIR)/$@
.PHONY: clean
-clean:
+clean: legacy_clean
+ -rm -rf release
+ -rm -rf debug
+
+legacy_clean:
rm -f *.o $(PROGRAMS)
CORE_COBJ = WInterrupts.o wiring.o wiring_digital.o
CORE_CPPOBJ = main.o Stream.o WMath.o WString.o HardwareSerial.o Print.o SPI.o IPAddress.o wiring_analog.o
-ETH_CPPOBJ = Dhcp.o Dns.o Ethernet.o EthernetUdp.o
-ETH_UTIL_CPPOBJ = socket.o w5100.o
+ETH_CPPOBJ = Dhcp.o Dns.o Ethernet.o EthernetUdp.o
+ETH_UTIL_CPPOBJ = socket.o w5100.o
OCSTACK_CPPOBJ = ocrandom.o ocstack.o occoap.o ocserverrequest.o occlientcb.o
OCDEPENDENT_CPPOBJ = wiring_analog.o
CJSON_COBJ = cJSON.o
cp *.o $(OBJ_DIR)
cp *.elf $(OBJ_DIR)
-# Note for Arduino: The C files are compiled using C++ compiler since Arduino
+# Note for Arduino: The C files are compiled using C++ compiler since Arduino
# build includes Time.h header file which has C++ style definitions.
%.o: %.c
$(CCPLUS) $(CFLAGS) $(COPTIONS_ARDUINO) $(INC_DIRS) $< -o $@
%.o: %.cpp
$(CCPLUS) $(CFLAGS) $(COPTIONS_ARDUINO) $(INC_DIRS) $< -o $@
-core.a: $(CORE_COBJ) $(CORE_CPPOBJ) $(ETH_CPPOBJ) $(ETH_UTIL_CPPOBJ) $(LIBCOAP_DIR)/libcoap.a
+core.a: $(CORE_COBJ) $(CORE_CPPOBJ) $(ETH_CPPOBJ) $(ETH_UTIL_CPPOBJ) $(LIBCOAP_DIR)/libcoap.a
$(AR) rcs $@ $^
$(RANLIB) $@
$(CC) -Os -Wl,--gc-sections,--relax $(COPTIONS_ARDUINO) $^ -lm -o $@
$(TESTAPP).hex: $(TESTAPP).elf
- avr-objcopy -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 $< $(TESTAPP).eep
- avr-objcopy -O ihex -R .eeprom $< $@
+ avr-objcopy -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 $< $(TESTAPP).eep
+ avr-objcopy -O ihex -R .eeprom $< $@
install: all
- avrdude -C$(ARDUINO_DIR)/hardware/tools/avrdude.conf -v -v -v -v -patmega2560 -cstk500v2 -P/dev/ttyACM0 -b115200 -D -Uflash:w:$(TESTAPP).hex:i
+ avrdude -C$(ARDUINO_DIR)/hardware/tools/avrdude.conf -v -v -v -v -patmega2560 -cstk500v2 -P/dev/ttyACM0 -b115200 -D -Uflash:w:$(TESTAPP).hex:i
.PHONY: clean
OCResource.o: ../../../OCLib/OCResource.cpp
$(CXX) $(CXX_FLAGS) -c ../../../OCLib/OCResource.cpp -I../../../csdk/ -I../../../include/ -I../ -I../client/ -I../server/
-
+
ocstack_stub.o : ../../../csdk/ocstack_stub.c
gcc -c ../../../csdk/ocstack_stub.c -I../../../csdk/
testClient.o : testClient.cpp
$(CXX) $(CXX_FLAGS) -c testClient.cpp -I../../../csdk/ -I../../../include -I../ -I../client/ -I../server/
-clean:
+clean:
rm *.o server client serverApp
cd examples && $(MAKE) "BUILD=$(BUILD)"
simpleserver: OCLib.a
- $(CXX) $(CXX_FLAGS.$(BUILD)) -o $(SAMPLES_OUT_DIR)/$@ examples/simpleserver.cpp $(CXX_INC) $(OBJ_DIR)/OCLib.a csdk/liboctbstack.a
+ $(CXX) $(CXX_FLAGS.$(BUILD)) -o $(SAMPLES_OUT_DIR)/$@ examples/simpleserver.cpp $(CXX_INC) $(OBJ_DIR)/OCLib.a csdk/liboctbstack.a
simpleclient: OCLib.a
- $(CXX) $(CXX_FLAGS.$(BUILD)) -o $(SAMPLES_OUT_DIR)/$@ examples/simpleclient.cpp $(CXX_INC) $(OBJ_DIR)/OCLib.a csdk/liboctbstack.a
+ $(CXX) $(CXX_FLAGS.$(BUILD)) -o $(SAMPLES_OUT_DIR)/$@ examples/simpleclient.cpp $(CXX_INC) $(OBJ_DIR)/OCLib.a csdk/liboctbstack.a
-OCLib.a: OCPlatform.o OCResource.o OCReflect.o InProcServerWrapper.o InProcClientWrapper.o
- ar -cvq $(OBJ_DIR)/OCLib.a $(OBJ_DIR)/OCPlatform.o $(OBJ_DIR)/OCResource.o $(OBJ_DIR)/OCReflect.o $(OBJ_DIR)/InProcServerWrapper.o $(OBJ_DIR)/InProcClientWrapper.o
+OCLib.a: OCPlatform.o OCResource.o OCReflect.o InProcServerWrapper.o InProcClientWrapper.o
+ ar -cvq $(OBJ_DIR)/OCLib.a $(OBJ_DIR)/OCPlatform.o $(OBJ_DIR)/OCResource.o $(OBJ_DIR)/OCReflect.o $(OBJ_DIR)/InProcServerWrapper.o $(OBJ_DIR)/InProcClientWrapper.o
OCReflect.o: OCLib/OCReflect.cpp
$(CXX) $(CXX_FLAGS.$(BUILD)) -o $(OBJ_DIR)/$@ -c OCLib/OCReflect.cpp $(CXX_INC)
OCPlatform.o: OCLib/OCPlatform.cpp
$(CXX) $(CXX_FLAGS.$(BUILD)) -o $(OBJ_DIR)/$@ -c OCLib/OCPlatform.cpp $(CXX_INC)
-
+
OCResource.o: OCLib/OCResource.cpp
$(CXX) $(CXX_FLAGS.$(BUILD)) -o $(OBJ_DIR)/$@ -c OCLib/OCResource.cpp $(CXX_INC)
-
+
InProcServerWrapper.o: OCLib/InProcServerWrapper.cpp
$(CXX) $(CXX_FLAGS.$(BUILD)) -o $(OBJ_DIR)/$@ -c OCLib/InProcServerWrapper.cpp $(CXX_INC)