Skip to content

Commit 1cddde7

Browse files
committed
add fmusim-gui cmake build; also fix parallel build issue
Signed-off-by: Benstone Zhang <[email protected]>
1 parent 729c919 commit 1cddde7

File tree

5 files changed

+88
-38
lines changed

5 files changed

+88
-38
lines changed

Diff for: CMakeLists.txt

+12-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required (VERSION 3.17)
1+
cmake_minimum_required (VERSION 3.18)
22

33
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
44

@@ -33,6 +33,7 @@ if (NOT FMI_ARCHITECTURE)
3333
endif ()
3434

3535
set(WITH_FMUSIM OFF CACHE BOOL "Add fmusim project")
36+
set(WITH_FMUSIM_GUI OFF CACHE BOOL "Add fmusim Gui project")
3637

3738
if (MSVC)
3839
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
@@ -277,6 +278,14 @@ endforeach(MODEL_NAME)
277278
# Examples
278279
include(examples/Examples.cmake)
279280

280-
if (WITH_FMUSIM)
281-
add_subdirectory(fmusim)
281+
if(WITH_FMUSIM OR WITH_FMUSIM_GUI)
282+
include(build/external.cmake)
283+
284+
if (WITH_FMUSIM)
285+
add_subdirectory(fmusim)
286+
endif ()
287+
288+
if (WITH_FMUSIM_GUI)
289+
add_subdirectory(fmusim-gui)
290+
endif ()
282291
endif ()

Diff for: build/external.cmake

+7-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
1+
cmake_host_system_information(RESULT TARGET_64_BITS QUERY IS_64BIT)
2+
13
include(ExternalProject)
24
set(EXTERNAL_BASE_DIR ${CMAKE_BINARY_DIR}/external CACHE STRING "External base directory")
5+
file(MAKE_DIRECTORY ${EXTERNAL_BASE_DIR}/lib)
6+
if(UNIX AND TARGET_64_BITS GREATER_EQUAL 1)
7+
file(CREATE_LINK lib ${EXTERNAL_BASE_DIR}/lib64 SYMBOLIC)
8+
endif()
39

