From e053f72db824a16c1cb59107315001473058e2bc Mon Sep 17 00:00:00 2001 From: Mat Date: Sun, 10 May 2020 19:18:28 +0300 Subject: Android build cleanup (#4734) * Android build cleanup * Remove unnecessary workaround * Remove more unnecessities * Bump cmake version --- android/CMakeLists.txt | 21 ++++----------------- android/compile.sh | 2 +- src/LoggerListeners.cpp | 2 +- src/OSSupport/StackTrace.cpp | 4 ++-- src/OSSupport/UDPEndpointImpl.cpp | 19 +++++++++---------- src/main.cpp | 14 -------------- 6 files changed, 17 insertions(+), 45 deletions(-) diff --git a/android/CMakeLists.txt b/android/CMakeLists.txt index 51df60cdc..408c416d1 100644 --- a/android/CMakeLists.txt +++ b/android/CMakeLists.txt @@ -1,28 +1,15 @@ -cmake_minimum_required (VERSION 3.7) +cmake_minimum_required (VERSION 3.12.4) project(Cuberite) # Set up Android parameters -add_definitions(-DANDROID) set(ANDROID TRUE) set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fPIE -pie") # We're crosscompiling for Android set(NO_NATIVE_OPTIMIZATION TRUE) -# SYSTEM flag to silence warnings for external headers -include_directories(SYSTEM - ../lib/ - ../src/ - ../lib/jsoncpp/include/ - ../lib/polarssl/include/ - ../lib/sqlitecpp/include/ - ../lib/sqlitecpp/sqlite3/ - ../lib/libevent/include/ -) - -# Disable some compiler warnings (the lazy way out) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-double-promotion -Wno-sign-conversion -Wno-unused-command-line-argument -s") - # Build the rest of the server add_subdirectory(../ Cuberite) + +# Strip debug symbols to reduce binary size +set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES LINK_FLAGS_RELEASE -s) diff --git a/android/compile.sh b/android/compile.sh index 0fee304cf..632026d40 100755 --- a/android/compile.sh +++ b/android/compile.sh @@ -4,7 +4,7 @@ set -e # This script cross-compiles cuberite for the android platform. It uses # the following enviroment variables -# CMAKE: Should be the path to a cmake executable of version 3.7+ +# CMAKE: Should be the path to a cmake executable of version 3.12.4+ # NDK: Should be the path to the android ndk root # (optional) TYPE: either Release or Debug, sets the build type # (optional) THREADS: The number of threads to use, default 4 diff --git a/src/LoggerListeners.cpp b/src/LoggerListeners.cpp index ffb141a9c..995cc4b20 100644 --- a/src/LoggerListeners.cpp +++ b/src/LoggerListeners.cpp @@ -230,7 +230,7 @@ std::unique_ptr MakeConsoleListener(bool a_IsService) { return cpp14::make_unique(); } - #elif (defined (__linux) && !defined(ANDROID)) || defined (__APPLE__) + #elif defined (__linux) || defined (__APPLE__) // TODO: lookup terminal in terminfo if (isatty(fileno(stdout))) { diff --git a/src/OSSupport/StackTrace.cpp b/src/OSSupport/StackTrace.cpp index b8f80f5f3..d252e1e83 100644 --- a/src/OSSupport/StackTrace.cpp +++ b/src/OSSupport/StackTrace.cpp @@ -7,7 +7,7 @@ #include "StackTrace.h" #ifdef _WIN32 #include "WinStackWalker.h" -#elif !defined(ANDROID) // The Android NDK has no execinfo header +#else #ifdef __GLIBC__ #include #endif @@ -30,7 +30,7 @@ void PrintStackTrace(void) } } sw; sw.ShowCallstack(); - #elif !defined(ANDROID) + #else #ifdef __GLIBC__ // Use the backtrace() function to get and output the stackTrace: // Code adapted from https://stackoverflow.com/questions/77005/how-to-generate-a-stacktrace-when-my-gcc-c-app-crashes diff --git a/src/OSSupport/UDPEndpointImpl.cpp b/src/OSSupport/UDPEndpointImpl.cpp index 3235ff91f..5984bc4e2 100644 --- a/src/OSSupport/UDPEndpointImpl.cpp +++ b/src/OSSupport/UDPEndpointImpl.cpp @@ -134,20 +134,20 @@ protected: { if (m_HasIPv6) { - sendto(m_MainSock, m_Data.data(), static_cast(m_Data.size()), 0, reinterpret_cast(&m_AddrIPv6), static_cast(sizeof(m_AddrIPv6))); + sendto(m_MainSock, m_Data.data(), m_Data.size(), 0, reinterpret_cast(&m_AddrIPv6), static_cast(sizeof(m_AddrIPv6))); } else if (m_HasIPv4) { // If the secondary socket is valid, it is an IPv4 socket, so use that: if (m_SecondSock != -1) { - sendto(m_SecondSock, m_Data.data(), static_cast(m_Data.size()), 0, reinterpret_cast(&m_AddrIPv4), static_cast(sizeof(m_AddrIPv4))); + sendto(m_SecondSock, m_Data.data(), m_Data.size(), 0, reinterpret_cast(&m_AddrIPv4), static_cast(sizeof(m_AddrIPv4))); } else { // Need an address conversion from IPv4 to IPv6-mapped-IPv4: ConvertIPv4ToMappedIPv6(m_AddrIPv4, m_AddrIPv6); - sendto(m_MainSock, m_Data.data(), static_cast(m_Data.size()), 0, reinterpret_cast(&m_AddrIPv6), static_cast(sizeof(m_AddrIPv6))); + sendto(m_MainSock, m_Data.data(), m_Data.size(), 0, reinterpret_cast(&m_AddrIPv6), static_cast(sizeof(m_AddrIPv6))); } } else @@ -164,7 +164,7 @@ protected: LOGD("UDP endpoint queued sendto: Name not resolved to IPv4 for an IPv4-only socket"); return; } - sendto(m_MainSock, m_Data.data(), static_cast(m_Data.size()), 0, reinterpret_cast(&m_AddrIPv4), static_cast(sizeof(m_AddrIPv4))); + sendto(m_MainSock, m_Data.data(), m_Data.size(), 0, reinterpret_cast(&m_AddrIPv4), static_cast(sizeof(m_AddrIPv4))); } } @@ -284,19 +284,19 @@ bool cUDPEndpointImpl::Send(const AString & a_Payload, const AString & a_Host, U if (IsValidSocket(m_SecondarySock)) { // The secondary socket, which is always IPv4, is present: - NumSent = static_cast(sendto(m_SecondarySock, a_Payload.data(), static_cast(a_Payload.size()), 0, reinterpret_cast(&sa), static_cast(salen))); + NumSent = static_cast(sendto(m_SecondarySock, a_Payload.data(), a_Payload.size(), 0, reinterpret_cast(&sa), static_cast(salen))); } else { // Need to convert IPv4 to IPv6 address before sending: sockaddr_in6 IPv6; ConvertIPv4ToMappedIPv6(*reinterpret_cast(&sa), IPv6); - NumSent = static_cast(sendto(m_MainSock, a_Payload.data(), static_cast(a_Payload.size()), 0, reinterpret_cast(&IPv6), static_cast(sizeof(IPv6)))); + NumSent = static_cast(sendto(m_MainSock, a_Payload.data(), a_Payload.size(), 0, reinterpret_cast(&IPv6), static_cast(sizeof(IPv6)))); } } else { - NumSent = static_cast(sendto(m_MainSock, a_Payload.data(), static_cast(a_Payload.size()), 0, reinterpret_cast(&sa), static_cast(salen))); + NumSent = static_cast(sendto(m_MainSock, a_Payload.data(), a_Payload.size(), 0, reinterpret_cast(&sa), static_cast(salen))); } break; } @@ -304,7 +304,7 @@ bool cUDPEndpointImpl::Send(const AString & a_Payload, const AString & a_Host, U case AF_INET6: { reinterpret_cast(&sa)->sin6_port = htons(a_Port); - NumSent = static_cast(sendto(m_MainSock, a_Payload.data(), static_cast(a_Payload.size()), 0, reinterpret_cast(&sa), static_cast(salen))); + NumSent = static_cast(sendto(m_MainSock, a_Payload.data(), a_Payload.size(), 0, reinterpret_cast(&sa), static_cast(salen))); break; } default: @@ -563,10 +563,9 @@ void cUDPEndpointImpl::Callback(evutil_socket_t a_Socket, short a_What) { // Receive datagram from the socket: char buf[64 KiB]; - socklen_t buflen = static_cast(sizeof(buf)); sockaddr_storage sa; socklen_t salen = static_cast(sizeof(sa)); - auto len = recvfrom(a_Socket, buf, buflen, 0, reinterpret_cast(&sa), &salen); + auto len = recvfrom(a_Socket, buf, sizeof(buf), 0, reinterpret_cast(&sa), &salen); if (len >= 0) { // Convert the remote IP address to a string: diff --git a/src/main.cpp b/src/main.cpp index 1df96663a..7411b410e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -10,20 +10,6 @@ -#ifdef ANDROID - // Workaround for Android NDK builds that do not support std::to_string - namespace std - { - template - std::string to_string(T Value) - { - std::ostringstream TempStream; - TempStream << Value; - return TempStream.str(); - } - } -#endif - #ifdef _MSC_VER #include #endif // _MSC_VER -- cgit v1.2.3