Skip to content

Commit 0a491f5

Browse files
authored
Merge pull request #90 from janbar/qt6
Using the latest Qt framework 6.9.0
2 parents 836fdbb + 35abbda commit 0a491f5

File tree

94 files changed

+11467
-1436
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+11467
-1436
lines changed

.github/workflows/build_android_x64.yml

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,11 @@ on:
55
branches:
66
- debug
77
- master
8-
- dev/1.13
98

109
push:
1110
branches:
1211
- debug
1312
- master
14-
- dev/1.13
1513

1614
jobs:
1715
build:
@@ -25,7 +23,7 @@ jobs:
2523
uses: actions/setup-java@v3
2624
with:
2725
distribution: zulu
28-
java-version: 17
26+
java-version: 21
2927
- name: Setup Android SDK tools
3028
uses: android-actions/setup-android@v3
3129
with:
@@ -36,40 +34,48 @@ jobs:
3634
- name: Configure ENV
3735
run: |
3836
echo "ANDROID_NDK=${ANDROID_HOME}/ndk/27.2.12479018" >> $GITHUB_ENV
39-
echo "QT_DIR=${HOME}/Qt/5.15.16/android" >> $GITHUB_ENV
37+
echo "QT_DIR=${HOME}/Qt/6.9.0/android_x86_64" >> $GITHUB_ENV
38+
echo "QT_HOST_PATH=${HOME}/Qt/6.9.0/gcc_64" >> $GITHUB_ENV
4039
4140
- name: Cache Qt
4241
id: cache-qt
4342
uses: actions/cache@v3
4443
env:
4544
cache-name: cache-qt
4645
with:
47-
path: ~/Qt/5.15.16/android
48-
key: qtandroid-51516-ndk23
46+
path: |
47+
~/Qt/6.9.0
48+
~/Qt/android_openssl
49+
key: qtandroid_x86_64-60900-ndk26
4950

5051
- if: ${{ steps.cache-qt.outputs.cache-hit != 'true' }}
5152
name: Install Qt
5253
continue-on-error: true
5354
run: |
54-
wget -q ${{secrets.PRIVATE_URL_DOWNLOAD}}/qt/qt-5.15.16-android-ndk23-linux64.tar.xz
55+
wget -q ${{secrets.PRIVATE_URL_DOWNLOAD}}/qt/qt-6.9.0-android_x86_64-ndk26-linux64.tar.xz
56+
wget -q ${{secrets.PRIVATE_URL_DOWNLOAD}}/qt/android_openssl-20240915.tar.xz
5557
mkdir -p ~/Qt
56-
tar xfJ qt-5.15.16-android-ndk23-linux64.tar.xz -C ~/Qt/
57-
rm -f qt-5.15.16-android-ndk23-linux64.tar.xz
58+
tar xfJ qt-6.9.0-android_x86_64-ndk26-linux64.tar.xz -C ~/Qt/
59+
tar xfJ android_openssl-20240915.tar.xz -C ~/Qt/
60+
rm -f *.tar.xz
61+
62+
- name: Configure Android OpenSSL
63+
run: ln -s ~/Qt/android_openssl ${ANDROID_SDK_ROOT}/android_openssl
5864

5965
- name: Fetch submodules
6066
run: git submodule init && git submodule update
6167
- name: Configure build
6268
run: |
6369
cmake -B build -DCMAKE_SYSTEM_NAME=Android \
64-
-DCMAKE_PREFIX_PATH=${Qt5_DIR} \
70+
-DCMAKE_PREFIX_PATH=${QT_DIR} \
6571
-DCMAKE_FIND_ROOT_PATH=${QT_DIR} \
6672
-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \
6773
-DCMAKE_MAKE_PROGRAM=${ANDROID_NDK}/prebuilt/linux-x86_64/bin/make \
68-
-DANDROID_ABI=x86_64 -DANDROID_SDK_MINVER=24 -DANDROID_SDK_TARGET=26 \
69-
-DANDROID_NATIVE_API_LEVEL=24 -DANDROID_SDK_BUILD_TOOLS_REVISION=34.0.0 \
74+
-DANDROID_ABI=x86_64 -DANDROID_SDK_MINVER=26 -DANDROID_SDK_TARGET=26 \
75+
-DANDROID_NATIVE_API_LEVEL=24 \
76+
-DANDROID_SDK_BUILD_TOOLS_REVISION=31.0.0 \
7077
-DANDROID_SDK_ROOT=${ANDROID_SDK_ROOT} \
7178
-DANDROID_NDK=${ANDROID_NDK} \
72-
-DANDROID_STL=c++_static \
7379
-DQT_ANDROID_PLATFORM_LEVEL=34 \
7480
-Wno-dev
7581
- name: Build

