[qt] Make WASM build run without crashes with latest Qt (#1709)
This commit is contained in:
3
.github/workflows/qt-ci.yml
vendored
3
.github/workflows/qt-ci.yml
vendored
@@ -269,7 +269,8 @@ jobs:
|
||||
-DCMAKE_INSTALL_PREFIX="../install" \
|
||||
-DMLN_WITH_QT=ON \
|
||||
-DMLN_QT_DEPLOYMENT=ON \
|
||||
-DMLN_QT_WITH_INTERNAL_ICU=ON
|
||||
-DMLN_QT_WITH_INTERNAL_ICU=ON \
|
||||
-DMLN_QT_WITH_INTERNAL_SQLITE=ON
|
||||
ninja
|
||||
ninja install
|
||||
|
||||
|
||||
@@ -136,17 +136,42 @@ endif()
|
||||
|
||||
target_link_libraries(
|
||||
mbgl-core
|
||||
PUBLIC
|
||||
$<BUILD_INTERFACE:mbgl-vendor-parsedate>
|
||||
$<BUILD_INTERFACE:mbgl-vendor-nunicode>
|
||||
$<BUILD_INTERFACE:mbgl-vendor-csscolorparser>
|
||||
$<$<NOT:$<OR:$<PLATFORM_ID:Windows>,$<PLATFORM_ID:Emscripten>>>:z>
|
||||
$<IF:$<BOOL:${MLN_QT_WITH_INTERNAL_SQLITE}>,$<BUILD_INTERFACE:mbgl-vendor-sqlite>,Qt${QT_VERSION_MAJOR}::Sql>
|
||||
PRIVATE
|
||||
$<$<PLATFORM_ID:Linux>:${CMAKE_THREAD_LIBS_INIT}>
|
||||
$<$<NOT:$<OR:$<PLATFORM_ID:Windows>,$<PLATFORM_ID:Emscripten>>>:z>
|
||||
Qt${QT_VERSION_MAJOR}::Core
|
||||
Qt${QT_VERSION_MAJOR}::Gui
|
||||
Qt${QT_VERSION_MAJOR}::Network
|
||||
$<IF:$<BOOL:${MLN_QT_WITH_INTERNAL_SQLITE}>,mbgl-vendor-sqlite,Qt${QT_VERSION_MAJOR}::Sql>
|
||||
$<$<PLATFORM_ID:Linux>:$<IF:$<BOOL:${MLN_QT_WITH_INTERNAL_ICU}>,mbgl-vendor-icu,ICU::uc>>
|
||||
mbgl-vendor-nunicode
|
||||
)
|
||||
|
||||
# Interface library for object linking
|
||||
add_library(mbgl-core-interface INTERFACE)
|
||||
target_link_libraries(
|
||||
mbgl-core-interface
|
||||
INTERFACE
|
||||
$<BUILD_INTERFACE:mbgl-core> $<TARGET_OBJECTS:mbgl-core>
|
||||
$<BUILD_INTERFACE:mbgl-vendor-parsedate> $<TARGET_OBJECTS:mbgl-vendor-parsedate>
|
||||
$<BUILD_INTERFACE:mbgl-vendor-nunicode> $<TARGET_OBJECTS:mbgl-vendor-nunicode>
|
||||
$<BUILD_INTERFACE:mbgl-vendor-csscolorparser> $<TARGET_OBJECTS:mbgl-vendor-csscolorparser>
|
||||
$<$<BOOL:${MLN_QT_WITH_INTERNAL_SQLITE}>:$<BUILD_INTERFACE:mbgl-vendor-sqlite>>
|
||||
$<$<BOOL:${MLN_QT_WITH_INTERNAL_SQLITE}>:$<TARGET_OBJECTS:mbgl-vendor-sqlite>>
|
||||
)
|
||||
export(TARGETS mbgl-core-interface FILE MapboxCoreTargets.cmake APPEND)
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
if (MLN_QT_WITH_INTERNAL_ICU)
|
||||
target_link_libraries(mbgl-core PUBLIC $<BUILD_INTERFACE:mbgl-vendor-icu>)
|
||||
target_link_libraries(mbgl-core-interface INTERFACE $<BUILD_INTERFACE:mbgl-vendor-icu> $<TARGET_OBJECTS:mbgl-vendor-icu>)
|
||||
else()
|
||||
target_link_libraries(mbgl-core PUBLIC ICU::uc)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(qmaplibregl_headers
|
||||
${PROJECT_SOURCE_DIR}/platform/qt/include/QMapLibreGL/QMapLibreGL
|
||||
${PROJECT_SOURCE_DIR}/platform/qt/include/QMapLibreGL/export.hpp
|
||||
@@ -279,20 +304,8 @@ target_link_libraries(
|
||||
Qt${QT_VERSION_MAJOR}::Network
|
||||
PRIVATE
|
||||
$<BUILD_INTERFACE:mbgl-compiler-options>
|
||||
$<BUILD_INTERFACE:mbgl-core>
|
||||
$<BUILD_INTERFACE:mbgl-vendor-parsedate>
|
||||
$<BUILD_INTERFACE:mbgl-vendor-nunicode>
|
||||
$<BUILD_INTERFACE:mbgl-vendor-csscolorparser>
|
||||
$<BUILD_INTERFACE:mbgl-core-interface>
|
||||
)
|
||||
# Do not use generator expressions for cleaner output
|
||||
if (MLN_QT_STATIC AND NOT MLN_QT_INSIDE_PLUGIN)
|
||||
target_link_libraries(
|
||||
qmaplibregl
|
||||
PUBLIC
|
||||
$<$<NOT:$<BOOL:${MLN_QT_WITH_INTERNAL_SQLITE}>>:Qt${QT_VERSION_MAJOR}::Sql>
|
||||
$<$<NOT:$<OR:$<PLATFORM_ID:Windows>,$<PLATFORM_ID:Emscripten>>>:z>
|
||||
)
|
||||
endif()
|
||||
|
||||
if (MLN_QT_STATIC OR MLN_QT_INSIDE_PLUGIN)
|
||||
# Don't add import/export into public header because we don't build shared library.
|
||||
@@ -317,16 +330,16 @@ install(TARGETS qmaplibregl
|
||||
)
|
||||
|
||||
if(NOT MLN_QT_LIBRARY_ONLY)
|
||||
add_executable(
|
||||
mbgl-qt
|
||||
set(mbglqt_sources
|
||||
${PROJECT_SOURCE_DIR}/platform/qt/app/main.cpp
|
||||
${PROJECT_SOURCE_DIR}/platform/qt/app/mapwindow.cpp
|
||||
${PROJECT_SOURCE_DIR}/platform/qt/app/mapwindow.hpp
|
||||
${PROJECT_SOURCE_DIR}/platform/qt/resources/common.qrc
|
||||
)
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
|
||||
set(CMAKE_EXECUTABLE_SUFFIX ".html")
|
||||
if (COMMAND qt_add_executable)
|
||||
qt_add_executable(mbgl-qt ${mbglqt_sources})
|
||||
else()
|
||||
add_executable(mbgl-qt ${mbglqt_sources})
|
||||
endif()
|
||||
|
||||
# Qt public API should keep compatibility with old compilers for legacy systems
|
||||
@@ -347,7 +360,10 @@ if(NOT MLN_QT_LIBRARY_ONLY)
|
||||
mbgl-qt
|
||||
PRIVATE ${PROJECT_SOURCE_DIR}/platform/qt/include
|
||||
)
|
||||
endif()
|
||||
|
||||
# tests
|
||||
if(NOT MLN_QT_LIBRARY_ONLY AND NOT CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
|
||||
add_executable(
|
||||
mbgl-test-runner
|
||||
${PROJECT_SOURCE_DIR}/platform/qt/test/main.cpp
|
||||
@@ -383,6 +399,8 @@ if(NOT MLN_QT_LIBRARY_ONLY)
|
||||
PRIVATE -Wl,--whole-archive mbgl-test -Wl,--no-whole-archive
|
||||
)
|
||||
endif()
|
||||
|
||||
add_test(NAME mbgl-test-runner COMMAND mbgl-test-runner WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
|
||||
endif()
|
||||
|
||||
find_program(MLN_QDOC NAMES qdoc)
|
||||
@@ -399,7 +417,3 @@ if(MLN_QDOC)
|
||||
${CMAKE_BINARY_DIR}/docs
|
||||
)
|
||||
endif()
|
||||
|
||||
if(NOT MLN_QT_LIBRARY_ONLY)
|
||||
add_test(NAME mbgl-test-runner COMMAND mbgl-test-runner WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
|
||||
endif()
|
||||
|
||||
@@ -34,6 +34,8 @@ QNetworkRequest HTTPRequest::networkRequest() const {
|
||||
QNetworkRequest req = QNetworkRequest(requestUrl());
|
||||
req.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache);
|
||||
|
||||
// User-Agent can not be set on WASM
|
||||
#ifndef Q_OS_WASM
|
||||
static const QByteArray agent =
|
||||
!m_context->getClientOptions().name().empty()
|
||||
? QString("%1/%2 (%3) MapLibreGL/%4 (Qt %5)")
|
||||
@@ -45,6 +47,7 @@ QNetworkRequest HTTPRequest::networkRequest() const {
|
||||
.toLatin1()
|
||||
: QString("MapLibreGL/%1 (Qt %2)").arg(version::revision).arg(QT_VERSION_STR).toLatin1();
|
||||
req.setRawHeader("User-Agent", agent);
|
||||
#endif
|
||||
|
||||
if (m_resource.priorEtag) {
|
||||
const auto etag = m_resource.priorEtag;
|
||||
|
||||
2
vendor/csscolorparser.cmake
vendored
2
vendor/csscolorparser.cmake
vendored
@@ -2,7 +2,7 @@ if(TARGET mbgl-vendor-csscolorparser)
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(MLN_WITH_QT AND ${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.12.0")
|
||||
if(MLN_WITH_QT)
|
||||
add_library(mbgl-vendor-csscolorparser OBJECT)
|
||||
else()
|
||||
add_library(mbgl-vendor-csscolorparser STATIC)
|
||||
|
||||
10
vendor/icu.cmake
vendored
10
vendor/icu.cmake
vendored
@@ -2,8 +2,14 @@ if(TARGET mbgl-vendor-icu)
|
||||
return()
|
||||
endif()
|
||||
|
||||
add_library(
|
||||
mbgl-vendor-icu STATIC
|
||||
if(MLN_WITH_QT)
|
||||
add_library(mbgl-vendor-icu OBJECT)
|
||||
else()
|
||||
add_library(mbgl-vendor-icu STATIC)
|
||||
endif()
|
||||
|
||||
target_sources(
|
||||
mbgl-vendor-icu PRIVATE
|
||||
${CMAKE_CURRENT_LIST_DIR}/icu/src/cmemory.cpp
|
||||
${CMAKE_CURRENT_LIST_DIR}/icu/src/cstring.cpp
|
||||
${CMAKE_CURRENT_LIST_DIR}/icu/src/ubidi.cpp
|
||||
|
||||
2
vendor/nunicode.cmake
vendored
2
vendor/nunicode.cmake
vendored
@@ -2,7 +2,7 @@ if(TARGET mbgl-vendor-nunicode)
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(MLN_WITH_QT AND ${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.12.0")
|
||||
if(MLN_WITH_QT)
|
||||
add_library(mbgl-vendor-nunicode OBJECT)
|
||||
else()
|
||||
add_library(mbgl-vendor-nunicode STATIC)
|
||||
|
||||
2
vendor/parsedate.cmake
vendored
2
vendor/parsedate.cmake
vendored
@@ -2,7 +2,7 @@ if(TARGET mbgl-vendor-parsedate)
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(MLN_WITH_QT AND ${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.12.0")
|
||||
if(MLN_WITH_QT)
|
||||
add_library(mbgl-vendor-parsedate OBJECT)
|
||||
else()
|
||||
add_library(mbgl-vendor-parsedate STATIC)
|
||||
|
||||
14
vendor/sqlite.cmake
vendored
14
vendor/sqlite.cmake
vendored
@@ -2,8 +2,14 @@ if(TARGET mbgl-vendor-sqlite)
|
||||
return()
|
||||
endif()
|
||||
|
||||
add_library(
|
||||
mbgl-vendor-sqlite STATIC
|
||||
if(MLN_WITH_QT)
|
||||
add_library(mbgl-vendor-sqlite OBJECT)
|
||||
else()
|
||||
add_library(mbgl-vendor-sqlite STATIC)
|
||||
endif()
|
||||
|
||||
target_sources(
|
||||
mbgl-vendor-sqlite PRIVATE
|
||||
${CMAKE_CURRENT_LIST_DIR}/sqlite/src/sqlite3.c
|
||||
)
|
||||
|
||||
@@ -32,3 +38,7 @@ export(TARGETS
|
||||
mbgl-vendor-sqlite
|
||||
APPEND FILE MapboxCoreTargets.cmake
|
||||
)
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
|
||||
set_target_properties(mbgl-vendor-sqlite PROPERTIES COMPILE_FLAGS "-pthread")
|
||||
endif()
|
||||
|
||||
Reference in New Issue
Block a user