Howard Hinnart's date.h is the library that was accepted as C++20
date/calendar support, so this is essentially a backport of C++20 date
time support.
(It does support timezone support, but requires more of the library and
that seems like overkill for what we need; this just prints UTC
timestamps instead, which need only a header-only include).
Step 1 of removing abseil from lokinet.
For the most part this is a drop-in replacement, but there are also a
few changes here to the JSONRPC layer that were needed to work around
current gcc 10 dev snapshot:
- JSONRPC returns a json now instead of an optional<json>. It doesn't
make any sense to have a json rpc call that just closes the connection
with returning anything. Invoked functions can return a null (default
constructed) result now if they don't have anything to return (such a
null value won't be added as "result").
Our current abseil won't build with gcc 10 (its `optional`
implementation appears broken), and spews warnings under slightly older
compilers; updating to the latest stable 2019 branch fixes both issues.
We currently spend a bunch of time setting CRYPTO_FLAGS and then just
completely wipe it out if NATIVE_BUILD is specified.
The AMD_RYZEN_HACK is really not needed; it was only some early CPU
microcode and compiler combinations that had trouble detecting Ryzen's
FMA3 support (and Ryzen *doesn't* properly support FMA4--it can be
forced on and runs, but apparently it can give wrong results).
Tuning to an ancient architecture doesn't make a lot of sense; we want
to support the ancient architecture, but don't want to optimize for it.
Also change the AVX2 tuning to use haswell so that optimizations don't
depend on the CPU in the system the build runs on.
This rewrites the version info using lokid's approach of compiling it
into a .cpp file that gets generated as part of the build (*not* during
the configure stage).
Among other things, this means that changing the version no longer
invalidates ccache or cmake dependencies, and because it depends on
`.git/index` git commits will cause the version to be regenerated,
making the commit tag more reliable (currently if you rebuild without
running cmake your git commit tag doesn't update).
- xenial's cmake version (3.5.1) builds everything fine and test suite
passes, so lower the minimum to that.
- add a hack for xenial's kernel header & glibc version breaking if both
net/if.h and linux/if.h get included. The only thing we actually need
from net/if.h that linux/if.h doesn't have is `if_nametoindex`, so
just hack that definition in for xenial's specific glibc/kernel header
versions.
link libatomic if we're targeting 486
link libatomic.a if we're targeting windows
idk what the hell MSVC does for -arch:IA32
we already set the c++14 flag early on
strip target selection flags from MSVC builds and clang-cl
c++14 does not propagate to compile tests
This commit refactors functionality from the Router class into separate,
dedicated classes.
There are a few behavior changes that came as a result of discussion on
what the correct behavior should be.
In addition, many things Router was previously doing can now be provided
callback functions to alert the calling point when the asynchronous
action completes, successfully or otherwise.