Skip to content

Commit a50dbe1

Browse files
sjoelundOpenModelica-Hudson
authored andcommitted
Updates to source-code FMUs
- Do not compile nonlinear/linear/mixed solvers unless the model uses the solvers. - Add support to compile a-files instead of so-files (--disable-shared --enable-static). - Added some preprocessor flags to disable more features in the run-time (this should be improved; all logging functionality is included even though the FMI runtime cannot access them, etc). - Use global variables if pthreads is unavailable. - Succesfully compiles to AVR CPUs now, but uses way too much SRAM to be useful.
1 parent efd9b1f commit a50dbe1

26 files changed

+400
-69
lines changed

Compiler/Template/CodegenC.tpl

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ end translateModel;
104104
::=
105105
let modelNamePrefixStr = modelNamePrefix(simCode)
106106
match simCode
107-
case simCode as SIMCODE(modelInfo=MODELINFO(functions=functions)) then
107+
case simCode as SIMCODE(modelInfo=MODELINFO(functions=functions, varInfo=varInfo as VARINFO(__))) then
108108
<<
109109
/* Simulation code for <%dotPath(modelInfo.name)%> generated by the OpenModelica Compiler <%getVersionNr()%>. */
110110
#if !defined(<%modelNamePrefixStr%>__MODEL_H)
@@ -129,10 +129,18 @@ end translateModel;
129129

