From 9dc03c4f0f94485202d3947df981d35fce6fa4bd Mon Sep 17 00:00:00 2001 From: Marco Trevisan Date: Fri, 9 Mar 2018 21:48:47 +0100 Subject: [PATCH] Linux ARM compile fixes (#4399) This fixes errors when compiling in ARM --- Telegram/SourceFiles/apiwrap.h | 2 +- Telegram/SourceFiles/base/build_config.h | 4 ++++ Telegram/SourceFiles/core/crash_reports.cpp | 6 +++++- Telegram/SourceFiles/data/data_media_types.h | 2 +- Telegram/SourceFiles/data/data_types.h | 2 +- Telegram/SourceFiles/history/history_item.h | 2 +- Telegram/SourceFiles/history/history_media.h | 2 +- Telegram/SourceFiles/info/info_content_widget.h | 2 +- Telegram/SourceFiles/info/info_memento.h | 2 +- Telegram/SourceFiles/info/info_wrap_widget.h | 2 +- .../SourceFiles/info/profile/info_profile_values.h | 2 +- .../SourceFiles/platform/linux/linux_glibc_wraps_32.c | 10 +++++++++- .../SourceFiles/platform/linux/linux_glibc_wraps_64.c | 11 ++++++++++- Telegram/SourceFiles/storage/storage_shared_media.h | 2 +- Telegram/gyp/linux_glibc_wraps.gyp | 2 +- Telegram/gyp/settings_linux.gypi | 2 +- 16 files changed, 40 insertions(+), 15 deletions(-) diff --git a/Telegram/SourceFiles/apiwrap.h b/Telegram/SourceFiles/apiwrap.h index dc742a7bfd..5a1aee22fe 100644 --- a/Telegram/SourceFiles/apiwrap.h +++ b/Telegram/SourceFiles/apiwrap.h @@ -23,7 +23,7 @@ struct SendingAlbum; enum class SendMediaType; namespace Storage { -enum class SharedMediaType : char; +enum class SharedMediaType : signed char; struct PreparedList; } // namespace Storage diff --git a/Telegram/SourceFiles/base/build_config.h b/Telegram/SourceFiles/base/build_config.h index e88faeb651..4640bce946 100644 --- a/Telegram/SourceFiles/base/build_config.h +++ b/Telegram/SourceFiles/base/build_config.h @@ -47,6 +47,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #define ARCH_CPU_X86_FAMILY 1 #define ARCH_CPU_X86 1 #define ARCH_CPU_32_BITS 1 +#elif defined(__aarch64__) +#define ARCH_CPU_64_BITS 1 +#elif defined(_M_ARM) || defined(__arm__) +#define ARCH_CPU_32_BITS 1 #else #error Please add support for your architecture in base/build_config.h #endif diff --git a/Telegram/SourceFiles/core/crash_reports.cpp b/Telegram/SourceFiles/core/crash_reports.cpp index 9480e51f22..6b104caa86 100644 --- a/Telegram/SourceFiles/core/crash_reports.cpp +++ b/Telegram/SourceFiles/core/crash_reports.cpp @@ -545,7 +545,11 @@ const dump &operator<<(const dump &stream, const wchar_t *str) { if (!ReportFile) return stream; for (int i = 0, l = wcslen(str); i < l; ++i) { - if (str[i] >= 0 && str[i] < 128) { + if ( +#if !defined(__WCHAR_UNSIGNED__) + str[i] >= 0 && +#endif + str[i] < 128) { SafeWriteChar(char(str[i])); } else { SafeWriteChar('?'); diff --git a/Telegram/SourceFiles/data/data_media_types.h b/Telegram/SourceFiles/data/data_media_types.h index e60aeece4e..915cbce2dc 100644 --- a/Telegram/SourceFiles/data/data_media_types.h +++ b/Telegram/SourceFiles/data/data_media_types.h @@ -16,7 +16,7 @@ class enum_mask; } // namespace base namespace Storage { -enum class SharedMediaType : char; +enum class SharedMediaType : signed char; using SharedMediaTypesMask = base::enum_mask; } // namespace Storage diff --git a/Telegram/SourceFiles/data/data_types.h b/Telegram/SourceFiles/data/data_types.h index 244babce46..32b92e19ba 100644 --- a/Telegram/SourceFiles/data/data_types.h +++ b/Telegram/SourceFiles/data/data_types.h @@ -268,7 +268,7 @@ constexpr auto CancelledWebPageId = WebPageId(0xFFFFFFFFFFFFFFFFULL); using PreparedPhotoThumbs = QMap; // [0] == -1 -- counting, [0] == -2 -- could not count -using VoiceWaveform = QVector; +using VoiceWaveform = QVector; enum ActionOnLoad { ActionOnLoadNone, diff --git a/Telegram/SourceFiles/history/history_item.h b/Telegram/SourceFiles/history/history_item.h index e697ead2a4..62000e511e 100644 --- a/Telegram/SourceFiles/history/history_item.h +++ b/Telegram/SourceFiles/history/history_item.h @@ -23,7 +23,7 @@ class enum_mask; } // namespace base namespace Storage { -enum class SharedMediaType : char; +enum class SharedMediaType : signed char; using SharedMediaTypesMask = base::enum_mask; } // namespace Storage diff --git a/Telegram/SourceFiles/history/history_media.h b/Telegram/SourceFiles/history/history_media.h index 2f2a6b6622..11424a6c52 100644 --- a/Telegram/SourceFiles/history/history_media.h +++ b/Telegram/SourceFiles/history/history_media.h @@ -18,7 +18,7 @@ class enum_mask; } // namespace base namespace Storage { -enum class SharedMediaType : char; +enum class SharedMediaType : signed char; using SharedMediaTypesMask = base::enum_mask; } // namespace Storage diff --git a/Telegram/SourceFiles/info/info_content_widget.h b/Telegram/SourceFiles/info/info_content_widget.h index af08bf641d..f0053ca20f 100644 --- a/Telegram/SourceFiles/info/info_content_widget.h +++ b/Telegram/SourceFiles/info/info_content_widget.h @@ -12,7 +12,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "info/info_wrap_widget.h" namespace Storage { -enum class SharedMediaType : char; +enum class SharedMediaType : signed char; } // namespace Storage namespace Ui { diff --git a/Telegram/SourceFiles/info/info_memento.h b/Telegram/SourceFiles/info/info_memento.h index 103bcf9c86..29b0c12b37 100644 --- a/Telegram/SourceFiles/info/info_memento.h +++ b/Telegram/SourceFiles/info/info_memento.h @@ -13,7 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "window/section_memento.h" namespace Storage { -enum class SharedMediaType : char; +enum class SharedMediaType : signed char; } // namespace Storage namespace Data { diff --git a/Telegram/SourceFiles/info/info_wrap_widget.h b/Telegram/SourceFiles/info/info_wrap_widget.h index 72c41be6d9..915db2e46a 100644 --- a/Telegram/SourceFiles/info/info_wrap_widget.h +++ b/Telegram/SourceFiles/info/info_wrap_widget.h @@ -12,7 +12,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "window/section_widget.h" namespace Storage { -enum class SharedMediaType : char; +enum class SharedMediaType : signed char; } // namespace Storage namespace Data { diff --git a/Telegram/SourceFiles/info/profile/info_profile_values.h b/Telegram/SourceFiles/info/profile/info_profile_values.h index 7a78f2fc02..91709631cd 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_values.h +++ b/Telegram/SourceFiles/info/profile/info_profile_values.h @@ -18,7 +18,7 @@ class SlideWrap; } // namespace Ui namespace Storage { -enum class SharedMediaType : char; +enum class SharedMediaType : signed char; } // namespace Storage namespace Info { diff --git a/Telegram/SourceFiles/platform/linux/linux_glibc_wraps_32.c b/Telegram/SourceFiles/platform/linux/linux_glibc_wraps_32.c index e0982c336a..c659b6ede5 100644 --- a/Telegram/SourceFiles/platform/linux/linux_glibc_wraps_32.c +++ b/Telegram/SourceFiles/platform/linux/linux_glibc_wraps_32.c @@ -8,8 +8,16 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include #include +#if defined(_M_IX86) || defined(__i386__) +#define GETTIME_GLIBC_VERSION "2.2" +#elif defined(_M_ARM) || defined(__arm__) +#define GETTIME_GLIBC_VERSION "2.4" +#else +#error Please add glibc wraps for your architecture +#endif + int __clock_gettime_glibc_old(clockid_t clk_id, struct timespec *tp); -__asm__(".symver __clock_gettime_glibc_old,clock_gettime@GLIBC_2.2"); +__asm__(".symver __clock_gettime_glibc_old,clock_gettime@GLIBC_" GETTIME_GLIBC_VERSION); int __wrap_clock_gettime(clockid_t clk_id, struct timespec *tp) { return __clock_gettime_glibc_old(clk_id, tp); diff --git a/Telegram/SourceFiles/platform/linux/linux_glibc_wraps_64.c b/Telegram/SourceFiles/platform/linux/linux_glibc_wraps_64.c index 1292278aa2..436ee34656 100644 --- a/Telegram/SourceFiles/platform/linux/linux_glibc_wraps_64.c +++ b/Telegram/SourceFiles/platform/linux/linux_glibc_wraps_64.c @@ -7,8 +7,17 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include +#if defined(_M_X64) || defined(__x86_64__) +#define GETTIME_GLIBC_VERSION "2.2.5" +#elif defined(__aarch64__) +#define GETTIME_GLIBC_VERSION "2.17" +#else +#error Please add glibc wraps for your architecture +#endif + int __clock_gettime_glibc_old(clockid_t clk_id, struct timespec *tp); -__asm__(".symver __clock_gettime_glibc_old,clock_gettime@GLIBC_2.2.5"); +__asm__(".symver __clock_gettime_glibc_old,clock_gettime@GLIBC_" GETTIME_GLIBC_VERSION); + int __wrap_clock_gettime(clockid_t clk_id, struct timespec *tp) { return __clock_gettime_glibc_old(clk_id, tp); diff --git a/Telegram/SourceFiles/storage/storage_shared_media.h b/Telegram/SourceFiles/storage/storage_shared_media.h index 0bd27860df..dab7006cf5 100644 --- a/Telegram/SourceFiles/storage/storage_shared_media.h +++ b/Telegram/SourceFiles/storage/storage_shared_media.h @@ -14,7 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL namespace Storage { // Allow forward declarations. -enum class SharedMediaType : char { +enum class SharedMediaType : signed char { Photo, Video, PhotoVideo, diff --git a/Telegram/gyp/linux_glibc_wraps.gyp b/Telegram/gyp/linux_glibc_wraps.gyp index cdb25b8e1b..824708c3ab 100644 --- a/Telegram/gyp/linux_glibc_wraps.gyp +++ b/Telegram/gyp/linux_glibc_wraps.gyp @@ -14,7 +14,7 @@ 'sources': [ '../SourceFiles/platform/linux/linux_glibc_wraps.c', ], - 'conditions': [[ '"