Makefile 3.5 KB
Newer Older
ASN.1 Documenter's avatar
ASN.1 Documenter committed

ifeq (,$(ATS)) 
 $(error ATS shall be defined)
endif

ifeq (,$(TOPDIR))
 TOPDIR := .
endif

#ifeq (,$(TTCN3_DIR))
 TTCN3_DIR := /cygdrive/c/Tools/Titan
#endif

ifeq (,$(OPENSSL_DIR))
 OPENSSL_DIR := C:/Tools/OpenSSL/Win64
endif

define IncludeModule
undefine sources
undefine modules
undefine includes
include $(1)/module.mk
$$(foreach S, $$(sources),  $$(eval all_sources +=  $(1)/$$(S)))
$$(foreach I, $$(includes), $$(eval all_includes += $(1)/$$(I)))
$$(foreach M, $$(modules),  $$(eval $$(call IncludeModule, $(1)/$$(M))))
endef

all_includes := $(TTCN3_DIR)/include $(TTCN3_DIR)/src $(TOPDIR)/ccsrc/Framework
defines  := TITAN_RUNTIME_2 _NO_SOFTLINKS_
libs     := -L$(TTCN3_DIR)/lib -lttcn3-rt2-parallel -lxml2 -lstdc++fs

#ifneq (,$(windir))
# Silence linker warnings.
#LDFLAGS += -Wl,--enable-auto-import,--enable-runtime-pseudo-reloc
defines += WIN32
libs += -L $(OPENSSL_DIR)/lib
all_includes += $(OPENSSL_DIR)/include
libs += /cygdrive/c/windows/system32/npcap/wpcap.dll
#endif
libs += -lssl -lcrypto

$(eval $(call IncludeModule, $(TOPDIR)/ttcn/$(ATS)))

outdir := $(TOPDIR)/build

sources     := $(sort $(all_sources))
includes    := $(outdir) $(outdir)/asn1 $(all_includes) /cygdrive/c/PROGRA~1/Npcap/sdk/include

EXE=.exe
ttcn_sources  := $(filter %.ttcn , $(sources))
ttcn3_sources := $(filter %.ttcn3, $(sources))
asn_sources   := $(filter %.asn,   $(sources))
asn1_sources  := $(filter %.asn1,  $(sources))

tt_sources    := $(ttcn_sources) $(ttcn3_sources) $(asn_sources) $(asn1_sources)
cc_sources    := $(filter %.cc,    $(sources))

gen_ttcn_sources  := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn, %.cc, $(ttcn_sources))))
gen_ttcn3_sources := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn3, %.cc, $(ttcn3_sources))))
gen_asn_sources   := $(addprefix $(outdir)/, $(notdir $(patsubst %.asn, %.cc, $(asn_sources))))
gen_asn1_sources  := $(addprefix $(outdir)/, $(notdir $(patsubst %.asn1, %.cc, $(asn1_sources))))

gen_sources := $(gen_ttcn_sources) $(gen_ttcn3_sources) $(gen_asn_sources) $(gen_asn1_sources)

gen_objects := $(patsubst %.cc, %.o, $(gen_sources))
cc_objects  := $(patsubst  %.cc, $(outdir)/%.o, $(cc_sources))

define GenerateSource
$(outdir)/$(notdir $(patsubst %.ttcn %.asn %.ttcn3 %.asn1, %.cc, $1)): $1
endef

.PHONY: all FORCE echo

all: $(outdir) $(outdir)/$(ATS)$(EXE)

echo:
	@echo -e "all_sources:\n $(addsuffix \n, $(all_sources))"
	@echo -e "sources:\n $(addsuffix \n, $(sources))"
	@echo -e "gen_sources:\n $(addsuffix \n, $(gen_sources))"
	@echo -e "gen_objects:\n $(addsuffix \n, $(gen_objects))"
	@echo -e "cc_objects:\n $(addsuffix \n, $(cc_objects))"
	@echo -e "includes:\n $(addsuffix \n, $(includes))"
	@echo -e "defines: $(addsuffix \n, $(defines))"

$(outdir):
	mkdir -p $@

$(outdir)/$(ATS)$(EXE): $(outdir)/asn1/libItsAsn.so $(gen_objects) $(cc_objects) 
	g++ -g -O0 -o $@ $(LDFLAGS) $(gen_objects) $(cc_objects) $(outdir)/asn1/libItsAsn.so $(libs)

$(gen_objects) :%.o :%.cc
	g++ -g -O0 -c $(addprefix -D, $(defines)) $(addprefix -I, $(includes)) -o $@ $<

$(cc_objects) : $(outdir)/%.o : %.cc
	mkdir -p $(dir $@)
	g++ -g -O0 -c $(addprefix -D, $(defines)) $(addprefix -I, $(includes)) -o $@ $<

$(gen_sources): $(outdir)/.generate

$(outdir)/.generate: Makefile $(tt_sources)
	$(TTCN3_DIR)/bin/compiler -w -e -L -R -U none -o $(outdir) $(tt_sources)
	touch $@

$(outdir)/asn1/libItsAsn.so: FORCE
	mkdir -p $(outdir)/asn1
	$(MAKE) -C $(outdir)/asn1 -f ../../asn1/Makefile ASN1C_PATH=../../../../asn1c