# *********************************************************************
#
#  $Id: httpsupport.h 2196 2011-07-28 15:58:38Z seb $
# 
#  GNU Makefile for linux and Mac OS X
# 
#  - - - - - - - - - License information: - - - - - - - - -
# 
#  Copyright (C) 2011 and beyond by Yoctopuce Sarl, Switzerland.
# 
#  1) If you have obtained this file from www.yoctopuce.com using
#     a valid customer account established in your proper name,
#     Yoctopuce Sarl (hereafter Licensor) licenses to you (hereafter
#     Licensee) the right to use, modify, copy, and integrate this
#     source file into your own solution for the sole purpose of
#     interfacing a Yoctopuce product integrated into Licensee's
#     solution.
# 
#     You should refer to the license agreement accompanying this
#     Software for additional information regarding your rights
#     and obligations.
# 
#     THE SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT
#     WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
#     WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, FITNESS
#     FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO
#     EVENT SHALL LICENSOR BE LIABLE FOR ANY INCIDENTAL, SPECIAL,
#     INDIRECT OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA,
#     COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR
#     SERVICES, ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT
#     LIMITED TO ANY DEFENSE THEREOF), ANY CLAIMS FOR INDEMNITY OR
#     CONTRIBUTION, OR OTHER SIMILAR COSTS, WHETHER ASSERTED ON THE
#     BASIS OF CONTRACT, TORT (INCLUDING NEGLIGENCE), BREACH OF
#     WARRANTY, OR OTHERWISE.
# 
#  2) If you have obtained this file from any other source, you
#     are not entitled to use it, read it or create any derived
#     material. You should delete this file immediately.
# 
# ********************************************************************

UNAME := $(shell uname)
ARCH  := $(shell uname -m| sed -e s/i.86/i386/ -e s/arm.*/arm/)

ifeq ($(UNAME), Linux)
# Linux
ifeq ($(ARCH), x86_64)
OUTDIR_64 = linux/64bits/
OUTDIR_32 = linux/32bits/
# load definition for CMD_FILES
include MakeCmd_64.inc
else
ifeq ($(ARCH),i386)
OUTDIR_32 = linux/32bits/
# load definition for CMD_FILES
include MakeCmd_32.inc
else
#$(warning $(ARM_BUILD_TYPE))
ifeq ($(ARM_BUILD_TYPE), hf)
OUTDIR_ARMHF = linux/armhf/
# load definition for CMD_FILES
include MakeCmd_armhf.inc
else
OUTDIR_ARMEL = linux/armel/
# load definition for CMD_FILES
include MakeCmd_armel.inc
endif
endif
endif
OPTS_LINK = -lyocto-static -lm -lpthread -lusb-1.0 
else
ifeq ($(UNAME), MINGW32_NT-6.1)
# Windows (MinGW)
EXE=.exe
OUTDIR_32 = windows/
else
# Mac OS X
OUTDIR_64 = osx/
OPTS_LINK = -lyocto-static -lstdc++  -framework IOKit -framework CoreFoundation
# load definition for CMD_FILES
include MakeCmd_osx.inc
endif
endif


CMD_SRC_DIR = ../Sources/
YOCTO_API_SRC = ../../cpp/Sources/

YOCTO_API_DIR_32 = ../../cpp/Binaries/$(OUTDIR_32)
YOCTO_API_DIR_64 = ../../cpp/Binaries/$(OUTDIR_64)
YOCTO_API_DIR_ARMEL = ../../cpp/Binaries/$(OUTDIR_ARMEL)
YOCTO_API_DIR_ARMHF = ../../cpp/Binaries/$(OUTDIR_ARMHF)

VPATH = $(CMD_SRC_DIR) $(YOCTO_API_DIR)
COMMONSRC = $(CMD_SRC_DIR)cmdline_common.cpp

CMD_EXENAMES = $(CMD_FILES:.cpp=$(EXE))

OPTS_ARMEL = -mfloat-abi=soft -march=armv5
OPTS_ARMHF = -mfloat-abi=hard -march=armv6 -marm
OPTS_64 = -m64
OPTS_32 = -m32 -march=i586
OPTS_GENERIC = -g -Wall -I$(YOCTO_API_SRC)

default: all

ifdef OUTDIR_64

$(OUTDIR_64)%$(EXE): %.cpp cmdline_common.cpp cmdline_common.h $(YOCTO_API_DIR_64)
	@echo build $@
	@$(CXX) $(OPTS_GENERIC) $(OPTS_64) -o $@ $< $(COMMONSRC) -L$(YOCTO_API_DIR_64) $(OPTS_LINK)

TARGETS += $(patsubst Y%,$(OUTDIR_64)Y%, $(CMD_EXENAMES))

endif

ifdef OUTDIR_32

$(OUTDIR_32)%$(EXE): %.cpp cmdline_common.cpp cmdline_common.h $(YOCTO_API_DIR_32)
	@echo build $@
	@$(CXX) $(OPTS_GENERIC) $(OPTS_32) -o $@ $< $(COMMONSRC) -L$(YOCTO_API_DIR_32) $(OPTS_LINK)

TARGETS += $(patsubst Y%,$(OUTDIR_32)Y%, $(CMD_EXENAMES))

endif

ifdef OUTDIR_ARMHF

$(OUTDIR_ARMHF)%$(EXE): %.cpp cmdline_common.cpp cmdline_common.h $(YOCTO_API_DIR_ARMHF)
	@echo build $@
	@$(CXX) $(OPTS_GENERIC) $(OPTS_ARMHF) -o $@ $< $(COMMONSRC) -L$(YOCTO_API_DIR_ARMHF) $(OPTS_LINK)

TARGETS += $(patsubst Y%,$(OUTDIR_ARMHF)Y%, $(CMD_EXENAMES))

endif

ifdef OUTDIR_ARMEL

$(OUTDIR_ARMEL)%$(EXE): %.cpp cmdline_common.cpp cmdline_common.h $(YOCTO_API_DIR_ARMEL) 
	@echo build $@
	@$(CXX) $(OPTS_GENERIC) $(OPTS_ARMEL) -o $@ $< $(COMMONSRC) -L$(YOCTO_API_DIR_ARMEL) $(OPTS_LINK)

TARGETS += $(patsubst Y%,$(OUTDIR_ARMEL)Y%, $(CMD_EXENAMES))

endif

all: $(OUTDIR_32) $(OUTDIR_64) $(OUTDIR_ARMEL) $(OUTDIR_ARMHF) $(TARGETS)

release: all clean_obj

$(OUTDIR_64) $(OUTDIR_32) $(OUTDIR_ARMHF) $(OUTDIR_ARMEL):
	@mkdir -p $@

clean: clean_obj
	@rm -rf $(TARGETS)

clean_obj:
	@rm -rf $(OUTDIR_64)*.dSYM $(OUTDIR_64)*.o $(OUTDIR_32)*.o $(OUTDIR_ARMEL)*.o $(OUTDIR_ARMHF)*.o


release: all clean_obj	
