Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
90273b5
Switch to CMake in deb packaging
peterNordin Nov 9, 2021
784864a
Add missing doxygen/graphviz to deb control files
peterNordin Aug 29, 2023
19a7764
Reuse existing clone of code to avoid redownload
peterNordin Aug 29, 2023
671a498
Optionally use cache directory for dependency downloads
peterNordin Aug 29, 2023
548dd9e
Use cache dir for downloads, and keep temporary stage dir
peterNordin Aug 29, 2023
af6ebfc
Adjust cmake policys for older CMake support
peterNordin Aug 29, 2023
b32a547
Fix compatibility with older cmake
peterNordin Aug 29, 2023
e4a74c4
Add missing ARCHIVE destinations for static libs
peterNordin Aug 29, 2023
190061d
Prefer persistent cache dir in workspace
peterNordin Aug 30, 2023
f30fdfd
Fix msgpackc workaround
peterNordin Aug 29, 2023
e64e378
Remove old minimum cmake version, let main file decide
peterNordin Oct 16, 2024
b6755f2
Remove experimental Warning
peterNordin Nov 5, 2024
fdb5816
Update fmi4c and use the new cmake configuration
peterNordin Nov 5, 2024
9fe2663
Cleanup Linux build scripts
peterNordin Nov 7, 2024
22e2876
Update setupDCPlib and use cmake prefix path
peterNordin Dec 3, 2024
dd7a19a
Simplify CMake DCP lookup
peterNordin Dec 4, 2024
edd61ef
Install dcp dependencies zlib, libzip and xerces
peterNordin Dec 4, 2024
5c3dd32
Update gitignore
peterNordin Dec 5, 2024
858074f
Cleanup hopsanremote CMake files
peterNordin Dec 9, 2024
1973340
Switch appveyor MinGW build to CMake
peterNordin Dec 11, 2024
0d2fe15
Update to 2019 appveyor image
peterNordin Dec 21, 2024
4bae645
Upgrade build server to Windows 2025
robbr48 Aug 12, 2025
a4e852a
Update qwt build patch
peterNordin Mar 20, 2026
f33fcaf
Add zlib and lib zip to HDF5 build
peterNordin Mar 20, 2026
6f3bd7a
Update xerces build and import on Windows
peterNordin Mar 20, 2026
b57892a
Update discount build for msvc
peterNordin Mar 20, 2026
66d3c9d
Use /bigobj for MSVC in default library
peterNordin Mar 20, 2026
80b44b9
Update fmi4c with new zlib with new cmake support
peterNordin Mar 21, 2026
8746e4b
Cleanup, GUI does not depend on Xerces and zlib directly
peterNordin Mar 21, 2026
9599aa9
Downgrade appveyor settings to 2017
peterNordin Mar 22, 2026
5dfffe6
Set DCMAKE_POLICY_VERSION_MINIMUM=3.5 for dependencies
peterNordin Mar 22, 2026
918331b
Adjust buildorder
peterNordin Mar 22, 2026
e2fda0d
Remove --fresh for older cmake
peterNordin Mar 24, 2026
31c49f6
Older cmake can not handle empty string argument
peterNordin Mar 23, 2026
2574230
Remove obsolete buster config
peterNordin Mar 27, 2026
ddfec17
Require python3
peterNordin Mar 27, 2026
0ea9b31
Re-enable build with older qwt
peterNordin Mar 27, 2026
4516b20
replace plucky with questing
peterNordin Mar 27, 2026
4feb94c
Add missing header for new gcc
peterNordin Mar 27, 2026
f6ac475
Adjust build order and add local discount build
peterNordin Mar 27, 2026
8e78c9a
Define USEWEBENGINE
peterNordin Mar 27, 2026
bde8a1f
Update windowsRelease script to use cmake and python 3
peterNordin Mar 29, 2026
87999a8
Try fix cache variable
peterNordin Apr 19, 2026
1af8d54
Fix development checkout, depth is problematic
peterNordin May 3, 2026
0554264
Additional improvements to clone step
peterNordin May 3, 2026
a7bc403
Optionally link qtwebkit and install files
peterNordin May 11, 2026
bd7973a
Update ssp4c build for msvc and switch to release for mingw
peterNordin Jun 18, 2026
16928e1
Fix command checks
peterNordin Jun 18, 2026
4f1418c
Use windows 2022 image to keep using VS 2022
peterNordin Jun 18, 2026
0630553
Update ssp4c with various fixes
peterNordin Jun 18, 2026
b786047
Force lib dir name for libs in ssp4c
peterNordin Jun 18, 2026
7e1c88e
Use cmake configuration package for ssp4c
peterNordin Jun 19, 2026
ccdef1a
Fix and cleanup ssp4c related forward declarations
peterNordin Jun 20, 2026
986e62c
Add ssp4c and tar.xz to gitignore
peterNordin Jun 20, 2026
b0973a9
Use explicit target name, it makes cmake easier to read
peterNordin Jun 20, 2026
b922b32
Enable multi-core build on MSVC for most targets
peterNordin Jun 20, 2026
0c3995e
Add ssp4c build to all deb packages
peterNordin Jun 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 14 additions & 11 deletions .appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ image:
- Visual Studio 2017
environment:
HOPSAN_BUILD_SCRIPT_NOPAUSE: 1
HOPSAN_BUILD_QT_HOME: C:\Qt\5.12.6\mingw73_64
HOPSAN_BUILD_QT_HOME: C:\Qt\5.13.2\mingw73_64
HOPSAN_BUILD_MINGW_HOME: C:\mingw-w64\x86_64-7.3.0-posix-seh-rt_v5-rev0\mingw64
platform: x64
configuration: Release
Expand All @@ -16,12 +16,12 @@ build_script:
- set PATH=%PATH:C:\Program Files\Git\usr\bin;=%
- PATH
- cd dependencies
- setupDiscount.bat
- setupFmi4c.bat
- setupXerces.bat
- setupZlib.bat
- setupLibzip.bat
- setupXerces.bat
- setupDCPLib.bat
- setupDiscount.bat
- setupFmi4c.bat
# - setupHDF5.bat (takes to long to build)
- setupKatex.bat
- setupTclap.bat
Expand All @@ -31,12 +31,15 @@ build_script:
- setupSsp4c.bat
- call setHopsanBuildPaths.bat
- cd ..
- mkdir build
- cd build
- qmake.exe ..\HopsanNG.pro -r -spec win32-g++ CONFIG+=release
- cd ..
- mingw32-make.exe -j6 -C build
- cmake -G"MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install_dir -Bbuild_dir -S.
- cmake --build build_dir --config Release --parallel 6
- cmake --build build_dir --config Release --parallel 6 --target install
- cd install_dir
- dir bin
- cd ..
test_script:
- runUnitTests.bat
- runValidationTests.bat
- cd build_dir
- ctest -C Release --output-on-failure --parallel 4
- cd ..
# - set PATH=%CD%\install\bin;%PATH%
# - runValidationTests.bat TODO Fix this
16 changes: 8 additions & 8 deletions .github/workflows/ci-build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: ghactions-ci-build
on: [pull_request]

