Newer
Older
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_ $(ATS)
libs := $(TTCN3_DIR)/lib/libttcn3-rt2-parallel.a -lstdc++fs
#ifneq (,$(windir))
# Silence linker warnings.
LDFLAGS += -Wl,--enable-auto-import,--enable-runtime-pseudo-reloc
libs += $(patsubst %, -L%/lib, $(OPENSSL_DIR))
all_includes += $(addsuffix /include, $(OPENSSL_DIR))
libs += /cygdrive/c/windows/system32/npcap/wpcap.dll
#endif
$(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_ttcn_headers := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn, %.hh, $(ttcn_sources))))
gen_ttcn3_sources := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn3, %.cc, $(ttcn3_sources))))
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))))
gen_sources := $(gen_ttcn_sources) $(gen_ttcn3_sources) $(gen_asn_sources) $(gen_asn1_sources)
gen_headers := $(gen_ttcn_headers) $(gen_ttcn3_headers) $(gen_asn_headers) $(gen_asn1_headers)
gen_objects := $(patsubst %.cc, %.o, $(gen_sources))
cc_objects := $(patsubst %.cc, $(outdir)/%.o, $(cc_sources))
.PHONY: all FORCE echo
all: $(bindir) $(outdir) $(bindir)/$(ATS)$(EXE)
echo_sources:
@echo -e "$(addsuffix \n,$(all_sources))"
echo: echo_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))"
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
$(bindir)/$(ATS)$(EXE): $(outdir)/asn1/libItsAsn.a $(gen_objects) $(cc_objects)
g++ -g -O0 -o $@ $(LDFLAGS) $(gen_objects) $(cc_objects) $(outdir)/asn1/libItsAsn.a $(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):
# $(TTCN3_DIR)/bin/compiler -n -e -L -R -U none -o $(outdir) $(tt_sources)
$(outdir)/.generate: Makefile $(tt_sources)
$(TTCN3_DIR)/bin/compiler -n -e -L -R -U none -o $(outdir) $(tt_sources)
touch $@
$(bindir)/libItsAsn.so: $(outdir)/asn1/libItsAsn.so
cp -f $< $@
$(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)))