Skip to content

Commit bf322b6

Browse files
authored
Extract certain resources to memory and not filesystem (#1074)
1 parent 722fbf9 commit bf322b6

File tree

9 files changed

+57
-93
lines changed

9 files changed

+57
-93
lines changed

3rdParty

Submodule 3rdParty updated 282 files

CMakeLists.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,11 @@ ELSE()
124124
MESSAGE(STATUS "Using C++17 instead of Boost")
125125
ENDIF()
126126

127+
##########################
128+
# Configuring for zip/minizip
129+
set(MINIZIP_INCLUDEDIR ${PROJECT_SOURCE_DIR}/3rdParty/minizip/install/${PLATFORM_STRING}/include)
130+
set(MINIZIP_LIBRARYDIR ${PROJECT_SOURCE_DIR}/3rdParty/minizip/install/${PLATFORM_STRING}/lib)
131+
127132
##########################
128133
# Configuring for FMILibrary
129134
set(FMILibrary_ROOT ${PROJECT_SOURCE_DIR}/3rdParty/FMIL/install/${PLATFORM_STRING})
@@ -153,11 +158,6 @@ set(PUGIXML_INCLUDEDIR ${PROJECT_SOURCE_DIR}/3rdParty/PugiXml)
153158
# Configuring for CTPL
154159
set(CTPL_INCLUDEDIR ${PROJECT_SOURCE_DIR}/3rdParty/CTPL)
155160

156-
##########################
157-
# Configuring for minizip
158-
set(MINIZIP_INCLUDEDIR ${PROJECT_SOURCE_DIR}/3rdParty/zlib/install/${PLATFORM_STRING}/include)
159-
set(MINIZIP_LIBRARYDIR ${PROJECT_SOURCE_DIR}/3rdParty/zlib/install/${PLATFORM_STRING}/lib)
160-
161161
##########################
162162
# Configuring for Python
163163
find_package(PythonLibs)

Makefile

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ else
123123
CMAKE_BOOST_ROOT="-DBOOST_ROOT=$(BOOST_ROOT)"
124124
endif
125125

126-
.PHONY: OMSimulator OMSimulatorCore config-OMSimulator config-fmil config-lua config-zlib config-cvode config-kinsol config-3rdParty distclean testsuite doc doc-html doc-doxygen OMTLMSimulator OMTLMSimulatorClean RegEx pip
126+
.PHONY: OMSimulator OMSimulatorCore config-OMSimulator config-fmil config-lua config-minizip config-cvode config-kinsol config-3rdParty distclean testsuite doc doc-html doc-doxygen OMTLMSimulator OMTLMSimulatorClean RegEx pip
127127

128128
OMSimulator:
129129
@echo OS: $(detected_OS)
@@ -195,7 +195,7 @@ RegEx: 3rdParty/RegEx/OMSRegEx$(EEXT)
195195
@echo "Please checkout the 3rdParty submodule, e.g. using \"git submodule update --init 3rdParty\", and try again."
196196
@false
197197

198-
config-3rdParty: 3rdParty/README.md config-fmil config-lua config-zlib config-cvode config-kinsol config-libxml2
198+
config-3rdParty: 3rdParty/README.md config-fmil config-lua config-minizip config-cvode config-kinsol config-libxml2
199199

200200
config-OMSimulator: $(BUILD_DIR)/Makefile
201201
$(BUILD_DIR)/Makefile: RegEx CMakeLists.txt
@@ -224,23 +224,15 @@ config-lua: 3rdParty/Lua/$(INSTALL_DIR)/liblua.a
224224
@echo
225225
$(MAKE) -C 3rdParty/Lua $(LUA_EXTRA_FLAGS)
226226

227-
config-zlib: 3rdParty/zlib/$(INSTALL_DIR)/libminizip.a
228-
3rdParty/zlib/$(INSTALL_DIR)/libzlibstatic.a: 3rdParty/zlib/$(BUILD_DIR)/zlib/Makefile
229-
$(MAKE) -C 3rdParty/zlib/$(BUILD_DIR)/zlib/ install
230-
3rdParty/zlib/$(INSTALL_DIR)/libminizip.a: 3rdParty/zlib/$(INSTALL_DIR)/libzlibstatic.a 3rdParty/zlib/$(BUILD_DIR)/minizip/Makefile
231-
$(MAKE) -C 3rdParty/zlib/$(BUILD_DIR)/minizip/ install
232-
3rdParty/zlib/$(BUILD_DIR)/zlib/Makefile:
227+
config-minizip: 3rdParty/minizip/$(INSTALL_DIR)/libminizip.a
228+
3rdParty/minizip/$(INSTALL_DIR)/libminizip.a: 3rdParty/minizip/$(BUILD_DIR)/Makefile
229+
$(MAKE) -C 3rdParty/minizip/$(BUILD_DIR)/ install
230+
3rdParty/minizip/$(BUILD_DIR)/Makefile:
233231
@echo
234-
@echo "# config zlib library"
232+
@echo "# config minizip"
235233
@echo
236-
$(MKDIR) 3rdParty/zlib/$(BUILD_DIR)/zlib
237-
cd 3rdParty/zlib/$(BUILD_DIR)/zlib && $(CMAKE) $(CMAKE_TARGET) ../../../zlib-1.2.11 -DCMAKE_INSTALL_PREFIX=../../../$(INSTALL_DIR)
238-
3rdParty/zlib/$(BUILD_DIR)/minizip/Makefile:
239-
@echo
240-
@echo "# config zlib minizip"
241-
@echo
242-
$(MKDIR) 3rdParty/zlib/$(BUILD_DIR)/minizip
243-
cd 3rdParty/zlib/$(BUILD_DIR)/minizip && $(CMAKE) $(CMAKE_TARGET) ../../../minizip -DCMAKE_INSTALL_PREFIX=../../../$(INSTALL_DIR)
234+
$(MKDIR) 3rdParty/minizip/$(BUILD_DIR)/
235+
cd 3rdParty/minizip/$(BUILD_DIR)/ && $(CMAKE) $(CMAKE_TARGET) ../../src -DCMAKE_INSTALL_PREFIX=../../$(INSTALL_DIR)
244236

245237
config-cvode: 3rdParty/cvode/$(INSTALL_DIR)/lib/libsundials_cvode.a
246238
3rdParty/cvode/$(INSTALL_DIR)/lib/libsundials_cvode.a: 3rdParty/cvode/$(BUILD_DIR)/Makefile

configWinVS.bat

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ IF NOT EXIST install\\win\\lib MKDIR install\\win\\lib
6666
IF ["%TARGET%"]==["clean"] GOTO clean
6767
IF ["%TARGET%"]==["fmil"] GOTO fmil
6868
IF ["%TARGET%"]==["lua"] GOTO lua
69-
IF ["%TARGET%"]==["zlib"] GOTO zlib
69+
IF ["%TARGET%"]==["minizip"] GOTO minizip
7070
IF ["%TARGET%"]==["cvode"] GOTO cvode
7171
IF ["%TARGET%"]==["kinsol"] GOTO kinsol
7272
IF ["%TARGET%"]==["pthread"] GOTO pthread
@@ -117,29 +117,21 @@ EXIT /B 0
117117
:: -- build Lua -----------------------
118118

119119

120-
:: -- build zlib ----------------------
121-
:zlib
122-
ECHO # config zlib
123-
IF EXIST "3rdParty\zlib\build\win\" RMDIR /S /Q 3rdParty\zlib\build\win
124-
IF EXIST "3rdParty\zlib\install\win\" RMDIR /S /Q 3rdParty\zlib\install\win
125-
MKDIR 3rdParty\zlib\build\win\zlib
126-
CD 3rdParty\zlib\build\win\zlib
127-
cmake.exe -G %OMS_VS_VERSION% ..\..\..\zlib-1.2.11\ -DCMAKE_INSTALL_PREFIX=..\..\..\install\win
128-
IF NOT ["%ERRORLEVEL%"]==["0"] GOTO fail
129-
CD ..\..\..\..\..
130-
MKDIR 3rdParty\zlib\build\win\minizip
131-
CD 3rdParty\zlib\build\win\minizip
132-
cmake.exe -G %OMS_VS_VERSION% ..\..\..\minizip\ -DCMAKE_INSTALL_PREFIX=..\..\..\install\win
133-
IF NOT ["%ERRORLEVEL%"]==["0"] GOTO fail
134-
CD ..\..\..\..\..
135-
ECHO # build zlib
136-
msbuild.exe "3rdParty\zlib\build\win\zlib\INSTALL.vcxproj" /t:Build /p:configuration=Release /maxcpucount
120+
:: -- build minizip ----------------------
121+
:minizip
122+
ECHO # config minizip
123+
IF EXIST "3rdParty\minizip\build\win\" RMDIR /S /Q 3rdParty\minizip\build\win
124+
IF EXIST "3rdParty\minizip\install\win\" RMDIR /S /Q 3rdParty\minizip\install\win
125+
MKDIR 3rdParty\minizip\build\win
126+
CD 3rdParty\minizip\build\win
127+
cmake.exe -G %OMS_VS_VERSION% ..\..\src\ -DCMAKE_INSTALL_PREFIX=..\..\install\win
137128
IF NOT ["%ERRORLEVEL%"]==["0"] GOTO fail
129+
CD ..\..\..\..
138130
ECHO # build minizip
139-
msbuild.exe "3rdParty\zlib\build\win\minizip\INSTALL.vcxproj" /t:Build /p:configuration=Release /maxcpucount
131+
msbuild.exe "3rdParty\minizip\build\win\INSTALL.vcxproj" /t:Build /p:configuration=Release /maxcpucount
140132
IF NOT ["%ERRORLEVEL%"]==["0"] GOTO fail
141133
EXIT /B 0
142-
:: -- build zlib ----------------------
134+
:: -- build minizip ----------------------
143135

144136

145137
:: -- config cvode --------------------
@@ -244,7 +236,7 @@ START /B /WAIT CMD /C "%~0 %OMS_VS_TARGET% fmil"
244236
IF NOT ["%ERRORLEVEL%"]==["0"] GOTO fail
245237
START /B /WAIT CMD /C "%~0 %OMS_VS_TARGET% lua"
246238
IF NOT ["%ERRORLEVEL%"]==["0"] GOTO fail
247-
START /B /WAIT CMD /C "%~0 %OMS_VS_TARGET% zlib"
239+
START /B /WAIT CMD /C "%~0 %OMS_VS_TARGET% minizip"
248240
IF NOT ["%ERRORLEVEL%"]==["0"] GOTO fail
249241
START /B /WAIT CMD /C "%~0 %OMS_VS_TARGET% cvode"
250242
IF NOT ["%ERRORLEVEL%"]==["0"] GOTO fail

src/OMSimulator/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ set(CMAKE_INSTALL_RPATH "$ORIGIN/../lib/${HOST_SHORT}:$ORIGIN/")
55
include_directories(../OMSimulatorLib)
66

77
link_directories(
8+
${MINIZIP_LIBRARYDIR}
89
${FMILibrary_LIBRARYDIR}
910
${LUALibrary_LIBRARYDIR}
1011
${CVODELibrary_LIBRARYDIR}
1112
${KINSOLLibrary_LIBRARYDIR}
12-
${Boost_LIBRARY_DIRS}
13-
${MINIZIP_LIBRARYDIR})
13+
${Boost_LIBRARY_DIRS})
1414
IF (OMTLM)
1515
link_directories(${OMTLMSIMULATORLIB_LIBRARYDIR})
1616
ENDIF ()

