Add support for CMake (buildsystem generator) (#2468)

Co-authored-by: Edgar <Edgar@AnotherFoxGuy.com>
This commit is contained in:
pajlada
2021-03-28 16:58:51 +02:00
committed by GitHub
parent 093a088363
commit e00938dfde
28 changed files with 1354 additions and 107 deletions
+108 -72
View File
@@ -1,84 +1,120 @@
cmake_minimum_required(VERSION 3.8)
cmake_policy(SET CMP0087 NEW)
include(FeatureSummary)
project(chatterino)
include_directories(src)
set(chatterino_SOURCES
src/common/NetworkRequest.cpp
src/common/NetworkResult.cpp
src/common/NetworkPrivate.cpp
src/common/NetworkManager.cpp
src/common/QLogging.cpp
src/common/Modes.cpp
src/common/ChatterinoSetting.cpp
src/util/DebugCount.cpp
src/singletons/Paths.cpp
src/BaseSettings.cpp
src/common/UsernameSet.cpp
src/controllers/highlights/HighlightPhrase.cpp
src/providers/emoji/Emojis.cpp
src/messages/Emote.cpp
src/messages/Image.cpp
src/messages/ImageSet.cpp
src/util/RapidjsonHelpers.cpp
${CMAKE_CURRENT_LIST_DIR}/resources/resources.qrc
${CMAKE_CURRENT_LIST_DIR}/resources/resources_autogenerated.qrc
list(APPEND CMAKE_MODULE_PATH
"${CMAKE_SOURCE_DIR}/cmake"
)
find_package(Qt5 5.9.0 REQUIRED COMPONENTS
Core Widgets Network Concurrent
project(chatterino VERSION 2.2.3)
option(BUILD_APP "Build Chatterino" ON)
option(BUILD_TESTS "Build the tests for Chatterino" OFF)
option(USE_SYSTEM_PAJLADA_SETTINGS "Use system pajlada settings library" OFF)
option(USE_SYSTEM_LIBCOMMUNI "Use system communi library" OFF)
option(USE_SYSTEM_QT5KEYCHAIN "Use system Qt5Keychain library" OFF)
option(USE_CONAN "Use conan" OFF)
if (USE_CONAN OR CONAN_EXPORTED)
include(${CMAKE_CURRENT_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup(TARGETS NO_OUTPUT_DIRS)
endif()
find_program(CCACHE_PROGRAM ccache)
if (CCACHE_PROGRAM)
set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_PROGRAM}")
message("Using ${CCACHE_PROGRAM} for speeding up build")
endif ()
include(${CMAKE_CURRENT_LIST_DIR}/cmake/GIT.cmake)
find_package(Qt5 REQUIRED
COMPONENTS
Core
Widgets
Gui
Network
Multimedia
Svg
Concurrent
)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
if (WIN32)
find_package(WinToast REQUIRED)
endif ()
# Find boost on the system
find_package(Boost REQUIRED)
# Find OpenSSL on the system
find_package(OpenSSL REQUIRED)
find_package(Threads REQUIRED)
find_library(LIBRT rt)
if (BUILD_APP)
if (USE_SYSTEM_LIBCOMMUNI)
find_package(LibCommuni REQUIRED)
else()
set(LIBCOMMUNI_ROOT_LIB_FOLDER "${CMAKE_SOURCE_DIR}/lib/libcommuni")
if (NOT EXISTS "${LIBCOMMUNI_ROOT_LIB_FOLDER}/CMakeLists.txt")
message(FATAL_ERROR "Submodules probably not loaded, unable to find lib/libcommuni/CMakeLists.txt")
endif()
add_subdirectory("${LIBCOMMUNI_ROOT_LIB_FOLDER}" EXCLUDE_FROM_ALL)
endif()
# Link QtKeychain statically
option(QTKEYCHAIN_STATIC "" ON)
if (USE_SYSTEM_QT5KEYCHAIN)
find_package(Qt5Keychain REQUIRED)
else()
set(QT5KEYCHAIN_ROOT_LIB_FOLDER "${CMAKE_SOURCE_DIR}/lib/qtkeychain")
if (NOT EXISTS "${QT5KEYCHAIN_ROOT_LIB_FOLDER}/CMakeLists.txt")
message(FATAL_ERROR "Submodules probably not loaded, unable to find lib/qtkeychain/CMakeLists.txt")
endif()
add_subdirectory("${QT5KEYCHAIN_ROOT_LIB_FOLDER}" EXCLUDE_FROM_ALL)
if (NOT TARGET qt5keychain)
message(FATAL_ERROR "qt5keychain target was not created :@")
endif()
endif()
find_package(RapidJSON REQUIRED)
find_package(Websocketpp REQUIRED)
endif ()
if (BUILD_TESTS)
set(BUILD_TESTS OFF)
message("++ Tests enabled")
find_package(GTest)
enable_testing()
find_package(GTest REQUIRED)
endif ()
add_executable(chatterino-test
${chatterino_SOURCES}
find_package(PajladaSerialize REQUIRED)
find_package(PajladaSignals REQUIRED)
find_package(LRUCache REQUIRED)
tests/src/main.cpp
tests/src/Emojis.cpp
tests/src/NetworkRequest.cpp
tests/src/UsernameSet.cpp
tests/src/HighlightPhrase.cpp
)
target_compile_definitions(chatterino-test PRIVATE CHATTERINO_GIT_HASH="test" AB_CUSTOM_SETTINGS CHATTERINO_TEST)
target_link_libraries(chatterino-test Qt5::Core Qt5::Widgets Qt5::Network Qt5::Concurrent)
target_link_libraries(chatterino-test gtest gtest_main)
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/lib/settings)
target_link_libraries(chatterino-test PajladaSettings)
target_include_directories(chatterino-test PUBLIC PajladaSettings)
find_package(Threads)
target_link_libraries(chatterino-test Threads::Threads)
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/lib/serialize PajladaSerialize)
target_link_libraries(chatterino-test PajladaSerialize)
set_property(TARGET chatterino-test PROPERTY CXX_STANDARD 17)
set_property(TARGET chatterino-test PROPERTY CXX_STANDARD_REQUIRED ON)
# gtest_discover_tests(chatterino-test)
if (USE_SYSTEM_PAJLADA_SETTINGS)
find_package(PajladaSettings REQUIRED)
else()
message(FATAL_ERROR "This cmake file is only intended for tests right now. Use qmake to build chatterino2")
if (NOT EXISTS "${CMAKE_SOURCE_DIR}/lib/settings/CMakeLists.txt")
message(FATAL_ERROR "Submodules probably not loaded, unable to find lib/settings/CMakeLists.txt")
endif()
add_subdirectory("${CMAKE_SOURCE_DIR}/lib/settings" EXCLUDE_FROM_ALL)
endif()
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if (BUILD_APP)
add_subdirectory(src)
endif ()
if (BUILD_TESTS)
enable_testing()
add_subdirectory(tests)
endif ()
feature_summary(WHAT ALL)