jobs:
cmake-msvc2019:
cmake-msvc2022:
timeout-minutes: 30
runs-on: windows-2025
runs-on: windows-2022
env:
HOPSAN_BUILD_SCRIPT_NOPAUSE: 1
HOPSAN_BUILD_CMAKE_GENERATOR: '"Visual Studio 17 2022"'
Expand Down Expand Up @@ -45,13 +45,13 @@ jobs:
working-directory: dependencies
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" amd64
call setupDiscount.bat
call setupTclap.bat
call setupFmi4c.bat
call setupZlib.bat
call setupLibzip.bat
call setupXerces.bat
call setupDCPLib.bat
call setupDiscount.bat
call setupFmi4c.bat
call setupTclap.bat
call setupQwt.bat
call setupSsp4c.bat

Expand Down Expand Up @@ -101,12 +101,12 @@ jobs:
shell: bash
working-directory: dependencies
run: |
./setupDiscount.sh
./setupTclap.sh
./setupFmi4c.sh
./setupLibzip.sh
./setupXerces.sh
./setupDCPLib.sh
./setupDiscount.sh
./setupFmi4c.sh
./setupTclap.sh
./setupQwt.sh
./setupSsp4c.sh

Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
.vs/
bin/
HopsanNG_bd/
build/
output64/
output/
output_deb/
Expand Down
28 changes: 15 additions & 13 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
cmake_minimum_required(VERSION 3.0)
cmake_minimum_required(VERSION 3.10)
project(Hopsan)

cmake_policy(SET CMP0054 NEW)
cmake_policy(SET CMP0079 NEW)
cmake_policy(SET CMP0057 NEW)
if (POLICY CMP0079)
cmake_policy(SET CMP0079 NEW)
endif()

set(HOPSANCORE_INSTALL_DST "HopsanCore")
message(WARNING "Hopsan CMake support is still experimental, but should be working for for GCC / MinGW and limited MSVC build")
set(HOPSANCORE_INSTALL_DST "HopsanCore" CACHE STRING "")

