305 lines
13 KiB
CMake
305 lines
13 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
||
project(ARC LANGUAGES CXX)
|
||
|
||
#mkdir build
|
||
#cd build
|
||
#cmake .. -A x64 -DCMAKE_PREFIX_PATH="C:/Qt/6.9.0/msvc2022_64" -DCMAKE_BUILD_TYPE=Release
|
||
#cmake .. -G "Visual Studio 17 2022" -A x64 -DCMAKE_PREFIX_PATH="C:/Qt/6.9.0/msvc2022_64" -DCMAKE_BUILD_TYPE=Release
|
||
#cmake --build . --config Release
|
||
#"C:\Qt\6.9.0\msvc2022_64\bin\windeployqt.exe" .\Release\ARC.exe
|
||
|
||
set(CMAKE_CXX_STANDARD 17)
|
||
set(CMAKE_AUTOMOC ON)
|
||
set(CMAKE_AUTORCC ON)
|
||
set(CMAKE_AUTOUIC ON)
|
||
|
||
add_compile_definitions(QT_MESSAGELOGCONTEXT)
|
||
|
||
if (WIN32)
|
||
# Определяем целевую архитектуру.
|
||
# CMAKE_GENERATOR_PLATFORM (-A flag) — самый надёжный способ определения при кросс-компиляции.
|
||
# На ARM64 хосте CMAKE_SYSTEM_PROCESSOR может быть "ARM64" даже при сборке под x64,
|
||
# поэтому сначала проверяем явные x64-признаки.
|
||
if (CMAKE_GENERATOR_PLATFORM STREQUAL "x64"
|
||
OR CMAKE_GENERATOR_PLATFORM STREQUAL "Win64"
|
||
OR VCPKG_TARGET_TRIPLET MATCHES "x64")
|
||
message(STATUS "Detected x64 target architecture")
|
||
set(CMAKE_PREFIX_PATH "C:/Qt/6.9.0/msvc2022_64")
|
||
list(APPEND CMAKE_PREFIX_PATH "C:/Users/User/.vcpkg-clion/vcpkg/installed/x64-windows")
|
||
set(Tesseract_DIR "C:/Users/User/.vcpkg-clion/vcpkg/installed/x64-windows/share/tesseract")
|
||
set(VCPKG_BIN_DIR "C:/Users/User/.vcpkg-clion/vcpkg/installed/x64-windows/bin")
|
||
elseif (VCPKG_TARGET_TRIPLET MATCHES "arm64"
|
||
OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ARM64"
|
||
OR CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64"
|
||
OR CMAKE_CXX_COMPILER MATCHES "arm64")
|
||
message(STATUS "Detected ARM64 target architecture")
|
||
set(CMAKE_PREFIX_PATH "C:/Qt/6.9.0/msvc2022_arm64")
|
||
list(APPEND CMAKE_PREFIX_PATH "C:/Users/User/.vcpkg-clion/vcpkg/installed/arm64-windows")
|
||
set(Tesseract_DIR "C:/Users/User/.vcpkg-clion/vcpkg/installed/arm64-windows/share/tesseract")
|
||
set(VCPKG_BIN_DIR "C:/Users/User/.vcpkg-clion/vcpkg/installed/arm64-windows/bin")
|
||
else ()
|
||
message(STATUS "Detected x64 target architecture (default)")
|
||
set(CMAKE_PREFIX_PATH "C:/Qt/6.9.0/msvc2022_64")
|
||
list(APPEND CMAKE_PREFIX_PATH "C:/Users/User/.vcpkg-clion/vcpkg/installed/x64-windows")
|
||
set(Tesseract_DIR "C:/Users/User/.vcpkg-clion/vcpkg/installed/x64-windows/share/tesseract")
|
||
set(VCPKG_BIN_DIR "C:/Users/User/.vcpkg-clion/vcpkg/installed/x64-windows/bin")
|
||
endif ()
|
||
|
||
find_package(Tesseract CONFIG REQUIRED)
|
||
elseif (APPLE)
|
||
# Укажи путь к Qt6
|
||
set(CMAKE_PREFIX_PATH "/opt/homebrew/opt/qt")
|
||
include_directories("/opt/homebrew/include")
|
||
link_directories("/opt/homebrew/lib")
|
||
endif ()
|
||
|
||
find_package(Qt6 REQUIRED COMPONENTS
|
||
Network
|
||
Widgets
|
||
Sql
|
||
Xml
|
||
Concurrent
|
||
)
|
||
|
||
file(GLOB_RECURSE DB_SOURCES CONFIGURE_DEPENDS
|
||
"${CMAKE_CURRENT_SOURCE_DIR}/database/*.cpp"
|
||
"${CMAKE_CURRENT_SOURCE_DIR}/database/*.h"
|
||
)
|
||
|
||
file(GLOB_RECURSE VIEW_SOURCES CONFIGURE_DEPENDS
|
||
"${CMAKE_CURRENT_SOURCE_DIR}/views/*.cpp"
|
||
"${CMAKE_CURRENT_SOURCE_DIR}/views/*.h"
|
||
)
|
||
|
||
file(GLOB_RECURSE SERVICES_SOURCES CONFIGURE_DEPENDS
|
||
"${CMAKE_CURRENT_SOURCE_DIR}/services/*.cpp"
|
||
"${CMAKE_CURRENT_SOURCE_DIR}/services/*.h"
|
||
)
|
||
|
||
file(GLOB_RECURSE MODELS_SOURCES CONFIGURE_DEPENDS
|
||
"${CMAKE_CURRENT_SOURCE_DIR}/models/*.cpp"
|
||
"${CMAKE_CURRENT_SOURCE_DIR}/models/*.h"
|
||
)
|
||
|
||
file(GLOB_RECURSE ANDROID_SOURCES CONFIGURE_DEPENDS
|
||
"${CMAKE_CURRENT_SOURCE_DIR}/android/*.cpp"
|
||
"${CMAKE_CURRENT_SOURCE_DIR}/android/*.h"
|
||
)
|
||
|
||
if (WIN32)
|
||
add_executable(ARC WIN32
|
||
main.cpp
|
||
app.rc
|
||
${VIEW_SOURCES}
|
||
${SERVICES_SOURCES}
|
||
${DB_SOURCES}
|
||
${MODELS_SOURCES}
|
||
${ANDROID_SOURCES}
|
||
views/bank/BankSettingsWindow.cpp
|
||
views/bank/BankSettingsWindow.h
|
||
views/bank/BankSetupWizard.cpp
|
||
views/bank/BankSetupWizard.h
|
||
views/log/FileLogWindow.cpp
|
||
views/log/FileLogWindow.h
|
||
views/log/LogDetailWindow.cpp
|
||
views/log/LogDetailWindow.h
|
||
database/dao/GeneralLogDAO.cpp
|
||
database/dao/GeneralLogDAO.h
|
||
android/dushanbe/CommonScript.cpp
|
||
android/dushanbe/CommonScript.h
|
||
android/dushanbe/GetCardInfoScript.cpp
|
||
android/dushanbe/GetCardInfoScript.h
|
||
android/dushanbe/GetLastTransactionsScript.cpp
|
||
android/dushanbe/GetLastTransactionsScript.h
|
||
android/dushanbe/GetProfileInfoScript.cpp
|
||
android/dushanbe/GetProfileInfoScript.h
|
||
android/dushanbe/LoginAndCheckAccountsScript.cpp
|
||
android/dushanbe/LoginAndCheckAccountsScript.h
|
||
android/dushanbe/ScreenXmlParser.cpp
|
||
android/dushanbe/ScreenXmlParser.h
|
||
)
|
||
elseif (APPLE)
|
||
add_executable(ARC
|
||
main.cpp
|
||
${VIEW_SOURCES}
|
||
${SERVICES_SOURCES}
|
||
${DB_SOURCES}
|
||
${MODELS_SOURCES}
|
||
${ANDROID_SOURCES}
|
||
views/bank/BankSettingsWindow.cpp
|
||
views/bank/BankSettingsWindow.h
|
||
views/bank/BankSetupWizard.cpp
|
||
views/bank/BankSetupWizard.h
|
||
views/log/FileLogWindow.cpp
|
||
views/log/FileLogWindow.h
|
||
views/log/LogDetailWindow.cpp
|
||
views/log/LogDetailWindow.h
|
||
database/dao/GeneralLogDAO.cpp
|
||
database/dao/GeneralLogDAO.h
|
||
android/dushanbe/CommonScript.cpp
|
||
android/dushanbe/CommonScript.h
|
||
android/dushanbe/GetCardInfoScript.cpp
|
||
android/dushanbe/GetCardInfoScript.h
|
||
android/dushanbe/GetLastTransactionsScript.cpp
|
||
android/dushanbe/GetLastTransactionsScript.h
|
||
android/dushanbe/GetProfileInfoScript.cpp
|
||
android/dushanbe/GetProfileInfoScript.h
|
||
android/dushanbe/LoginAndCheckAccountsScript.cpp
|
||
android/dushanbe/LoginAndCheckAccountsScript.h
|
||
android/dushanbe/ScreenXmlParser.cpp
|
||
android/dushanbe/ScreenXmlParser.h
|
||
)
|
||
endif ()
|
||
|
||
if (WIN32)
|
||
target_link_libraries(ARC
|
||
Qt6::Widgets
|
||
Qt6::Xml
|
||
Qt6::Sql
|
||
Qt6::Network
|
||
Qt6::Concurrent
|
||
Tesseract::libtesseract
|
||
)
|
||
|
||
# Копирование изображений в директорию сборки
|
||
# file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/database/app_data.db" DESTINATION "${CMAKE_BINARY_DIR}/database")
|
||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/tutorials" DESTINATION "${CMAKE_BINARY_DIR}")
|
||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/images" DESTINATION "${CMAKE_BINARY_DIR}")
|
||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/rus.traineddata" DESTINATION "${CMAKE_BINARY_DIR}")
|
||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/eng.traineddata" DESTINATION "${CMAKE_BINARY_DIR}")
|
||
# tessdata/ — канонический путь, ожидаемый Tesseract 5+ через TESSDATA_PREFIX/datapath
|
||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/rus.traineddata" DESTINATION "${CMAKE_BINARY_DIR}/tessdata")
|
||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/eng.traineddata" DESTINATION "${CMAKE_BINARY_DIR}/tessdata")
|
||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/config.ini" DESTINATION "${CMAKE_BINARY_DIR}")
|
||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/no_devices.png" DESTINATION "${CMAKE_BINARY_DIR}")
|
||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/assets/ADBKeyboard.apk" DESTINATION "${CMAKE_BINARY_DIR}/assets")
|
||
# adb копируется в post-build чтобы не падать при configure если adb.exe занят
|
||
file(GLOB _adb_files "${CMAKE_CURRENT_SOURCE_DIR}/tools/adb/windows/*")
|
||
foreach(_adb_file ${_adb_files})
|
||
get_filename_component(_adb_fname "${_adb_file}" NAME)
|
||
add_custom_command(TARGET ARC POST_BUILD
|
||
COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:ARC>/tools/adb/windows"
|
||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${_adb_file}" "$<TARGET_FILE_DIR:ARC>/tools/adb/windows/${_adb_fname}"
|
||
)
|
||
endforeach()
|
||
|
||
add_custom_command(TARGET ARC POST_BUILD
|
||
COMMAND ${CMAKE_COMMAND} -E make_directory
|
||
"$<TARGET_FILE_DIR:ARC>/database"
|
||
|
||
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
||
"${CMAKE_CURRENT_SOURCE_DIR}/tutorials"
|
||
"$<TARGET_FILE_DIR:ARC>/tutorials"
|
||
|
||
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
||
"${CMAKE_CURRENT_SOURCE_DIR}/images"
|
||
"$<TARGET_FILE_DIR:ARC>/images"
|
||
|
||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||
"${CMAKE_CURRENT_SOURCE_DIR}/rus.traineddata"
|
||
"$<TARGET_FILE_DIR:ARC>/rus.traineddata"
|
||
|
||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||
"${CMAKE_CURRENT_SOURCE_DIR}/eng.traineddata"
|
||
"$<TARGET_FILE_DIR:ARC>/eng.traineddata"
|
||
|
||
COMMAND ${CMAKE_COMMAND} -E make_directory
|
||
"$<TARGET_FILE_DIR:ARC>/tessdata"
|
||
|
||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||
"${CMAKE_CURRENT_SOURCE_DIR}/rus.traineddata"
|
||
"$<TARGET_FILE_DIR:ARC>/tessdata/rus.traineddata"
|
||
|
||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||
"${CMAKE_CURRENT_SOURCE_DIR}/eng.traineddata"
|
||
"$<TARGET_FILE_DIR:ARC>/tessdata/eng.traineddata"
|
||
|
||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||
"${CMAKE_CURRENT_SOURCE_DIR}/config.ini"
|
||
"$<TARGET_FILE_DIR:ARC>/config.ini"
|
||
|
||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||
"${CMAKE_CURRENT_SOURCE_DIR}/no_devices.png"
|
||
"$<TARGET_FILE_DIR:ARC>/no_devices.png"
|
||
|
||
COMMAND ${CMAKE_COMMAND} -E make_directory
|
||
"$<TARGET_FILE_DIR:ARC>/assets"
|
||
|
||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||
"${CMAKE_CURRENT_SOURCE_DIR}/assets/ADBKeyboard.apk"
|
||
"$<TARGET_FILE_DIR:ARC>/assets/ADBKeyboard.apk"
|
||
)
|
||
|
||
# Copy OpenSSL DLLs required for HTTPS (Qt SSL backend)
|
||
file(GLOB _openssl_dlls "${VCPKG_BIN_DIR}/libssl*.dll"
|
||
"${VCPKG_BIN_DIR}/libcrypto*.dll")
|
||
foreach(_dll ${_openssl_dlls})
|
||
add_custom_command(TARGET ARC POST_BUILD
|
||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${_dll}" "$<TARGET_FILE_DIR:ARC>"
|
||
)
|
||
endforeach()
|
||
|
||
# Copy mock-server test scripts into the build so they ship with the archive
|
||
add_custom_command(TARGET ARC POST_BUILD
|
||
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
||
"${CMAKE_CURRENT_SOURCE_DIR}/tests/mock_server"
|
||
"$<TARGET_FILE_DIR:ARC>/tests/mock_server"
|
||
)
|
||
|
||
# Copy Tesseract, Leptonica, and their transitive dependency DLLs
|
||
file(GLOB _tesseract_dlls "${VCPKG_BIN_DIR}/tesseract*.dll"
|
||
"${VCPKG_BIN_DIR}/leptonica*.dll"
|
||
"${VCPKG_BIN_DIR}/libpng*.dll"
|
||
"${VCPKG_BIN_DIR}/jpeg*.dll"
|
||
"${VCPKG_BIN_DIR}/tiff*.dll"
|
||
"${VCPKG_BIN_DIR}/zlib*.dll"
|
||
"${VCPKG_BIN_DIR}/gif*.dll"
|
||
"${VCPKG_BIN_DIR}/libwebp*.dll"
|
||
"${VCPKG_BIN_DIR}/libsharpyuv*.dll"
|
||
"${VCPKG_BIN_DIR}/openjp2*.dll"
|
||
"${VCPKG_BIN_DIR}/archive*.dll"
|
||
"${VCPKG_BIN_DIR}/libcurl*.dll"
|
||
"${VCPKG_BIN_DIR}/lz4*.dll"
|
||
"${VCPKG_BIN_DIR}/zstd*.dll"
|
||
"${VCPKG_BIN_DIR}/liblzma*.dll"
|
||
"${VCPKG_BIN_DIR}/bz2*.dll"
|
||
"${VCPKG_BIN_DIR}/iconv*.dll"
|
||
"${VCPKG_BIN_DIR}/charset*.dll"
|
||
"${VCPKG_BIN_DIR}/libxml2*.dll")
|
||
foreach(_dll ${_tesseract_dlls})
|
||
add_custom_command(TARGET ARC POST_BUILD
|
||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${_dll}" "$<TARGET_FILE_DIR:ARC>"
|
||
)
|
||
endforeach()
|
||
|
||
elseif (APPLE)
|
||
target_link_libraries(ARC
|
||
Qt6::Widgets
|
||
Qt6::Sql
|
||
Qt6::Xml
|
||
Qt6::Network
|
||
Qt6::Concurrent
|
||
tesseract
|
||
leptonica
|
||
)
|
||
|
||
# Копирование изображений в директорию сборки
|
||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/tutorials" DESTINATION "${CMAKE_BINARY_DIR}")
|
||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/images" DESTINATION "${CMAKE_BINARY_DIR}")
|
||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/rus.traineddata" DESTINATION "${CMAKE_BINARY_DIR}")
|
||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/eng.traineddata" DESTINATION "${CMAKE_BINARY_DIR}")
|
||
# tessdata/ — канонический путь, ожидаемый Tesseract 5+ через TESSDATA_PREFIX/datapath
|
||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/rus.traineddata" DESTINATION "${CMAKE_BINARY_DIR}/tessdata")
|
||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/eng.traineddata" DESTINATION "${CMAKE_BINARY_DIR}/tessdata")
|
||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/config.ini" DESTINATION "${CMAKE_BINARY_DIR}")
|
||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/no_devices.png" DESTINATION "${CMAKE_BINARY_DIR}")
|
||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/assets/ADBKeyboard.apk" DESTINATION "${CMAKE_BINARY_DIR}/assets")
|
||
endif ()
|
||
|
||
target_include_directories(ARC PRIVATE
|
||
${CMAKE_CURRENT_SOURCE_DIR}/views
|
||
${CMAKE_CURRENT_SOURCE_DIR}/database
|
||
${CMAKE_CURRENT_SOURCE_DIR}/services
|
||
${CMAKE_CURRENT_SOURCE_DIR}/models
|
||
${CMAKE_CURRENT_SOURCE_DIR}/android
|
||
) |