Skip to content

Commit 03559ce

Browse files
committed
build: added AppImage building for releases
1 parent 959c4eb commit 03559ce

20 files changed

+403
-262
lines changed

AmurCore.ui

+5-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@
2525
<property name="windowTitle">
2626
<string>AmurCore</string>
2727
</property>
28+
<property name="windowIcon">
29+
<iconset>
30+
<normaloff>data/images/logo.png</normaloff>data/images/logo.png</iconset>
31+
</property>
2832
<property name="iconSize">
2933
<size>
3034
<width>22</width>
@@ -72,7 +76,7 @@
7276
<x>0</x>
7377
<y>0</y>
7478
<width>336</width>
75-
<height>23</height>
79+
<height>22</height>
7680
</rect>
7781
</property>
7882
<widget class="QMenu" name="menu_File">

CMakeLists.txt

+86-52
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
cmake_minimum_required(VERSION 3.5)
2-
3-
project(AmurCore VERSION 0.1 LANGUAGES CXX)
4-
5-
set(CMAKE_INCLUDE_CURRENT_DIR ON)
1+
cmake_minimum_required(VERSION 3.16)
2+
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/GetVersionFromGit.cmake")
3+
project(AmurCore VERSION ${PROJECT_VERSION_SEMVER} LANGUAGES CXX)
64

75
set(CMAKE_AUTOUIC ON)
86
set(CMAKE_AUTOMOC ON)
@@ -11,8 +9,6 @@ set(CMAKE_AUTORCC ON)
119
set(CMAKE_CXX_STANDARD 17)
1210
set(CMAKE_CXX_STANDARD_REQUIRED ON)
1311

14-
get_directory_property(IS_SUBPROJECT PARENT_DIRECTORY)
15-
1612
#option(AMURCLIENT_TESTING "Включить модульное тестирование" ON)
1713
#option(AMURCLIENT_COVERAGE "Включить измерение покрытия кода тестами" OFF)
1814

@@ -37,43 +33,39 @@ if(NOT IS_SUBPROJECT)
3733
endif ()
3834
endif()
3935

40-
add_compile_options(
41-
# -Werror
42-
43-
-Wall
44-
-Wextra
45-
-Wpedantic
46-
47-
-Wcast-align
48-
-Wcast-qual
49-
# -Wconversion
50-
-Wsign-conversion
51-
# -Wsign-promo
52-
-Wdisabled-optimization
53-
-Wctor-dtor-privacy
54-
-Wformat=2
55-
-Winit-self
56-
-Wlogical-op
57-
-Wmissing-declarations
58-
-Wmissing-include-dirs
59-
-Wnoexcept
60-
# -Wshadow
61-
-Wenum-compare
62-
-Wfloat-equal
63-
-Wnon-virtual-dtor
64-
-Wold-style-cast
65-
-Woverloaded-virtual
66-
-Wredundant-decls
67-
-Wstrict-null-sentinel
68-
-Wstrict-overflow=5
69-
-Wswitch-default
70-
-Wundef
71-
-Wno-unused
72-
)
73-
74-
if(NOT CMAKE_CXX_EXTENSIONS)
75-
set(CMAKE_CXX_EXTENSIONS OFF)
76-
endif()
36+
# add_compile_options(
37+
# # -Werror
38+
39+
# -Wall
40+
# -Wextra
41+
# -Wpedantic
42+
43+
# -Wcast-align
44+
# -Wcast-qual
45+
# # -Wconversion
46+
# -Wsign-conversion
47+
# # -Wsign-promo
48+
# -Wdisabled-optimization
49+
# -Wctor-dtor-privacy
50+
# -Wformat=2
51+
# -Winit-self
52+
# -Wlogical-op
53+
# -Wmissing-declarations
54+
# -Wmissing-include-dirs
55+
# -Wnoexcept
56+
# # -Wshadow
57+
# -Wenum-compare
58+
# -Wfloat-equal
59+
# -Wnon-virtual-dtor
60+
# -Wold-style-cast
61+
# -Woverloaded-virtual
62+
# -Wredundant-decls
63+
# -Wstrict-null-sentinel
64+
# -Wstrict-overflow=5
65+
# -Wswitch-default
66+
# -Wundef
67+
# -Wno-unused
68+
# )
7769

7870
find_library(libСonfig_LIB config++)
7971

@@ -83,13 +75,22 @@ configure_file(
8375
AmurCore.cfg
8476
)
8577

