diff options
author | Thiago Marcos P. Santos <thiago@mapbox.com> | 2016-07-18 14:44:41 +0300 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2016-08-05 11:42:22 +0200 |
commit | 821e58fdc1a21598e26dda542476ea530ac3c275 (patch) | |
tree | 9b969864e8f6eb598f133abd2bbb2fe1674f49e8 /platform | |
parent | 4e5fc0d7a4cbb85e9e43f5cac958ef132512c413 (diff) | |
download | qtlocation-mapboxgl-821e58fdc1a21598e26dda542476ea530ac3c275.tar.gz |
[build] Build Qt with CMake
Diffstat (limited to 'platform')
-rw-r--r-- | platform/qt/config.cmake | 62 | ||||
-rw-r--r-- | platform/qt/qt.cmake | 93 | ||||
-rw-r--r-- | platform/qt/qt4.cmake | 21 | ||||
-rw-r--r-- | platform/qt/qt5.cmake | 48 | ||||
-rw-r--r-- | platform/qt/src/http_file_source.cpp | 4 |
5 files changed, 228 insertions, 0 deletions
diff --git a/platform/qt/config.cmake b/platform/qt/config.cmake new file mode 100644 index 0000000000..41abe30174 --- /dev/null +++ b/platform/qt/config.cmake @@ -0,0 +1,62 @@ +include(platform/qt/qt.cmake) + +mason_use(nunicode 1.6) +mason_use(sqlite 3.9.1) + +if(NOT WITH_QT_DECODERS) + mason_use(libjpeg-turbo 1.4.2) + mason_use(libpng 1.6.20) + mason_use(webp 0.5.0) +endif() + +macro(mbgl_platform_core) + target_sources(mbgl-core + ${MBGL_QT_FILES} + ) + + target_include_directories(mbgl-core + PRIVATE platform/default + PRIVATE platform/qt/include + ) + + target_add_mason_package(mbgl-core PRIVATE nunicode) + target_add_mason_package(mbgl-core PRIVATE sqlite) + + target_link_libraries(mbgl-core + ${MBGL_QT_LIBRARIES} + ) + + if(NOT WITH_QT_DECODERS) + target_sources(mbgl-core + PRIVATE platform/default/jpeg_reader.cpp + PRIVATE platform/default/png_reader.cpp + PRIVATE platform/default/webp_reader.cpp + ) + + target_add_mason_package(mbgl-core PRIVATE libjpeg-turbo) + target_add_mason_package(mbgl-core PRIVATE libpng) + target_add_mason_package(mbgl-core PRIVATE webp) + else() + add_definitions(-DQT_IMAGE_DECODERS) + endif() +endmacro() + +# TODO: Implement a Qt headless view, using offscreen +# graphics system. Right now tests are Linux only. +macro(mbgl_platform_test) + target_sources(mbgl-test + PRIVATE platform/default/headless_display.cpp + PRIVATE platform/default/headless_view.cpp + PRIVATE platform/default/headless_view_glx.cpp + PRIVATE test/src/main.cpp + ) + + set_source_files_properties( + test/src/main.cpp + PROPERTIES COMPILE_FLAGS -DWORK_DIRECTORY="${CMAKE_SOURCE_DIR}" + ) + + target_link_libraries(mbgl-test + PRIVATE -lX11 + ) +endmacro() diff --git a/platform/qt/qt.cmake b/platform/qt/qt.cmake new file mode 100644 index 0000000000..c2cebd7964 --- /dev/null +++ b/platform/qt/qt.cmake @@ -0,0 +1,93 @@ +# This file is to be reused by target platforms that don't +# support `mason` (i.e. Yocto). Do not add any `mason` macro. + +option(WITH_QT_DECODERS "Use builtin Qt image decoders" OFF) +option(WITH_QT_4 "Use Qt4 instead of Qt5" OFF) + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") + +project(Qt4And5) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(MBGL_QT_FILES + # File source + PRIVATE platform/default/asset_file_source.cpp + PRIVATE platform/default/default_file_source.cpp + PRIVATE platform/default/online_file_source.cpp + + # Offline + PRIVATE platform/default/mbgl/storage/offline.cpp + PRIVATE platform/default/mbgl/storage/offline_database.cpp + PRIVATE platform/default/mbgl/storage/offline_database.hpp + PRIVATE platform/default/mbgl/storage/offline_download.cpp + PRIVATE platform/default/mbgl/storage/offline_download.hpp + PRIVATE platform/default/sqlite3.cpp + PRIVATE platform/default/sqlite3.hpp + + # Misc + PRIVATE platform/default/log_stderr.cpp + PRIVATE platform/default/string_stdlib.cpp + + # Platform integration + PRIVATE platform/qt/src/async_task.cpp + PRIVATE platform/qt/src/async_task_impl.hpp + PRIVATE platform/qt/src/http_file_source.cpp + PRIVATE platform/qt/src/http_file_source.hpp + PRIVATE platform/qt/src/http_request.cpp + PRIVATE platform/qt/src/http_request.hpp + PRIVATE platform/qt/src/image.cpp + PRIVATE platform/qt/src/qmapbox.cpp + PRIVATE platform/qt/src/qmapboxgl.cpp + PRIVATE platform/qt/src/qmapboxgl_p.hpp + PRIVATE platform/qt/src/run_loop.cpp + PRIVATE platform/qt/src/run_loop_impl.hpp + PRIVATE platform/qt/src/timer.cpp + PRIVATE platform/qt/src/timer_impl.hpp + + # Qt resources + PRIVATE platform/qt/qmapbox.qrc + + # Public headers + PRIVATE platform/qt/include/qmapbox.hpp + PRIVATE platform/qt/include/qmapboxgl.hpp +) + +include_directories( + PRIVATE platform/qt/include +) + +# C++ app +add_executable(mbgl-qt + platform/qt/app/main.cpp + platform/qt/app/mapwindow.cpp + platform/qt/app/mapwindow.hpp + platform/qt/app/source.qrc +) + +if(WITH_QT_4) + include(platform/qt/qt4.cmake) +else() + include(platform/qt/qt5.cmake) +endif() + +# OS specific configurations +if (BUILD_PLATFORM STREQUAL "macos") + list(APPEND MBGL_QT_FILES + PRIVATE platform/darwin/src/nsthread.mm + ) + list(APPEND MBGL_QT_LIBRARIES + PRIVATE "-framework Foundation" + PRIVATE "-framework OpenGL" + ) +else() + list(APPEND MBGL_QT_FILES + PRIVATE platform/default/thread.cpp + ) + list(APPEND MBGL_QT_LIBRARIES + PRIVATE -lGL + ) +endif() diff --git a/platform/qt/qt4.cmake b/platform/qt/qt4.cmake new file mode 100644 index 0000000000..25e6158bc2 --- /dev/null +++ b/platform/qt/qt4.cmake @@ -0,0 +1,21 @@ +find_package(Qt4 REQUIRED) + +set(MBGL_QT_LIBRARIES + PRIVATE Qt4::QtCore + PRIVATE Qt4::QtGui + PRIVATE Qt4::QtNetwork + PRIVATE Qt4::QtOpenGL +) + +add_library(qmapboxgl SHARED) + +target_link_libraries(qmapboxgl + PUBLIC mbgl-core + PRIVATE Qt4::QtCore +) + +target_link_libraries(mbgl-qt + PRIVATE qmapboxgl + PRIVATE Qt4::QtGui + PRIVATE Qt4::QtOpenGL +) diff --git a/platform/qt/qt5.cmake b/platform/qt/qt5.cmake new file mode 100644 index 0000000000..25f07a25fd --- /dev/null +++ b/platform/qt/qt5.cmake @@ -0,0 +1,48 @@ +find_package(Qt5Core REQUIRED) +find_package(Qt5Gui REQUIRED) +find_package(Qt5Location REQUIRED) +find_package(Qt5Network REQUIRED) +find_package(Qt5OpenGL REQUIRED) +find_package(Qt5Quick REQUIRED) +find_package(Qt5Widgets REQUIRED) + +set(MBGL_QT_LIBRARIES + PRIVATE Qt5::Core + PRIVATE Qt5::Gui + PRIVATE Qt5::Network + PRIVATE Qt5::OpenGL +) + +add_library(qmapboxgl SHARED + platform/qt/include/qquickmapboxgl.hpp + platform/qt/src/qquickmapboxgl.cpp + platform/qt/src/qquickmapboxglrenderer.cpp + platform/qt/src/qquickmapboxglrenderer.hpp +) + +target_link_libraries(qmapboxgl + PRIVATE mbgl-core + PRIVATE Qt5::Core + PRIVATE Qt5::Gui + PRIVATE Qt5::Location + PRIVATE Qt5::OpenGL + PRIVATE Qt5::Quick +) + +target_link_libraries(mbgl-qt + PRIVATE qmapboxgl + PRIVATE Qt5::OpenGL + PRIVATE Qt5::Widgets +) + +# QtQuick app +add_executable(mbgl-qt-qml + platform/qt/qmlapp/main.cpp + platform/qt/qmlapp/qml.qrc +) + +target_link_libraries(mbgl-qt-qml + PRIVATE qmapboxgl + PRIVATE Qt5::Location + PRIVATE Qt5::Quick +) diff --git a/platform/qt/src/http_file_source.cpp b/platform/qt/src/http_file_source.cpp index 87948609df..89a5171692 100644 --- a/platform/qt/src/http_file_source.cpp +++ b/platform/qt/src/http_file_source.cpp @@ -12,7 +12,11 @@ // Needs to be on the global namespace // for linking purposes. void initResources() { +#if defined(__APPLE__) + Q_INIT_RESOURCE(platform_qt_qmapbox); +#else Q_INIT_RESOURCE(qmapbox); +#endif } namespace mbgl { |