mirror of
https://github.com/MatsuriDayo/nekoray.git
synced 2025-12-18 04:54:38 +03:00
Translate Readme to Persian and make it in Docs section Translate Phrases and words for Persian language Add Macos build section to main readme
318 lines
8.5 KiB
CMake
318 lines
8.5 KiB
CMake
cmake_minimum_required(VERSION 3.5)
|
|
|
|
project(nekoray VERSION 0.1 LANGUAGES CXX)
|
|
|
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
# WINDOWS PDB FILE
|
|
if (WIN32)
|
|
if (MSVC)
|
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi")
|
|
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF")
|
|
endif ()
|
|
endif ()
|
|
|
|
# Find Qt
|
|
if (NOT QT_VERSION_MAJOR)
|
|
set(QT_VERSION_MAJOR 5)
|
|
endif ()
|
|
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Network Svg LinguistTools)
|
|
|
|
if (NKR_CROSS)
|
|
set_property(TARGET Qt5::moc PROPERTY IMPORTED_LOCATION /usr/bin/moc)
|
|
set_property(TARGET Qt5::uic PROPERTY IMPORTED_LOCATION /usr/bin/uic)
|
|
set_property(TARGET Qt5::rcc PROPERTY IMPORTED_LOCATION /usr/bin/rcc)
|
|
set_property(TARGET Qt5::lrelease PROPERTY IMPORTED_LOCATION /usr/bin/lrelease)
|
|
set_property(TARGET Qt5::lupdate PROPERTY IMPORTED_LOCATION /usr/bin/lupdate)
|
|
endif ()
|
|
|
|
# Windows
|
|
include("cmake/fuck_windows/fuck.cmake")
|
|
|
|
#### default prefix path ####
|
|
|
|
if (NKR_PACKAGE)
|
|
list(APPEND NKR_LIBS ${CMAKE_SOURCE_DIR}/libs/deps/package)
|
|
else ()
|
|
list(APPEND NKR_LIBS ${CMAKE_SOURCE_DIR}/libs/deps/built)
|
|
endif ()
|
|
|
|
if (NKR_DISABLE_LIBS)
|
|
else ()
|
|
list(APPEND CMAKE_PREFIX_PATH ${NKR_LIBS})
|
|
endif ()
|
|
|
|
message("[CMAKE_PREFIX_PATH] ${CMAKE_PREFIX_PATH}")
|
|
|
|
# for some cross toolchain
|
|
list(APPEND CMAKE_FIND_ROOT_PATH ${CMAKE_PREFIX_PATH})
|
|
message("[CMAKE_FIND_ROOT_PATH] ${CMAKE_FIND_ROOT_PATH}")
|
|
|
|
#### NKR ####
|
|
|
|
include("cmake/print.cmake")
|
|
include("cmake/nkr.cmake")
|
|
|
|
find_package(Threads)
|
|
|
|
if (NKR_PACKAGE OR NKR_PACKAGE_MACOS)
|
|
nkr_add_compile_definitions(NKR_CPP_USE_APPDATA)
|
|
endif ()
|
|
|
|
#### NKR EXTERNAL ####
|
|
|
|
if (NKR_NO_EXTERNAL)
|
|
set(NKR_NO_GRPC 1)
|
|
set(NKR_NO_YAML 1)
|
|
set(NKR_NO_ZXING 1)
|
|
set(NKR_NO_QHOTKEY 1)
|
|
set(NKR_NO_QUICKJS 1)
|
|
endif ()
|
|
|
|
# quickjs (static submodule)
|
|
if (NKR_NO_QUICKJS)
|
|
nkr_add_compile_definitions(NKR_NO_QUICKJS)
|
|
else ()
|
|
add_subdirectory(3rdparty/qjs)
|
|
list(APPEND NKR_EXTERNAL_TARGETS quickjs)
|
|
endif ()
|
|
|
|
# grpc
|
|
if (NKR_NO_GRPC)
|
|
nkr_add_compile_definitions(NKR_NO_GRPC)
|
|
else ()
|
|
# My proto
|
|
include("cmake/myproto.cmake")
|
|
list(APPEND NKR_EXTERNAL_TARGETS myproto)
|
|
endif ()
|
|
|
|
# yaml-cpp
|
|
if (NKR_NO_YAML)
|
|
nkr_add_compile_definitions(NKR_NO_YAML)
|
|
else ()
|
|
find_package(yaml-cpp CONFIG REQUIRED) # only Release is built
|
|
list(APPEND NKR_EXTERNAL_TARGETS yaml-cpp)
|
|
endif ()
|
|
|
|
# zxing-cpp
|
|
if (NKR_NO_ZXING)
|
|
nkr_add_compile_definitions(NKR_NO_ZXING)
|
|
else ()
|
|
find_package(ZXing CONFIG REQUIRED)
|
|
list(APPEND NKR_EXTERNAL_TARGETS ZXing::ZXing)
|
|
endif ()
|
|
|
|
# QHotkey (static submodule)
|
|
if (NKR_NO_QHOTKEY)
|
|
nkr_add_compile_definitions(NKR_NO_QHOTKEY)
|
|
else ()
|
|
set(QHOTKEY_INSTALL OFF)
|
|
set(BUILD_SHARED_LIBS OFF)
|
|
add_subdirectory(3rdparty/QHotkey)
|
|
list(APPEND NKR_EXTERNAL_TARGETS qhotkey)
|
|
endif ()
|
|
|
|
#### debug print ####
|
|
|
|
if (DBG_CMAKE)
|
|
print_all_variables()
|
|
print_target_properties(myproto)
|
|
print_target_properties(yaml-cpp)
|
|
print_target_properties(ZXing::ZXing)
|
|
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_COMMAND} -E time")
|
|
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CMAKE_COMMAND} -E time")
|
|
endif ()
|
|
|
|
# Sources
|
|
set(PROJECT_SOURCES
|
|
${PLATFORM_FUCKING_SOURCES}
|
|
|
|
main/main.cpp
|
|
main/NekoRay.cpp
|
|
main/NekoRay_Utils.cpp
|
|
main/QJS.cpp
|
|
|
|
3rdparty/base64.cpp
|
|
3rdparty/qrcodegen.cpp
|
|
3rdparty/QtExtKeySequenceEdit.cpp
|
|
|
|
qv2ray/v2/ui/LogHighlighter.cpp
|
|
qv2ray/v2/ui/QvAutoCompleteTextEdit.cpp
|
|
qv2ray/v2/utils/HTTPRequestHelper.cpp
|
|
qv2ray/v2/components/proxy/QvProxyConfigurator.cpp
|
|
qv2ray/v2/ui/widgets/common/QJsonModel.cpp
|
|
qv2ray/v2/ui/widgets/editors/w_JsonEditor.cpp
|
|
qv2ray/v2/ui/widgets/editors/w_JsonEditor.hpp
|
|
qv2ray/v2/ui/widgets/editors/w_JsonEditor.ui
|
|
|
|
qv2ray/v3/components/GeositeReader/GeositeReader.cpp
|
|
qv2ray/v3/components/GeositeReader/picoproto.cpp
|
|
|
|
rpc/gRPC.cpp
|
|
|
|
db/Database.cpp
|
|
db/TrafficLooper.cpp
|
|
db/ProfileFilter.cpp
|
|
db/ConfigBuilder.cpp
|
|
|
|
fmt/AbstractBean.cpp
|
|
fmt/Bean2CoreObj_ray.cpp
|
|
fmt/Bean2CoreObj_box.cpp
|
|
fmt/Bean2External.cpp
|
|
fmt/Bean2Link.cpp
|
|
fmt/InsecureHint.cpp
|
|
fmt/Link2Bean.cpp
|
|
fmt/ChainBean.hpp # translate
|
|
|
|
sub/GroupUpdater.cpp
|
|
|
|
sys/ExternalProcess.cpp
|
|
sys/AutoRun.cpp
|
|
|
|
ui/ThemeManager.cpp
|
|
ui/TrayIcon.cpp
|
|
|
|
ui/mainwindow_grpc.cpp
|
|
ui/mainwindow.cpp
|
|
ui/mainwindow.h
|
|
ui/mainwindow.ui
|
|
|
|
ui/edit/dialog_edit_profile.h
|
|
ui/edit/dialog_edit_profile.cpp
|
|
ui/edit/dialog_edit_profile.ui
|
|
ui/edit/dialog_edit_group.h
|
|
ui/edit/dialog_edit_group.cpp
|
|
ui/edit/dialog_edit_group.ui
|
|
|
|
ui/edit/edit_chain.h
|
|
ui/edit/edit_chain.cpp
|
|
ui/edit/edit_chain.ui
|
|
ui/edit/edit_socks_http.h
|
|
ui/edit/edit_socks_http.cpp
|
|
ui/edit/edit_socks_http.ui
|
|
ui/edit/edit_shadowsocks.h
|
|
ui/edit/edit_shadowsocks.cpp
|
|
ui/edit/edit_shadowsocks.ui
|
|
ui/edit/edit_vmess.h
|
|
ui/edit/edit_vmess.cpp
|
|
ui/edit/edit_vmess.ui
|
|
ui/edit/edit_trojan_vless.h
|
|
ui/edit/edit_trojan_vless.cpp
|
|
ui/edit/edit_trojan_vless.ui
|
|
|
|
ui/edit/edit_naive.h
|
|
ui/edit/edit_naive.cpp
|
|
ui/edit/edit_naive.ui
|
|
|
|
ui/edit/edit_custom.h
|
|
ui/edit/edit_custom.cpp
|
|
ui/edit/edit_custom.ui
|
|
|
|
ui/dialog_basic_settings.cpp
|
|
ui/dialog_basic_settings.h
|
|
ui/dialog_basic_settings.ui
|
|
|
|
ui/dialog_manage_groups.cpp
|
|
ui/dialog_manage_groups.h
|
|
ui/dialog_manage_groups.ui
|
|
|
|
ui/dialog_manage_routes.cpp
|
|
ui/dialog_manage_routes.h
|
|
ui/dialog_manage_routes.ui
|
|
|
|
ui/dialog_vpn_settings.cpp
|
|
ui/dialog_vpn_settings.h
|
|
ui/dialog_vpn_settings.ui
|
|
|
|
ui/dialog_hotkey.cpp
|
|
ui/dialog_hotkey.h
|
|
ui/dialog_hotkey.ui
|
|
|
|
ui/widget/ProxyItem.cpp
|
|
ui/widget/ProxyItem.h
|
|
ui/widget/ProxyItem.ui
|
|
ui/widget/GroupItem.cpp
|
|
ui/widget/GroupItem.h
|
|
ui/widget/GroupItem.ui
|
|
|
|
res/neko.qrc
|
|
res/theme/feiyangqingyun/qss.qrc
|
|
${QV2RAY_RC}
|
|
)
|
|
|
|
# Qt exe
|
|
if (${QT_VERSION_MAJOR} GREATER_EQUAL 6)
|
|
qt_add_executable(nekoray
|
|
MANUAL_FINALIZATION
|
|
${PROJECT_SOURCES}
|
|
)
|
|
# Define target properties for Android with Qt 6 as:
|
|
# set_property(TARGET nekoray APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
|
|
# ${CMAKE_CURRENT_SOURCE_DIR}/android)
|
|
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
|
|
else ()
|
|
if (ANDROID)
|
|
add_library(nekoray SHARED
|
|
${PROJECT_SOURCES}
|
|
)
|
|
# Define properties for Android with Qt 5 after find_package() calls as:
|
|
# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
|
|
else ()
|
|
add_executable(nekoray
|
|
${PROJECT_SOURCES}
|
|
)
|
|
endif ()
|
|
endif ()
|
|
|
|
# Target
|
|
|
|
set_property(TARGET nekoray PROPERTY AUTOUIC ON)
|
|
set_property(TARGET nekoray PROPERTY AUTOMOC ON)
|
|
set_property(TARGET nekoray PROPERTY AUTORCC ON)
|
|
|
|
# Target Source macOS
|
|
|
|
set(MACOSX_ICON ${CMAKE_SOURCE_DIR}/res/nekoray.icns)
|
|
if (APPLE)
|
|
target_sources(nekoray PRIVATE ${MACOSX_ICON})
|
|
endif ()
|
|
set_target_properties(nekoray PROPERTIES
|
|
MACOSX_BUNDLE_ICON_FILE "nekoray.icns"
|
|
RESOURCE ${MACOSX_ICON}
|
|
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/res/MacOSXBundleInfo.plist
|
|
MACOSX_BUNDLE_GUI_IDENTIFIER moe.nekoray.macosx
|
|
MACOSX_BUNDLE TRUE
|
|
WIN32_EXECUTABLE TRUE
|
|
)
|
|
|
|
# Target Source Translations
|
|
|
|
set(TS_FILES
|
|
translations/zh_CN.ts
|
|
translations/fa_IR.ts
|
|
)
|
|
if (${QT_VERSION_MAJOR} GREATER_EQUAL 6)
|
|
qt_add_lupdate(nekoray TS_FILES ${TS_FILES})
|
|
qt_add_lrelease(nekoray TS_FILES ${TS_FILES} QM_FILES_OUTPUT_VARIABLE QM_FILES)
|
|
else ()
|
|
qt5_create_translation(QM_FILES ${PROJECT_SOURCES} ${TS_FILES} OPTIONS -locations none)
|
|
endif ()
|
|
configure_file(translations/translations.qrc ${CMAKE_BINARY_DIR} COPYONLY)
|
|
target_sources(nekoray PRIVATE ${CMAKE_BINARY_DIR}/translations.qrc)
|
|
|
|
# Target Link
|
|
|
|
target_link_libraries(nekoray PRIVATE
|
|
Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Network Qt${QT_VERSION_MAJOR}::Svg
|
|
Threads::Threads
|
|
${NKR_EXTERNAL_TARGETS}
|
|
${PLATFORM_FUCKING_LIBRARIES}
|
|
)
|
|
|
|
if (QT_VERSION_MAJOR EQUAL 6)
|
|
qt_finalize_executable(nekoray)
|
|
endif ()
|