# include $(OPENAIR_TARGETS)/SIMU/USER/Makerules

OUTDIR = $(S1AP_DIR)/enb_objs

ASN1MESSAGESDIR=$(S1AP_DIR)/MESSAGES
ASN1DIR=$(ASN1MESSAGESDIR)/ASN1

ifeq ($(USE_MME), R10)
	ASN1RELDIR=R10.5
	UPDATE_RELEASE_9=1
	UPDATE_RELEASE_10=1
	ADD_CFLAGS=-DUPDATE_RELEASE_9 -DUPDATE_RELEASE_10
else
	ifeq ($(USE_MME), R9)
		UPDATE_RELEASE_9=1
		ASN1RELDIR=R9.8
		ADD_CFLAGS=-DUPDATE_RELEASE_9
	else
		ASN1RELDIR=R8.10
	endif
endif

include $(ASN1MESSAGESDIR)/Makefile.inc

libs1ap_OBJECTS = \
	s1ap_eNB.o s1ap_common.o		\
	s1ap_eNB_itti_messaging.o		\
	s1ap_eNB_decoder.o			\
	s1ap_eNB_encoder.o			\
	s1ap_eNB_handlers.o			\
	s1ap_eNB_nnsf.o	s1ap_eNB_ue_context.o	\
	s1ap_eNB_trace.o s1ap_eNB_overload.o	\
	s1ap_eNB_nas_procedures.o		\
	s1ap_eNB_management_procedures.o	\
	$(addprefix MESSAGES/, $(S1AP_ASN_MODULE_SOURCES))

ifeq ($(USE_MME), R10)
	libs1ap_OBJECTS += $(addprefix MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R9))
	libs1ap_OBJECTS += $(addprefix MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R10))
else
	ifeq ($(USE_MME), R9)
		libs1ap_OBJECTS += $(addprefix MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R9))
	endif
endif

# pull in dependency info for *existing* .o files
-include $(OUTDIR)/*.d

CFLAGS = 			\
	-Wall			\
	-DENB_MODE		\
	-DENABLE_USE_MME	\
	-DEMIT_ASN_DEBUG=1	\
	-DUSER_MODE		\
	-I./MESSAGES		\
	-I$(OUTDIR)		\
	-I../UTILS		\
	$(ADD_CFLAGS)		\
	-DENB_MODE		\
	$(S1AP_CFLAGS)		\
	-Wuninitialized		\
	-Werror=implicit-function-declaration

S1AP_GENERATED =	\
	$(OUTDIR)/s1ap_encoder.o	\
	$(OUTDIR)/s1ap_decoder.o	\
	$(OUTDIR)/s1ap_xer_print.o

$(OUTDIR)/%.o : %.c
	@echo "Compiling $<"
	@if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi;
	@$(CC) -c $(CFLAGS) -o $@ $<
	@$(CC) -MM $(CFLAGS) $< > $(basename $@).d
	@mv -f $(basename $@).d $(basename $@).d.tmp
	@sed -e 's|.*:|$@:|' < $(basename $@).d.tmp > $(basename $@).d
	@sed -e 's/.*://' -e 's/\\$$//' < $(basename $@).d.tmp | fmt -1 | \
	sed -e 's/^ *//' -e 's/$$/:/' >> $(basename $@).d
	@rm -f $(basename $@).d.tmp

$(S1AP_GENERATED): %.o : %.c
	@echo "Compiling $<"
	@if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi;
	@$(CC) -c $(CFLAGS) -o $@ $<
	@$(CC) -MM $(CFLAGS) $< > $(basename $@).d
	@mv -f $(basename $@).d $(basename $@).d.tmp
	@sed -e 's|.*:|$@:|' < $(basename $@).d.tmp > $(basename $@).d
	@sed -e 's/.*://' -e 's/\\$$//' < $(basename $@).d.tmp | fmt -1 | \
	sed -e 's/^ *//' -e 's/$$/:/' >> $(basename $@).d
	@rm -f $(basename $@).d.tmp

$(OUTDIR)/s1ap_ieregen.stamp: $(ASN1DIR)/$(ASN1RELDIR)/S1AP-PDU-Contents.asn $(ASN1DIR)/asn1tostruct.py
	@if [ ! -d $(OUTDIR) ]; then mkdir -p $(OUTDIR); fi;
	@python $(ASN1DIR)/asn1tostruct.py -f$< -o$(OUTDIR)
	@echo Timestamp > $@

$(OUTDIR)/s1ap_asn1regen.stamp: $(ASN1DIR)/$(ASN1RELDIR)/S1AP-CommonDataTypes.asn \
	$(ASN1DIR)/$(ASN1RELDIR)/S1AP-Constants.asn $(ASN1DIR)/$(ASN1RELDIR)/S1AP-IEs.asn $(ASN1DIR)/$(ASN1RELDIR)/S1AP-PDU.asn
	(cd $(ASN1MESSAGESDIR) && asn1c -fhave_native64 -gen-PER $^)
	@echo Timestamp > $@

$(OUTDIR)/libs1ap.a: $(OUTDIR)/s1ap_ieregen.stamp $(OUTDIR)/s1ap_asn1regen.stamp $(S1AP_GENERATED) $(addprefix $(OUTDIR)/,$(libs1ap_OBJECTS))
	@echo Creating S1AP archive
	@$(AR) rcs $@ $(S1AP_GENERATED) $(addprefix $(OUTDIR)/,$(libs1ap_OBJECTS))

clean:
	@$(RM_F_V) $(OUTDIR)/*.o
	@$(RM_F_V) $(OUTDIR)/*.d
	@$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES))
	@$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R9))
	@$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R10))
	@$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES:.o=.d))
	@$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R9:.o=.d))
	@$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R10:.o=.d))
	@$(RM_F_V) $(OUTDIR)/libs1ap.a
	@$(RM_F_V) $(OUTDIR)/s1ap_asn1regen.stamp
	@$(RM_F_V) $(OUTDIR)/s1ap_ieregen.stamp
	@$(RM_F_V) $(OUTDIR)/s1ap_decoder.c $(OUTDIR)/s1ap_encoder.c
	@$(RM_F_V) $(OUTDIR)/s1ap_xer_print.c $(OUTDIR)/s1ap_ies_defs.h

cleanall: clean
	@$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES:.o=.c))
	@$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES:.o=.h))
	@$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R9:.o=.c))
	@$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R9:.o=.h))
	@$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R10:.o=.c))
	@$(RM_F_V) $(addprefix $(OUTDIR)/MESSAGES/, $(S1AP_ASN_MODULE_SOURCES_R10:.o=.h))

showcflags:
	@echo s1ap cflags: $(CFLAGS)