78+
set(GRPC_FETCHCONTENT true CACHE BOOL "Use FetchContent for download gRPC, or use system gRPC? yes/NO.")
79+
include(cmake/grpc.cmake)
80+
include_directories("${CMAKE_CURRENT_BINARY_DIR}/_deps/grpc-src/include/")
81+
include_directories("${CMAKE_CURRENT_BINARY_DIR}/_deps/grpc-src/third_party/protobuf/src/")
82+
include_directories("${CMAKE_CURRENT_BINARY_DIR}/_deps/grpc-src/third_party/abseil-cpp/")
83+
84+
# for generated pb files
85+
include_directories("${CMAKE_CURRENT_BINARY_DIR}")
86+
8687
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets LinguistTools TextToSpeech)
8788
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets LinguistTools TextToSpeech)
8889

8990
find_package(SDL2 REQUIRED)
9091
include_directories(${SDL2_INCLUDE_DIRS})
9192

92-
find_package( OpenCV REQUIRED )
93+
find_package(OpenCV REQUIRED)
9394
include_directories( ${OpenCV_INCLUDE_DIRS} )
9495

9596
set(TS_FILES AmurCore_ru_RU.ts)
@@ -98,6 +99,7 @@ set(IMAGES
9899
data/images/no_picture.jpeg
99100
)
100101

102+
101103
add_subdirectory(camera)
102104
add_subdirectory(network)
103105
add_subdirectory(joystick)
@@ -115,33 +117,36 @@ set(PROJECT_SOURCES
115117
)
116118

