Move common code to cmake_helpers.

This commit is contained in:
John Preston 2019-11-18 00:34:34 +03:00
parent e5bd187d4d
commit 7b6fcb467a
24 changed files with 4 additions and 424 deletions

3
.gitmodules vendored
View File

@ -52,3 +52,6 @@
[submodule "Telegram/lib_storage"]
path = Telegram/lib_storage
url = https://github.com/desktop-app/lib_storage.git
[submodule "cmake"]
path = cmake
url = https://github.com/desktop-app/cmake_helpers.git

1
cmake Submodule

@ -0,0 +1 @@
Subproject commit 2a87436d39b8c0248a2e717b2ef1834329489ccc

View File

@ -1 +0,0 @@
add_subdirectory(external)

View File

@ -1,10 +0,0 @@
add_subdirectory(qt)
add_subdirectory(openssl)
add_subdirectory(variant)
add_subdirectory(ranges)
add_subdirectory(gsl)
add_subdirectory(crash_reports)
add_subdirectory(auto_updates)
add_subdirectory(zlib)
add_subdirectory(opus)
add_subdirectory(openal)

View File

@ -1,15 +0,0 @@
add_library(external_auto_updates INTERFACE IMPORTED GLOBAL)
if (WIN32)
add_subdirectory(lzma)
target_link_libraries(external_auto_updates
INTERFACE
external_lzma
)
else()
add_subdirectory(xz)
target_link_libraries(external_auto_updates
INTERFACE
external_xz
)
endif()

View File

@ -1,16 +0,0 @@
add_library(external_lzma INTERFACE IMPORTED GLOBAL)
target_include_directories(external_lzma SYSTEM
INTERFACE
${libs_loc}/lzma/C
)
target_link_directories(external_lzma
INTERFACE
${libs_loc}/lzma/C/Util/LzmaLib/$<IF:$<CONFIG:Debug>,Debug,Release>
)
target_link_libraries(external_lzma
INTERFACE
LzmaLib
)

View File

@ -1,14 +0,0 @@
add_library(external_crash_reports INTERFACE IMPORTED GLOBAL)
if (WIN32)
add_subdirectory(breakpad)
target_link_libraries(external_crash_reports
INTERFACE
external_breakpad
)
else()
target_link_libraries(external_crash_reports
INTERFACE
external_crashpad
)
endif()

View File

@ -1,18 +0,0 @@
add_library(external_breakpad INTERFACE IMPORTED GLOBAL)
target_include_directories(external_breakpad SYSTEM
INTERFACE
${libs_loc}/breakpad/src
)
target_link_libraries(external_breakpad
INTERFACE
windows/common
windows/handler/exception_handler
windows/crash_generation/crash_generation_client
)
target_link_directories(external_breakpad
INTERFACE
${libs_loc}/breakpad/src/out/$<IF:$<CONFIG:Debug>,Debug,Release>/obj/client
)

View File

@ -1,6 +0,0 @@
add_library(external_gsl INTERFACE IMPORTED GLOBAL)
target_include_directories(external_gsl SYSTEM
INTERFACE
${third_party_loc}/GSL/include
)

View File

@ -1,16 +0,0 @@
add_library(external_openal INTERFACE IMPORTED GLOBAL)
target_include_directories(external_openal SYSTEM
INTERFACE
${libs_loc}/openal-soft/include
)
target_link_directories(external_openal
INTERFACE
${libs_loc}/openal-soft/build/$<IF:$<CONFIG:Debug>,Debug,Release>
)
target_link_libraries(external_openal
INTERFACE
OpenAL32
)

View File

@ -1,17 +0,0 @@
add_library(external_openssl INTERFACE IMPORTED GLOBAL)
target_include_directories(external_openssl SYSTEM
INTERFACE
${libs_loc}/openssl_1_1_1/include
)
target_link_directories(external_openssl
INTERFACE
${libs_loc}/openssl_1_1_1/out32$<$<CONFIG:Debug>:.dbg>
)
target_link_libraries(external_openssl
INTERFACE
libcrypto
libssl
)

View File

@ -1,16 +0,0 @@
add_library(external_opus INTERFACE IMPORTED GLOBAL)
target_include_directories(external_opus SYSTEM
INTERFACE
${libs_loc}/opus/include
)
target_link_directories(external_opus
INTERFACE
${libs_loc}/opus/win32/VS2015/Win32/$<IF:$<CONFIG:Debug>,Debug,Release>
)
target_link_libraries(external_opus
INTERFACE
opus
)

View File