130130
extern void <%symbolName(modelNamePrefixStr,"callExternalObjectConstructors")%>(DATA *data, threadData_t *threadData);
131131
extern void <%symbolName(modelNamePrefixStr,"callExternalObjectDestructors")%>(DATA *_data, threadData_t *threadData);
132-
extern void <%symbolName(modelNamePrefixStr,"initialNonLinearSystem")%>(int nNonLinearSystems, NONLINEAR_SYSTEM_DATA *data);
133-
extern void <%symbolName(modelNamePrefixStr,"initialLinearSystem")%>(int nLinearSystems, LINEAR_SYSTEM_DATA *data);
134-
extern void <%symbolName(modelNamePrefixStr,"initialMixedSystem")%>(int nMixedSystems, MIXED_SYSTEM_DATA *data);
132+
#if !defined(OMC_NUM_NONLINEAR_SYSTEMS) || OMC_NUM_NONLINEAR_SYSTEMS>0
133+
<% if intGt(varInfo.numNonLinearSystems, 0) then 'extern void <%symbolName(modelNamePrefixStr,"initialNonLinearSystem")%>(int nNonLinearSystems, NONLINEAR_SYSTEM_DATA *data);' %>
134+
#endif
135+
#if !defined(OMC_NUM_LINEAR_SYSTEMS) || OMC_NUM_LINEAR_SYSTEMS>0
136+
<% if intGt(varInfo.numLinearSystems, 0) then 'extern void <%symbolName(modelNamePrefixStr,"initialLinearSystem")%>(int nLinearSystems, LINEAR_SYSTEM_DATA *data);' %>
137+
#endif
138+
#if !defined(OMC_NUM_MIXED_SYSTEMS) || OMC_NUM_MIXED_SYSTEMS>0
139+
<% if intGt(varInfo.numMixedSystems, 0) then 'extern void <%symbolName(modelNamePrefixStr,"initialMixedSystem")%>(int nMixedSystems, MIXED_SYSTEM_DATA *data);' %>
140+
#endif
141+
#if !defined(OMC_NO_STATESELECTION)
135142
extern void <%symbolName(modelNamePrefixStr,"initializeStateSets")%>(int nStateSets, STATE_SET_DATA* statesetData, DATA *data);
143+
#endif
136144
extern int <%symbolName(modelNamePrefixStr,"functionAlgebraics")%>(DATA *data, threadData_t *threadData);
137145
extern int <%symbolName(modelNamePrefixStr,"function_storeDelayed")%>(DATA *data, threadData_t *threadData);
138146
extern int <%symbolName(modelNamePrefixStr,"updateBoundVariableAttributes")%>(DATA *data, threadData_t *threadData);
@@ -486,7 +494,7 @@ template simulationFile_nls(SimCode simCode)
486494
"Non Linear Systems"
487495
::=
488496
match simCode
489-
case simCode as SIMCODE(__) then
497+
case simCode as SIMCODE(modelInfo=MODELINFO(varInfo=varInfo as VARINFO(__))) then
490498
let modelNamePrefixStr = modelNamePrefix(simCode)
491499
let jacobianbody = (jacobianMatrixes |> ({(jacobianEquations,_,_)}, _, _, _, _, _, _) => functionNonLinearResiduals(jacobianEquations,modelNamePrefixStr);separator="\n\n")
492500
<<
@@ -502,7 +510,7 @@ template simulationFile_nls(SimCode simCode)
502510
<%functionNonLinearResiduals(allEquations,modelNamePrefixStr)%>
503511
<%jacobianbody%>
504512
505-
<%functionInitialNonLinearSystems(initialEquations, initialEquations_lambda0, parameterEquations, allEquations, jacobianMatrixes, modelNamePrefixStr)%>
513+
<%if intGt(varInfo.numNonLinearSystems, 0) then functionInitialNonLinearSystems(initialEquations, initialEquations_lambda0, parameterEquations, allEquations, jacobianMatrixes, modelNamePrefixStr)%>
506514
507515
#if defined(__cplusplus)
508516
}
@@ -517,7 +525,7 @@ template simulationFile_lsy(SimCode simCode)
517525
"Linear Systems"
518526
::=
519527
match simCode
520-
case simCode as SIMCODE(__) then
528+
case simCode as SIMCODE(modelInfo=MODELINFO(varInfo=varInfo as VARINFO(__))) then
521529
<<
522530
/* Linear Systems */
523531
<%simulationFileHeader(simCode.fileNamePrefix)%>
@@ -528,7 +536,7 @@ template simulationFile_lsy(SimCode simCode)
528536
529537
<%functionSetupLinearSystems(initialEquations, initialEquations_lambda0, parameterEquations, allEquations, jacobianMatrixes, modelNamePrefix(simCode))%>
530538
531-
<%functionInitialLinearSystems(initialEquations, initialEquations_lambda0, parameterEquations, allEquations, jacobianMatrixes, modelNamePrefix(simCode))%>
539+
<% if intGt(varInfo.numLinearSystems,0) then functionInitialLinearSystems(initialEquations, initialEquations_lambda0, parameterEquations, allEquations, jacobianMatrixes, modelNamePrefix(simCode))%>
532540
533541
#if defined(__cplusplus)
534542
}
@@ -596,7 +604,7 @@ template simulationFile_inz(SimCode simCode)
596604
"Initialization"
597605
::=
598606
match simCode
599-
case simCode as SIMCODE(__) then
607+
case simCode as SIMCODE(modelInfo=MODELINFO(varInfo=varInfo as VARINFO(__))) then
600608
<<
601609
/* Initialization */
602610
<%simulationFileHeader(simCode.fileNamePrefix)%>
@@ -610,7 +618,7 @@ template simulationFile_inz(SimCode simCode)
610618
<%functionInitialEquations_lambda0(initialEquations_lambda0, modelNamePrefix(simCode))%>
611619
<%functionRemovedInitialEquations(removedInitialEquations, modelNamePrefix(simCode))%>
612620
613-
<%functionInitialMixedSystems(initialEquations, initialEquations_lambda0, parameterEquations, allEquations, jacobianMatrixes, modelNamePrefix(simCode))%>
621+
<%if intGt(varInfo.numMixedSystems,0) then functionInitialMixedSystems(initialEquations, initialEquations_lambda0, parameterEquations, allEquations, jacobianMatrixes, modelNamePrefix(simCode))%>
614622
615623
#if defined(__cplusplus)
616624
}
@@ -931,7 +939,7 @@ template simulationFile(SimCode simCode, String guid, Boolean isModelExchangeFMU
931939
"Generates code for main C file for simulation target."
932940
::=
933941
match simCode
934-
case simCode as SIMCODE(hpcomData=HPCOMDATA(__)) then
942+
case simCode as SIMCODE(modelInfo=MODELINFO(varInfo=varInfo as VARINFO(__)), hpcomData=HPCOMDATA(__)) then
935943
let modelNamePrefixStr = modelNamePrefix(simCode)
936944
let mainInit = if boolOr(isModelExchangeFMU, boolOr(Flags.isSet(Flags.PARMODAUTO), Flags.isSet(HPCOM))) then
937945
<<
@@ -1032,10 +1040,14 @@ template simulationFile(SimCode simCode, String guid, Boolean isModelExchangeFMU
10321040
<% if isModelExchangeFMU then "NULL" else '<%symbolName(modelNamePrefixStr,"updateContinuousSystem")%>'%>,
10331041
<%symbolName(modelNamePrefixStr,"callExternalObjectConstructors")%>,
10341042
<%symbolName(modelNamePrefixStr,"callExternalObjectDestructors")%>,
1035-
<%symbolName(modelNamePrefixStr,"initialNonLinearSystem")%>,
1036-
<%symbolName(modelNamePrefixStr,"initialLinearSystem")%>,
1037-
<%symbolName(modelNamePrefixStr,"initialMixedSystem")%>,
1043+
<%if intEq(varInfo.numNonLinearSystems,0) then "NULL" else symbolName(modelNamePrefixStr,"initialNonLinearSystem")%>,
1044+
<%if intEq(varInfo.numLinearSystems,0) then "NULL" else symbolName(modelNamePrefixStr,"initialLinearSystem")%>,
1045+
<%if intEq(varInfo.numMixedSystems,0) then "NULL" else symbolName(modelNamePrefixStr,"initialMixedSystem")%>,
1046+
#if !defined(OMC_NO_STATESELECTION)
10381047
<%symbolName(modelNamePrefixStr,"initializeStateSets")%>,
1048+
#else
1049+
NULL,
1050+
#endif
10391051
<%symbolName(modelNamePrefixStr,"initializeDAEmodeData")%>,
10401052
<%symbolName(modelNamePrefixStr,"functionODE")%>,
10411053
<%symbolName(modelNamePrefixStr,"functionAlgebraics")%>,
@@ -1163,7 +1175,11 @@ template populateModelInfo(ModelInfo modelInfo, String fileNamePrefix, String gu
11631175
<<
11641176
data->modelData->initXMLData = NULL;
11651177
data->modelData->modelDataXml.infoXMLData =
1178+
#if defined(OMC_MINIMAL_METADATA)
1179+
NULL;
1180+
#else
11661181
#include "<%fileNamePrefix%>_info.c"
1182+
#endif
11671183
;
11681184
>>
11691185
else
@@ -5505,7 +5521,7 @@ case SIMCODE(modelInfo=MODELINFO(__), makefileParams=MAKEFILE_PARAMS(__), simula
55055521
end match
55065522
case "gcc" then
55075523
match simCode
5508-
case SIMCODE(modelInfo=MODELINFO(__), makefileParams=MAKEFILE_PARAMS(__), simulationSettingsOpt = sopt) then
5524+
case SIMCODE(modelInfo=MODELINFO(varInfo=varInfo as VARINFO(__)), delayedExps=DELAYED_EXPRESSIONS(maxDelayedIndex=maxDelayedIndex), makefileParams=MAKEFILE_PARAMS(__), simulationSettingsOpt = sopt) then
55095525
let dirExtra = if modelInfo.directory then '-L"<%modelInfo.directory%>"' //else ""
55105526
let libsStr = (makefileParams.libs |> lib => lib ;separator=" ")
55115527
let libsPos1 = if not dirExtra then libsStr //else ""
@@ -5528,7 +5544,7 @@ case SIMCODE(modelInfo=MODELINFO(__), makefileParams=MAKEFILE_PARAMS(__), simula
55285544
DEBUG_FLAGS=<% if boolOr(acceptMetaModelicaGrammar(), Flags.isSet(Flags.GEN_DEBUG_SYMBOLS)) then "-O0 -g"%>
55295545
CFLAGS=$(CFLAGS_BASED_ON_INIT_FILE) $(DEBUG_FLAGS) <%makefileParams.cflags%> <%match sopt case SOME(s as SIMULATION_SETTINGS(__)) then '<%s.cflags%> ' /* From the simulate() command */%> <% if Flags.isSet(Flags.FMU_EXPERIMENTAL) then '-DFMU_EXPERIMENTAL' %>
55305546
<% if stringEq(Config.simCodeTarget(),"JavaScript") then 'OMC_EMCC_PRE_JS=<%makefileParams.omhome%>/lib/<%getTriple()%>/omc/emcc/pre.js<%\n%>'
5531-
%>CPPFLAGS=<%makefileParams.includes ; separator=" "%> -I"<%makefileParams.omhome%>/include/omc/c" -I. -DOPENMODELICA_XML_FROM_FILE_AT_RUNTIME<% if stringEq(Config.simCodeTarget(),"JavaScript") then " -DOMC_EMCC"%><% if Flags.isSet(Flags.OMC_RELOCATABLE_FUNCTIONS) then " -DOMC_GENERATE_RELOCATABLE_CODE"%>
5547+
%>CPPFLAGS=<%makefileParams.includes ; separator=" "%> -I"<%makefileParams.omhome%>/include/omc/c" -I. -DOPENMODELICA_XML_FROM_FILE_AT_RUNTIME<% if stringEq(Config.simCodeTarget(),"JavaScript") then " -DOMC_EMCC"%><% if Flags.isSet(Flags.OMC_RELOCATABLE_FUNCTIONS) then " -DOMC_GENERATE_RELOCATABLE_CODE"%> -DOMC_MODEL_PREFIX=<%modelNamePrefix(simCode)%> -DOMC_NUM_MIXED_SYSTEMS=<%varInfo.numMixedSystems%> -DOMC_NUM_LINEAR_SYSTEMS=<%varInfo.numLinearSystems%> -DOMC_NUM_NONLINEAR_SYSTEMS=<%varInfo.numNonLinearSystems%> -DOMC_NDELAY_EXPRESSIONS=<%maxDelayedIndex%> -DOMC_NVAR_STRING=<%varInfo.numStringAlgVars%>
55325548
LDFLAGS=<%dirExtra%> <%
55335549
if stringEq(Config.simCodeTarget(),"JavaScript") then <<-L'<%makefileParams.omhome%>/lib/<%getTriple()%>/omc/emcc' -lblas -llapack -lexpat -lSimulationRuntimeC -s TOTAL_MEMORY=805306368 -s OUTLINING_LIMIT=20000 --pre-js $(OMC_EMCC_PRE_JS)>>
55345550
else <<-L"<%makefileParams.omhome%>/lib/<%getTriple()%>/omc" -L"<%makefileParams.omhome%>/lib" -Wl,<% if boolOr(stringEq(makefileParams.platform, "win32"),stringEq(makefileParams.platform, "win64")) then "--stack,16777216,"%>-rpath,"<%makefileParams.omhome%>/lib/<%getTriple()%>/omc" -Wl,-rpath,"<%makefileParams.omhome%>/lib" <%ParModelicaExpLibs%> <%ParModelicaAutoLibs%> <%makefileParams.ldflags%> <%makefileParams.runtimelibs%> >>

Compiler/Template/CodegenFMU.tpl

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1066,15 +1066,22 @@ match platform
10661066
else
10671067
<<
10681068
<%fileNamePrefix%>_FMU: $(MAINOBJ) <%fileNamePrefix%>_functions.h <%fileNamePrefix%>_literals.h $(OFILES) $(RUNTIMEFILES)
1069-
<%\t%>$(LD) -o <%modelNamePrefix%>$(DLLEXT) $(MAINOBJ) $(OFILES) $(RUNTIMEFILES) <%dirExtra%> <%libsPos1%> <%libsPos2%> $(LDFLAGS)
10701069
<%\t%>mkdir -p ../binaries/$(FMIPLATFORM)
1070+
ifeq (@LIBTYPE_DYNAMIC@,1)
1071+
<%\t%>$(LD) -o <%modelNamePrefix%>$(DLLEXT) $(MAINOBJ) $(OFILES) $(RUNTIMEFILES) <%dirExtra%> <%libsPos1%> <%libsPos2%> $(LDFLAGS)
10711072
<%\t%>cp <%fileNamePrefix%>$(DLLEXT) <%fileNamePrefix%>_FMU.libs config.log ../binaries/$(FMIPLATFORM)/
1073+
endif
1074+
ifeq (@LIBTYPE_STATIC@,1)
1075+
<%\t%>rm -f <%modelNamePrefix%>.a
1076+
<%\t%>$(AR) -rsu <%modelNamePrefix%>.a $(MAINOBJ) $(OFILES) $(RUNTIMEFILES)
1077+
<%\t%>cp <%fileNamePrefix%>.a <%fileNamePrefix%>_FMU.libs config.log ../binaries/$(FMIPLATFORM)/
1078+
endif
10721079
<%\t%>$(MAKE) distclean
10731080
<%\t%>cd .. && rm -f ../<%fileNamePrefix%>.fmu && zip -r ../<%fileNamePrefix%>.fmu *
10741081
distclean: clean
10751082
<%\t%>rm -f Makefile config.status config.log
10761083
clean:
1077-
<%\t%>rm -f <%fileNamePrefix%>.def <%fileNamePrefix%>.o <%fileNamePrefix%>$(DLLEXT) $(MAINOBJ) $(OFILES) $(RUNTIMEFILES)
1084+
<%\t%>rm -f <%fileNamePrefix%>.def <%fileNamePrefix%>.o <%fileNamePrefix%>.a <%fileNamePrefix%>$(DLLEXT) $(MAINOBJ) $(OFILES) $(RUNTIMEFILES)
10781085
>>
10791086
end getPlatformString2;
10801087

@@ -1184,7 +1191,7 @@ case SIMCODE(modelInfo=MODELINFO(__), makefileParams=MAKEFILE_PARAMS(__), simula
11841191
end match
11851192
case "gcc" then
11861193
match simCode
1187-
case SIMCODE(modelInfo=MODELINFO(__), makefileParams=MAKEFILE_PARAMS(__), simulationSettingsOpt = sopt) then
1194+
case SIMCODE(modelInfo=MODELINFO(varInfo=varInfo as VARINFO(__)), delayedExps=DELAYED_EXPRESSIONS(maxDelayedIndex=maxDelayedIndex), makefileParams=MAKEFILE_PARAMS(__), simulationSettingsOpt = sopt) then
11881195
let dirExtra = if modelInfo.directory then '-L"<%modelInfo.directory%>"' //else ""
11891196
let libsStr = (makefileParams.libs |> lib => lib ;separator=" ")
11901197
let libsPos1 = if not dirExtra then libsStr //else ""
@@ -1198,6 +1205,7 @@ case SIMCODE(modelInfo=MODELINFO(__), makefileParams=MAKEFILE_PARAMS(__), simula
11981205
<<
11991206
# Makefile generated by OpenModelica
12001207
CC=@CC@
1208+
AR=@AR@
12011209
CFLAGS=@CFLAGS@
12021210
LD=$(CC) -shared
12031211
LDFLAGS=@LDFLAGS@ @LIBS@
@@ -1207,7 +1215,13 @@ case SIMCODE(modelInfo=MODELINFO(__), makefileParams=MAKEFILE_PARAMS(__), simula
12071215
FMIPLATFORM=@FMIPLATFORM@
12081216
# Note: Simulation of the fmu with dymola does not work with -finline-small-functions (enabled by most optimization levels)
12091217
CPPFLAGS=@CPPFLAGS@
1210-
override CPPFLAGS += -Iinclude/ -Iinclude/fmi<%if isFMIVersion20(FMUVersion) then "2" else "1"%> -I. <%makefileParams.includes ; separator=" "%> <% if Flags.isSet(Flags.FMU_EXPERIMENTAL) then '-DFMU_EXPERIMENTAL'%>
1218+
OMC_NUM_LINEAR_SYSTEMS=<%varInfo.numLinearSystems%>
1219+
OMC_NUM_NONLINEAR_SYSTEMS=<%varInfo.numNonLinearSystems%>
1220+
OMC_NUM_MIXED_SYSTEMS=<%varInfo.numMixedSystems%>
1221+
OMC_NDELAY_EXPRESSIONS=<%maxDelayedIndex%>
1222+
OMC_NVAR_STRING=<%varInfo.numStringAlgVars%>
1223+
1224+
override CPPFLAGS += -Iinclude/ -Iinclude/fmi<%if isFMIVersion20(FMUVersion) then "2" else "1"%> -I. <%makefileParams.includes ; separator=" "%> <% if Flags.isSet(Flags.FMU_EXPERIMENTAL) then '-DFMU_EXPERIMENTAL'%> -DOMC_MODEL_PREFIX=<%modelNamePrefix(simCode)%> -DOMC_NUM_MIXED_SYSTEMS=<%varInfo.numMixedSystems%> -DOMC_NUM_LINEAR_SYSTEMS=<%varInfo.numLinearSystems%> -DOMC_NUM_NONLINEAR_SYSTEMS=<%varInfo.numNonLinearSystems%> -DOMC_NDELAY_EXPRESSIONS=<%maxDelayedIndex%> -DOMC_NVAR_STRING=<%varInfo.numStringAlgVars%>
12111225

12121226
<%common%>
12131227

SimulationRuntime/c/Makefile.objs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,25 @@ UTIL_HFILES=base_array.h boolean_array.h division.h generic_array.h omc_error.h
4141
MATH_OBJS=pivot$(OBJ_EXT)
4242
MATH_HFILES = blaswrap.h
4343

44-
SOLVER_OBJS_FMU=delay$(OBJ_EXT) linearSystem$(OBJ_EXT) linearSolverLapack$(OBJ_EXT) linearSolverTotalPivot$(OBJ_EXT) mixedSystem$(OBJ_EXT) mixedSearchSolver$(OBJ_EXT) nonlinearSystem$(OBJ_EXT) nonlinearValuesList$(OBJ_EXT) nonlinearSolverHybrd$(OBJ_EXT) nonlinearSolverHomotopy$(OBJ_EXT) omc_math$(OBJ_EXT) model_help$(OBJ_EXT) stateset$(OBJ_EXT) synchronous$(OBJ_EXT)
44+
ifeq ($(OMC_NUM_NONLINEAR_SYSTEMS),0)
45+
SOLVER_OBJS_NONLINEAR_SYSTEMS=
46+
else
47+
SOLVER_OBJS_NONLINEAR_SYSTEMS=nonlinearSystem$(OBJ_EXT) nonlinearValuesList$(OBJ_EXT) nonlinearSolverHybrd$(OBJ_EXT) nonlinearSolverHomotopy$(OBJ_EXT)
48+
endif
49+
50+
ifeq ($(OMC_NUM_LINEAR_SYSTEMS),0)
51+
SOLVER_OBJS_LINEAR_SYSTEMS=
52+
else
53+
SOLVER_OBJS_LINEAR_SYSTEMS=linearSystem$(OBJ_EXT) linearSolverLapack$(OBJ_EXT) linearSolverTotalPivot$(OBJ_EXT)
54+
endif
55+
56+
ifeq ($(OMC_NUM_MIXED_SYSTEMS),0)
57+
SOLVER_OBJS_MIXED_SYSTEMS=
58+
else
59+
SOLVER_OBJS_MIXED_SYSTEMS=mixedSystem$(OBJ_EXT) mixedSearchSolver$(OBJ_EXT)
60+
endif
61+
62+
SOLVER_OBJS_FMU=delay$(OBJ_EXT) $(SOLVER_OBJS_LINEAR_SYSTEMS) $(SOLVER_OBJS_MIXED_SYSTEMS) $(SOLVER_OBJS_NONLINEAR_SYSTEMS) omc_math$(OBJ_EXT) model_help$(OBJ_EXT) stateset$(OBJ_EXT) synchronous$(OBJ_EXT)
4563
ifeq ($(OMC_FMI_RUNTIME),)
4664
SOLVER_OBJS_MINIMAL=$(SOLVER_OBJS_FMU) events$(OBJ_EXT) external_input$(OBJ_EXT) solver_main$(OBJ_EXT) real_time_sync$(OBJ_EXT) embedded_server$(OBJ_EXT)
4765

@@ -135,12 +153,19 @@ FMIOBJSPATH = $(FMI_OBJS:%=$(FMIPATH)%)
135153
ALL_OBJS = $(GCOBJSPATH) $(METAOBJSPATH) $(UTILOBJSPATH) $(MATHOBJSPATH) $(SOLVEROBJSPATH) $(INITIALIZATIONOBJSPATH) $(OPTIMIZATIONOBJSPATH) $(RESULTSOBJSPATH) $(SIMOBJSPATH) $(SIMOBJSPATHC) meta/meta_modelica_catch$(OBJ_EXT)
136154

137155
# External solvers needed by FMI for ME
156+
ifeq ($(OMC_NUM_NONLINEAR_SYSTEMS),0)
157+
CMINPACK_OBJS =
158+
else
138159
CMINPACK_OBJS = enorm_ hybrj_ dpmpar_ qrfac_ qform_ dogleg_ r1updt_ r1mpyq_
160+
endif
161+
162+
ifneq ($(OMC_NUM_LINEAR_SYSTEMS)$(OMC_NUM_NONLINEAR_SYSTEMS),00)
139163
ifneq ($(NEED_DGESV),)
140164
LAPACK_OBJS = dgesv dgetrf dlamch ilaenv xerbla dgetf2 dgetrs dlaswp ieeeck iparmq
141165
BLAS_OBJS = dgemm dger dscal dswap dtrsm idamax lsame
142166
LIBF2C_OBJS = i_nint pow_di s_cmp s_copy
143167
endif
168+
endif
144169

145170
# Only objects needed for FMI for Modelica Exchange
146171
FMI_ME_OBJS = $(GCOBJSPATH_MINIMAL) $(UTILOBJSPATH) $(MATHOBJSPATH) $(SIMOBJSPATHC) $(SOLVEROBJSPATH) $(INITIALIZATIONOBJSPATH) \

SimulationRuntime/c/gc/memory_pool.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@
3434
#endif
3535
#include "gc/omc_gc.h"
3636
#include <string.h>
37+
#if !defined(OMC_NO_THREADS)
3738
#include <pthread.h>
39+
#endif
3840

3941
#if defined(__cplusplus)
4042
extern "C" {
@@ -52,7 +54,9 @@ typedef struct list_s {
5254
struct list_s *next;
5355
} list;
5456

57+
#if !defined(OMC_NO_THREADS)
5558
static pthread_mutex_t memory_pool_mutex = PTHREAD_MUTEX_INITIALIZER;
59+
#endif
5660
static list *memory_pools = NULL;
5761

5862
static void pool_init(void)
@@ -100,11 +104,15 @@ static void* pool_malloc(size_t sz)
100104
{
101105
void *res;
102106
sz = round_up(sz,8);
107+
#if !defined(OMC_NO_THREADS)
103108
pthread_mutex_lock(&memory_pool_mutex);
109+
#endif
104110
pool_expand(sz);
105111
res = (void*)((char*)memory_pools->memory + memory_pools->used);
106112
memory_pools->used += sz;
113+
#if !defined(OMC_NO_THREADS)
107114
pthread_mutex_unlock(&memory_pool_mutex);
115+
#endif
108116
memset(res,0,sz);
109117
return res;
110118
}

SimulationRuntime/c/gc/omc_gc.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@ extern "C" {
4444
#endif
4545

4646
#include <stdlib.h>
47+
#if !defined(OMC_NO_THREADS)
4748
#include <pthread.h>
49+
#endif
4850
#include <setjmp.h>
4951

5052
#if defined(_MSC_VER)
@@ -126,7 +128,9 @@ typedef struct threadData_s {
126128
jmp_buf *simulationJumpBuffer;
127129
errorStage currentErrorStage;
128130
struct threadData_s *parent;
131+
#if !defined(OMC_NO_THREADS)
129132
pthread_mutex_t parentMutex; /* Prevent children from all manipulating the parent at the same time */
133+
#endif
130134
void *plotClassPointer;
131135
PlotCallback plotCB;
132136
void *stackBottom; /* Actually offset 64 kB from bottom, just to never reach the bottom */

SimulationRuntime/c/meta/meta_modelica.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
extern "C" {
4242
#endif
4343

44-
#include <pthread.h>
4544
#include <stdio.h>
4645
#include <stdlib.h>
4746
#include <stdarg.h>

SimulationRuntime/c/meta/meta_modelica_segv.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
#ifndef META_MODELICA_SEGV_H_
3434
#define META_MODELICA_SEGV_H_
3535

36-
#include <pthread.h>
3736
#include <setjmp.h>
3837

3938
#define MMC_TRY_STACK() { jmp_buf *oldMMCJumper = threadData->mmc_jumper; { MMC_TRY_INTERNAL(mmc_stack_overflow_jumper) threadData->mmc_stack_overflow_jumper = &new_mmc_jumper;

SimulationRuntime/c/openmodelica.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ extern "C" {
7575
#endif
7676

7777
/* BEFORE: compat.h */
78-
#if defined(__MINGW32__) || defined(_MSC_VER)
78+
#if defined(__MINGW32__) || defined(_MSC_VER) || defined(__AVR__)
7979
#define EXIT(code) exit(code)
8080
#else
8181
/* We need to patch exit() on Unix systems

SimulationRuntime/c/simulation/simulation_info_json.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,15 +367,18 @@ static void readInfoJson(const char *str,MODEL_DATA_XML *xml)
367367

368368
void modelInfoInit(MODEL_DATA_XML* xml)
369369
{
370+
#if !defined(OMC_NO_FILESYSTEM)
370371
omc_mmap_read mmap_reader = {0};
372+
#endif
371373
rt_tick(0);
374+
#if !defined(OMC_NO_FILESYSTEM)
372375
if (!xml->infoXMLData) {
373376
mmap_reader = omc_mmap_open_read(xml->fileName);
374377
xml->infoXMLData = mmap_reader.data;
375378
xml->modelInfoXmlLength = mmap_reader.size;
376379
// fprintf(stderr, "Loaded the JSON (%ld kB)...\n", (long) (s.st_size+1023)/1024);
377380
}
378-
381+
#endif
379382
xml->functionNames = (FUNCTION_INFO*) calloc(xml->nFunctions, sizeof(FUNCTION_INFO));
380383
xml->equationInfo = (EQUATION_INFO*) calloc(1+xml->nEquations, sizeof(EQUATION_INFO));
381384
xml->equationInfo[0].id = 0;
@@ -388,7 +391,9 @@ void modelInfoInit(MODEL_DATA_XML* xml)
388391
// fprintf(stderr, "Parse the JSON %ld...\n", (long) xml->infoXMLData);
389392
readInfoJson(xml->infoXMLData, xml);
390393
// fprintf(stderr, "Parsed the JSON in %fms...\n", rt_tock(0) * 1000.0);
394+
#if !defined(OMC_NO_FILESYSTEM)
391395
omc_mmap_close_read(mmap_reader);
396+
#endif
392397
}
393398

394399
FUNCTION_INFO modelInfoGetFunction(MODEL_DATA_XML* xml, size_t ix)

SimulationRuntime/c/simulation/solver/delay.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
*
2929
*/
3030

31+
#if !defined(OMC_NDELAY_EXPRESSIONS) || OMC_NDELAY_EXPRESSIONS>0
32+
3133
/*! \file delay.c
3234
*/
3335

@@ -207,3 +209,4 @@ double delayImpl(DATA* data, threadData_t *threadData, int exprNumber, double ex
207209

208210
}
209211

212+
#endif

0 commit comments

Comments
 (0)