src/OMSimulatorLib/CMakeLists.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -109,13 +109,13 @@ include_directories(
109109
../../3rdParty/RegEx
110110
../OMSimulatorLib
111111
../OMSimulatorLua
112+
${MINIZIP_INCLUDEDIR}
112113
${Boost_INCLUDE_DIRS}
113114
${CTPL_INCLUDEDIR}
114115
${CVODELibrary_INCLUDEDIR}
115116
${FMILibrary_INCLUDEDIR}
116117
${KINSOLLibrary_INCLUDEDIR}
117118
${LUALibrary_INCLUDEDIR}
118-
${MINIZIP_INCLUDEDIR}
119119
${OMTLM_SOURCES}
120120
${PUGIXML_INCLUDEDIR})
121121
IF (OMTLM)
@@ -126,12 +126,12 @@ IF (OMTLM)
126126
ENDIF (OMTLM)
127127

128128
link_directories(
129+
${MINIZIP_LIBRARYDIR}
129130
${FMILibrary_LIBRARYDIR}
130131
${LUALibrary_LIBRARYDIR}
131132
${CVODELibrary_LIBRARYDIR}
132133
${KINSOLLibrary_LIBRARYDIR}
133-
${Boost_LIBRARY_DIRS}
134-
${MINIZIP_LIBRARYDIR})
134+
${Boost_LIBRARY_DIRS})
135135
IF (OMTLM)
136136
link_directories(${OMTLMSIMULATORLIB_LIBRARYDIR})
137137
ENDIF ()
@@ -156,8 +156,8 @@ IF (WIN32 AND MSVC)
156156
add_definitions(-DBOOST_ALL_DYN_LINK)
157157
ENDIF ()
158158