.github/workflows/build_ubuntu_24.yml

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,23 +28,40 @@ jobs:
2828
run: |
2929
sudo apt-get install -y \
3030
libc++-dev libomp-dev zlib1g-dev liblzma-dev libxml2-dev \
31-
libdbus-1-dev libprotobuf-dev protobuf-compiler\
32-
libqt5remoteobjects5-bin libqt5quickwidgets5 \
33-
libqt5quickcontrols2-5 libqt5qmlmodels5 libqt5qml5 \
34-
libqt5positioning5 libqt5dbus5 libqt5remoteobjects5-dev \
35-
libqt5svg5-dev libqt5sensors5-dev \
36-
qttools5-dev qttools5-dev-tools qtdeclarative5-dev \
37-
qtquickcontrols2-5-dev qtmultimedia5-dev qtpositioning5-dev \
38-
qml-module-qtquick2 qml-module-qtgraphicaleffects \
39-
qml-module-qtquick-layouts qml-module-qtquick-controls2 \
40-
qml-module-qt-labs-settings \
41-
libreadline-dev
31+
libdbus-1-dev libprotobuf-dev protobuf-compiler libssl-dev \
32+
libgl1-mesa-dev libreadline-dev libpulse0 mesa-vulkan-drivers
33+
34+
- name: Configure ENV
35+
run: |
36+
echo "QT_DIR=${HOME}/Qt/6.9.0/gcc_64" >> $GITHUB_ENV
37+
echo "QT_HOST_PATH=${HOME}/Qt/6.9.0/gcc_64" >> $GITHUB_ENV
38+
39+
- name: Cache Qt
40+
id: cache-qt
41+
uses: actions/cache@v3
42+
env:
43+
cache-name: cache-qt
44+
with:
45+
path: |
46+
~/Qt/6.9.0
47+
key: qtgcc_64-60900
48+
49+
- if: ${{ steps.cache-qt.outputs.cache-hit != 'true' }}
50+
name: Install Qt
51+
continue-on-error: true
52+
run: |
53+
wget -q ${{secrets.PRIVATE_URL_DOWNLOAD}}/qt/qt-6.9.0-gcc_64-linux64.tar.xz
54+
mkdir -p ~/Qt
55+
tar xfJ qt-6.9.0-gcc_64-linux64.tar.xz -C ~/Qt/
56+
rm -f *.tar.xz
4257
4358
- name: Fetch submodules
4459
run: git submodule init && git submodule update
4560
- name: Configure build
4661
run: |
4762
cmake -B build \
63+
-DCMAKE_PREFIX_PATH=${QT_DIR} \
64+
-DCMAKE_FIND_ROOT_PATH=${QT_DIR} \
4865
-DBUILD_DEVICE_MOBILE=ON \
4966
-DBUILD_SIMULATOR=ON -DBUILD_SIMULATOR_WITH_READLINE=ON \
5067
-Wno-dev

CMakeLists.txt

Lines changed: 52 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ option(BUILD_DEVICE_MOBILE "Enable behaviors for mobile devices" OFF)
88
option(BUILD_SIMULATOR "Build the simulation tool for OSMIN" OFF)
99

1010
set(APP_VERSION "1.14.0")
11-
set(APP_VERSION_CODE 87)
11+
set(APP_VERSION_CODE 90)
1212
set(APP_ID "io.github.janbar.osmin")
1313
set(APP_NAME "osmin")
1414

@@ -95,27 +95,23 @@ else()
9595
set(CMAKE_IGNORE_PATH "/opt/local/bin;/opt/local/include;/opt/local/lib")
9696
endif()
9797

98-
set(QT_VERSION_PREFERRED "5" CACHE STRING "preferred Qt version" FORCE)
98+
set(QT_VERSION_PREFERRED "6" CACHE STRING "preferred Qt version" FORCE)
9999
include(qtchooser)
100100
if(NOT QT_FOUND)
101101
message(FATAL_ERROR "Qt${QT_VERSION_PREFERRED} NOT found")
102-
elseif(Qt5Core_VERSION VERSION_LESS 5.15.2)
103-
message(FATAL_ERROR "Qt version not supported")
104102
endif()
105103