410
ExternalProject_Add(
511
zlib_src
@@ -18,12 +24,10 @@ set_target_properties(zlib PROPERTIES IMPORTED_LOCATION ${EXTERNAL_BASE_DIR}/lib
1824
add_dependencies(zlib zlib_src)
1925

2026
set(ZLIB_SRC_DIR ${EXTERNAL_BASE_DIR}/src/zlib_src)
21-
set_source_files_properties(${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c PROPERTIES GENERATED 1)
22-
set_source_files_properties(${ZLIB_SRC_DIR}/contrib/minizip/unzip.c PROPERTIES GENERATED 1)
23-
set_source_files_properties(${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c PROPERTIES GENERATED 1)
2427

2528
ExternalProject_Add(
2629
xml2_src
30+
DEPENDS zlib
2731
PREFIX ${EXTERNAL_BASE_DIR}
2832
GIT_REPOSITORY https://github.com/GNOME/libxml2.git
2933
GIT_TAG 60d3056c97067e6cb2125284878ed7c99c90ed81 # v2.13.4

Diff for: fmusim-gui/CMakeLists.txt

+59-28
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.5)
1+
cmake_minimum_required(VERSION 3.18)
22

33
project(fmusim-gui VERSION 0.1 LANGUAGES C CXX)
44

@@ -10,14 +10,16 @@ set(CMAKE_CXX_STANDARD 17)
1010
set(CMAKE_CXX_STANDARD_REQUIRED ON)
1111

1212
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
13-
set(CVODE_DIR ${CMAKE_SOURCE_DIR}/build/cvode-x86_64-windows/install)
14-
set(LIBXML2_DIR ${CMAKE_SOURCE_DIR}/build/libxml2-x86_64-windows/install)
15-
set(ZLIB_DIR ${CMAKE_SOURCE_DIR}/build/zlib-x86_64-windows/install)
16-
17-
set(ZLIB_SRC_DIR ${CMAKE_SOURCE_DIR}/build/zlib-1.3.1)
18-
1913
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
20-
find_package(Qt6 REQUIRED COMPONENTS WebEngineWidgets)
14+
if(QT_VERSION_MAJOR GREATER_EQUAL 6)
15+
find_package(Qt6 REQUIRED COMPONENTS WebEngineWidgets)
16+
endif()
17+
18+
set_source_files_properties(
19+
${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c
20+
${ZLIB_SRC_DIR}/contrib/minizip/unzip.c
21+
${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c
22+
PROPERTIES GENERATED 1)
2123

2224
set(PROJECT_SOURCES
2325
main.cpp
@@ -31,14 +33,42 @@ set(PROJECT_SOURCES
3133
../fmusim/miniunzip.c
3234
${ZLIB_SRC_DIR}/contrib/minizip/unzip.c
3335
${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c
34-
${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c
3536
../fmusim/FMIModelDescription.c
3637
../fmusim/FMIModelDescription.h
3738
../fmusim/FMIBuildDescription.c
3839
../fmusim/FMIBuildDescription.h
3940
../src/structured_variable_name.tab.c
4041
../src/structured_variable_name.yy.c
4142
)
43+
if (WIN32)
44+
set (PROJECT_SOURCES ${PROJECT_SOURCES} ${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c)
45+
endif ()
46+
47+
if(WIN32)
48+
set(PROJECT_LIBRARIES
49+
${EXTERNAL_BASE_DIR}/lib/libxml2s.lib
50+
${EXTERNAL_BASE_DIR}/lib/zlibstatic.lib
51+
${EXTERNAL_BASE_DIR}/lib/sundials_cvode_static.lib
52+
${EXTERNAL_BASE_DIR}/lib/sundials_core_static.lib
53+
)
54+
elseif(UNIX AND NOT APPLE)
55+
set(PROJECT_LIBRARIES
56+
${EXTERNAL_BASE_DIR}/lib/libxml2.a
57+
${EXTERNAL_BASE_DIR}/lib/libz.a
58+
${EXTERNAL_BASE_DIR}/lib/libsundials_cvode.a
59+
${EXTERNAL_BASE_DIR}/lib/libsundials_core.a
60+
${CMAKE_DL_LIBS}
61+
m
62+
)
63+
else()
64+
set(PROJECT_LIBRARIES
65+
${EXTERNAL_BASE_DIR}/lib/libxml2.a
66+
${EXTERNAL_BASE_DIR}/lib/libz.a
67+
${EXTERNAL_BASE_DIR}/lib/libsundials_cvode.a
68+
${EXTERNAL_BASE_DIR}/lib/libsundials_core.a
69+
)
70+
endif()
71+
4272

4373
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
4474
qt_add_executable(fmusim-gui
@@ -109,26 +139,27 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
109139
resources/build/build.qrc
110140
)
111141

112-
target_include_directories(fmusim-gui PRIVATE
113-
../include
114-
../fmusim
115-
${LIBXML2_DIR}/include/libxml2
116-
${ZLIB_DIR}/include
117-
${ZLIB_SRC_DIR}/contrib/minizip
118-
${CVODE_DIR}/include
119-
)
142+
add_dependencies(fmusim-gui zlib xml2 cvcode)
120143

121-
target_compile_definitions(fmusim-gui PRIVATE
122-
YY_NO_UNISTD_H
123-
)
144+
target_include_directories(fmusim-gui PRIVATE
145+
../include
146+
../fmusim
147+
${EXTERNAL_BASE_DIR}/include
148+
${EXTERNAL_BASE_DIR}/include/libxml2
149+
${ZLIB_SRC_DIR}/contrib/minizip
150+
${ZLIB_SRC_DIR}/contrib/minizip
151+
)
124152

125-
target_link_libraries(fmusim-gui PRIVATE
126-
Qt6::WebEngineWidgets
127-
${LIBXML2_DIR}/lib/libxml2.lib
128-
${ZLIB_DIR}/lib/zlib.lib
129-
${CVODE_DIR}/lib/sundials_cvode_static.lib
130-
${CVODE_DIR}/lib/sundials_core_static.lib
131-
)
153+
if(WIN32)
154+
target_compile_definitions(fmusim-gui PRIVATE
155+
YY_NO_UNISTD_H
156+
)
157+
endif()
158+
159+
target_link_libraries(fmusim-gui PRIVATE
160+
Qt6::WebEngineWidgets
161+
${PROJECT_LIBRARIES}
162+
)
132163

133164
# Define target properties for Android with Qt 6 as:
134165
# set_property(TARGET fmusim-gui APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
@@ -171,6 +202,6 @@ install(TARGETS fmusim-gui
171202
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
172203
)
173204

174-
if(QT_VERSION_MAJOR EQUAL 6)
205+
if(QT_VERSION_MAJOR GREATER_EQUAL 6)
175206
qt_finalize_executable(fmusim-gui)
176207
endif()

Diff for: fmusim-gui/MainWindow.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ extern "C" {
2626
#include "FMICVode.h"
2727
}
2828

29+
#include <cstring>
30+
2931
#define FMI_PATH_MAX 4096
3032

3133

@@ -561,7 +563,7 @@ void MainWindow::simulate() {
561563

562564
const QByteArray ba = unzipdir.toLocal8Bit();
563565

564-
settings->unzipdir = _strdup(ba.data());
566+
settings->unzipdir = strdup(ba.data());
565567
settings->modelDescription = modelDescription;
566568

567569
if (interfaceTypeComboBox->currentText() == "Co-Simulation") {
@@ -610,7 +612,7 @@ void MainWindow::simulate() {
610612
for (auto [variable, value] : startValues.asKeyValueRange()) {
611613
settings->startVariables[i] = (FMIModelVariable*)variable;
612614
QByteArray buffer = value.toLocal8Bit();
613-
settings->startValues[i] = _strdup(buffer.data());
615+
settings->startValues[i] = strdup(buffer.data());
614616
i++;
615617
}
616618

Diff for: fmusim/CMakeLists.txt

+6-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ endif ()
1212

1313
set(FMUSIM_VERSION "" CACHE STRING "")
1414

15-
include(../build/external.cmake)
16-
1715
if (WIN32)
1816
set(FMUSIM_DIST_DIR ${CMAKE_BINARY_DIR}/dist/fmusim-windows/)
1917
elseif (APPLE)
@@ -26,6 +24,12 @@ project (FMUSim)
2624

2725
file(MAKE_DIRECTORY ${FMUSIM_DIST_DIR})
2826

27+
set_source_files_properties(
28+
${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c
29+
${ZLIB_SRC_DIR}/contrib/minizip/unzip.c
30+
${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c
31+
PROPERTIES GENERATED 1)
32+
2933
set(sources
3034
../include/FMI.h
3135
../src/FMI.c

0 commit comments

Comments
 (0)