Skip to content

Commit

Permalink
- Generate separate include folders for fmi1 & fmi2.
Browse files Browse the repository at this point in the history
- Create a definition & make file for fmi2.

git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@20160 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
adeas31 committed Apr 16, 2014
1 parent 8f66424 commit 4a0fb3f
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 14 deletions.
69 changes: 59 additions & 10 deletions Compiler/Template/CodegenFMU.tpl
Expand Up @@ -70,8 +70,8 @@ case sc as SIMCODE(modelInfo=modelInfo as MODELINFO(__)) then
let x = covertTextFileToCLiteral('<%fileNamePrefix%>_init.xml','<%fileNamePrefix%>_init.c')
let()= textFile(fmumodel_identifierFile(simCode,guid,FMUVersion), '<%fileNamePrefix%>_FMU.c')
let()= textFile(fmuModelDescriptionFile(simCode,guid,FMUVersion), 'modelDescription.xml')
let()= textFile(fmudeffile(simCode), '<%fileNamePrefix%>.def')
let()= textFile(fmuMakefile(target,simCode), '<%fileNamePrefix%>_FMU.makefile')
let()= textFile(fmudeffile(simCode,FMUVersion), '<%fileNamePrefix%>.def')
let()= textFile(fmuMakefile(target,simCode,FMUVersion), '<%fileNamePrefix%>_FMU.makefile')
"" // Return empty result since result written to files directly
end translateModel;

Expand Down Expand Up @@ -509,11 +509,14 @@ case SIMCODE(__) then
#include "util/omc_error.h"
#include "<%fileNamePrefix%>_functions.h"
#include "<%fileNamePrefix%>_literals.h"
#include "fmiModelTypes.h"
#include "fmiModelFunctions.h"
#include "simulation/solver/initialization/initialization.h"
#include "simulation/solver/events.h"
<%if stringEq(FMUVersion, "2.0") then '#include "fmu2_model_interface.h"' else '#include "fmu1_model_interface.h"'%>
<%if stringEq(FMUVersion, "2.0") then
'#include "fmu2_model_interface.h"'
else
'#include "fmiModelTypes.h"
#include "fmiModelFunctions.h"
#include "fmu1_model_interface.h"'%>