106104
add_subdirectory(backend)
107105

108106
set(CMAKE_AUTOMOC ON)
109-
find_package(Qt5 ${QT_VERSION} COMPONENTS
107+
find_package(Qt6 ${QT_VERSION} COMPONENTS
110108
Core Gui Qml Quick QuickControls2 Widgets Xml Svg Network Sensors
111-
Multimedia RemoteObjects Positioning REQUIRED)
109+
Multimedia RemoteObjects Positioning Core5Compat REQUIRED)
112110

113-
if(ANDROID)
114-
find_package(Qt5AndroidExtras REQUIRED)
115-
elseif(UNIX AND NOT APPLE)
111+
if(UNIX AND NOT APPLE)
116112
find_library(DBUS_LIBRARIES dbus-1)
117113
if(DBUS_LIBRARIES)
118-
find_package(Qt5 ${QT_VERSION} COMPONENTS DBus REQUIRED)
114+
find_package(Qt6 ${QT_VERSION} COMPONENTS DBus REQUIRED)
119115
set(HAVE_DBUS 1)
120116
endif()
121117
endif()
@@ -189,43 +185,49 @@ add_definitions(-DQT_STATICPLUGIN)
189185

190186
include_directories(${PROJECT_BINARY_DIR} ${LIBOSMSCOUT_INCLUDE_DIRS})
191187

192-
qt5_generate_repc(osmin_SOURCES src/servicemessenger.rep SOURCE)
193-
qt5_generate_repc(osmin_SOURCES src/servicemessenger.rep REPLICA)
194-
qt5_add_resources(osmin-resources gui/osmin_controls2_515.qrc)
188+
qt_add_resources(osmin-resources gui/osmin_controls2_690.qrc)
195189

190+
#qt_add_executable(osmin ${osmin_SOURCES} ${osmin_HEADERS} ${osmin-resources} MANUAL_FINALIZATION)
196191
if(ANDROID)
197192
add_library(osmin SHARED ${osmin_SOURCES} ${osmin_HEADERS} ${osmin-resources})
198193
else()
199-
add_executable(osmin ${osmin_SOURCES} ${osmin_HEADERS} ${osmin-resources})
194+
add_executable(osmin ${osmin_SOURCES} ${osmin_HEADERS} ${osmin-resources})
200195
endif()
196+
qt6_add_repc_sources(osmin src/servicemessenger.rep)
197+
qt6_add_repc_replicas(osmin src/servicemessenger.rep)
201198

202199
target_link_libraries(osmin PRIVATE ${LIBOSMSCOUT_LIBRARIES})
203200
target_link_libraries(osmin PRIVATE
204-
Qt5::QuickControls2 Qt5::RemoteObjects Qt5::Positioning
205-
Qt5::Qml Qt5::Quick Qt5::Widgets Qt5::Gui Qt5::Xml Qt5::Svg
206-
Qt5::Network Qt5::Sensors Qt5::Multimedia Qt5::Core)
201+
Qt::RemoteObjects Qt::Positioning
202+
Qt::QuickControls2 Qt::Qml Qt::Quick
203+
Qt::Widgets Qt::Gui Qt::Xml
204+
Qt::Svg Qt::Network Qt::Sensors
205+
Qt::Multimedia Qt::Core
206+
Qt6::Core5Compat)
207207

208208
if(ANDROID)
209209
add_definitions(-DDEVICE_MOBILE)
210210
add_definitions(-frtti) # dynamic_cast: https://github.com/android/ndk/issues/519
211-
target_link_libraries(osmin PRIVATE Qt5::AndroidExtras android log)
211+
set_property(TARGET osmin PROPERTY SUFFIX "_${ANDROID_ABI}.so")
212+
#set_property(TARGET osmin APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android/package-sources")
213+
target_link_libraries(osmin PRIVATE android log Qt6::CorePrivate)
214+
215+
# Provides dependency openssl
216+
if(NOT ANDROID_SDK_ROOT)
217+
set(ANDROID_SDK_ROOT "$ENV{ANDROID_SDK_ROOT}")
218+
if(NOT ANDROID_SDK_ROOT)
219+
message(FATAL_ERROR "The ANDROID_SDK_ROOT environment variable is not set")
220+
endif()
221+
endif()
222+
include(${ANDROID_SDK_ROOT}/android_openssl/android_openssl.cmake)
223+
add_android_openssl_libraries(osmin)
224+
get_target_property(ANDROID_EXTRA_LIBS osmin QT_ANDROID_EXTRA_LIBS)
225+
212226
# Fix import of shared omp with android ndk rev 21
213227
if(OpenMP_CXX_LIBRARIES MATCHES libomp.so)
214-
set(SHARED_LIBOMP ${OpenMP_CXX_LIBRARIES})
228+
list(APPEND ANDROID_EXTRA_LIBS ${OpenMP_CXX_LIBRARIES})
215229
endif()
216-
add_dependencies(osmin ssl crypto)
217230

