fixes for ancient rpi toolchain

pull/47/head
Jeff Becker 6 years ago
parent 7a78832841
commit 960aa479e9
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

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

@ -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…
Cancel
Save