#------------------------------------------------------------------------------
#		Makefile to generate the Tango Binding for Matlab
#------------------------------------------------------------------------------

#------------------------------------------------------------------------------
# BASE DIR
#------------------------------------------------------------------------------
BASE_DIR = /home/soleil/develop/support/soleil-2.1.1

#------------------------------------------------------------------------------
# CORBA BASE DIR (ORBACUS SHARED LIBS AND HEADER FILES)
#------------------------------------------------------------------------------
CORBA_BASE = $(BASE_DIR)/orbacus/rh-linux-72

#------------------------------------------------------------------------------
# TANGO BASE DIR (TANGO SHARED LIB AND HEADER FILES)
#------------------------------------------------------------------------------
TANGO_BASE = $(BASE_DIR)/tango/rh-linux-72

#------------------------------------------------------------------------------
# MATLAB BASE DIR
#------------------------------------------------------------------------------
MATLAB_BASE = /usr/local/matlab

#------------------------------------------------------------------------------
# INCLUDE DIRS
#------------------------------------------------------------------------------
INCLUDE_DIRS = -I . \
               -I $(CORBA_BASE)/include \
               -I $(TANGO_BASE)/include \
               -I $(MATLAB_BASE)/extern/include

#------------------------------------------------------------------------------
# LIB DIRS
#------------------------------------------------------------------------------
LIB_DIRS = -L $(CORBA_BASE)/lib \
           -L $(TANGO_BASE)/lib  \
           -L $(MATLAB_BASE)/bin/glnx86 \
           -L $(MATLAB_BASE)/extern/lib/glnx86

#------------------------------------------------------------------------------
# COMPILER/LINKER OPTIONS
#------------------------------------------------------------------------------
# COMMON
#------------------------------------------------------------------------------
MEX_NAME = tango_binding
#------------------------------------------------------------------------------
# GNU/LINUX (TESTED ON RH-LINUX-7.2-GCC-2.95.3)
#------------------------------------------------------------------------------
CC = c++
CFLAGS = -fPIC -D_REENTRANT -DMATLAB_MEX_FILE
LD = $(CC)
LDFLAGS = -shared -o
MEX_EXT = mexglx

#------------------------------------------------------------------------------
# OBJ FILES
#------------------------------------------------------------------------------
OBJS_SO = mexversion.so.o \
					main.so.o \
					MexArgs.so.o \
					MexFile.so.o \
					MexUtils.so.o \
					DevRepository.so.o \
					DataAdapter.so.o \
					TangoBinding.so.o

#------------------------------------------------------------------------------
# RULE: all
#------------------------------------------------------------------------------
all: $(MEX_NAME).$(MEX_EXT) install

#------------------------------------------------------------------------------
# RULE: $(MEX_NAME).$(MEX_EXT)
#------------------------------------------------------------------------------
$(MEX_NAME).$(MEX_EXT) : $(OBJS_SO)
	$(LD) $(LDFLAGS) $(MEX_NAME).$(MEX_EXT) $(MEX_ENTRYPT_MAP) $(OBJS_SO) \
				$(LIB_DIRS) -lmex -lmx -ltango -lOB -lJTC

#------------------------------------------------------------------------------
# RULE: mexversion.so.o
#------------------------------------------------------------------------------
mexversion.so.o: $(MATLAB_BASE)/extern/src/mexversion.c
	$(CC) $(CFLAGS) $(INCLUDE_DIRS) $(MATLAB_BASE)/extern/src/mexversion.c -c -o mexversion.so.o

#------------------------------------------------------------------------------
# RULE: main.so.o
#------------------------------------------------------------------------------
main.so.o: main.cpp
	$(CC) $(CFLAGS) $(INCLUDE_DIRS) main.cpp -c -o main.so.o

#------------------------------------------------------------------------------
# RULE: MexArgs.so.o
#------------------------------------------------------------------------------
MexArgs.so.o: MexArgs.cpp
	$(CC) $(CFLAGS) $(INCLUDE_DIRS) MexArgs.cpp -c -o MexArgs.so.o

#------------------------------------------------------------------------------
# RULE: MexFile.so.o
#------------------------------------------------------------------------------
MexFile.so.o: MexFile.cpp
	$(CC) $(CFLAGS) $(INCLUDE_DIRS) MexFile.cpp -c -o MexFile.so.o

#------------------------------------------------------------------------------
# RULE: MexUtils.so.o
#------------------------------------------------------------------------------
MexUtils.so.o: MexUtils.cpp
	$(CC) $(CFLAGS) $(INCLUDE_DIRS) MexUtils.cpp -c -o MexUtils.so.o

#------------------------------------------------------------------------------
# RULE: DevRepository.so.o
#------------------------------------------------------------------------------
DevRepository.so.o: DevRepository.cpp
	$(CC) $(CFLAGS) $(INCLUDE_DIRS) DevRepository.cpp -c -o DevRepository.so.o

#------------------------------------------------------------------------------
# RULE: DataAdapter.so.o
#------------------------------------------------------------------------------
DataAdapter.so.o: DataAdapter.cpp
	$(CC) $(CFLAGS) $(INCLUDE_DIRS) DataAdapter.cpp -c -o DataAdapter.so.o

#------------------------------------------------------------------------------
# RULE: TangoBinding.so.o
#------------------------------------------------------------------------------
TangoBinding.so.o: TangoBinding.cpp
	$(CC) $(CFLAGS) $(INCLUDE_DIRS) TangoBinding.cpp -c -o TangoBinding.so.o

#------------------------------------------------------------------------------
# RULE: clean
#------------------------------------------------------------------------------
clean:
	rm -f *.so.o $(MEX_NAME).$(MEX_EXT)

#------------------------------------------------------------------------------
# RULE: install
#------------------------------------------------------------------------------
install:
	cp -f ./$(MEX_NAME).$(MEX_EXT) ./mex-file
	rm -f ./$(MEX_NAME).$(MEX_EXT)