218-
include(android/AddQtAndroidApk.cmake)
219-
add_qt_android_apk(osmin-apk osmin
220-
NAME ${APP_NAME}
221-
VERSION_CODE ${APP_VERSION_CODE}
222-
PACKAGE_NAME ${APP_ID}
223-
PACKAGE_SOURCES ${PROJECT_SOURCE_DIR}/android/package-sources
224-
DEPENDS ssl crypto ${SHARED_LIBOMP}
225-
ASSETS ${PROJECT_SOURCE_DIR}/resources
226-
KEYSTORE ${KEYSTORE_FILE} ${KEYSTORE_ALIAS}
227-
KEYSTORE_PASSWORD ${KEYSTORE_PASSWORD}
228-
)
229231
else()
230232
if(BUILD_DEVICE_MOBILE)
231233
message(STATUS "Enable Device Mobile")
@@ -234,7 +236,7 @@ else()
234236
if(HAVE_DBUS)
235237
message(STATUS "Enable DBus interfaces")
236238
add_definitions(-DHAVE_DBUS)
237-
target_link_libraries(osmin PRIVATE Qt5::DBus)
239+
target_link_libraries(osmin PRIVATE Qt::DBus)
238240
endif()
239241

240242
set_target_properties(osmin PROPERTIES OUTPUT_NAME "${EXEC}")
@@ -278,3 +280,21 @@ else()
278280
${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
279281
)
280282
endif()
283+
284+
#qt_finalize_executable(osmin)
285+
286+
if(ANDROID)
287+
include(android/AddQtAndroidApk.cmake)
288+
add_qt_android_apk(osmin-apk osmin
289+
NAME ${APP_NAME}
290+
VERSION_CODE ${APP_VERSION_CODE}
291+
PACKAGE_NAME ${APP_ID}
292+
PACKAGE_SOURCES ${PROJECT_SOURCE_DIR}/android/package-sources
293+
DEPENDS ${ANDROID_EXTRA_LIBS}
294+
PLUGINS platforms tls iconengines imageformats multimedia
295+
position sensors networkinformation qmltooling styles
296+
ASSETS ${PROJECT_SOURCE_DIR}/resources
297+
KEYSTORE ${KEYSTORE_FILE} ${KEYSTORE_ALIAS}
298+
KEYSTORE_PASSWORD ${KEYSTORE_PASSWORD}
299+
)
300+
endif()

