fix android compile, have makefile pull in libuv for cmake on android

pull/729/head
Jeff Becker 5 years ago
parent 909e0399d6
commit 43cb62af16
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -4,6 +4,8 @@ SIGN = gpg --sign --detach
REPO := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) REPO := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
BUILD_ROOT = $(REPO)/build
DESTDIR ?= DESTDIR ?=
CC ?= cc CC ?= cc
@ -26,6 +28,9 @@ SHADOW_PARSE ?= $(PYTHON) $(SHADOW_SRC)/src/tools/parse-shadow.py - -m 0 --packe
SHADOW_PLOT ?= $(PYTHON) $(SHADOW_SRC)/src/tools/plot-shadow.py -d $(REPO) LokiNET -c $(SHADOW_CONFIG) -r 10000 -e '.*' SHADOW_PLOT ?= $(PYTHON) $(SHADOW_SRC)/src/tools/plot-shadow.py -d $(REPO) LokiNET -c $(SHADOW_CONFIG) -r 10000 -e '.*'
SHADOW_OPTS ?= SHADOW_OPTS ?=
LIBUV_VERSION ?= v1.30.1
LIBUV_PREFIX = $(BUILD_ROOT)/libuv
TESTNET_ROOT=/tmp/lokinet_testnet_tmp TESTNET_ROOT=/tmp/lokinet_testnet_tmp
TESTNET_CONF=$(TESTNET_ROOT)/supervisor.conf TESTNET_CONF=$(TESTNET_ROOT)/supervisor.conf
TESTNET_LOG=$(TESTNET_ROOT)/testnet.log TESTNET_LOG=$(TESTNET_ROOT)/testnet.log
@ -83,7 +88,6 @@ ifdef NINJA
endif endif
BUILD_ROOT = $(REPO)/build
SCAN_BUILD ?= scan-build SCAN_BUILD ?= scan-build
@ -113,13 +117,16 @@ LINT_FILES = $(wildcard llarp/*.cpp)
LINT_CHECK = $(LINT_FILES:.cpp=.cpp-check) LINT_CHECK = $(LINT_FILES:.cpp=.cpp-check)
clean: clean: android-clean
rm -f $(TARGETS) rm -f $(TARGETS)
rm -rf $(BUILD_ROOT) rm -rf $(BUILD_ROOT)
rm -f $(SHADOW_PLUGIN) $(SHADOW_CONFIG) rm -f $(SHADOW_PLUGIN) $(SHADOW_CONFIG)
rm -f *.sig rm -f *.sig
rm -f *.a *.so rm -f *.a *.so
android-clean:
rm -rf $(ANDROID_DIR)/.externalNativeBuild
debug-configure: debug-configure:
mkdir -p '$(BUILD_ROOT)' mkdir -p '$(BUILD_ROOT)'
(test x$(TOOLCHAIN) = x && $(CONFIG_CMD) -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DCMAKE_C_FLAGS='$(CFLAGS)' -DCMAKE_CXX_FLAGS='$(CXXFLAGS)') || (test x$(TOOLCHAIN) != x && $(CONFIG_CMD) -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DCMAKE_C_FLAGS='$(CFLAGS)' -DCMAKE_CXX_FLAGS='$(CXXFLAGS)' -DCMAKE_TOOLCHAIN_FILE=$(TOOLCHAIN) ) (test x$(TOOLCHAIN) = x && $(CONFIG_CMD) -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DCMAKE_C_FLAGS='$(CFLAGS)' -DCMAKE_CXX_FLAGS='$(CXXFLAGS)') || (test x$(TOOLCHAIN) != x && $(CONFIG_CMD) -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DCMAKE_C_FLAGS='$(CFLAGS)' -DCMAKE_CXX_FLAGS='$(CXXFLAGS)' -DCMAKE_TOOLCHAIN_FILE=$(TOOLCHAIN) )
@ -184,10 +191,17 @@ $(TEST_EXE): debug
test: $(TEST_EXE) test: $(TEST_EXE)
test x$(CROSS) = xOFF && $(TEST_EXE) || test x$(CROSS) = xON test x$(CROSS) = xOFF && $(TEST_EXE) || test x$(CROSS) = xON
android-gradle-prepare:
$(LIBUV_PREFIX):
mkdir -p $(BUILD_ROOT)
git clone -b "$(LIBUV_VERSION)" https://github.com/libuv/libuv "$(LIBUV_PREFIX)"
android-gradle-prepare: $(LIBUV_PREFIX)
rm -f $(ANDROID_PROPS) rm -f $(ANDROID_PROPS)
rm -f $(ANDROID_LOCAL_PROPS) rm -f $(ANDROID_LOCAL_PROPS)
echo "#auto generated don't modify kthnx" >> $(ANDROID_PROPS) echo "#auto generated don't modify kthnx" >> $(ANDROID_PROPS)
echo "libuvsrc=$(LIBUV_PREFIX)" >> $(ANDROID_PROPS)
echo "lokinetCMake=$(REPO)/CMakeLists.txt" >> $(ANDROID_PROPS) echo "lokinetCMake=$(REPO)/CMakeLists.txt" >> $(ANDROID_PROPS)
echo "org.gradle.parallel=true" >> $(ANDROID_PROPS) echo "org.gradle.parallel=true" >> $(ANDROID_PROPS)
echo "org.gradle.jvmargs=-Xmx1536M" >> $(ANDROID_PROPS) echo "org.gradle.jvmargs=-Xmx1536M" >> $(ANDROID_PROPS)
@ -223,7 +237,7 @@ abyss: debug
$(ABYSS_EXE) $(ABYSS_EXE)
format: format:
clang-format -i $$(find daemon llarp include libabyss | grep -E '\.[h,c](pp)?$$') clang-format -i $$(find jni daemon llarp include libabyss | grep -E '\.[h,c](pp)?$$')
analyze-config: clean analyze-config: clean
mkdir -p '$(BUILD_ROOT)' mkdir -p '$(BUILD_ROOT)'

@ -33,7 +33,7 @@ android {
externalNativeBuild { externalNativeBuild {
cmake { cmake {
targets "lokinetandroid" targets "lokinetandroid"
arguments "-DANDROID=ON", "-DANDROID_STL=c++_static", "-DANDROID_ARM_NEON=TRUE" arguments "-DANDROID=ON", "-DANDROID_STL=c++_static", "-DANDROID_ARM_NEON=TRUE", "-DLIBUV_ROOT=" + libuvsrc, "-DANDROID_TOOLCHAIN=clang", "-DANDROID_ARM_MODE=arm"
cppFlags "-fexceptions -std=c++14 -frtti" cppFlags "-fexceptions -std=c++14 -frtti"
} }
} }
@ -68,7 +68,6 @@ android {
externalNativeBuild { externalNativeBuild {
cmake { cmake {
path lokinetCMake path lokinetCMake
} }
} }
} }

@ -9,14 +9,29 @@ if (STATIC_LINK_RUNTIME)
set(LIBUV_USE_STATIC ON) set(LIBUV_USE_STATIC ON)
endif() endif()
find_package(LibUV 1.28.0 REQUIRED) if(LIBUV_ROOT)
include_directories(SYSTEM ${LIBUV_INCLUDE_DIRS}) add_subdirectory(${LIBUV_ROOT})
set(LIBUV_INCLUDE_DIRS ${LIBUV_ROOT}/include)
set(LIBUV_LIBRARY uv_a)
add_definitions(-D_LARGEFILE_SOURCE)
add_definitions(-D_FILE_OFFSET_BITS=64)
else()
find_package(LibUV 1.28.0 REQUIRED)
endif()
include_directories(${LIBUV_INCLUDE_DIRS})
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
set(FS_LIB stdc++fs) set(FS_LIB stdc++fs)
get_filename_component(LIBTUNTAP_IMPL ${TT_ROOT}/tuntap-unix-linux.c ABSOLUTE) get_filename_component(LIBTUNTAP_IMPL ${TT_ROOT}/tuntap-unix-linux.c ABSOLUTE)
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Android") elseif(${CMAKE_SYSTEM_NAME} MATCHES "Android")
set(FS_LIB stdc++fs) find_library(FS_LIB NAMES c++fs c++experimental stdc++fs)
if(FS_LIB STREQUAL FS_LIB-NOTFOUND)
add_subdirectory(vendor)
include_directories("${CMAKE_CURRENT_LIST_DIR}/../vendor/cppbackport-master/lib")
add_definitions(-DLOKINET_USE_CPPBACKPORT)
set(FS_LIB cppbackport)
endif()
get_filename_component(LIBTUNTAP_IMPL ${TT_ROOT}/tuntap-unix-linux.c ABSOLUTE) get_filename_component(LIBTUNTAP_IMPL ${TT_ROOT}/tuntap-unix-linux.c ABSOLUTE)
elseif (${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD") elseif (${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD")
set(LIBTUNTAP_IMPL ${TT_ROOT}/tuntap-unix-openbsd.c ${TT_ROOT}/tuntap-unix-bsd.c) set(LIBTUNTAP_IMPL ${TT_ROOT}/tuntap-unix-openbsd.c ${TT_ROOT}/tuntap-unix-bsd.c)

@ -115,9 +115,6 @@ extern "C"
llarp::RouterContact * llarp::RouterContact *
llarp_main_getDatabase(struct llarp_main *ptr, byte_t *pk); llarp_main_getDatabase(struct llarp_main *ptr, byte_t *pk);
llarp::handlers::TunEndpoint *
main_router_getFirstTunEndpoint(struct llarp_main *ptr);
llarp_tun_io * llarp_tun_io *
main_router_getRange(struct llarp_main *ptr); main_router_getRange(struct llarp_main *ptr);

@ -14,6 +14,7 @@
struct llarp_ev_loop; struct llarp_ev_loop;
struct llarp_nodedb; struct llarp_nodedb;
struct llarp_nodedb_iter; struct llarp_nodedb_iter;
struct llarp_main;
namespace llarp namespace llarp
{ {
@ -118,4 +119,7 @@ namespace llarp
}; };
} // namespace llarp } // namespace llarp
llarp::Context *
llarp_main_get_context(llarp_main *m);
#endif #endif

@ -1,6 +1,8 @@
#include <llarp.h> #include <llarp.h>
#include <config/config.hpp> #include <config/config.hpp>
#include <util/fs.hpp> #include <util/fs.hpp>
#include <llarp.hpp>
#include <router/router.hpp>
#include <jni.h> #include <jni.h>
#include <signal.h> #include <signal.h>
@ -75,13 +77,33 @@ struct AndroidMain
const char* const char*
GetIfAddr() GetIfAddr()
{ {
std::string addr;
if(m_impl) if(m_impl)
{ {
auto tun = main_router_getFirstTunEndpoint(m_impl); auto* ctx = llarp_main_get_context(m_impl);
if(tun) if(!ctx)
return tun->tunif.ifaddr;
}
return ""; return "";
ctx->router->hiddenServiceContext().ForEachService(
[&addr](const std::string&,
const llarp::service::Endpoint_ptr& ep) -> bool {
if(addr.empty())
{
if(ep->HasIfAddr())
{
// TODO: v4
const auto ip = ep->GetIfAddr();
if(ip.h)
{
addr = ip.ToString();
return false;
}
}
}
return true;
});
}
return addr.c_str();
} }
int int
@ -89,9 +111,9 @@ struct AndroidMain
{ {
if(m_impl) if(m_impl)
{ {
auto tun = main_router_getFirstTunEndpoint(m_impl); auto* ctx = llarp_main_get_context(m_impl);
if(tun) if(!ctx)
return tun->tunif.netmask; return -1;
} }
return -1; return -1;
} }
@ -99,8 +121,10 @@ struct AndroidMain
void void
SetVPN_FD(int rfd, int wfd) SetVPN_FD(int rfd, int wfd)
{ {
if(m_impl) (void)rfd;
llarp_main_inject_vpn_fd(m_impl, rfd, wfd); (void)wfd;
// if(m_impl)
// llarp_main_inject_vpn_fd(m_impl, rfd, wfd);
} }
/// stop daemon thread /// stop daemon thread

@ -53,7 +53,12 @@ set(LIB_UTIL_SRC
add_library(${UTIL_LIB} STATIC ${LIB_UTIL_SRC}) add_library(${UTIL_LIB} STATIC ${LIB_UTIL_SRC})
target_include_directories(${UTIL_LIB} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/include) target_include_directories(${UTIL_LIB} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/include)
target_link_libraries(${UTIL_LIB} PUBLIC ${CRYPTOGRAPHY_LIB} ${FS_LIB}) if(ANDROID)
set(LOG_LIB log)
endif()
target_link_libraries(${UTIL_LIB} PUBLIC ${CRYPTOGRAPHY_LIB} ${FS_LIB} ${LOG_LIB})
target_link_libraries_system(${UTIL_LIB} absl::synchronization absl::hash absl::container nlohmann_json::nlohmann_json) target_link_libraries_system(${UTIL_LIB} absl::synchronization absl::hash absl::container nlohmann_json::nlohmann_json)
# cut back on fluff # cut back on fluff

@ -399,6 +399,12 @@ struct llarp_main
std::unique_ptr< llarp::Context > ctx; std::unique_ptr< llarp::Context > ctx;
}; };
llarp::Context *
llarp_main_get_context(llarp_main *m)
{
return m->ctx.get();
}
extern "C" extern "C"
{ {
struct llarp_main * struct llarp_main *

@ -6,7 +6,8 @@ namespace llarp
{ {
void void
AndroidLogStream::PreLog(std::stringstream& ss, LogLevel lvl, AndroidLogStream::PreLog(std::stringstream& ss, LogLevel lvl,
const char* fname, int lineno, const std::string&) const const char* fname, int lineno,
const std::string&) const
{ {
switch(lvl) switch(lvl)
{ {
@ -35,6 +36,10 @@ namespace llarp
{ {
} }
void AndroidLogStream::Tick(llarp_time_t)
{
}
void void
AndroidLogStream::Print(LogLevel lvl, const char* tag, const std::string& msg) AndroidLogStream::Print(LogLevel lvl, const char* tag, const std::string& msg)
{ {

@ -9,11 +9,11 @@ namespace llarp
struct AndroidLogStream : public ILogStream struct AndroidLogStream : public ILogStream
{ {
void void
PreLog(std::stringstream& s, LogLevel lvl, const char* fname, PreLog(std::stringstream& s, LogLevel lvl, const char* fname, int lineno,
int lineno, const std::string& nodename) const override; const std::string& nodename) const override;
void void
Print(LogLevel lvl,const char* filename, const std::string& msg) override; Print(LogLevel lvl, const char* filename, const std::string& msg) override;
void void
PostLog(std::stringstream&) const override; PostLog(std::stringstream&) const override;

Loading…
Cancel
Save