117119
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
118-
qt_add_executable(AmurCore
120+
qt_add_executable(${PROJECT_NAME}
119121
MANUAL_FINALIZATION
120122
${PROJECT_SOURCES}
121123
)
122124
# Define target properties for Android with Qt 6 as:
123-
# set_property(TARGET AmurCore APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
125+
# set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
124126
# ${CMAKE_CURRENT_SOURCE_DIR}/android)
125127
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
126128

127129
qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
128130
else()
129131
if(ANDROID)
130-
add_library(AmurCore SHARED
132+
add_library(${PROJECT_NAME} SHARED
131133
${PROJECT_SOURCES}
132134
)
133135
# Define properties for Android with Qt 5 after find_package() calls as:
134136
# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
135137
else()
136-
add_executable(AmurCore
138+
add_executable(${PROJECT_NAME}
137139
${PROJECT_SOURCES}
138140
)
139141
endif()
140142

141143
qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
142144
endif()
143145

144-
target_link_libraries(AmurCore PRIVATE
146+
file(COPY "${CMAKE_SOURCE_DIR}/data"
147+
DESTINATION "${CMAKE_BINARY_DIR}")
148+
149+
target_link_libraries(${PROJECT_NAME} PRIVATE
145150
LogicCore
146151
CameraSetup
147152
ThreadsHandler
@@ -156,7 +161,7 @@ target_link_libraries(AmurCore PRIVATE
156161
Qt${QT_VERSION_MAJOR}::Widgets
157162
)
158163

159-
set_target_properties(AmurCore PROPERTIES
164+
set_target_properties(${PROJECT_NAME} PROPERTIES
160165
MACOSX_BUNDLE_GUI_IDENTIFIER AmurClient.online
161166
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
162167
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
@@ -165,5 +170,34 @@ set_target_properties(AmurCore PROPERTIES
165170
)
166171

167172
if(QT_VERSION_MAJOR EQUAL 6)
168-
qt_finalize_executable(AmurCore)
173+
qt_finalize_executable(${PROJECT_NAME})
174+
endif()
175+
176+
if(CMAKE_BUILD_TYPE STREQUAL Release)
177+
if (NOT DEFINED CMAKE_SYSTEM_PROCESSOR)
178+
set(CMAKE_SYSTEM_PROCESSOR ${CMAKE_HOST_SYSTEM_PROCESSOR} CACHE INTERNAL "")
179+
endif()
180+
if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL ${CMAKE_HOST_SYSTEM_PROCESSOR})
181+
set(IS_CROSSCOMP OFF CACHE INTERNAL "")
182+
else()
183+
set(IS_CROSSCOMP ON CACHE INTERNAL "")
184+
endif()
185+
186+
set(DATA_PATH ${CMAKE_SOURCE_DIR}/data)
187+
set(LOGO_PATH ${DATA_PATH}/images/logo.png)
188+
INSTALL(CODE
189+
"include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/appimage.cmake)
190+
make_appimage(
191+
EXE \"${CMAKE_BINARY_DIR}/${PROJECT_NAME}\"
192+
NAME \"${PROJECT_NAME}\"
193+
ICON \"${LOGO_PATH}\"
194+
DIR_ICON \"${LOGO_PATH}\"
195+
OUTPUT_NAME \"${CMAKE_BINARY_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.AppImage\"
196+
OUTPUT_ARCH \"${CMAKE_SYSTEM_PROCESSOR}\"
197+
CROSSCOMP ${IS_CROSSCOMP}
198+
ASSETS \"${DATA_PATH}\"
199+
)
200+
"
201+
COMPONENT Runtime
202+
)
169203
endif()

amurcore.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ AmurCore::AmurCore(QWidget *parent) :
77
{
88
ui->setupUi(this);
99

10-
outputMat = imread("../AmurCore/data/images/no_picture.jpeg");
10+
outputMat = imread("data/images/no_picture.jpeg");
1111

1212
this->initialize();
1313
}

camera/CMakeLists.txt

+3-6
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
1+
cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
22

3-
project(CameraSetup LANGUAGES C CXX)
4-
5-
set(CMAKE_CXX_STANDARD 11)
6-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
3+
project(CameraSetup LANGUAGES CXX)
74

85
get_directory_property(IS_SUBPROJECT PARENT_DIRECTORY)
96

@@ -20,7 +17,7 @@ set(CAMERA_SOURCES
2017
)
2118

2219
add_library(${PROJECT_NAME}
23-
SHARED
20+
STATIC
2421
${CAMERA_SOURCES}
2522
)
2623

cmake/GetVersionFromGit.cmake

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# -- GetVersionFromGit.cmake -------------------------------------------
2+
#
3+
# Этот скрипт:
4+
# 1) Вызывает `git describe --tags --always`.
5+
# 2) Извлекает (string(REGEX MATCH ...)) «X.Y.Z» до первого дефиса.
6+
# 3) Устанавливает проектную версию в CMake-формате "X.Y.Z".
7+
# 4) Сохраняет полную строку (например, "0.2.0-1-g959c4eb") в
8+
# переменной PROJECT_VERSION_FULL.
9+
#
10+
# Внимание: предполагается, что проект уже объявлен (или будет объявлен)
11+
# и что данный скрипт вызывается ДО или ПОСЛЕ (зависит от вашего порядка)
12+
# — см. пояснения ниже.
13+
14+
# Попробуем вытащить версию из GIT (git describe)
15+
execute_process(
16+
COMMAND git describe --tags --always
17+
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
18+
OUTPUT_VARIABLE GIT_DESCRIBE
19+
OUTPUT_STRIP_TRAILING_WHITESPACE
20+
ERROR_QUIET
21+
RESULT_VARIABLE GIT_DESCRIBE_EXIT_CODE
22+
)
23+
24+
# Если нет ошибок (== 0) — значит git describe отработал
25+
if(GIT_DESCRIBE_EXIT_CODE EQUAL 0)
26+
set(_raw_version "${GIT_DESCRIBE}")
27+
else()
28+
# Если репозиторий не содержит тегов или .git отсутствует,
29+
# тогда зададим версию по умолчанию
30+
set(_raw_version "0.0.0-no-git")
31+
endif()
32+
33+
# Сохраняем полную строку в PROJECT_VERSION_FULL, чтобы потом можно было
34+
# выводить/логировать/вписывать в бинарник
35+
set(PROJECT_VERSION_FULL "${_raw_version}" CACHE INTERNAL "Full git version string")
36+
37+
# Извлекаем числовую часть вида X.Y.Z (до первого дефиса, если он есть).
38+
# Если тег не содержит явных X.Y.Z — оставим "0.0.0"
39+
string(REGEX MATCH "^[0-9]+\\.[0-9]+\\.[0-9]+" PARSED_VERSION "${_raw_version}")
40+
if(NOT PARSED_VERSION)
41+
set(PARSED_VERSION "0.0.0")
42+
endif()
43+
44+
# Сохраняем PARSED_VERSION в переменной PROJECT_VERSION_SEMVER (SemVer)
45+
set(PROJECT_VERSION_SEMVER "${PARSED_VERSION}" CACHE INTERNAL "Semver version X.Y.Z")
46+
47+
# -------------------------------------------------------------------------
48+
# Дальше: используйте PROJECT_VERSION_SEMVER и PROJECT_VERSION_FULL
49+
# в своем основном CMakeLists (или прямо тут).
50+
#
51+
# Например, можно прямо здесь объявить проект с нужной версией:
52+
#
53+
# project(MyProject VERSION ${PROJECT_VERSION_SEMVER} LANGUAGES CXX)
54+
#
55+
# Но иногда это делают в главном CMakeLists, чтобы была гибкость.
56+
# -------------------------------------------------------------------------
57+
58+
message(STATUS "Project semver parsed: ${PROJECT_VERSION_SEMVER}")
59+
message(STATUS "Project full version : ${PROJECT_VERSION_FULL}")

0 commit comments

Comments
 (0)