@ -1,60 +0,0 @@
add_library(external_qt INTERFACE IMPORTED GLOBAL)
target_include_directories(external_qt SYSTEM
INTERFACE
${qt_loc}/include
${qt_loc}/include/QtCore
${qt_loc}/include/QtGui
${qt_loc}/include/QtDBus
${qt_loc}/include/QtCore/${qt_version}
${qt_loc}/include/QtGui/${qt_version}
${qt_loc}/include/QtCore/${qt_version}/QtCore
${qt_loc}/include/QtGui/${qt_version}/QtGui
)
set(common_qt_libs
qwebp
qgif
qjpeg
Qt5PrintSupport
Qt5AccessibilitySupport
Qt5FontDatabaseSupport
Qt5EventDispatcherSupport
Qt5ThemeSupport
Qt5Network
Qt5Widgets
Qt5Gui
qtharfbuzz
qtlibpng
)
if (WIN32)
set(qt_libs
${common_qt_libs}
Qt5Core
Qt5WindowsUIAutomationSupport
qtmain
qwindows
qtfreetype
qtpcre2
)
set(qt_libs_list "")
foreach(lib ${qt_libs})
list(APPEND qt_libs_list "${lib}$<$<CONFIG:Debug>:d>")
endforeach()
else()
endif()
target_link_directories(external_qt
INTERFACE
${qt_loc}/lib
${qt_loc}/plugins
${qt_loc}/plugins/bearer
${qt_loc}/plugins/platforms
${qt_loc}/plugins/imageformats
)
target_link_libraries(external_qt
INTERFACE
${qt_libs_list}
)

View File

@ -1,17 +0,0 @@
set(qt_version 5.12.5)
if (WIN32)
set(qt_loc ${libs_loc}/Qt-${qt_version})
else()
endif()
set(Qt5_DIR ${qt_loc}/lib/cmake/Qt5)
find_package(Qt5 COMPONENTS Core Gui Widgets Network REQUIRED)
if (LINUX)
find_package(Qt5 COMPONENTS DBus)
endif()
set_property(GLOBAL PROPERTY AUTOGEN_SOURCE_GROUP "(gen)")
set_property(GLOBAL PROPERTY AUTOGEN_TARGETS_FOLDER "(gen)")

View File

@ -1,14 +0,0 @@
add_library(external_ranges INTERFACE IMPORTED GLOBAL)
target_include_directories(external_ranges SYSTEM
INTERFACE
${libs_loc}/range-v3/include
)
if (WIN32)
target_compile_options(external_ranges
INTERFACE
/experimental:preprocessor # need for range-v3 see https://github.com/ericniebler/range-v3#supported-compilers
/wd5105 # needed for `/experimental:preprocessor`, suppressing C5105 "macro expansion producing 'defined' has undefined behavior"
)
endif()

View File

@ -1,6 +0,0 @@
add_library(external_variant INTERFACE IMPORTED GLOBAL)
target_include_directories(external_variant SYSTEM
INTERFACE
${third_party_loc}/variant/include
)

View File

@ -1,24 +0,0 @@
add_library(external_zlib INTERFACE IMPORTED GLOBAL)
target_include_directories(external_zlib SYSTEM
INTERFACE
${libs_loc}/zlib
${libs_loc}/zlib/contrib/minizip
)
if (WIN32)
target_compile_definitions(external_zlib
INTERFACE
ZLIB_WINAPI
)
endif()
target_link_directories(external_zlib
INTERFACE
${libs_loc}/zlib/contrib/vstudio/vc14/x86/ZlibStat$<IF:$<CONFIG:Debug>,Debug,ReleaseWithoutAsm>
)
target_link_libraries(external_zlib
INTERFACE
zlibstat
)

View File

@ -1,13 +0,0 @@
function(force_include target_name file_path)
if (MSVC)
target_compile_options(${target_name}
PRIVATE
/FI${file_path}
)
else()
target_compile_options(${target_name}
PRIVATE
-include ${file_path}
)
endif()
endfunction()

View File

@ -1,8 +0,0 @@
function(generate_target parent_name postfix generated_files gen_dst)
add_custom_target(${parent_name}_${postfix} DEPENDS ${generated_files})
init_target_folder(${parent_name}_${postfix} "(gen)")
add_dependencies(${parent_name} ${parent_name}_${postfix})
target_sources(${parent_name} PRIVATE ${generated_files})
target_include_directories(${parent_name} PUBLIC ${gen_dst})
source_group("(gen)" FILES ${generated_files})
endfunction()

View File

