objdirs: $(ROOT_DIR)
mkdir -p $(OBJ_DIR)
mkdir -p $(OBJ_DIR)/$(BUILD)
+ mkdir -p $(BUILD)
obj_build:
@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)/$(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
+ ar -r $(BUILD)/$@ $(OBJ_DIR)/$(BUILD)/*.o
.PHONY: clean print_vars
legacy_clean: $(ROOT_DIR)
@echo "Cleaning all."
rm -f $(OBJ_DIR)/$(BUILD)/*.o
- rm -f $(ROOT_DIR)/liboctbstack.a
+ rm -f $(ROOT_DIR)/$(BUILD)/liboctbstack.a
rm -rf $(OBJ_DIR)
legacy_deepclean: $(ROOT_DIR)
INC_DIRS += -I$(OCTBSTACK_INC)
CC_FLAGS.debug := -O0 -g3 -Wall -ffunction-sections -fdata-sections -fno-exceptions \
- -std=c++0x -pedantic $(INC_DIRS) -L$(ROOT_DIR) -DTB_LOG
+ -std=c++0x -pedantic $(INC_DIRS) -L$(ROOT_DIR)/$(BUILD) -DTB_LOG
CC_FLAGS.release := -Os -Wall -fdata-sections -Wl,--gc-sections -Wl,-s -fno-exceptions \
- -std=c++0x $(INC_DIRS) -L$(ROOT_DIR) -DTB_LOG
+ -std=c++0x $(INC_DIRS) -L$(ROOT_DIR)/$(BUILD) -DTB_LOG
LDLIBS += -loctbstack -lpthread
CPPFLAGS += $(CC_FLAGS.$(BUILD)) $(LDLIBS)
$(CC) -c $(CPPFLAGS) $< -o $@
ocserver: $(OBJ_DIR)/ocserver.o $(OBJ_DIR)/common.o
- $(CC) $^ $(CPPFLAGS) -o $@
+ $(CC) $^ $(CPPFLAGS) -o $(OUT_DIR)/$(BUILD)/$@
occlient: $(OBJ_DIR)/occlient.o $(OBJ_DIR)/common.o
- $(CC) $^ $(CPPFLAGS) -o $@
+ $(CC) $^ $(CPPFLAGS) -o $(OUT_DIR)/$(BUILD)/$@
.PHONY: clean
VERSION:=4.1.1
+# override with `make BUILD=release`
+# default to release build
+BUILD := release
+
#other options are android, arduino
PLATFORM=linux
-#peg_ccfl-core
ROOT_DIR = ../../..
OCSOCK_DIR = $(ROOT_DIR)/ocsocket
OCSTACK_DIR = $(ROOT_DIR)/stack
INC_DIRS += -I$(RANDOM_DIR)/include
ifeq ($(PLATFORM),android)
- CCPLUS=arm-linux-androideabi-g++
- CC=arm-linux-androideabi-gcc
- AR=arm-linux-androideabi-ar
- RANLIB=arm-linux-androideabi-ranlib
- CFLAGS_ANDROID = -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16
- LDFLAGS_ANDROID = -march=armv7-a -Wl,--fix-cortex-a8 -llog
+ CCPLUS=arm-linux-androideabi-g++
+ CC=arm-linux-androideabi-gcc
+ AR=arm-linux-androideabi-ar
+ RANLIB=arm-linux-androideabi-ranlib
+ CFLAGS_ANDROID = -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16
+ LDFLAGS_ANDROID = -march=armv7-a -Wl,--fix-cortex-a8 -llog
else ifeq ($(PLATFORM),linux)
- CCPLUS=g++
- CC=gcc
- AR=ar
- RANLIB=ranlib
+ CCPLUS=g++
+ CC=gcc
+ AR=ar
+ RANLIB=ranlib
else
$(error Wrong value for PLATFORM !!)
endif
-DEP_LIBS = $(ROOT_DIR)/liboctbstack.a
+DEP_LIBS = $(ROOT_DIR)/$(BUILD)/liboctbstack.a
CFLAGS += -Os -Wall -Wno-write-strings -ffunction-sections -fdata-sections -fno-exceptions \
- -Wextra -Wno-variadic-macros -pedantic -std=gnu99 -DWITH_POSIX -DTB_LOG
+ -Wextra -Wno-variadic-macros -pedantic -std=gnu99 -DWITH_POSIX -DTB_LOG
PROGRAMS = ocserver occlient
OBJECTS:= $(patsubst %.c, %.o, $(SOURCES))
-all: $(PROGRAMS)
+all: objdirs $(PROGRAMS)
%.o: %.c
- $(CC) -c $(CFLAGS) $(CFLAGS_ANDROID) $(INC_DIRS) $< -o $@
+ $(CC) -c $(CFLAGS) $(CFLAGS_ANDROID) $(INC_DIRS) $< -o $(BUILD)/$@
+objdirs: $(ROOT_DIR)
+ mkdir -p $(BUILD)
+
##Added -lm as needed by json calling floor()
occlient: occlient.o $(DEP_LIBS)
- $(CC) -Os -Wl,--gc-sections $(LDFLAGS_ANDROID) $^ -o $@ -lm
+ $(CC) -Os -Wl,--gc-sections $(LDFLAGS_ANDROID) $(BUILD)/$^ -o $(BUILD)/$@ -lm
ocserver: ocserver.o $(DEP_LIBS)
- $(CC) -Os -Wl,--gc-sections $(LDFLAGS_ANDROID) $^ -o $@ -lm
+ $(CC) -Os -Wl,--gc-sections $(LDFLAGS_ANDROID) $(BUILD)/$^ -o $(BUILD)/$@ -lm
install: all
@echo "Installing for PLATFORM $(PLATFORM)"
.PHONY: clean
clean:
- rm -f *.o $(PROGRAMS)
-
+ rm -rf debug
+ rm -rf release
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/$(BUILD)/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/$(BUILD)/liboctbstack.a
simpleclientserver: OCLib.a
- $(CXX) $(CXX_FLAGS.$(BUILD)) -o $(SAMPLES_OUT_DIR)/$@ examples/simpleclientserver.cpp $(CXX_INC) $(OBJ_DIR)/OCLib.a csdk/liboctbstack.a
+ $(CXX) $(CXX_FLAGS.$(BUILD)) -o $(SAMPLES_OUT_DIR)/$@ examples/simpleclientserver.cpp $(CXX_INC) $(OBJ_DIR)/OCLib.a csdk/$(BUILD)/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