README.md

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,20 @@ The APKs are available on the Release page, for armv7(32bits) and arm64(64bits)
1919
Alternatively you can install osmin through the [IzzyOnDroid](https://apt.izzysoft.de/fdroid/index/apk/io.github.janbar.osmin) F-Droid repo, which should be available by enabling IzzyOnDroid from Settings > Repositories, otherwise, please refer to instructions at [IzzyOnDroid](https://apt.izzysoft.de/fdroid/) main page.
2020

2121
## Develop/debug osmin
22-
You can build and test osmin on Unix (Linux, BSD) supported by Qt 5.15. Before build from source you have to install the following dependencies.
22+
You can build and test osmin on Unix (Linux, BSD) supported by Qt 6.9. Before build from source you have to install the following dependencies.
2323

24-
git, cmake (**>=3.20), clang/clang++ (**>=18.0** standard C++20), OpenMP, Qt5Core (**>=5.15**), Qt5Gui, Qt5Qml, Qt5Quick, Qt5QuickControls2, Qt5Widgets, Qt5Xml, Qt5Svg, Qt5Network, Qt5Sensors, Qt5Multimedia, Qt5RemoteObjects, Qt5Positioning, Qt5DBus, libdbus-1, zlib1g, libxml2, liblzma, OpenSSL
24+
git, cmake (**>=3.20), clang/clang++ (**>=18.0** standard C++20), OpenMP, Qt5Core (**>=6.9.0**), Qt6Gui, Qt6Qml, Qt6Quick, Qt6QuickControls2, Qt6Widgets, Qt6Xml, Qt6Svg, Qt6Network, Qt6Sensors, Qt6Multimedia, Qt6RemoteObjects, Qt6Positioning, Qt6DBus, libdbus-1, zlib1g, libxml2, liblzma, OpenSSL
2525

2626

27-
As example type the following on Ubuntu (>=24.04) to install all requirements.
27+
As example type the following on Ubuntu (>=24.04) to install the base requirements.
2828
```
29-
sudo apt install git cmake clang curl wget libomp-dev zlib1g-dev libxml2-dev liblzma-dev libdbus-1-dev libssl-dev libreadline-dev libqt5remoteobjects5-bin libqt5quickwidgets5 libqt5quickcontrols2-5 libqt5qmlmodels5 libqt5qml5 libqt5positioning5 libqt5remoteobjects5-dev libqt5svg5-dev libqt5sensors5-dev libqt5dbus5 qtquickcontrols2-5-dev qtmultimedia5-dev qtpositioning5-dev qml-module-qtgraphicaleffects qml-module-qtquick2 qml-module-qtquick-layouts qml-module-qtquick-controls2 qml-module-qt-labs-settings
29+
sudo apt install git cmake clang curl wget libomp-dev zlib1g-dev libxml2-dev liblzma-dev libdbus-1-dev libssl-dev libgl1-mesa-dev libreadline-dev libpulse0 mesa-vulkan-drivers
3030
```
3131
Or type the following on Fedora 40.
3232
```
33-
sudo dnf install git cmake clang curl wget libomp-devel zlib-ng-compat-devel libxml2-devel dbus-devel readline-devel openssl-devel qt5-qtbase-devel qt5-qtremoteobjects-devel qt5-qtsensors-devel qt5-qtsvg-devel qt5-qtdeclarative-devel qt5-qtmultimedia-devel qt5-qtquickcontrols2-devel qt5-qtlocation-devel qt5-qtdeclarative qt5-qtbase qt5-qtsvg qt5-qtbase-gui qt5-qtgraphicaleffects qt5-qtremoteobjects qt5-qtsensors qt5-qtquickcontrols2 qt5-qtimageformats qt5-qtlocation qt5-qtmultimedia qt5-qttools qt5-qtxmlpatterns qt5-qtmultimedia-devel qt5-qtlocation-devel qt5-linguist qt5-qttranslations
33+
sudo dnf install git cmake clang curl wget libomp-devel zlib-ng-compat-devel libxml2-devel dbus-devel openssl-devel mesa-libGL-devel readline-devel pulseaudio-libs mesa-vulkan-drivers
3434
```
35+
If your distribution doesn't provide the Qt-6.9 libraries, you have to install them using the Qt Online Installer.
3536

3637
## Build on Unix from source
3738

@@ -45,14 +46,15 @@ cd osmin
4546
git submodule init
4647
git submodule update --force
4748
mkdir build
49+
export QT_ROOT=$HOME/Qt/6.9.0/gcc_64
4850
```
49-
To build for desktop including the simulation tool, use the following command.
51+
To build arch x86_64 for desktop including the simulation tool, use the following command.
5052
```
51-
cmake -B build -DBUILD_SIMULATOR=ON -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ .
53+
cmake -B build -DBUILD_SIMULATOR=ON -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ -DCMAKE_PREFIX_PATH=${QT_ROOT} -DCMAKE_FIND_ROOT_PATH=${QT_ROOT} .
5254
```
5355
If the target device is a mobile, you should use the following command to **enable behaviors for mobile**.
5456
```
55-
cmake -B build -DBUILD_DEVICE_MOBILE=ON -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ .
57+
cmake -B build -DBUILD_DEVICE_MOBILE=ON -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ -DCMAKE_PREFIX_PATH=${QT_ROOT} -DCMAKE_FIND_ROOT_PATH=${QT_ROOT} .
5658
```
5759
You could mix the options `BUILD_SIMULATOR` and `BUILD_DEVICE_MOBILE` to test the behaviors for mobile device with the simulation tool.
5860
Finally build it to make the target binary `osmin`.

0 commit comments

Comments
 (0)