159-
target_link_libraries(OMSimulatorLib fmilib sundials_kinsol sundials_cvode sundials_nvecserial minizip ${LIB_ATOMIC} ${Boost_LIBRARIES} ${OMTLM_LINKFLAGS} ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${CPP_FS_LIBS})
160-
target_link_libraries(OMSimulatorLib_static fmilib sundials_kinsol sundials_cvode sundials_nvecserial minizip lua ${CMAKE_DL_LIBS} ${LIB_ATOMIC} ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} ${OMTLM_LINKFLAGS} ${CPP_FS_LIBS})
159+
target_link_libraries(OMSimulatorLib minizip fmilib sundials_kinsol sundials_cvode sundials_nvecserial ${LIB_ATOMIC} ${Boost_LIBRARIES} ${OMTLM_LINKFLAGS} ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${CPP_FS_LIBS})
160+
target_link_libraries(OMSimulatorLib_static minizip fmilib sundials_kinsol sundials_cvode sundials_nvecserial lua ${CMAKE_DL_LIBS} ${LIB_ATOMIC} ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} ${OMTLM_LINKFLAGS} ${CPP_FS_LIBS})
161161

162162
IF (WIN32 AND MINGW)
163163
target_link_libraries(OMSimulatorLib shlwapi)

src/OMSimulatorLib/OMSimulator.cpp

