@@-- The following tags are available in this template: @@-- @@-- @_Function_Names_@ : Combined table: list of fuction names... @@-- @_Language_@ : ... and corresponding implementation language @@-- @_Is_Type_@ : ... and flag if it is a function type @@-- @_Has_Context_Param_@ : ... and flag to indicate if function has context parameters @@-- @_CP_Files_@ : List of all context parameters ASN.1 files @@-- @_Unique_Languages_@ : List of all languages used in the system @@-- @_ASN1_Files_@ : List of all ASN.1 files @@-- @_ACN_Files_@ : List of all ACN files @@-- @_ASN1_Modules_@ : List of all ASN.1 modules # MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) MAKEFILE_PATH := $(lastword $(MAKEFILE_LIST)) OUTDIR := $(dir $(MAKEFILE_PATH)) ASN1_FILES := @_REPLACE_ALL(,/):ASN1_Files_@ CP_FILES := @_REPLACE_ALL(,/):CP_Files_@ # Context parameters DATAVIEW_PATH := ${OUTDIR}/dataview DATAVIEW_UNIQ := ${DATAVIEW_PATH}/dataview-uniq.asn @@IF@@ @_ACN_Files'Length_@ > 0 DATAVIEW_ACN := ${DATAVIEW_PATH}/dataview-uniq.acn @@ELSE@@ DATAVIEW_ACN := @@END_IF@@ DATAVIEW_AADLV1 := ${DATAVIEW_PATH}/dataview_aadlv1.aadl DATAVIEW_AADLV2 := ${DATAVIEW_PATH}/dataview_aadlv2.aadl # Project cache folder is used to speed up all ASN.1-related processing export PROJECT_CACHE=${HOME}/.taste_AST_cache all: build-default # Build a simulator of the system simu: aadl2glueC build/system_config.h ${DATAVIEW_PATH}/built build/deploymentview_final/Makefile $(MAKE) -j -C build -f Makefile.taste simu @@-- global check to check which dataviews are neeeded @@TABLE@@ @@IF@@ @_Unique_Languages_@ = Ada or @_Unique_Languages_@ = SDL @@SET@@ Need_Ada=TRUE @@ELSIF@@ @_Unique_Languages_@ /= C and @_Unique_Languages_@ /= CPP and @_Unique_Languages_@ /= Blackbox_C and @_Unique_Languages_@ /= GUI and @_Unique_Languages_@ /= Timer_Manager @@SET@@ Other_DataViews=TRUE @@ELSIF@@ @_Unique_Languages_@ = GUI @@SET@@ Has_GUI=TRUE @@END_IF@@ @@END_TABLE@@ # Generate the language-specific data view needed before editing user code @@IF@@ not @_Need_Ada_@ and not @_Other_DataViews_@ dataview: dataview/C/built @@END_IF@@ @@INLINE(dataview: dataview/C/built )( )()@@ @@IF@@ @_Need_Ada_@ = TRUE dataview/Ada/built @@END_IF@@ @@TABLE@@ @@-- Exclude Python because it depends on information from the deployment view and it is not needed for the skeletons @@IF@@ @_Unique_Languages_@ /= "Ada" and @_Unique_Languages_@ /= "SDL" and @_Unique_Languages_@ /= C and @_Unique_Languages_@ /= CPP and @_Unique_Languages_@ /= Blackbox_C and @_Unique_Languages_@ /= GUI and @_Unique_Languages_@ /= Timer_Manager dataview/@_Unique_Languages_@/built @@END_IF@@ @@END_TABLE@@ @@END_INLINE@@ # Generate the complete dataview, including Python bindings if there is a GUI @@IF@@ @_Has_GUI_@ ${DATAVIEW_PATH}/built: dataview dataview/Python/built @@ELSE@@ ${DATAVIEW_PATH}/built: dataview @@END_IF@@ touch $@ # Build based on the deployment view build-default: aadl2glueC build/system_config.h ${DATAVIEW_PATH}/built build/deploymentview_final/Makefile $(MAKE) -j -C build -f Makefile.taste # Force build with RTEMS/Leon, even if deployment view does not specify it build-rtems-ada: aadl2glueC build/system_config.h ${DATAVIEW_PATH}/built build/deploymentview_final/Makefile $(MAKE) -j -C build -f Makefile.taste rtems_ada # Force build with AIR (TSP), even if deployment view does not specify it air: aadl2glueC build/system_config.h ${DATAVIEW_PATH}/built build/deploymentview_final/Makefile $(MAKE) -j -C build -f Makefile.taste air # Rule to invoke Ocarina (generation of POHI middleware code) build/deploymentview_final/Makefile: build/main.aadl ${DATAVIEW_AADLV2} ../ConcurrencyView_Properties.aadl # patching the cv properties is not needed anymore, as kazoo parses # natively the ConcurrencyView_Properties.aadl file now #taste-patch-cv-properties.py build/system.aadl ../ConcurrencyView_Properties.aadl cd build && ocarina -x main.aadl @@-- ConcurrencyView_Properties is normally always present (even if empty) as @@-- it is generated by the GUIs... Just in case it is not there, create it. # Optionally hold thread priorities, offset, stack size. Create if not present ../ConcurrencyView_Properties.aadl: touch $@ @@-- SQL Database: can be created by taste-create-database @@-- Add a dependency to make sure that if is is modified, the GUIs @@-- Using it are properly updated # Optionally manage SQL Database (run taste-create-database to enable) sql_db/DV.py: mkdir -p sql_db && touch $@ # Create dataview-uniq.asn by concatenating all asn1 input files ${DATAVIEW_UNIQ}: ${ASN1_FILES} mkdir -p ${PROJECT_CACHE} && mkdir -p ${DATAVIEW_PATH} @@-- Don't use cat, because files need newlines in between sed -e '$$s/$$/\n/' -s $^ > $@ @@IF@@ @_ACN_Files'Length_@ > 0 # Create dataview-uniq.acn by concatenating all input files ${DATAVIEW_ACN}: @_REPLACE_ALL(,/):ACN_Files_@ mkdir -p ${DATAVIEW_PATH} @@-- Don't use cat, because files need newlines in between sed -e '$$s/$$/\n/' -s $^ > $@ @@END_IF@@ # system_config.h is used to filter out non-needed ASN.1 encoder/decoders build/system_config.h: $(wildcard */*/wrappers/*_system_config.h) cat $^ > $@ # Call DMT/aadl2glueC to generate glue code from the mini-cv.aadl files @@INLINE(aadl2glueC: )( )()@@ @@TABLE@@ @@IF@@ not @_Is_Type_@ @_LOWER:Function_Names_@/@_Language_@/wrappers/aadl2glueC_built @@END_IF@@ @@END_TABLE@@ @@END_INLINE@@ # Build dataview.aadl in AADLv1 format, used by DMT to generate glue code ${DATAVIEW_AADLV1}: ${DATAVIEW_UNIQ} @@-- Generate DataView.aadl in AADLV1 as this is needed by aadl2glueC asn2aadlPlus $< $@ # Build dataview.aadl in AADLv2 format, used by Ocarina to generate glue code ${DATAVIEW_AADLV2}: ${DATAVIEW_UNIQ} @@-- Generate DataView.aadl in AADLV2 without -f flag asn2aadlPlus --aadlv2 $< $@ @@-- For each function generate the glue code from DMT based on the dataview @@TABLE@@ @@IF@@ not @_Is_Type_@ @_LOWER:Function_Names_@/@_Language_@/wrappers/aadl2glueC_built: @_LOWER:Function_Names_@/@_Language_@/wrappers/@_LOWER:Function_Names_@_mini_cv.aadl ${DATAVIEW_AADLV1} aadl2glueC -o $(dir $@) $^ touch $@ @@END_IF@@ @@END_TABLE@@ @@-- Then generate Dataviews once per target language - first for C, it is needed in any case # Compile the ASN.1 models in C dataview/C/built: ${DATAVIEW_UNIQ} ${DATAVIEW_ACN} ${CP_FILES} mkdir -p $(dir $@) # asn2dataModel does not take the ACN files, and only calls asn1.exe # asn2dataModel -o $(dir $@) -toC ${DATAVIEW_UNIQ} ${DATAVIEW_ACN} mono $(shell which asn1.exe) -typePrefix asn1Scc -equal -fp AUTO -o $(dir $@) -c -uPER -ACN $^ cp $(shell taste-config --prefix)/share/AutoGUI/debug_messages.? dataview/C cp $(shell taste-config --prefix)/share/AutoGUI/timeInMS.? dataview/C cd dataview/C && msgPrinter ../dataview-uniq.asn cd dataview/C && msgPrinterASN1 ../dataview-uniq.asn touch $@ @@TABLE@@ @@IF@@ @_Unique_Languages_@ = Ada or @_Unique_Languages_@ = SDL @@SET@@ Need_Ada=TRUE @@ELSIF@@ @_Unique_Languages_@ = C or @_Unique_Languages_@ = CPP or @_Unique_Languages_@ = Blackbox_C or @_Unique_Languages_@ = Timer_Manager @@-- do nothing, C is always done, only once @@ELSIF@@ @_Unique_Languages_@ = GUI @@-- for DMT, GUI means Python # Compile the ASN.1 models in Python for the autogenerated GUIs @@INLINE(dataview/Python/built: dataview/C/built )( )()@@ @@-- aadl2glueC has to be called before the python mapper is built @@-- because it depends on gui_api.c/etc. @@TABLE@@ @@IF@@ @_Language_@ = GUI @_LOWER:Function_Names_@/GUI/wrappers/aadl2glueC_built @@END_IF@@ @@END_TABLE@@ sql_db/DV.py @@END_INLINE@@ mkdir -p $(dir $@) asn2dataModel -o $(dir $@) -toPython ${DATAVIEW_UNIQ} @@-- Ignore context parameters for python interface $(MAKE) -C dataview/Python -f Makefile.python @@TABLE@@ @@IF@@ @_Language_@ = GUI cp dataview/Python/* @_LOWER:Function_Names_@/GUI/wrappers/python cp dataview/C/timeInMS.[ch] dataview/C/debug_messages.c @_LOWER:Function_Names_@/GUI/wrappers/python cd @_LOWER:Function_Names_@/GUI/wrappers/python && \ gcc -g -fPIC -c `python-config --cflags` gui_api.c ../../src/queue_manager.c timeInMS.c debug_messages.c -I. -I../../src && \ gcc -g -shared -o PythonAccess.so gui_api.o queue_manager.o timeInMS.o debug_messages.o `python-config --ldflags` -lrt mkdir -p binaries/@_LOWER:Function_Names_@_GUI cp -f @_LOWER:Function_Names_@/GUI/wrappers/python/* binaries/@_LOWER:Function_Names_@_GUI cp -f @_LOWER:Function_Names_@/GUI/wrappers/*.py binaries/@_LOWER:Function_Names_@_GUI cp -f @_LOWER:Function_Names_@/GUI/wrappers/*.ui binaries/@_LOWER:Function_Names_@_GUI @@-- If system contains the PeekPoke component, copy the relevant code in the gui folder @@IF@@ @_LOWER:Function_Names_@ = taste_probe_console @# Peek-Poke function is placed in the gui folder cp $(shell taste-config --prefix)/bin/taste-gnuplot-streams binaries/@_LOWER:Function_Names_@_GUI/driveGnuPlotsStreams.pl cp $(shell taste-config --prefix)/share/peekpoke/peekpoke.py binaries/@_LOWER:Function_Names_@_GUI cp $(shell taste-config --prefix)/share/peekpoke/PeekPoke.glade binaries/@_LOWER:Function_Names_@_GUI @@END_IF@@ @@-- End of PeekPoke-specifics @@-- Add symbolic link to the SQL Database interface for the GUIs, if needed if [ -f sql_db/db.info ]; then cd binaries/@_LOWER:Function_Names_@_GUI && ln -fs ../../sql_db; fi @@-- Copy default UserWidgets.py file for user to customise the GUI widgets # User can edit at will the customisable user widgets python module: cp -u $(shell taste-config --prefix)/share/AutoGUI/UserWidgets.py binaries/@_LOWER:Function_Names_@_GUI @@-- Copy InterfaceView.aadl, it is needed to replay MSC scenarios # Interface view must be placed in the gui folder to allow replaying MSCs cp -u ../InterfaceView.aadl binaries/@_LOWER:Function_Names_@_GUI @@END_IF@@ @@-- End of GUI-specifics @@END_TABLE@@ touch $@ @@ELSE@@ dataview/@_Unique_Languages_@/built: ${DATAVIEW_UNIQ} # no context parameters except for C and Ada mkdir -p $(dir $@) && asn2dataModel -o $(dir $@) -to@_Unique_Languages_@ $^ touch $@ @@END_IF@@ @@END_TABLE@@ @@IF@@ @_Need_Ada_@=TRUE dataview/Ada/built: ${DATAVIEW_UNIQ} ${CP_FILES} mkdir -p $(dir $@) asn2dataModel -o $(dir $@) -toAda $^ touch $@ cd dataview/Ada && rm -f gnat.cfg GPS_project.gpr IgnoredExaminerWarnings.wrn runSpark.sh @@END_IF@@ @@-- Then symlink the files for each function @@TABLE@@ @@IF@@ @_Language_@ = "SDL" @@IF@@ @_Has_Context_Param_@ # SDL function with context parameters: put them in dataview sed -e '$$s/$$/\n/' -s ${DATAVIEW_UNIQ} @_LOWER:Function_Names_@/SDL/Context-@_LOWER:REPLACE_ALL(_/-):Function_Names_@.asn > @_LOWER:Function_Names_@/SDL/src/dataview-uniq.asn @@ELSE@@ # Copy the dataview to SDL function @_Function_Names_@ (no context parameters) cp -u ${DATAVIEW_UNIQ} @_LOWER:Function_Names_@/SDL/src @@END_IF@@ @@END_IF@@ @@END_TABLE@@ function-types-linux: @@TABLE@@ @@IF@@ @_Is_Type_@ $(MAKE) -j -C @_LOWER:Function_Names_@/@_Language_@ compile-linux @@END_IF@@ @@END_TABLE@@ function-instances-linux: function-types-linux @@TABLE@@ @@IF@@ not @_Is_Type_@ $(MAKE) -C @_LOWER:Function_Names_@/@_Language_@ -j compile-linux @@END_IF@@ @@END_TABLE@@ compile-all-linux: dataviews function-instances-linux clean: rm -rf binaries dataview $(MAKE) -C build -f Makefile.taste clean .PHONY: clean simu compile-all-linux function-instances-linux function-types-linux build-default dataview build-rtems-ada dataview