# 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
INLINESRC_POSTFIX := .i

.PRECIOUS: %C.cpp %SplDcps.cpp %Dcps_impl.cpp

include ./orbdeps.mak

# This determines what will be processed

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

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

# All objects
OBJS = $(IDLPP_OBJ) $(ORB_TOP_OBJ) $(ORB_API_OBJ) $(API_OBJ) $(IDLPP_ORB_OBJ)

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

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

CXXINCS += -I./
CXXINCS += -I$(OSPL_HOME)/include
CXXINCS += -I$(OSPL_HOME)/include/sys
CXXINCS += -I$(OSPL_HOME)/include/dcps/C++/CCPP
CXXINCS += -I$(OSPL_HOME)/include/dcps/C++/CCPP/$(SPLICE_ORB)
CXXINCS += $(ORB_INCLUDE)

CXX := CC
CXXFLAGS := $(ORB_CXX_FLAGS) -O -xarch=v8 -mt
CPPFLAGS = $(CXXINCS)

# linker and linker flags (Only valid for gcc-linkers)
LD_SO := $(CXX)
SPLICE_LIBRARY_PATH := $(OSPL_HOME)/lib
LD_FLAGS := -G
LD_LIBS  := -lc -lm -lpthread -lnsl -ldcpsgapi -lddsdatabase -lddsos $(ORB_LDLIBS)

# SPLICE IDL preprocessor and preprocessor flags
IDLPP := idlpp
IDLPPFLAGS := -l cpp -C -b CCPP/$(SPLICE_ORB)


#Dependencies

all : $(TARGET)

$(IDLPP_OBJ): $(IDLPP_ORB_HDR) $(ORB_TOP_HDR) $(ORB_API_HDR)

#generic rules for IDL preprocessing

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

$(ORB_TOP_SRC) $(ORB_TOP_HDR): $(TOPIC_IDL)
	$(ORB_IDL_COMPILER) $(ORB_IDL_FLAGS) $<

$(ORB_API_SRC) $(ORB_API_HDR): $(DCPS_API_IDL)
	$(ORB_IDL_COMPILER) $(ORB_IDL_FLAGS) $<

$(IDLPP_ORB_SRC) $(IDLPP_ORB_HDR): $(IDLPP_IDL)
	$(ORB_IDL_COMPILER) $(ORB_IDL_FLAGS) $<

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


clean:
        -rm $(TARGET) $(OBJS) $(ORB_TOP_SRC) $(ORB_API_SRC) $(IDLPP_IDL) $(IDLPP_SRC) $(IDLPP_ORB_SRC) $(ORB_TOP_HDR) $(ORB_API_HDR) $(IDLPP_ORB_HDR) $(IDLPP_HDR)
