1
0

Android build cleanup (#4734)

* Android build cleanup

* Remove unnecessary workaround

* Remove more unnecessities

* Bump cmake version
This commit is contained in:
Mat 2020-05-10 19:18:28 +03:00 committed by GitHub
parent 84289a2ba9
commit e053f72db8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 17 additions and 45 deletions

View File

@ -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)

View File

@ -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

View File

@ -230,7 +230,7 @@ std::unique_ptr<cLogger::cListener> MakeConsoleListener(bool a_IsService)
{
return cpp14::make_unique<cVanillaCPPConsoleListener>();
}
#elif (defined (__linux) && !defined(ANDROID)) || defined (__APPLE__)
#elif defined (__linux) || defined (__APPLE__)
// TODO: lookup terminal in terminfo
if (isatty(fileno(stdout)))
{

View File

@ -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 <execinfo.h>
#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

View File

@ -134,20 +134,20 @@ protected:
{
if (m_HasIPv6)
{
sendto(m_MainSock, m_Data.data(), static_cast<socklen_t>(m_Data.size()), 0, reinterpret_cast<const sockaddr *>(&m_AddrIPv6), static_cast<socklen_t>(sizeof(m_AddrIPv6)));
sendto(m_MainSock, m_Data.data(), m_Data.size(), 0, reinterpret_cast<const sockaddr *>(&m_AddrIPv6), static_cast<socklen_t>(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<socklen_t>(m_Data.size()), 0, reinterpret_cast<const sockaddr *>(&m_AddrIPv4), static_cast<socklen_t>(sizeof(m_AddrIPv4)));
sendto(m_SecondSock, m_Data.data(), m_Data.size(), 0, reinterpret_cast<const sockaddr *>(&m_AddrIPv4), static_cast<socklen_t>(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<socklen_t>(m_Data.size()), 0, reinterpret_cast<const sockaddr *>(&m_AddrIPv6), static_cast<socklen_t>(sizeof(m_AddrIPv6)));
sendto(m_MainSock, m_Data.data(), m_Data.size(), 0, reinterpret_cast<const sockaddr *>(&m_AddrIPv6), static_cast<socklen_t>(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<socklen_t>(m_Data.size()), 0, reinterpret_cast<const sockaddr *>(&m_AddrIPv4), static_cast<socklen_t>(sizeof(m_AddrIPv4)));
sendto(m_MainSock, m_Data.data(), m_Data.size(), 0, reinterpret_cast<const sockaddr *>(&m_AddrIPv4), static_cast<socklen_t>(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<int>(sendto(m_SecondarySock, a_Payload.data(), static_cast<socklen_t>(a_Payload.size()), 0, reinterpret_cast<const sockaddr *>(&sa), static_cast<socklen_t>(salen)));
NumSent = static_cast<int>(sendto(m_SecondarySock, a_Payload.data(), a_Payload.size(), 0, reinterpret_cast<const sockaddr *>(&sa), static_cast<socklen_t>(salen)));
}
else
{
// Need to convert IPv4 to IPv6 address before sending:
sockaddr_in6 IPv6;
ConvertIPv4ToMappedIPv6(*reinterpret_cast<sockaddr_in *>(&sa), IPv6);
NumSent = static_cast<int>(sendto(m_MainSock, a_Payload.data(), static_cast<socklen_t>(a_Payload.size()), 0, reinterpret_cast<const sockaddr *>(&IPv6), static_cast<socklen_t>(sizeof(IPv6))));
NumSent = static_cast<int>(sendto(m_MainSock, a_Payload.data(), a_Payload.size(), 0, reinterpret_cast<const sockaddr *>(&IPv6), static_cast<socklen_t>(sizeof(IPv6))));
}
}
else
{
NumSent = static_cast<int>(sendto(m_MainSock, a_Payload.data(), static_cast<socklen_t>(a_Payload.size()), 0, reinterpret_cast<const sockaddr *>(&sa), static_cast<socklen_t>(salen)));
NumSent = static_cast<int>(sendto(m_MainSock, a_Payload.data(), a_Payload.size(), 0, reinterpret_cast<const sockaddr *>(&sa), static_cast<socklen_t>(salen)));
}
break;
}
@ -304,7 +304,7 @@ bool cUDPEndpointImpl::Send(const AString & a_Payload, const AString & a_Host, U
case AF_INET6:
{
reinterpret_cast<sockaddr_in6 *>(&sa)->sin6_port = htons(a_Port);
NumSent = static_cast<int>(sendto(m_MainSock, a_Payload.data(), static_cast<socklen_t>(a_Payload.size()), 0, reinterpret_cast<const sockaddr *>(&sa), static_cast<socklen_t>(salen)));
NumSent = static_cast<int>(sendto(m_MainSock, a_Payload.data(), a_Payload.size(), 0, reinterpret_cast<const sockaddr *>(&sa), static_cast<socklen_t>(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<socklen_t>(sizeof(buf));
sockaddr_storage sa;
socklen_t salen = static_cast<socklen_t>(sizeof(sa));
auto len = recvfrom(a_Socket, buf, buflen, 0, reinterpret_cast<sockaddr *>(&sa), &salen);
auto len = recvfrom(a_Socket, buf, sizeof(buf), 0, reinterpret_cast<sockaddr *>(&sa), &salen);
if (len >= 0)
{
// Convert the remote IP address to a string:

View File

@ -10,20 +10,6 @@
#ifdef ANDROID
// Workaround for Android NDK builds that do not support std::to_string
namespace std
{
template <typename T>
std::string to_string(T Value)
{
std::ostringstream TempStream;
TempStream << Value;
return TempStream.str();
}
}
#endif
#ifdef _MSC_VER
#include <dbghelp.h>
#endif // _MSC_VER