# pre-existing IDL files
TOPIC_IDL := dds_dcps_builtintopics.idl
DCPS_API_IDL := dds_dcps.idl

# Only valid for Unix/Linux type systems.
OBJ_POSTFIX := .o 

.PRECIOUS: %SplDcps.cpp %Dcps_impl.cpp

# OpenSplice Preprocessor (idlpp) output
IDLPP_IDL        = $(TOPIC_IDL:%.idl=%Dcps.idl)
IDLPP_HDR        = ccpp_$(TOPIC_IDL:%.idl=%.h) $(TOPIC_IDL:%.idl=%Dcps_impl.h) $(TOPIC_IDL:%.idl=%SplDcps.h) 
IDLPP_CPP        = $(TOPIC_IDL:%.idl=%SplDcps.cpp) $(TOPIC_IDL:%.idl=%Dcps_impl.cpp) $(TOPIC_IDL:%.idl=%Dcps.cpp)
IDLPP_OBJ        = $(IDLPP_CPP:%.cpp=%$(OBJ_POSTFIX))

# API Classes.
API_SRC          = $(notdir $(wildcard *.cpp))
API_OBJ          = $(API_SRC:%.cpp=%.o)

# All objects
OBJS = $(IDLPP_OBJ) $(API_OBJ)

# library target name
TARGET_DLIB := dcpssacpp
DLIB_PREFIX := lib
DLIB_POSTFIX := .so

TARGET = $(DLIB_PREFIX)$(TARGET_DLIB)$(DLIB_POSTFIX)

INCLUDE += -I./
INCLUDE += -I$(OSPL_HOME)/include
INCLUDE += -I$(OSPL_HOME)/include/sys
INCLUDE += -I$(OSPL_HOME)/include/dcps/C++/SACPP

# compiler and compiler flags (Only valid for gcc-compilers)
CXX := g++
CXXFLAGS := -g -fPIC
CPPFLAGS = $(INCLUDE)

# linker and linker flags (Only valid for gcc-linkers)
LD_SO := $(CXX)
SPLICE_LIBRARY_PATH := $(OSPL_HOME)/lib
LD_FLAGS := -shared -fPIC -static-libgcc
LD_LIBS  := -lc -lm -lpthread -lnsl -ldcpsgapi -lddsdatabase -lddsos -lstdc++

# SPLICE IDL preprocessor and preprocessor flags
IDLPP := idlpp

ifneq (,$(findstring win32,$(SPLICE_TARGET)))
IDLPPFLAGS := -P SACPP_API -S -l cpp
else
IDLPPFLAGS := -S -l cpp
endif

#Dependencies

all : $(TARGET)

#generic rules for IDL preprocessing

$(IDLPP_IDL) $(IDLPP_CPP) $(IDLPP_HDR) : $(TOPIC_IDL)
	$(IDLPP) $(IDLPPFLAGS) $<

$(TARGET): $(OBJS) 
	$(LD_SO) -L$(SPLICE_LIBRARY_PATH) $(LD_FLAGS) $(OBJS) $(LD_LIBS) -o $(TARGET)
	-mkdir -p SACPP/include
	-mkdir -p SACPP/lib
	cp $(TOPIC_IDL) $(DCPS_API_IDL) $(IDLPP_HDR) SACPP/include
	cp $(TARGET) SACPP/lib


clean:
	-rm $(TARGET) $(OBJS) $(IDLPP_IDL) $(IDLPP_CPP) $(IDLPP_HDR)

