Skip to content

Commit

Permalink
Fix generated C++ FMU filenames
Browse files Browse the repository at this point in the history
Previously, the API reported dots were used, but underscores were
actually being used. The problem is that the FMI templates changed
the meaning of the fileNamePrefix (from the OM API user's perspective).
  • Loading branch information
sjoelund authored and OpenModelica-Hudson committed Oct 2, 2017
1 parent bacaf03 commit 15ba583
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 11 deletions.
2 changes: 2 additions & 0 deletions Compiler/Script/CevalScriptBackend.mo
Expand Up @@ -3285,6 +3285,8 @@ algorithm
Error.addMessage(Error.FMU_EXPORT_NOT_SUPPORTED_CPP, {FMUType});
FMUType := "me";
end if;
// NOTE: The FMUs use fileNamePrefix for the internal name when it would be expected to be fileNamePrefix that decides the .fmu filename
// The scripting environment from a user's perspective is like that. fmuTargetName is the name of the .fmu in the templates, etc.
filenameprefix := Util.stringReplaceChar(if inFileNamePrefix == "<default>" then Absyn.pathString(className) else inFileNamePrefix, ".", "_");
fmuTargetName := if FMUVersion == "1.0" then filenameprefix else (if inFileNamePrefix == "<default>" then Absyn.pathString(className) else inFileNamePrefix);
defaulSimOpt := buildSimulationOptionsFromModelExperimentAnnotation(st, className, filenameprefix, SOME(defaultSimulationOptions));
Expand Down
18 changes: 7 additions & 11 deletions Compiler/Template/CodegenFMUCpp.tpl
Expand Up @@ -648,8 +648,6 @@ case SIMCODE(modelInfo=MODELINFO(__), makefileParams=MAKEFILE_PARAMS(__), simula
let ParModelicaLibs = if acceptParModelicaGrammar() then '-lOMOCLRuntime -lOpenCL' // else ""
let extraCflags = match sopt case SOME(s as SIMULATION_SETTINGS(__)) then
match s.method case "dassljac" then "-D_OMC_JACOBIAN "
// Note: FMI 1.0 did not distinguish modelIdentifier from fileNamePrefix
let modelName = if isFMIVersion10(FMUVersion) then fileNamePrefix else dotPath(modelInfo.name)
<<
# Makefile generated by OpenModelica
# run with nmake from Visual Studio Command Prompt
Expand Down Expand Up @@ -681,16 +679,15 @@ case SIMCODE(modelInfo=MODELINFO(__), makefileParams=MAKEFILE_PARAMS(__), simula
LDFLAGS=/link /DLL /NOENTRY /LIBPATH:"<%makefileParams.omhome%>/lib/omc/cpp/msvc" /LIBPATH:"<%makefileParams.omhome%>/bin" OMCppSystem_static.lib OMCppMath_static.lib OMCppExtensionUtilities_static.lib OMCppFMU_static.lib $(OMCPP_SOLVER_LIBS) ModelicaExternalC.lib ModelicaStandardTables.lib OMCppModelicaUtilities_static.lib $(EXTRA_LIBS)
PLATFORM="<%makefileParams.platform%>"

MODEL_NAME=<%modelName%>
MODELICA_SYSTEM_LIB=<%fileNamePrefix%>
CALCHELPERMAINFILE=OMCpp$(MODELICA_SYSTEM_LIB)CalcHelperMain.cpp

$(MODELICA_SYSTEM_LIB).fmu: $(MODELICA_SYSTEM_LIB)$(DLLEXT)
<%fmuTargetName%>.fmu: $(MODELICA_SYSTEM_LIB)$(DLLEXT)
<%\t%>rm -rf binaries
<%\t%>mkdir -p "binaries/$(PLATFORM)"
<%\t%>mv $(MODELICA_SYSTEM_LIB)$(DLLEXT) "binaries/$(PLATFORM)/"
<%\t%>rm -f $(MODELICA_SYSTEM_LIB).fmu
<%\t%>zip -r "$(MODELICA_SYSTEM_LIB).fmu" modelDescription.xml binaries
<%\t%>zip -r "<%fmuTargetName%>.fmu" modelDescription.xml binaries
<%\t%>rm -rf binaries

$(MODELICA_SYSTEM_LIB)$(DLLEXT):
Expand All @@ -704,7 +701,6 @@ case SIMCODE(modelInfo=MODELINFO(__), makefileParams=MAKEFILE_PARAMS(__), simula
let libsExtra = (makefileParams.libs |> lib => lib ;separator=" ")
let extraCflags = match sopt case SOME(s as SIMULATION_SETTINGS(__)) then ""
// Note: FMI 1.0 did not distinguish modelIdentifier from fileNamePrefix
let modelName = if isFMIVersion10(FMUVersion) then fileNamePrefix else dotPath(modelInfo.name)
let platformstr = match makefileParams.platform case "i386-pc-linux" then 'linux32' case "x86_64-linux" then 'linux64' else '<%makefileParams.platform%>'
let omhome = makefileParams.omhome
let platformbins = match platformstr case "win32" case "win64" then '<%omhome%>/bin/libgcc_s_*.dll <%omhome%>/bin/libstdc++-6.dll <%omhome%>/bin/libwinpthread-1.dll' else ''
Expand Down Expand Up @@ -800,9 +796,9 @@ case SIMCODE(modelInfo=MODELINFO(__), makefileParams=MAKEFILE_PARAMS(__), simula
CPPFILES=$(CALCHELPERMAINFILE)
OFILES=$(CPPFILES:.cpp=.o)

.PHONY: <%modelName%>.fmu $(CPPFILES) clean
.PHONY: <%fmuTargetName%>.fmu $(CPPFILES) clean

<%fileNamePrefix%>.fmu: $(OFILES)
<%fmuTargetName%>.fmu: $(OFILES)
<%\t%>$(CXX) -shared -o <%fileNamePrefix%>$(DLLEXT) $(OFILES) $(LDFLAGS) $(LIBS)
<%\t%><%mkdir%> -p "binaries/$(PLATFORM)"
<%\t%>cp $(BINARIES) "binaries/$(PLATFORM)/"
Expand All @@ -812,12 +808,12 @@ case SIMCODE(modelInfo=MODELINFO(__), makefileParams=MAKEFILE_PARAMS(__), simula
<%\t%>cp $(SUNDIALS_LIBRARIES_KINSOL) "binaries/$(PLATFORM)/"
<%\t%>cp $(OMHOME)/share/omc/runtime/cpp/licenses/sundials.license "documentation/"
endif
<%\t%>rm -f <%fileNamePrefix%>.fmu
<%\t%>rm -f <%fmuTargetName%>.fmu
ifeq ($(USE_FMU_SUNDIALS),ON)
<%\t%>zip -r "<%fileNamePrefix%>.fmu" modelDescription.xml binaries documentation
<%\t%>zip -r "<%fmuTargetName%>.fmu" modelDescription.xml binaries documentation
<%\t%>rm -rf documentation
else
<%\t%>zip -r "<%fileNamePrefix%>.fmu" modelDescription.xml binaries
<%\t%>zip -r "<%fmuTargetName%>.fmu" modelDescription.xml binaries
endif

clean:
Expand Down

0 comments on commit 15ba583

Please sign in to comment.