include(CheckCXXCompilerFlag)
if (MINGW)
Expand Down Expand Up @@ -77,7 +79,7 @@ if (WIN32)

if (MINGW)
file(TO_CMAKE_PATH "$ENV{mingw_path}" mingw_home_bin)
if (EXISTS ${mingw_path})
if (EXISTS ${mingw_home_bin})
message(STATUS "Installing from MinGW directory: ${mingw_home_bin}")

install(FILES ${mingw_home_bin}/libgcc_s_seh-1.dll
Expand All @@ -87,14 +89,14 @@ if (WIN32)

# Qt binaries that are only part of the mingw build
if (EXISTS ${qt_home_bin})
install(FILES ${qt_home_bin}/Qt5WebKit.dll
${qt_home_bin}/Qt5WebKitWidgets.dll
${qt_home_bin}/libicuin56.dll
${qt_home_bin}/libicuuc56.dll
${qt_home_bin}/libicudt56.dll
${qt_home_bin}/libeay32.dll
${qt_home_bin}/ssleay32.dll
DESTINATION bin)
install_files_if_they_exist(bin
${qt_home_bin}/Qt5WebKit.dll
${qt_home_bin}/Qt5WebKitWidgets.dll
${qt_home_bin}/libicuin56.dll
${qt_home_bin}/libicuuc56.dll
${qt_home_bin}/libicudt56.dll
${qt_home_bin}/libeay32.dll
${qt_home_bin}/ssleay32.dll)
endif()
else()
message(WARNING "Env variable mingw_path not set, not installing mingw binaries")
Expand Down
7 changes: 6 additions & 1 deletion HopsanCLI/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.0)

project(HopsanCLI)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_DEBUG_POSTFIX _d)
Expand All @@ -9,6 +9,11 @@ file(GLOB_RECURSE hopsancli_srcfiles *.cpp *.h *.hpp)

add_executable(hopsancli ${hopsancli_srcfiles})

if(MSVC)
# Enable multi-core build with MSVC
target_compile_options(hopsancli PRIVATE "/MP")
endif()

target_include_directories(hopsancli PRIVATE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../HopsanCore/dependencies/rapidxml>
Expand Down
14 changes: 11 additions & 3 deletions HopsanCore/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
cmake_minimum_required(VERSION 3.1)
project(HopsanCore)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_DEBUG_POSTFIX _d)
Expand All @@ -7,7 +6,7 @@ if(WIN32)
endif()
find_package(Threads)

set(HOPSANCORE_INSTALL_DST "" CACHE STRING "Hopsan source code installation relative CMAKE_INSTALL_PREFIX ")
set(HOPSANCORE_INSTALL_DST "" CACHE STRING "Hopsan source code installation relative CMAKE_INSTALL_PREFIX")

# Include dependencies functions
include(dependencies/libnumhop.cmake)
Expand All @@ -26,6 +25,11 @@ add_indexingcsvparser_src(hopsancore)
add_rapidxml_src(hopsancore)
add_sundials_src(hopsancore)

if(MSVC)
# Enable multi-core build with MSVC
target_compile_options(hopsancore PRIVATE "/MP")
endif()

# Set compiler definitions
if(WIN32)
target_compile_definitions(hopsancore PRIVATE HOPSANCORE_DLLEXPORT)
Expand All @@ -38,7 +42,11 @@ if (MSVC)
# Undefine odd min and max macros to enable use of std::min, std::max, make it public so all projects get this define
target_compile_definitions(hopsancore PUBLIC NOMINMAX)
endif()
target_compile_definitions(hopsancore PRIVATE HOPSANCORE_WRITELOG)
if (NOT MSVC)
# Do not enable core logging with msvc
# TODO Investigate why its not working, comment from release script was "so that MSVC dlls do not try to access the log file"
target_compile_definitions(hopsancore PRIVATE HOPSANCORE_WRITELOG)
endif()
if(CMAKE_BUILD_TYPE MATCHES Debug)
target_compile_definitions(hopsancore PUBLIC HOPSAN_BUILD_TYPE_DEBUG)
else()
Expand Down
51 changes: 31 additions & 20 deletions HopsanGUI/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.0)

project(HopsanGUI)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_DEBUG_POSTFIX _d)
Expand All @@ -7,9 +7,12 @@ if(WIN32)
endif()

