Skip to content

Commit

Permalink
Build codegen utils with cmake.
Browse files Browse the repository at this point in the history
  • Loading branch information
john-preston committed Nov 8, 2019
1 parent 6a668fc commit b7fed03
Show file tree
Hide file tree
Showing 17 changed files with 322 additions and 4 deletions.
16 changes: 16 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
cmake_minimum_required(VERSION 3.12)
cmake_policy(SET CMP0076 NEW)
cmake_policy(SET CMP0091 NEW)

project(Telegram
LANGUAGES C CXX
VERSION 1.9.0
DESCRIPTION "Official Telegram Desktop messenger"
HOMEPAGE_URL "https://desktop.telegram.org"
)

include(cmake/constants.cmake)
include(cmake/functions.cmake)

add_subdirectory(cmake)
add_subdirectory(Telegram)
18 changes: 18 additions & 0 deletions Telegram/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
add_subdirectory(lib_rpl)
add_subdirectory(lib_crl)
add_subdirectory(lib_base)
add_subdirectory(codegen)

# get_filename_component(src_loc "./SourceFiles" REALPATH)

# add_executable(Telegram WIN32 MACOSX_BUNDLE
# ${src_loc}/main.cpp
# )
# init_target(Telegram)

# force_include(Telegram stdafx.h)

# target_link_libraries(Telegram
# PRIVATE
# lib_base
# )
2 changes: 1 addition & 1 deletion Telegram/lib_base
Submodule lib_base updated 1 files
+143 −0 CMakeLists.txt
2 changes: 1 addition & 1 deletion Telegram/lib_crl
Submodule lib_crl updated 1 files
+62 −0 CMakeLists.txt
2 changes: 1 addition & 1 deletion Telegram/lib_rpl
Submodule lib_rpl updated 1 files
+47 −0 CMakeLists.txt
72 changes: 72 additions & 0 deletions cmake/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
add_subdirectory(external)

add_library(common INTERFACE)

target_compile_features(common
INTERFACE
cxx_std_17
)

target_compile_definitions(common
INTERFACE
UNICODE
)

if (WIN32)
target_compile_definitions(common
INTERFACE
WIN32
_WINDOWS
_UNICODE
UNICODE
# HAVE_STDINT_H
# ZLIB_WINAPI
_SCL_SECURE_NO_WARNINGS
_USING_V110_SDK71_
NOMINMAX
)
target_compile_options(common
INTERFACE
/permissive-
# /Qspectre
/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
/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"
/Zc:wchar_t- # don't tread wchar_t as builtin type
)
target_link_libraries(common
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
)
else()
endif()
8 changes: 8 additions & 0 deletions cmake/constants.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
get_filename_component(libs_loc "../Libraries" REALPATH)
get_filename_component(third_party_loc "Telegram/ThirdParty" REALPATH)

if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(build_debug 1)
else()
set(build_debug 0)
endif()
6 changes: 6 additions & 0 deletions cmake/external/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
add_subdirectory(qt)
add_subdirectory(openssl)
add_subdirectory(variant)
add_subdirectory(ranges)
add_subdirectory(gsl)
add_subdirectory(crash_reports)
15 changes: 15 additions & 0 deletions cmake/external/crash_reports/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
add_library(external_crash_reports INTERFACE IMPORTED GLOBAL)

add_subdirectory(breakpad)

if (WIN32)
target_link_libraries(external_crash_reports
INTERFACE
external_breakpad
)
else()
target_link_libraries(external_crash_reports
INTERFACE
external_crashpad
)
endif()
18 changes: 18 additions & 0 deletions cmake/external/crash_reports/breakpad/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
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
)
6 changes: 6 additions & 0 deletions cmake/external/gsl/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
add_library(external_gsl INTERFACE IMPORTED GLOBAL)

target_include_directories(external_gsl SYSTEM
INTERFACE
${third_party_loc}/GSL/include
)
6 changes: 6 additions & 0 deletions cmake/external/openssl/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
add_library(external_openssl INTERFACE IMPORTED GLOBAL)

target_include_directories(external_openssl SYSTEM
INTERFACE
${libs_loc}/openssl_1_1_1/include
)
67 changes: 67 additions & 0 deletions cmake/external/qt/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
add_library(external_qt INTERFACE IMPORTED GLOBAL)

set(qt_version 5.12.5)

if (WIN32)
set(qt_loc ${libs_loc}/Qt-${qt_version})
else()
endif()

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}
)
6 changes: 6 additions & 0 deletions cmake/external/ranges/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
add_library(external_ranges INTERFACE IMPORTED GLOBAL)

target_include_directories(external_ranges SYSTEM
INTERFACE
${libs_loc}/range-v3/include
)
6 changes: 6 additions & 0 deletions cmake/external/variant/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
add_library(external_variant INTERFACE IMPORTED GLOBAL)

target_include_directories(external_variant SYSTEM
INTERFACE
${third_party_loc}/variant/include
)
74 changes: 74 additions & 0 deletions cmake/functions.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
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()

function(init_target target_name)
set_property(TARGET ${target_name} PROPERTY
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endfunction()

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 "_win\.")
list(APPEND not_mac_sources ${full_name})
list(APPEND not_linux_sources ${full_name})
elseif (${file} MATCHES "/mac/" OR ${file} MATCHES "_mac\.")
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} 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)
elseif (APPLE)
set_source_files_properties(${not_mac_sources} PROPERTIES HEADER_FILE_ONLY TRUE)
elseif (LINUX)
set_source_files_properties(${not_linux_sources} PROPERTIES HEADER_FILE_ONLY TRUE)
endif()
endfunction()

0 comments on commit b7fed03

Please sign in to comment.