Makefile 4.79 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

ASN.1 Documenter's avatar
ASN.1 Documenter committed
#ifeq (,$(OPENSSL_DIR))
# OPENSSL_DIR := C:/Tools/OpenSSL/Win64
#endif
ASN.1 Documenter's avatar
ASN.1 Documenter committed

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_
ASN.1 Documenter's avatar
ASN.1 Documenter committed
libs     := $(TTCN3_DIR)/lib/libttcn3-rt2-parallel.a -lxml2 -lstdc++fs
ASN.1 Documenter's avatar
ASN.1 Documenter committed

#ifneq (,$(windir))
# Silence linker warnings.
ASN.1 Documenter's avatar
ASN.1 Documenter committed
LDFLAGS += -Wl,--enable-auto-import,--enable-runtime-pseudo-reloc
ASN.1 Documenter's avatar
ASN.1 Documenter committed
defines += WIN32
ASN.1 Documenter's avatar
ASN.1 Documenter committed
libs += $(patsubst %, -L%/lib, $(OPENSSL_DIR))
all_includes += $(addsuffix /include, $(OPENSSL_DIR))
ASN.1 Documenter's avatar
ASN.1 Documenter committed
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))

ASN.1 Documenter's avatar
ASN.1 Documenter committed
gen_ttcn_sources  := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn,  %.cc, $(ttcn_sources))))
gen_ttcn_headers  := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn,  %.hh, $(ttcn_sources))))
ASN.1 Documenter's avatar
ASN.1 Documenter committed
gen_ttcn3_sources := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn3, %.cc, $(ttcn3_sources))))
ASN.1 Documenter's avatar
ASN.1 Documenter committed
gen_ttcn3_headers := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn3, %.hh, $(ttcn3_sources))))
gen_asn_sources   := $(addprefix $(outdir)/, $(notdir $(patsubst %.asn,   %.cc, $(asn_sources))))
gen_asn_headers   := $(addprefix $(outdir)/, $(notdir $(patsubst %.asn,   %.hh, $(asn_sources))))
gen_asn1_sources  := $(addprefix $(outdir)/, $(notdir $(patsubst %.asn1,  %.cc, $(asn1_sources))))
gen_asn1_headers  := $(addprefix $(outdir)/, $(notdir $(patsubst %.asn1,  %.hh, $(asn1_sources))))
ASN.1 Documenter's avatar
ASN.1 Documenter committed

gen_sources := $(gen_ttcn_sources) $(gen_ttcn3_sources) $(gen_asn_sources) $(gen_asn1_sources)
ASN.1 Documenter's avatar
ASN.1 Documenter committed
gen_headers := $(gen_ttcn_headers) $(gen_ttcn3_headers) $(gen_asn_headers) $(gen_asn1_headers)
ASN.1 Documenter's avatar
ASN.1 Documenter committed

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

.PHONY: all FORCE echo

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

ASN.1 Documenter's avatar
ASN.1 Documenter committed
echo_sources:
	@echo -e "$(addsuffix \n,$(all_sources))"

echo: echo_sources
ASN.1 Documenter's avatar
ASN.1 Documenter committed
	@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))"

ASN.1 Documenter's avatar
ASN.1 Documenter committed
clean:
	rm -f $(outdir)/$(ATS)$(EXE) $(outdir)/*.o $(outdir)/*.cc $(outdir)/*.hh $(outdir)/.generate $(outdir)/libItsAsn.so
	rm -f $(outdir)/asn1/*.so $(outdir)/asn1/*.o $(outdir)/asn1/*.c $(outdir)/asn1/*.h $(outdir)/asn1/Makefile.am.libasncodec

regen: force_regen $(outdir)/.generate
force_regen:
	rm -f $(outdir)/.generate

ASN.1 Documenter's avatar
ASN.1 Documenter committed
$(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):
ASN.1 Documenter's avatar
ASN.1 Documenter committed
	$(TTCN3_DIR)/bin/compiler -n -e -L -R -U none -o $(outdir) $(tt_sources)

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

#$(outdir)/.generate: Makefile $(tt_sources)
#	$(TTCN3_DIR)/bin/compiler -n -e -L -R -U none -o $(outdir) $(tt_sources)
#	touch $@
ASN.1 Documenter's avatar
ASN.1 Documenter committed
$(outdir)/libItsAsn.so: $(outdir)/asn1/libItsAsn.so
	ln asn1/libItsAsn.so $@

ASN.1 Documenter's avatar
ASN.1 Documenter committed
$(outdir)/asn1/libItsAsn.so: FORCE
	mkdir -p $(outdir)/asn1
ASN.1 Documenter's avatar
ASN.1 Documenter committed
	$(MAKE) -C $(outdir)/asn1 -f ../../asn1/Makefile

$(foreach S, $(ttcn_sources),  $(eval $(outdir)/$(notdir $(patsubst %.ttcn, %.cc,  $(S))): $(S)))
$(foreach S, $(ttcn3_sources), $(eval $(outdir)/$(notdir $(patsubst %.ttcn3, %.cc, $(S))): $(S)))
$(foreach S, $(asn_sources),   $(eval $(outdir)/$(notdir $(patsubst %.asn, %.cc,   $(S))): $(S)))
$(foreach S, $(asn1_sources),  $(eval $(outdir)/$(notdir $(patsubst %.asn1, %.cc,  $(S))): $(S)))