@ -1,15 +0,0 @@
function(init_target_folder target_name folder_name)
if (NOT "${folder_name}" STREQUAL "")
set_target_properties(${target_name} PROPERTIES FOLDER ${folder_name})
endif()
endfunction()
function(init_target target_name) # init_target(my_target folder_name)
init_target_folder(${target_name} "${ARGV1}")
if (WIN32)
set_property(TARGET ${target_name} PROPERTY
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()
target_link_libraries(${target_name} PUBLIC common_options)
endfunction()

View File

@ -1,58 +0,0 @@
function(nice_target_sources target_name src_loc list)
set(writing_now "")
set(private_sources "")
set(public_sources "")
set(interface_sources "")
set(not_win_sources "")
set(not_mac_sources "")
set(not_linux_sources "")
foreach(file ${list})
if (${file} STREQUAL "PRIVATE" OR ${file} STREQUAL "PUBLIC" OR ${file} STREQUAL "INTERFACE")
set(writing_now ${file})
else()
set(full_name ${src_loc}/${file})
if (${file} MATCHES "(^|/)win/" OR ${file} MATCHES "(^|/)winrc/" OR ${file} MATCHES "(^|/)windows/" OR ${file} MATCHES "[_\\/]win\\.")
list(APPEND not_mac_sources ${full_name})
list(APPEND not_linux_sources ${full_name})
elseif (${file} MATCHES "(^|/)mac/" OR ${file} MATCHES "(^|/)darwin/" OR ${file} MATCHES "(^|/)osx/" OR ${file} MATCHES "[_\\/]mac\\." OR ${file} MATCHES "[_\\/]darwin\\." OR ${file} MATCHES "[_\\/]osx\\.")
list(APPEND not_win_sources ${full_name})
list(APPEND not_linux_sources ${full_name})
elseif (${file} MATCHES "(^|/)linux/" OR ${file} MATCHES "[_\\/]linux\\.")
list(APPEND not_win_sources ${full_name})
list(APPEND not_mac_sources ${full_name})
elseif (${file} MATCHES "(^|/)posix/" OR ${file} MATCHES "[_\\/]posix\\.")
list(APPEND not_win_sources ${full_name})
endif()
if ("${writing_now}" STREQUAL "PRIVATE")
list(APPEND private_sources ${full_name})
elseif ("${writing_now}" STREQUAL "PUBLIC")
list(APPEND public_sources ${full_name})
elseif ("${writing_now}" STREQUAL "INTERFACE")
list(APPEND interface_sources ${full_name})
else()
message(FATAL_ERROR "Unknown sources scope for target ${target_name}")
endif()
source_group(TREE ${src_loc} PREFIX Sources FILES ${full_name})
endif()
endforeach()
if (NOT "${public_sources}" STREQUAL "")
target_sources(${target_name} PUBLIC ${public_sources})
endif()
if (NOT "${private_sources}" STREQUAL "")
target_sources(${target_name} PRIVATE ${private_sources})
endif()
if (NOT "${interface_sources}" STREQUAL "")
target_sources(${target_name} INTERFACE ${interface_sources})
endif()
if (WIN32)
set_source_files_properties(${not_win_sources} PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties(${not_win_sources} PROPERTIES SKIP_AUTOGEN TRUE)
elseif (APPLE)
set_source_files_properties(${not_mac_sources} PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties(${not_mac_sources} PROPERTIES SKIP_AUTOGEN TRUE)
elseif (LINUX)
set_source_files_properties(${not_linux_sources} PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties(${not_linux_sources} PROPERTIES SKIP_AUTOGEN TRUE)
endif()
endfunction()

View File

@ -1,16 +0,0 @@
add_library(common_options INTERFACE)
target_compile_features(common_options
INTERFACE
cxx_std_17
)
target_compile_definitions(common_options
INTERFACE
UNICODE
)
if (WIN32)
include(cmake/options_win.cmake)
else()
endif()

View File

@ -1,61 +0,0 @@
target_compile_definitions(common_options
INTERFACE
WIN32
_WINDOWS
_UNICODE
UNICODE
_SCL_SECURE_NO_WARNINGS
_USING_V110_SDK71_
NOMINMAX
)
target_compile_options(common_options
INTERFACE
/permissive-
# /Qspectre
/W1
/WX
/MP # Enable multi process build.
/EHsc # Catch C++ exceptions only, extern C functions never throw a C++ exception.
/w14834 # [[nodiscard]]
/w15038 # wrong initialization order
/w14265 # class has virtual functions, but destructor is not virtual
/wd4068 # Disable "warning C4068: unknown pragma"
/Zc:wchar_t- # don't tread wchar_t as builtin type
)
target_link_options(common_options
INTERFACE
/NODEFAULTLIB:LIBCMT
)
target_link_libraries(common_options
INTERFACE
winmm
imm32
ws2_32
kernel32
user32
gdi32
winspool
comdlg32
advapi32
shell32
ole32
oleaut32
uuid
odbc32
odbccp32
Shlwapi
Iphlpapi
Gdiplus
Strmiids
Netapi32
Userenv
Version
Dwmapi
Wtsapi32
UxTheme
DbgHelp
Rstrtmgr
Crypt32
)

View File

@ -1,3 +0,0 @@
get_filename_component(libs_loc "../Libraries" REALPATH)
get_filename_component(third_party_loc "Telegram/ThirdParty" REALPATH)
get_filename_component(submodules_loc "Telegram" REALPATH)