Lines changed: 6 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1596,34 +1596,14 @@ oms_status_enu_t oms_extractFMIKind(const char* filename, oms_fmi_kind_enu_t* ki
15961596
if (!kind)
15971597
return logError("Invalid argument \"kind=NULL\"");
15981598

1599-
// Usage: miniunz [-e] [-x] [-v] [-l] [-o] [-p password] file.zip [file_to_extr.] [-d extractdir]
1600-
// -e Extract without pathname (junk paths)
1601-
// -x Extract with pathname
1602-
// -v list files
1603-
// -l list files
1604-
// -d directory to extract into
1605-
// -o overwrite files without prompting
1606-
// -p extract crypted file using password
1607-
1608-
std::string cd = oms::Scope::GetInstance().getWorkingDirectory();
1609-
int argc = 6;
1610-
char **argv = new char*[argc];
1611-
int i=0;
1612-
argv[i++] = (char*)"miniunz";
1613-
argv[i++] = (char*)"-xo";
1614-
argv[i++] = (char*)filename;
1615-
argv[i++] = (char*)"modelDescription.xml";
1616-
argv[i++] = (char*)"-d";
1617-
argv[i++] = (char*)oms::Scope::GetInstance().getTempDirectory().c_str();
1618-
int status = ::miniunz(argc, argv);
1619-
delete[] argv;
1620-
oms::Scope::GetInstance().setWorkingDirectory(cd);
1621-
1622-
if (status != 0)
1623-
return logError("failed to extract modelDescription.xml from \"" + std::string(filename) + "\"");
1599+
const char* modelDescription = ::miniunz_onefile_to_memory(filename, "modelDescription.xml");
1600+
if (!modelDescription)
1601+
return logError("failed to extract \"modelDescription.xml\" from \"" + std::string(filename) + "\"");
16241602

16251603
oms::Snapshot snapshot;
1626-
if (oms_status_ok != snapshot.importResourceFile("modelDescription.xml", oms::Scope::GetInstance().getTempDirectory()))
1604+
oms_status_enu_t status = snapshot.importResourceMemory("modelDescription.xml", modelDescription);
1605+
::miniunz_free(modelDescription);
1606+
if (oms_status_ok != status)
16271607
return logError("Failed to import");
16281608
const pugi::xml_node node = snapshot.getResourceNode("modelDescription.xml");
16291609

src/OMSimulatorLib/Scope.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -141,12 +141,10 @@ oms_status_enu_t oms::Scope::exportModel(const oms::ComRef& cref, const std::str
141141
return model->exportToFile(filename);
142142
}
143143

144-
oms_status_enu_t oms::Scope::miniunz(const std::string& filename, const std::string& extractdir, bool systemStructure)
144+
oms_status_enu_t oms::Scope::miniunz(const std::string& filename, const std::string& extractdir)
145145
{
146-
// This function is used to extract (1) complete SSP/FMU files or to extract
147-
// (2) the SystemStructure.ssd from an SSP file:
148-
// (1) miniunz -xo <filename> -d <extractdir>
149-
// (2) miniunz -xo <filename> SystemStructure.ssd -d <extractdir>
146+
// This function is used to extract complete SSP/FMU files:
147+
// miniunz -xo <filename> -d <extractdir>
150148

151149
// Usage: miniunz [-e] [-x] [-v] [-l] [-o] [-p password] file.zip [file_to_extr.] [-d extractdir]
152150
// -e Extract without pathname (junk paths)
@@ -159,14 +157,12 @@ oms_status_enu_t oms::Scope::miniunz(const std::string& filename, const std::str
159157

160158
std::string cd = Scope::GetInstance().getWorkingDirectory();
161159

162-
int argc = systemStructure ? 6 : 5;
160+
int argc = 5;
163161
char **argv = new char*[argc];
164162
int i=0;
165163
argv[i++] = (char*)"miniunz";
166164
argv[i++] = (char*)"-xo";
167165
argv[i++] = (char*)filename.c_str();
168-
if (systemStructure)
169-
argv[i++] = (char*)"SystemStructure.ssd";
170166
argv[i++] = (char*)"-d";
171167
argv[i++] = (char*)extractdir.c_str();
172168
int status = ::miniunz(argc, argv);
@@ -195,13 +191,17 @@ oms_status_enu_t oms::Scope::importModel(const std::string& filename, char** _cr
195191
if (extension != ".ssp")
196192
return logError("filename extension must be \".ssp\"; no other formats are supported");
197193

198-
// extract SystemStructure.ssd to temp
199-
filesystem::path temp_root(getTempDirectory());
200-
if (oms_status_ok != oms::Scope::miniunz(filename, temp_root.string(), true))
201-
return logError("failed to extract \"SystemStructure.ssd\" from \"" + filename + "\"");
194+
// extract SystemStructure.ssd to memory
195+
const char* systemStructure = ::miniunz_onefile_to_memory(filename.c_str(), "SystemStructure.ssd");
196+
if (!systemStructure)
197+
return logError("failed to extract \"SystemStructure.ssd\" from \"" + std::string(filename) + "\"");
202198

203199
Snapshot snapshot;
204-
snapshot.importResourceFile("SystemStructure.ssd", temp_root);
200+
oms_status_enu_t status = snapshot.importResourceMemory("SystemStructure.ssd", systemStructure);
201+
::miniunz_free(systemStructure);
202+
if (oms_status_ok != status)
203+
return logError("Failed to import");
204+
205205
const pugi::xml_node node = snapshot.getResourceNode("SystemStructure.ssd");
206206
if (!node)
207207
return logError("failed to load \"SystemStructure.ssd\"");
@@ -217,7 +217,7 @@ oms_status_enu_t oms::Scope::importModel(const std::string& filename, char** _cr
217217
logWarning("Unknown SSD version: " + ssdVersion);
218218

219219
// extract the ssp file
220-
oms::Scope::miniunz(filename, model->getTempDirectory(), false);
220+
oms::Scope::miniunz(filename, model->getTempDirectory());
221221

222222
std::string cd = Scope::GetInstance().getWorkingDirectory();
223223
Scope::GetInstance().setWorkingDirectory(model->getTempDirectory());
@@ -233,7 +233,7 @@ oms_status_enu_t oms::Scope::importModel(const std::string& filename, char** _cr
233233

234234
// snapshot.debugPrintAll();
235235

236-
oms_status_enu_t status = model->importFromSnapshot(snapshot);
236+
status = model->importFromSnapshot(snapshot);
237237
model->copyResources(old_copyResources);
238238

239239
Scope::GetInstance().setWorkingDirectory(cd);

src/OMSimulatorLib/Scope.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ namespace oms
7777
std::string getWorkingDirectory();
7878

7979
protected:
80-
static oms_status_enu_t miniunz(const std::string& filename, const std::string& extractdir, bool systemStructure);
80+
static oms_status_enu_t miniunz(const std::string& filename, const std::string& extractdir);
8181

8282
private:
8383
std::vector<Model*> models; ///< last element is always NULL

0 commit comments

Comments
 (0)