if(WIN32)
find_package(Qt5 COMPONENTS Core Gui Widgets Xml Svg Network Test PrintSupport REQUIRED)
find_package(Qt5 COMPONENTS Core Gui Widgets Xml Svg Network Test PrintSupport REQUIRED)
if(MINGW)
find_package(Qt5 OPTIONAL_COMPONENTS WebKitWidgets)
endif()
else()
find_package(Qt5 COMPONENTS Core Gui Widgets Xml Svg Network Test PrintSupport WebEngineWidgets REQUIRED)
find_package(Qt5 COMPONENTS Core Gui Widgets Xml Svg Network Test PrintSupport WebEngineWidgets REQUIRED)
endif()
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
Expand All @@ -18,38 +21,46 @@ include(${CMAKE_CURRENT_LIST_DIR}/../helpers.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/../dependencies/qwt.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/../dependencies/discount.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/../dependencies/katex.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/../dependencies/libzip.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/../dependencies/xerces.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/../dependencies/ssp4c.cmake)

set(target_name hopsangui)

file(GLOB_RECURSE srcfiles *.cpp *.h *.hpp *.qrc)
add_executable(${target_name} ${srcfiles})
add_executable(hopsangui ${srcfiles})

target_include_directories(${target_name} PRIVATE
if(MSVC)
# Enable multi-core build with MSVC
target_compile_options(hopsangui PRIVATE "/MP")
endif()

target_include_directories(hopsangui PRIVATE
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/../Utilities>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../hopsandcp/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../dependencies/libzip/include>)
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/../Utilities>)

target_compile_definitions(${target_name} PRIVATE _USE_MATH_DEFINES)
target_compile_definitions(hopsangui PRIVATE _USE_MATH_DEFINES)
target_compile_definitions(hopsangui PRIVATE DEVELOPMENT)
if(NOT CMAKE_BUILD_TYPE MATCHES Debug)
# Silence qDebug() for all non Debug configurations
target_compile_definitions(${target_name} PRIVATE QT_NO_DEBUG_OUTPUT)
target_compile_definitions(hopsangui PRIVATE QT_NO_DEBUG_OUTPUT)
endif()

target_link_libraries(${target_name} Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Xml Qt5::Svg Qt5::Network Qt5::Test Qt5::PrintSupport
qwt hopsancore hopsangeneratorgui symhop ops hopsandcp xercesc ssp4c )
target_link_libraries(hopsangui Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Xml Qt5::Svg Qt5::Network Qt5::Test Qt5::PrintSupport
qwt hopsancore hopsangeneratorgui symhop ops hopsandcp ssp4c::ssp4c)
if(UNIX)
target_link_libraries(${target_name} Qt5::WebEngineWidgets)
message(STATUS "Linking with Qt5::WebEngineWidgets")
target_link_libraries(hopsangui Qt5::WebEngineWidgets)
target_compile_definitions(hopsangui PRIVATE USEWEBENGINE)
endif()
# If Qt5WebKitWidgets was found, link it
if (Qt5WebKitWidgets_DIR)
message(STATUS "Linking with Qt5::WebKitWidgets")
target_link_libraries(hopsangui Qt5::WebKitWidgets)
target_compile_definitions(hopsangui PRIVATE USEWEBKIT)
endif()

target_link_optional_libraries(${target_name} libhopsanremoteclient hopsanhdf5exporter discount katex)
target_link_optional_libraries(hopsangui libhopsanremoteclient hopsanhdf5exporter discount katex)

set_target_properties(${target_name} PROPERTIES INSTALL_RPATH "\$ORIGIN/../lib")
set_target_properties(hopsangui PROPERTIES INSTALL_RPATH "\$ORIGIN/../lib")