#ifdef __cplusplus
extern "C" {
Expand Down Expand Up @@ -1144,7 +1147,7 @@ match platform
>>
end getPlatformString2;

template fmuMakefile(String target, SimCode simCode)
template fmuMakefile(String target, SimCode simCode, String FMUVersion)
"Generates the contents of the makefile for the simulation case. Copy libexpat & correct linux fmu"
::=
match target
Expand Down Expand Up @@ -1181,7 +1184,7 @@ case SIMCODE(modelInfo=MODELINFO(__), makefileParams=MAKEFILE_PARAMS(__), simula
# /I - Include Directories
# /DNOMINMAX - Define NOMINMAX (does what it says)
# /TP - Use C++ Compiler
CFLAGS=/Od /ZI /EHa /fp:except /I"<%makefileParams.omhome%>/include/omc/c" /I. /DNOMINMAX /TP /DNO_INTERACTIVE_DEPENDENCY
CFLAGS=/Od /ZI /EHa /fp:except /I"<%makefileParams.omhome%>/include/omc/c" <%if stringEq(FMUVersion, "2.0") then '/I"<%makefileParams.omhome%>/include/omc/c/fmi2"' else '/I"<%makefileParams.omhome%>/include/omc/c/fmi1"'%> /I. /DNOMINMAX /TP /DNO_INTERACTIVE_DEPENDENCY

# /ZI enable Edit and Continue debug info
CDFLAGS = /ZI
Expand Down Expand Up @@ -1257,8 +1260,8 @@ case SIMCODE(modelInfo=MODELINFO(__), makefileParams=MAKEFILE_PARAMS(__), simula
CFLAGS_BASED_ON_INIT_FILE=<%extraCflags%>
PLATFORM = <%platformstr%>
PLAT34 = <%makefileParams.platform%>
CFLAGS=$(CFLAGS_BASED_ON_INIT_FILE) -I"<%makefileParams.omhome%>/include/omc/c" <%makefileParams.cflags%> <%match sopt case SOME(s as SIMULATION_SETTINGS(__)) then s.cflags /* From the simulate() command */%>
CPPFLAGS=-I"<%makefileParams.omhome%>/include/omc/c" -I. <%makefileParams.includes ; separator=" "%>
CFLAGS=$(CFLAGS_BASED_ON_INIT_FILE) -I"<%makefileParams.omhome%>/include/omc/c" <%if stringEq(FMUVersion, "2.0") then '-I"<%makefileParams.omhome%>/include/omc/c/fmi2"' else '-I"<%makefileParams.omhome%>/include/omc/c/fmi1"'%> <%makefileParams.cflags%> <%match sopt case SOME(s as SIMULATION_SETTINGS(__)) then s.cflags /* From the simulate() command */%>
CPPFLAGS=-I"<%makefileParams.omhome%>/include/omc/c" <%if stringEq(FMUVersion, "2.0") then '-I"<%makefileParams.omhome%>/include/omc/c/fmi2"' else '-I"<%makefileParams.omhome%>/include/omc/c/fmi1"'%> -I. <%makefileParams.includes ; separator=" "%>
LDFLAGS=-L"<%makefileParams.omhome%>/lib/omc" -Wl,-rpath,'<%makefileParams.omhome%>/lib/omc' -lSimulationRuntimeC -linteractive <%makefileParams.ldflags%> <%makefileParams.runtimelibs%> <%dirExtra%>
PERL=perl
MAINFILE=<%fileNamePrefix%>_FMU.c
Expand All @@ -1285,11 +1288,57 @@ else
error(sourceInfo(), 'target <%target%> is not handled!')
end fmuMakefile;

template fmudeffile(SimCode simCode)
template fmudeffile(SimCode simCode, String FMUVersion)
"Generates the def file of the fmu."
::=
match simCode
case SIMCODE(modelInfo=MODELINFO(__), makefileParams=MAKEFILE_PARAMS(__), simulationSettingsOpt = sopt) then
if stringEq(FMUVersion, "2.0") then
<<
EXPORTS
;***************************************************
;Common Functions
;****************************************************
<%fileNamePrefix%>_fmiGetTypesPlatform @1
<%fileNamePrefix%>_fmiGetVersion @2
<%fileNamePrefix%>_fmiSetDebugLogging @3
<%fileNamePrefix%>_fmiInstantiate @4
<%fileNamePrefix%>_fmiFreeInstance @5
<%fileNamePrefix%>_fmiSetupExperiment @6
<%fileNamePrefix%>_fmiEnterInitializationMode @7
<%fileNamePrefix%>_fmiExitInitializationMode @8
<%fileNamePrefix%>_fmiTerminate @9
<%fileNamePrefix%>_fmiReset @10
<%fileNamePrefix%>_fmiGetReal @11
<%fileNamePrefix%>_fmiGetInteger @12
<%fileNamePrefix%>_fmiGetBoolean @13
<%fileNamePrefix%>_fmiGetString @14
<%fileNamePrefix%>_fmiSetReal @15
<%fileNamePrefix%>_fmiSetInteger @16
<%fileNamePrefix%>_fmiSetBoolean @17
<%fileNamePrefix%>_fmiSetString @18
<%fileNamePrefix%>_fmiGetFMUstate @19
<%fileNamePrefix%>_fmiSetFMUstate @20
<%fileNamePrefix%>_fmiFreeFMUstate @21
<%fileNamePrefix%>_fmiSerializedFMUstateSize @22
<%fileNamePrefix%>_fmiSerializeFMUstate @23
<%fileNamePrefix%>_fmiDeSerializeFMUstate @24
<%fileNamePrefix%>_fmiGetDirectionalDerivative @25
;***************************************************
;Functions for FMI for Model Exchange
;****************************************************
<%fileNamePrefix%>_fmiEnterEventMode @26
<%fileNamePrefix%>_fmiNewDiscreteStates @27
<%fileNamePrefix%>_fmiEnterContinuousTimeMode @28
<%fileNamePrefix%>_fmiCompletedIntegratorStep @29
<%fileNamePrefix%>_fmiSetTime @30
<%fileNamePrefix%>_fmiSetContinuousStates @31
<%fileNamePrefix%>_fmiGetDerivatives @32
<%fileNamePrefix%>_fmiGetEventIndicators @33
<%fileNamePrefix%>_fmiGetContinuousStates @34
<%fileNamePrefix%>_fmiGetNominalsOfContinuousStates @35
>>
else
<<
EXPORTS
<%fileNamePrefix%>_fmiCompletedIntegratorStep @1
Expand Down
2 changes: 1 addition & 1 deletion Compiler/Template/CodegenFMUCpp.tpl
Expand Up @@ -76,7 +76,7 @@ case SIMCODE(modelInfo=modelInfo as MODELINFO(__)) then
let()= textFile(simulationWriteOutputCppFile(simCode),'OMCpp<%fileNamePrefix%>WriteOutput.cpp')
let()= textFile(simulationStateSelectionCppFile(simCode), 'OMCpp<%fileNamePrefix%>StateSelection.cpp')
let()= textFile(simulationStateSelectionHeaderFile(simCode),'OMCpp<%fileNamePrefix%>StateSelection.h')
let()= textFile(fmudeffile(simCode), '<%name%>.def')
let()= textFile(fmudeffile(simCode,"1.0"), '<%name%>.def')
let()= textFile(fmuMakefile(target,simCode), '<%fileNamePrefix%>_FMU.makefile')
let jac = (jacobianMatrixes |> (mat, _,_, _, _, _) hasindex index0 =>
(mat |> (eqs,_,_) => algloopfiles(eqs,simCode,contextAlgloopJacobian) ;separator="")
Expand Down
2 changes: 2 additions & 0 deletions Makefile.common
Expand Up @@ -40,6 +40,8 @@ mkbuilddirs:
mkdir -p $(builddir_inc)/c/meta/
mkdir -p $(builddir_inc)/c/meta/gc/
mkdir -p $(builddir_inc)/c/util/
mkdir -p $(builddir_inc)/c/fmi1/
mkdir -p $(builddir_inc)/c/fmi2/
mkdir -p $(builddir_java)
mkdir -p $(builddir_share)/omc/scripts/OpenTurns/
mkdir -p $(builddir_doc)/omc/testmodels
Expand Down
6 changes: 3 additions & 3 deletions SimulationRuntime/c/Makefile.common
Expand Up @@ -206,9 +206,9 @@ install: $(LIBSIMULATION) $(LIBRUNTIME) $(LIBFMIRUNTIME) simulation/libf2c/libf2
cp -p $(RUNTIMEUTIL_HEADERS) $(builddir_inc)/c/util/
# copy fmi stuff
cp -p $(RUNTIME_HEADERS_FMU) ../fmi/export/fmi1/*.h \
../fmi/export/fmi1/fmu1_model_interface.c \
../fmi/export/fmi2/*.h \
../fmi/export/fmi2/fmu2_model_interface.c $(builddir_inc)/c
../fmi/export/fmi1/fmu1_model_interface.c $(builddir_inc)/c/fmi1
cp -p ../fmi/export/fmi2/*.h \
../fmi/export/fmi2/fmu2_model_interface.c $(builddir_inc)/c/fmi2
# copy java interface stuff
@$(MAKE) -C util/java_interface -f $(LIBMAKEFILE) && \
$(MAKE) -C util/java_interface -f $(LIBMAKEFILE) install || \
Expand Down

0 comments on commit 4a0fb3f

Please sign in to comment.