88NEED_DGESV=1
99include Makefile.objs
1010
11+ LIBSIMULATIONFMI=libSimulationRuntimeFMI.a
1112OMC_MINIMAL_RUNTIME=
13+ BUILDPATH=build/c
1214
1315CPPFLAGS = -I. -I$(top_builddir)/Compiler/runtime -I$(top_builddir)/3rdParty/gc/include -I$(top_builddir)/3rdParty/FMIL/install/include/ -I$(top_builddir)/3rdParty/lis-1.4.12/include/ -I$(top_builddir)/3rdParty/Ipopt/include/ -I$(builddir_inc)/c/sundials/ $(CONFIG_CPPFLAGS) -DGC_REDIRECT_TO_LOCAL -I$(builddir_inc)/c
1416override CFLAGS += $(CPPFLAGS) $(CONFIG_CFLAGS) $(EXTRA_CFLAGS)
@@ -132,7 +134,7 @@ RUNTIMEINITIALIZATION_HEADERS = \
132134# ./simulation/solver/solver_main.h \
133135# ./util/list.h \
134136
135- .PHONY : clean all emcc emcc-clean emcc/libSimulationRuntimeC.so
137+ .PHONY : clean all emcc emcc-clean emcc/libSimulationRuntimeC.so fmi-runtime mkbuilddir
136138
137139all : install
138140
@@ -187,44 +189,61 @@ libOpenModelicaFMIRuntimeC.dylib: $(FMIOBJSPATH) $(GCOBJPATH_MINIMAL) Makefile.o
187189 @rm -f $@
188190 $(CC) -shared -o $@ $(FMIOBJSPATH) $(GCOBJPATH_MINIMAL) $(LDFLAGS_SIM) -undefined dynamic_lookup -install_name '@rpath/$@'
189191
190- $(GCOBJSPATH):%$(OBJ_EXT): %.c $(GCHFILESPATH) $(COMMON_HEADERS)
192+ MKBUILDDIR=@(mkdir -p "$(BUILDPATH)" && cd "$(BUILDPATH)" && mkdir -p $(GCPATH) $(METAPATH) $(UTILPATH) $(MATHPATH) $(SOLVERPATH) $(INITIALIZATIONPATH) $(RESULTSPATH) $(SIMPATH) $(OPTIMIZATIONPATH)/DataManagement $(OPTIMIZATIONPATH)/eval_all $(FMIPATH) $(OPTIMIZATIONPATH) linearization external_solvers)
193+ $(GCOBJSPATH):$(BUILDPATH)/%$(OBJ_EXT): %.c $(GCHFILESPATH) $(COMMON_HEADERS)
194+ $(MKBUILDDIR)
191195 $(CC) -c $(CFLAGS) -o $@ $<
192196
193- $(METAOBJSPATH):%$(OBJ_EXT): %.c $(METAHFILESPATH) $(COMMON_HEADERS)
197+ $(METAOBJSPATH):$(BUILDPATH)/%$(OBJ_EXT): %.c $(METAHFILESPATH) $(COMMON_HEADERS)
198+ $(MKBUILDDIR)
194199 $(CC) -c $(CFLAGS) -o $@ $<
195200
196- meta/meta_modelica_catch$(OBJ_EXT): meta/meta_modelica_catch.c
201+ $(BUILDPATH)/./meta/meta_modelica_catch$(OBJ_EXT): meta/meta_modelica_catch.c
202+ $(MKBUILDDIR)
197203 $(CC) -c $(CFLAGS) -o $@ $< -g
198204
199- $(UTILOBJSPATH):%$(OBJ_EXT): %.c $(UTILHFILESPATH) $(COMMON_HEADERS)
205+ $(UTILOBJSPATH):$(BUILDPATH)/%$(OBJ_EXT): %.c $(UTILHFILESPATH) $(COMMON_HEADERS)
206+ $(MKBUILDDIR)
200207 $(CC) -c $(CFLAGS) -o $@ $<
201208
202- $(MATHOBJSPATH):%$(OBJ_EXT): %.c $(MATHHFILESPATH) $(COMMON_HEADERS)
209+ $(MATHOBJSPATH):$(BUILDPATH)/%$(OBJ_EXT): %.c $(MATHHFILESPATH) $(COMMON_HEADERS)
210+ $(MKBUILDDIR)
203211 $(CC) -c $(CFLAGS) $(FPMATHFORTRAN) -o $@ $<
204212
205- $(SOLVEROBJSPATH):%$(OBJ_EXT): %.c $(SOLVERHFILESPATH) $(RESULTSHFILESPATH) $(INITIALIZATIONHFILESPATH) $(OPTIMIZATIONHFILESPATH) $(COMMON_HEADERS)
213+ $(SOLVEROBJSPATH):$(BUILDPATH)/%$(OBJ_EXT): %.c $(SOLVERHFILESPATH) $(RESULTSHFILESPATH) $(INITIALIZATIONHFILESPATH) $(OPTIMIZATIONHFILESPATH) $(COMMON_HEADERS)
214+ $(MKBUILDDIR)
206215 $(CC) -c $(CFLAGS) -o $@ $<
207216
208- $(INITIALIZATIONOBJSPATH):%$(OBJ_EXT): %.c $(SOLVERHFILESPATH) $(INITIALIZATIONHFILESPATH) $(COMMON_HEADERS)
217+ $(INITIALIZATIONOBJSPATH):$(BUILDPATH)/%$(OBJ_EXT): %.c $(SOLVERHFILESPATH) $(INITIALIZATIONHFILESPATH) $(COMMON_HEADERS)
218+ $(MKBUILDDIR)
209219 $(CC) -c $(CFLAGS) -o $@ $<
210220
211- $(RESULTSOBJSPATH):%$(OBJ_EXT): %.cpp $(RESULTSFILESPATH) $(COMMON_HEADERS)
221+ $(RESULTSOBJSPATH):$(BUILDPATH)/%$(OBJ_EXT): %.cpp $(RESULTSFILESPATH) $(COMMON_HEADERS)
222+ $(MKBUILDDIR)
212223 $(CXX) -c $(CXXFLAGS) -o $@ $<
213224
214- $(SIMOBJSPATH):%$(OBJ_EXT): %.cpp linearization/linearize.cpp $(SIMHFILESPATH) $(COMMON_HEADERS)
225+ $(SIMOBJSPATH):$(BUILDPATH)/%$(OBJ_EXT): %.cpp linearization/linearize.cpp $(SIMHFILESPATH) $(COMMON_HEADERS)
226+ $(MKBUILDDIR)
215227 $(CXX) -c -Ilinearization/ $(CXXFLAGS) -o $@ $<
216228
217- $(SIMOBJSPATHC):%$(OBJ_EXT): %.c $(SIMHFILESPATH) $(COMMON_HEADERS)
229+ $(SIMOBJSPATHC):$(BUILDPATH)/ %$(OBJ_EXT): %.c $(SIMHFILESPATH) $(COMMON_HEADERS)
218230 @echo Deps: $(SIMHFILESPATH) $(COMMON_HEADERS)
231+ $(MKBUILDDIR)
219232 $(CC) -c $(CFLAGS) -o $@ $<
220233
221- $(OPTIMIZATIONOBJSPATH):%$(OBJ_EXT): %.c $(OPTIMIZATIONHFILESPATH) $(COMMON_HEADERS)
234+ $(OPTIMIZATIONOBJSPATH):$(BUILDPATH)/%$(OBJ_EXT): %.c $(OPTIMIZATIONHFILESPATH) $(COMMON_HEADERS)
235+ $(MKBUILDDIR)
222236 $(CC) -c $(CFLAGS) -o $@ $<
223237
224- $(FMIOBJSPATH):%$(OBJ_EXT): %.c $(COMMON_HEADERS)
238+ $(FMIOBJSPATH):$(BUILDPATH)/%$(OBJ_EXT): %.c $(COMMON_HEADERS)
239+ $(MKBUILDDIR)
225240 $(CC) -c $(CFLAGS) -o $@ $<
226241
227- util/socket$(OBJ_EXT): util/socket_win.cpp util/socket_unix.cpp
242+ $(EXTERNAL_SOLVER_OBJSPATH):$(BUILDPATH)/%$(OBJ_EXT): $(builddir_inc)/c/%.c
243+ $(MKBUILDDIR)
244+ $(CC) -c $(CFLAGS) -o $@ $<
245+
246+ $(BUILDPATH)/util/socket$(OBJ_EXT): util/socket_win.cpp util/socket_unix.cpp
228247
229248bootstrap-dependencies: $(LIBRUNTIME)
230249 cp -p $(LIBRUNTIME) $(builddir_lib)
@@ -240,9 +259,17 @@ bootstrap-dependencies: $(LIBRUNTIME)
240259 cp -p $(RUNTIMEMETAGC_HEADERS) $(builddir_inc)/c/gc/
241260 cp -p $(RUNTIMEUTIL_HEADERS) $(builddir_inc)/c/util/
242261
243- install: bootstrap-dependencies $(LIBSIMULATION) $(LIBFMIRUNTIME) $(ALL_OBJS) sourcedist
262+ fmi-runtime: sourcedist
263+ $(MAKE) "$(LIBSIMULATIONFMI)" OMC_MINIMAL_RUNTIME=1 OMC_FMI_RUNTIME=1 BUILDPATH=build/fmi OMC_NUM_NONLINEAR_SYSTEMS=1 OMC_NUM_LINEAR_SYSTEMS=1 OMC_NUM_MIXED_SYSTEMS=1
264+ libSimulationRuntimeFMI.a: $(FMI_ME_OBJS_BUILDPATH)
265+ @# You have to remove the old archive first or it may contain old objects
266+ @rm -f $@
267+ $(AR) $@ $(FMI_ME_OBJS_BUILDPATH)
268+ ranlib $@
269+
270+ install: bootstrap-dependencies $(LIBSIMULATION) $(LIBFMIRUNTIME) $(ALL_OBJS) fmi-runtime
244271 # copy libraries
245- cp -p $(LIBSIMULATION) $(LIBFMIRUNTIME) $(builddir_lib)
272+ cp -p $(LIBSIMULATION) $(LIBFMIRUNTIME) $(LIBSIMULATIONFMI) $( builddir_lib)
246273 test ! -f libSimulationRuntimeC.bc || cp libSimulationRuntimeC.bc $(builddir_lib)/emcc/libSimulationRuntimeC.so
247274 test ! `uname` = Darwin || install_name_tool -change libsundials_idas.0.dylib @rpath/libsundials_idas.0.dylib $(builddir_lib)/$(LIBFMIRUNTIME)
248275 test ! `uname` = Darwin || install_name_tool -change libsundials_ida.2.dylib @rpath/libsundials_ida.2.dylib $(builddir_lib)/$(LIBFMIRUNTIME)
@@ -259,7 +286,7 @@ install: bootstrap-dependencies $(LIBSIMULATION) $(LIBFMIRUNTIME) $(ALL_OBJS) so
259286 ../fmi/export/fmi2/fmu2_model_interface.c $(builddir_inc)/c/fmi2
260287
261288clean:
262- rm -f $(ALL_PATHS_CLEAN_OBJS) fmi/*.o *.a *.so optimization/*/*.o
289+ rm -rf $(ALL_PATHS_CLEAN_OBJS) fmi/*.o *.a *.so optimization/*/*.o build/
263290 (! test -f $(EXTERNALCBUILDDIR)/Makefile) || make -C $(EXTERNALCBUILDDIR) clean
264291 (! test -f $(EXTERNALCBUILDDIR)/Makefile) || make -C $(EXTERNALCBUILDDIR) distclean
265292
@@ -269,21 +296,23 @@ sourcedist1:
269296sourcedist2:
270297 $(MAKE) -C ../fmi/export/buildproject -f $(defaultMakefileTarget)
271298
299+ # Copied files need to preserve the time-stamp or the external solvers builds
300+ # over and over again
272301sourcedist_internal:
273302 mkdir -p $(builddir_inc)/c/external_solvers external_solvers
274- cp \
303+ cp -p \
275304 $(CMINPACK_OBJS:%=$(CMINPACKDIR)/%.c) \
276305 $(LAPACK_OBJS:%=$(LAPACKDIR)/lapack/%.c) \
277306 $(BLAS_OBJS:%=$(LAPACKDIR)/blas/%.c) \
278307 $(LIBF2C_OBJS:%=$(LAPACKDIR)/libf2c/%.c) \
279308 "./external_solvers/"
280- cp \
309+ cp -p \
281310 "$(CMINPACKDIR)/minpack.h" "$(CMINPACKDIR)/cminpack.h" \
282311 "$(LAPACKDIR)/include/blaswrap.h" \
283312 "$(LAPACKDIR)/include/clapack.h" \
284313 "$(LAPACKDIR)/include/f2c.h" \
285314 "$(builddir_inc)/c/external_solvers"
286- cd $(builddir_inc)/c/ && mkdir -p $(ALL_PATHS)
287- (D=`pwd` && cd $(builddir_inc)/c/ $(FMI_ME_OBJS:%.o= && (OMCFILE=% && cp $$D/$$OMCFILE.c $$OMCFILE.c)))
315+ @ cd $(builddir_inc)/c/ && mkdir -p $(ALL_PATHS)
316+ @ (D=`pwd` && cd $(builddir_inc)/c/ $(FMI_ME_OBJS:%.o= && (OMCFILE=% && cp -p $$D/$$OMCFILE.c $$OMCFILE.c)))
288317 cp Makefile.objs $(builddir_inc)/c/
289318 rm -r ./external_solvers
0 commit comments