LIBNAME = librtaicpp
VERSION = 1.0.0
MAJORVERSION = 1

ALL_SUB_DIRS := examples
MOD_SUB_DIRS := 
SUB_DIRS     := 
MOD_LIST_NAME := MISC_MODULES

ifdef CONFIG_RTAI_CPLUSPLUS
SUB_DIRS     += examples 
MOD_SUB_DIRS += 
endif

obj-y :=
obj-m :=
obj-n :=
obj-  :=

EXTRA_CFLAGS := -I.
EXTRA_CXXFLAGS := -I.

USER_CXXFLAGS := -fkeep-inline-functions -I../include/ -I../lxrt/ \
        $(CDEBUG) -D_REENTRANT -fPIC -O2 -Wall -c

USER_CFLAGS := -fkeep-inline-functions -I../include/ -I../lxrt/ \
        $(CDEBUG) -D_REENTRANT  -fPIC -O2 -Wall -c



rtai_cpp-objs := init.o builtin.o rtai_wrapper.o linux_wrapper.o \
		 task.o task_proxy.o sem.o mbx.o time.o count.o rtf.o \
		 module.o

obj-$(CONFIG_RTAI_CPLUSPLUS)	+= rtai_cpp.o

ifdef CONFIG_RTAI_CPLUSPLUS
MI_OBJS := $(rtai_cpp-objs)
endif

O_OBJS          := $(sort $(filter-out $(export-objs), $(obj-y)))
OX_OBJS         := $(sort $(filter     $(export-objs), $(obj-y)))
M_OBJS          := $(sort $(filter-out $(export-objs), $(obj-m)))
MX_OBJS         := $(sort $(filter     $(export-objs), $(obj-m)))

BIXX_OBJS	:= task_lib.o sem_lib.o mbx_lib.o time_lib.o count_lib.o \
		   task_proxy_lib.o

BI_OBJS		:= rtai_wrapper_lib.o

LXX_TARG	:= $(LIBNAME).a

ifdef TOPDIR
include $(TOPDIR)/Rules.make
else
all:
	make -C ../ modules userspace SUBDIRS=rtai_cpp
endif

rtai_cpp.o: $(rtai_cpp-objs) crtbegin.o crtend.o crtmbegin.o crtmend.o
	$(LD) -r -o $@ $(rtai_cpp-objs)

crtbegin.o : crt.c
	$(CC) $(CFLAGS) -DCRT_BEGIN -c crt.c -o crtbegin.o
	
crtend.o : crt.c
	$(CC) $(CFLAGS) -DCRT_END -c crt.c -o crtend.o

crtmbegin.o : crt.c
	$(CC) $(CFLAGS) -DCRT_BEGIN -DUSE_MAIN -c crt.c -o crtmbegin.o

crtmend.o : crt.c 
	$(CC) $(CFLAGS) -DCRT_END -DUSE_MAIN -c crt.c -o crtmend.o

task_lib.cc: task.cc
	ln -s $< $@

task_proxy_lib.cc: task_proxy.cc
	ln -s $< $@

sem_lib.cc: sem.cc
	ln -s $< $@

mbx_lib.cc: mbx.cc
	ln -s $< $@

count_lib.cc: count.cc
	ln -s $< $@

time_lib.cc: time.cc
	ln -s $< $@

rtf_lib.cc: rtf.cc
	ln -s $< $@

rtai_wrapper_lib.c: rtai_wrapper.c
	ln -s $< $@


$(LIBNAME).a: $(BIXX_OBJS) $(BI_OBJS)
	$(CXX) -shared -Wl,-soname,$(LIBNAME).so.$(MAJORVERSION) -o \
	$(LIBNAME).so.$(VERSION) $(BIXX_OBJS) $(BI_OBJS) -lm
	$(AR) rs $@ $^
	ranlib $@
	ln -sf $(LIBNAME).so.$(VERSION) $(LIBNAME).so
	ln -sf $(LIBNAME).so.$(VERSION) $(LIBNAME).so.$(MAJORVERSION)

clean:
	rm -f *.o *.S *.old core *~ 
	rm -f $(LIBNAME).*