install(TARGETS ${target_name}
install(TARGETS hopsangui
RUNTIME DESTINATION bin
)

Expand Down
52 changes: 52 additions & 0 deletions HopsanGUI/PlotArea.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -273,12 +273,20 @@ PlotArea::PlotArea(PlotTab *pParentPlotTab)
// Legend Stuff
mpRightPlotLegend = new PlotLegend(QwtPlot::yRight);
mpRightPlotLegend->attach(mpQwtPlot);
#if QWT_VERSION >= 0x060300
mpRightPlotLegend->setAlignmentInCanvas(Qt::AlignRight | Qt::AlignTop);
#else
mpRightPlotLegend->setAlignment(Qt::AlignRight | Qt::AlignTop);
#endif
mpRightPlotLegend->setZ(LegendBelowCurveZOrderType);

mpLeftPlotLegend = new PlotLegend(QwtPlot::yLeft);
mpLeftPlotLegend->attach(mpQwtPlot);
#if QWT_VERSION >= 0x060300
mpLeftPlotLegend->setAlignmentInCanvas(Qt::AlignLeft | Qt::AlignTop);
#else
mpLeftPlotLegend->setAlignment(Qt::AlignLeft | Qt::AlignTop);
#endif
mpLeftPlotLegend->setZ(LegendBelowCurveZOrderType);

constructLegendSettingsDialog();
Expand Down Expand Up @@ -1869,6 +1877,7 @@ void PlotArea::applyLegendSettings()
int alignL = mpLegendLPosition->currentIndex();
int alignR = mpLegendRPosition->currentIndex();

#if QWT_VERSION >= 0x060300
if ( alignL == 0 )
{
mpLeftPlotLegend->setAlignmentInCanvas(Qt::AlignTop | Qt::AlignLeft);
Expand All @@ -1894,6 +1903,33 @@ void PlotArea::applyLegendSettings()
{
mpRightPlotLegend->setAlignmentInCanvas(Qt::AlignVCenter | Qt::AlignRight);
}
#else
if ( alignL == 0 )
{
mpLeftPlotLegend->setAlignment(Qt::AlignTop | Qt::AlignLeft);
}
else if ( alignL == 1 )
{
mpLeftPlotLegend->setAlignment(Qt::AlignBottom | Qt::AlignLeft);
}
else
{
mpLeftPlotLegend->setAlignment(Qt::AlignVCenter | Qt::AlignLeft);
}

if ( alignR == 0 )
{
mpRightPlotLegend->setAlignment(Qt::AlignTop | Qt::AlignRight);
}
else if ( alignR == 1 )
{
mpRightPlotLegend->setAlignment(Qt::AlignBottom | Qt::AlignRight);
}
else
{
mpRightPlotLegend->setAlignment(Qt::AlignVCenter | Qt::AlignRight);
}
#endif

QColor bgColor(mpLegendBgColor->currentText());
//bgColor.setAlpha(128);
Expand Down Expand Up @@ -2716,6 +2752,7 @@ void PlotArea::setSmartYAxisLimits(const QwtPlot::Axis axisId, QwtInterval axisL
void PlotArea::calculateLegendBufferOffsets(const QwtPlot::Axis axisId, double &rBottomOffset, double &rTopOffset)
{
double leftLegendHeight=0, rightLegendHeight=0;
#if QWT_VERSION >= 0x060300
if (mpLeftPlotLegend->isVisible())
{
leftLegendHeight = mpLeftPlotLegend->geometry(mpQwtPlot->geometry()).height() + mpLeftPlotLegend->offsetInCanvas(Qt::Vertical);
Expand All @@ -2724,11 +2761,26 @@ void PlotArea::calculateLegendBufferOffsets(const QwtPlot::Axis axisId, double &
{
rightLegendHeight = mpRightPlotLegend->geometry(mpQwtPlot->geometry()).height() + mpRightPlotLegend->offsetInCanvas(Qt::Vertical);
}
#else
if (mpLeftPlotLegend->isVisible())
{
leftLegendHeight = mpLeftPlotLegend->geometry(mpQwtPlot->geometry()).height() + mpLeftPlotLegend->borderDistance();
}
if (mpRightPlotLegend->isVisible())
{
rightLegendHeight = mpRightPlotLegend->geometry(mpQwtPlot->geometry()).height() + mpRightPlotLegend->borderDistance();
}
#endif
//! @todo even if a legend is empty it seems to be visible and the borderDistance will be added, this causes unnecessary space when on top or bottom (and the other legend is not)

// Figure out vertical alignment, by bitwise masking
#if QWT_VERSION >= 0x060300
Qt::Alignment lva = mpLeftPlotLegend->alignmentInCanvas() & Qt::AlignVertical_Mask;
Qt::Alignment rva = mpRightPlotLegend->alignmentInCanvas() & Qt::AlignVertical_Mask;
#else
Qt::Alignment lva = mpLeftPlotLegend->alignment() & Qt::AlignVertical_Mask;
Qt::Alignment rva = mpRightPlotLegend->alignment() & Qt::AlignVertical_Mask;
#endif

rBottomOffset = rTopOffset = 0;
if(mpLegendsAutoOffsetCheckBox->isChecked())
Expand Down
1 change: 0 additions & 1 deletion HopsanGUI/Widgets/ModelWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ class AnimationWidget;
class SimulationThreadHandler;
class GUIMessageHandler;
class LogDataHandler2;
class ssdHandle;

#include "CoreAccess.h"
#include "RemoteCoreAccess.h"
Expand Down
Loading
Loading