mirror of https://github.com/oxen-io/lokinet
fixes for ancient rpi toolchain
This commit is contained in:
parent
7a78832841
commit
960aa479e9
|
@ -51,7 +51,8 @@ set(THREADS_PREFER_PTHREAD_FLAG TRUE)
|
|||
find_package(Threads REQUIRED)
|
||||
|
||||
if(STATIC_LINK)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static" )
|
||||
add_compile_options(-static)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++ -static-libgcc -static" )
|
||||
endif()
|
||||
|
||||
if(DNS_PORT)
|
||||
|
@ -100,13 +101,19 @@ if(CMAKE_BUILD_TYPE MATCHES "[Dd][Ee][Bb][Uu][Gg]")
|
|||
endif()
|
||||
|
||||
if(NOT ANDROID)
|
||||
if (NOT USE_AVX2)
|
||||
if (USE_AVX2)
|
||||
set(CRYPTO_FLAGS -march=native)
|
||||
set(CMAKE_ASM_FLAGS "-march=native ${CMAKE_ASM_FLAGS} $ENV{ASFLAGS}")
|
||||
else()
|
||||
if(WIN32)
|
||||
set(CRYPTO_FLAGS -march=haswell -mtune=native)
|
||||
set(CMAKE_ASM_FLAGS "-march=haswell -mtune=native ${CMAKE_ASM_FLAGS} $ENV{ASFLAGS}")
|
||||
endif(NOT USE_AVX2)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
if(RPI)
|
||||
add_definitions(-DRPI)
|
||||
set(WITH_STATIC ON)
|
||||
endif()
|
||||
|
||||
add_compile_options(${OPTIMIZE_FLAGS} ${CRYPTO_FLAGS})
|
||||
|
@ -565,7 +572,11 @@ if(WITH_STATIC)
|
|||
target_link_libraries(${PLATFORM_LIB} Threads::Threads)
|
||||
endif()
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
||||
target_link_libraries(${PLATFORM_LIB} -lcap)
|
||||
if(RPI)
|
||||
target_link_libraries(${PLATFORM_LIB} -lrt)
|
||||
else()
|
||||
target_link_libraries(${PLATFORM_LIB} -lcap)
|
||||
endif()
|
||||
endif()
|
||||
target_link_libraries(${STATIC_LIB} ${CRYPTOGRAPHY_LIB} ${LIBS} ${PLATFORM_LIB})
|
||||
if(NOT WITH_SHARED)
|
||||
|
|
5
Makefile
5
Makefile
|
@ -47,11 +47,14 @@ JAVA_HOME ?= /usr/lib/jvm/default-java
|
|||
|
||||
JSONRPC ?= OFF
|
||||
CXX17 ?= ON
|
||||
AVX2 ?= ON
|
||||
RPI ?= OFF
|
||||
STATIC_LINK ?= OFF
|
||||
|
||||
|
||||
BUILD_ROOT = $(REPO)/build
|
||||
|
||||
CONFIG_CMD = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "cmake -DUSE_CXX17=$(CXX17) -DUSE_LIBABYSS=$(JSONRPC) '$(REPO)'")
|
||||
CONFIG_CMD = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "cmake -DSTATIC_LINK=$(STATIC_LINK) -DUSE_AVX2=$(AVX2) -DUSE_CXX17=$(CXX17) -DUSE_LIBABYSS=$(JSONRPC) -DRPI=$(RPI) '$(REPO)'")
|
||||
|
||||
SCAN_BUILD ?= scan-build
|
||||
ANALYZE_CONFIG_CMD = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "$(SCAN_BUILD) cmake -DUSE_LIBABYSS=$(JSONRPC) '$(REPO)'")
|
||||
|
|
|
@ -43,7 +43,8 @@
|
|||
#include <sys/timeb.h>
|
||||
#include <wincrypt.h>
|
||||
#include <bcrypt.h>
|
||||
typedef NTSTATUS (FAR PASCAL* CNGAPI_DRBG)(BCRYPT_ALG_HANDLE, UCHAR*, ULONG, ULONG);
|
||||
typedef NTSTATUS(FAR PASCAL *CNGAPI_DRBG)(BCRYPT_ALG_HANDLE, UCHAR *, ULONG,
|
||||
ULONG);
|
||||
#ifdef __BORLANDC__
|
||||
#define _ftime ftime
|
||||
#define _timeb timeb
|
||||
|
@ -95,11 +96,19 @@ typedef struct Salsa20Random_
|
|||
uint64_t nonce;
|
||||
} Salsa20Random;
|
||||
|
||||
static Salsa20RandomGlobal global = {SODIUM_C99(.initialized =) 0,
|
||||
SODIUM_C99(.random_data_source_fd =) - 1};
|
||||
static Salsa20RandomGlobal global = {
|
||||
SODIUM_C99(.initialized =) 0,
|
||||
SODIUM_C99(.random_data_source_fd =) - 1,
|
||||
SODIUM_C99(.getrandom_available =) 0,
|
||||
SODIUM_C99(.rdrand_available =) 0,
|
||||
|
||||
static TLS Salsa20Random stream = {SODIUM_C99(.initialized =) 0,
|
||||
SODIUM_C99(.rnd32_outleft =)(size_t) 0U};
|
||||
};
|
||||
|
||||
static TLS Salsa20Random stream = {
|
||||
SODIUM_C99(.initialized =) 0, SODIUM_C99(.rnd32_outleft =)(size_t) 0U,
|
||||
SODIUM_C99(.key =){0}, SODIUM_C99(.rnd32 =){0},
|
||||
SODIUM_C99(.nonce =) 1,
|
||||
};
|
||||
|
||||
/*
|
||||
* Get a high-resolution timestamp, as a uint64_t value
|
||||
|
@ -392,32 +401,34 @@ randombytes_salsa20_random_stir(void)
|
|||
rtld = FALSE;
|
||||
hCAPINg = GetModuleHandle("bcrypt.dll");
|
||||
/* otherwise, load CNG manually */
|
||||
if (!hCAPINg)
|
||||
if(!hCAPINg)
|
||||
{
|
||||
hCAPINg = LoadLibraryEx("bcrypt.dll", NULL, LOAD_LIBRARY_SEARCH_SYSTEM32);
|
||||
rtld = TRUE;
|
||||
hCAPINg = LoadLibraryEx("bcrypt.dll", NULL, LOAD_LIBRARY_SEARCH_SYSTEM32);
|
||||
rtld = TRUE;
|
||||
}
|
||||
if (hCAPINg)
|
||||
if(hCAPINg)
|
||||
{
|
||||
/* call BCryptGenRandom(2) */
|
||||
getrandom = (CNGAPI_DRBG)GetProcAddress(hCAPINg, "BCryptGenRandom");
|
||||
if(!BCRYPT_SUCCESS(getrandom(NULL, m0, sizeof m0,BCRYPT_USE_SYSTEM_PREFERRED_RNG)))
|
||||
{
|
||||
sodium_misuse();
|
||||
}
|
||||
/* don't leak lib refs */
|
||||
if (rtld)
|
||||
FreeLibrary(hCAPINg);
|
||||
/* call BCryptGenRandom(2) */
|
||||
getrandom = (CNGAPI_DRBG)GetProcAddress(hCAPINg, "BCryptGenRandom");
|
||||
if(!BCRYPT_SUCCESS(
|
||||
getrandom(NULL, m0, sizeof m0, BCRYPT_USE_SYSTEM_PREFERRED_RNG)))
|
||||
{
|
||||
sodium_misuse();
|
||||
}
|
||||
/* don't leak lib refs */
|
||||
if(rtld)
|
||||
FreeLibrary(hCAPINg);
|
||||
}
|
||||
/* if that fails use the regular ARC4-SHA1 RNG (!!!) *cringes* */
|
||||
else
|
||||
{
|
||||
CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT);
|
||||
if (!CryptGenRandom(hProv, sizeof m0, m0))
|
||||
{
|
||||
sodium_misuse(); /* LCOV_EXCL_LINE */
|
||||
}
|
||||
CryptReleaseContext(hProv, 0);
|
||||
CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL,
|
||||
CRYPT_VERIFYCONTEXT | CRYPT_SILENT);
|
||||
if(!CryptGenRandom(hProv, sizeof m0, m0))
|
||||
{
|
||||
sodium_misuse(); /* LCOV_EXCL_LINE */
|
||||
}
|
||||
CryptReleaseContext(hProv, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -68,6 +68,9 @@ crypto_kem_dec_avx2(unsigned char *k, const unsigned char *cstr,
|
|||
k[i] = (hash[32 + i] & ~result);
|
||||
return result;
|
||||
#else
|
||||
(void)k;
|
||||
(void)cstr;
|
||||
(void)sk;
|
||||
return -1;
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -47,6 +47,9 @@ crypto_kem_enc_avx2(unsigned char *cstr, unsigned char *k,
|
|||
|
||||
return 0;
|
||||
#else
|
||||
(void)pk;
|
||||
(void)k;
|
||||
(void)cstr;
|
||||
return -1;
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -40,6 +40,8 @@ crypto_kem_keypair_avx2(unsigned char *pk, unsigned char *sk)
|
|||
|
||||
return 0;
|
||||
#else
|
||||
(void)pk;
|
||||
(void)sk;
|
||||
return -1;
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
#ifndef ANDROID
|
||||
#if defined(ANDROID) || defined(RPI)
|
||||
|
||||
#else
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
|
|
@ -25,7 +25,8 @@ handle_signal(int sig)
|
|||
int
|
||||
printHelp(const char *argv0, int code = 1)
|
||||
{
|
||||
std::cout << "usage: " << argv0 << " [-h] [-g|-c] config.ini" << std::endl;
|
||||
std::cout << "usage: " << argv0 << " [-h] [-v] [-g|-c] config.ini"
|
||||
<< std::endl;
|
||||
return code;
|
||||
}
|
||||
|
||||
|
@ -55,8 +56,6 @@ main(int argc, char *argv[])
|
|||
multiThreaded = false;
|
||||
}
|
||||
|
||||
// SetLogLevel(llarp::eLogDebug);
|
||||
|
||||
#ifdef _WIN32
|
||||
if(startWinsock())
|
||||
return -1;
|
||||
|
@ -66,10 +65,14 @@ main(int argc, char *argv[])
|
|||
bool genconfigOnly = false;
|
||||
bool asRouter = false;
|
||||
bool overWrite = false;
|
||||
while((opt = getopt(argc, argv, "hgcfr")) != -1)
|
||||
while((opt = getopt(argc, argv, "hgcfrv")) != -1)
|
||||
{
|
||||
switch(opt)
|
||||
{
|
||||
case 'v':
|
||||
SetLogLevel(llarp::eLogDebug);
|
||||
llarp::LogDebug("debug logging activated");
|
||||
break;
|
||||
case 'h':
|
||||
return printHelp(argv[0], 0);
|
||||
case 'g':
|
||||
|
|
|
@ -17,7 +17,7 @@ namespace llarp
|
|||
int num_nethreads = 1;
|
||||
bool singleThreaded = false;
|
||||
std::vector< std::thread > netio_threads;
|
||||
llarp_crypto crypto = {};
|
||||
llarp_crypto crypto;
|
||||
llarp_router *router = nullptr;
|
||||
llarp_threadpool *worker = nullptr;
|
||||
llarp_logic *logic = nullptr;
|
||||
|
|
|
@ -63,7 +63,7 @@ namespace llarp
|
|||
char tmp[128] = {0};
|
||||
inet_ntop(AF_INET6, &a.ip, tmp, sizeof(tmp));
|
||||
out << tmp << ".";
|
||||
#ifdef ANDROID
|
||||
#if defined(ANDROID) || defined(RPI)
|
||||
snprintf(tmp, sizeof(tmp), "%u", a.port);
|
||||
return out << tmp;
|
||||
#else
|
||||
|
|
|
@ -53,7 +53,7 @@ namespace llarp
|
|||
else
|
||||
return out;
|
||||
out << std::string("/");
|
||||
#ifdef ANDROID
|
||||
#if defined(ANDROID) || defined(RPI)
|
||||
snprintf(tmp, sizeof(tmp), "%u",
|
||||
llarp::bits::count_array_bits(xi.netmask.s6_addr));
|
||||
return out << tmp;
|
||||
|
|
|
@ -14,6 +14,10 @@
|
|||
#ifdef ANDROID
|
||||
#include <android/log.h>
|
||||
#endif
|
||||
#ifdef RPI
|
||||
#include <cstdio>
|
||||
#include <llarp/time.h>
|
||||
#endif
|
||||
|
||||
namespace llarp
|
||||
{
|
||||
|
@ -77,7 +81,7 @@ namespace llarp
|
|||
auto tid = std::this_thread::get_id();
|
||||
std::hash< std::thread::id > h;
|
||||
uint16_t id = h(tid) % 1000;
|
||||
#ifdef ANDROID
|
||||
#if defined(ANDROID) || defined(RPI)
|
||||
char buff[8] = {0};
|
||||
snprintf(buff, sizeof(buff), "%u", id);
|
||||
return buff;
|
||||
|
@ -97,8 +101,9 @@ namespace llarp
|
|||
friend std::ostream&
|
||||
operator<<(std::ostream& out, const log_timestamp& ts)
|
||||
{
|
||||
#ifdef ANDROID
|
||||
return out;
|
||||
#if defined(ANDROID) || defined(RPI)
|
||||
(void)ts;
|
||||
return out << llarp_time_now_ms();
|
||||
#else
|
||||
auto now = llarp::Clock_t::to_time_t(llarp::Clock_t::now());
|
||||
return out << std::put_time(std::localtime(&now), ts.format);
|
||||
|
|
|
@ -18,8 +18,7 @@ namespace llarp
|
|||
public:
|
||||
ServiceInfo() = default;
|
||||
|
||||
ServiceInfo(ServiceInfo&& other) = delete;
|
||||
/*
|
||||
ServiceInfo(ServiceInfo&& other)
|
||||
{
|
||||
enckey = std::move(other.enckey);
|
||||
signkey = std::move(other.signkey);
|
||||
|
@ -27,7 +26,6 @@ namespace llarp
|
|||
vanity = std::move(other.vanity);
|
||||
m_CachedAddr = std::move(other.m_CachedAddr);
|
||||
}
|
||||
*/
|
||||
|
||||
ServiceInfo(const ServiceInfo& other)
|
||||
: IBEncodeMessage(other.version)
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
#define LLARP_THREADING_HPP
|
||||
#include <mutex>
|
||||
#if defined(__MINGW32__) && !defined(_GLIBCXX_HAS_GTHREADS)
|
||||
#if defined(RPI)
|
||||
#error this should not be set
|
||||
#endif
|
||||
#define _MINGW32_NO_THREADS
|
||||
#include <llarp/win32/threads/mingw.condition_variable.h>
|
||||
#include <llarp/win32/threads/mingw.mutex.h>
|
||||
|
|
|
@ -19,6 +19,9 @@
|
|||
|
||||
#ifndef WIN32STDMUTEX_H
|
||||
#define WIN32STDMUTEX_H
|
||||
#if defined(RPI)
|
||||
#error this should not be set
|
||||
#endif
|
||||
|
||||
#if !defined(__cplusplus) || (__cplusplus < 201103L)
|
||||
#error A C++11 compiler is required!
|
||||
|
|
|
@ -192,6 +192,14 @@ struct reverse_handler_iter_context
|
|||
const struct dnsd_question_request *request;
|
||||
};
|
||||
|
||||
#if defined(ANDROID) || defined(RPI)
|
||||
static int
|
||||
stoi(const std::string &s)
|
||||
{
|
||||
return atoi(s.c_str());
|
||||
}
|
||||
#endif
|
||||
|
||||
bool
|
||||
ReverseHandlerIter(struct llarp::service::Context::endpoint_iter *endpointCfg)
|
||||
{
|
||||
|
|
|
@ -282,7 +282,7 @@ generic_handle_dnsc_recvfrom(dnsc_answer_request *request,
|
|||
break;
|
||||
}
|
||||
*/
|
||||
if(pos > sz)
|
||||
if(ssize_t(pos) > sz)
|
||||
{
|
||||
llarp::LogWarn("Would read past end of dns packet. for ",
|
||||
request->question.name);
|
||||
|
|
|
@ -169,7 +169,7 @@ llarp_tcp_async_try_connect(struct llarp_ev_loop *loop,
|
|||
return;
|
||||
}
|
||||
const char *end = ptr;
|
||||
while(*end && ((end - begin) < static_cast<ptrdiff_t>(sizeof tcp->remote)))
|
||||
while(*end && ((end - begin) < static_cast< ptrdiff_t >(sizeof tcp->remote)))
|
||||
{
|
||||
++end;
|
||||
}
|
||||
|
|
|
@ -650,8 +650,8 @@ struct llarp_ev_loop
|
|||
void
|
||||
tick_listeners()
|
||||
{
|
||||
auto itr = handlers.cbegin();
|
||||
while(itr != handlers.cend())
|
||||
auto itr = handlers.begin();
|
||||
while(itr != handlers.end())
|
||||
{
|
||||
if((*itr)->tick())
|
||||
++itr;
|
||||
|
|
|
@ -85,7 +85,7 @@ namespace llarp
|
|||
{
|
||||
int num;
|
||||
std::string part = v.substr(pos + 1);
|
||||
#ifdef ANDROID
|
||||
#if defined(ANDROID) || defined(RPI)
|
||||
num = atoi(part.c_str());
|
||||
#else
|
||||
num = std::stoi(part);
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
#if defined(RPI) || defined(ANDROID)
|
||||
|
||||
#else
|
||||
#include <asm/types.h>
|
||||
#include <fcntl.h>
|
||||
#include <limits.h>
|
||||
|
@ -317,3 +319,5 @@ namespace llarp
|
|||
}
|
||||
} // namespace GNULinux
|
||||
} // namespace llarp
|
||||
|
||||
#endif
|
|
@ -925,7 +925,7 @@ namespace llarp
|
|||
return "";
|
||||
}
|
||||
// include lokitun prefix to communicate result is valid
|
||||
#ifdef ANDROID
|
||||
#if defined(ANDROID) || defined(RPI)
|
||||
char buff[IFNAMSIZ + 1] = {0};
|
||||
snprintf(buff, sizeof(buff), "lokitun%u", num);
|
||||
return buff;
|
||||
|
|
|
@ -13,6 +13,9 @@
|
|||
|
||||
#include <fstream>
|
||||
#include <cstdlib>
|
||||
#if defined(RPI) || defined(ANDROID)
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
namespace llarp
|
||||
{
|
||||
|
@ -672,7 +675,11 @@ llarp_router::Run()
|
|||
while(!rpcServer->Start(rpcBindAddr))
|
||||
{
|
||||
llarp::LogError("failed to bind jsonrpc to ", rpcBindAddr);
|
||||
#if defined(ANDROID) || defined(RPI)
|
||||
sleep(1);
|
||||
#else
|
||||
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||
#endif
|
||||
}
|
||||
llarp::LogInfo("Bound RPC server to ", rpcBindAddr);
|
||||
}
|
||||
|
|
|
@ -144,7 +144,8 @@ namespace llarp
|
|||
}
|
||||
|
||||
#ifdef __linux__
|
||||
#ifndef ANDROID
|
||||
#if defined(ANDROID) || defined(RPI)
|
||||
#else
|
||||
struct LinuxNetNSIsolatedPool : public _NetIsolatedPool
|
||||
{
|
||||
LinuxNetNSIsolatedPool(std::function< bool(void *, bool) > setup,
|
||||
|
|
|
@ -43,7 +43,7 @@ namespace
|
|||
from_mode_t(mode_t m)
|
||||
{
|
||||
::cpp17::filesystem::perms p =
|
||||
static_cast<::cpp17::filesystem::perms >(m & 0xFFF);
|
||||
static_cast< cpp17::filesystem::perms >(m & 0xFFF);
|
||||
|
||||
::cpp17::filesystem::file_type t = file_type::unknown;
|
||||
|
||||
|
|
|
@ -83,7 +83,7 @@ extern "C"
|
|||
if(n % 16 == 1)
|
||||
{
|
||||
/* store address for this line */
|
||||
snprintf(addrstr, sizeof(addrstr), "%.4lx",
|
||||
snprintf(addrstr, sizeof(addrstr), "%.4zu",
|
||||
((uintptr_t)p - (uintptr_t)data));
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue