Commit Graph

107 Commits

Author SHA1 Message Date
dr7ana
46ad8d4058 Clang format include sorting + CMake
- includes are now sorted in consistent, logical order; first step in an attempt to fix the tomfoolery (no relation to Tom) brought in by include-what-you-use
- shuffled around some cmake linking to simplify dependency graph
- superfluous files removed
2023-10-24 12:11:51 -07:00
dr7ana
e710cfea47 Review commit 2023-10-24 08:40:18 -07:00
Jason Rhinelander
1d84e7cbd5
Untangle messy nested dependency tree
lokinet-cryptography depends on lokinet-base which depends on
lokinet-cryptography.

Fixed this but splitting lokinet-cryptography into the libntrup code
(which is what is really needed) and the llarp/crypto code (which isn't
needed for lokinet-base).
2023-10-17 18:08:36 -03:00
Jeff Becker
2498a085db
rearrange cmake libraries
define relations and document them.
make responsibilies clear and consice.
2023-01-20 15:58:07 -05:00
Jason Rhinelander
b81f7025c9
Replace logging with oxen-logger
Replaces custom logging system with spdlog-based oxen logging.  This
commit mainly replaces the backend logging with the spdlog-based system,
but doesn't (yet) convert all the existing LogWarn, etc. to use the new
format-based logging.

New logging statements will look like:

    llarp::log::warning(cat, "blah: {}", val);

where `cat` should be set up in each .cpp or cluster of .cpp files, as
described in the oxen-logging README.

As part of spdlog we get fmt, which gives us nice format strings, where
are applied generously in this commit.

Making types printable now requires two steps:
- add a ToString() method
- add this specialization:

      template <>
      constexpr inline bool llarp::IsToStringFormattable<llarp::Whatever> = true;

This will then allow the type to be printed as a "{}" value in a
fmt::format string.  This is applied to all our printable types here,
and all of the `operator<<` are removed.

This commit also:
- replaces various uses of `operator<<` to ToString()
- replaces various uses of std::stringstream with either fmt::format or
  plain std::string
- Rename some to_string and toString() methods to ToString() for
  consistency (and to work with fmt)
- Replace `stringify(...)` and `make_exception` usage with fmt::format
  (and remove stringify/make_exception from util/str.hpp).
2022-07-15 22:17:59 -03:00
Jeff Becker
07fb41cfd4
fix debian sid compiler error 2021-10-13 08:05:12 -04:00
Jeff Becker
e4841917ba
redo cmake parts
* add liblokinet.so target
* make every library we build except liblokinet.so static
* wire up parts of liblokinet
2021-04-19 06:52:24 -04:00
Jeff Becker
27c276ae4d
fix install path for liblokinet-cryptography.so 2020-11-17 05:04:27 -05:00
Jeff
fe30193a97
revive android build system (#1339)
* it lives?

* clean up

* add readme and add x86_64 to abi filters

* disable route poking on android

* make it compile on android

* it compiles!!111

* typofix

* re-enable ccache for android
2020-09-22 15:04:15 -04:00
Jeff Becker
c6bd0afe96
move sodium cmake target about so that it is detected earlier 2020-07-02 11:13:31 -04:00
Thomas Winget
0ecdf60777 static build fixes in cmake stuff
I hate cmake so much.
2020-06-16 18:52:20 -04:00
Jason Rhinelander
5e91c946c5 AVX code: move stub into separate file; always check -mavx2/-mfma
This simplifies the build a bit by moving the avx stubs into a single .c
file: we can avoid compiling all of the avx2 code and just add a single
stub file instead when the compiler doesn't have -mavx2/-mfma.

This also simplifies cmake to just always test the flags; there are some
cases (like using NATIVE_BUILD) where USE_AVX2 doesn't necessarily
apply, and it's cheap to just check them.
2020-05-17 23:31:41 -03:00
Jason Rhinelander
c5faa86926 cmake refactor
Refactors many things in cmake to improve and simplify:

- don't use variable indirection for target names; target names are
*already* a variable of sorts.  (e.g. ${UTIL_LIB} is now just
lokinet-util).  cmake/basic_definitions.cmake is now gone.

- fix LTO enabling to use the standard cmake (3.9+) LTO mechanism rather
than shoving a bunch of flag hacks through link_libraries and
add_compile_options.  This also now enables LTO when building a shared
library (because previously the -flto hacks were only turned on in the
static code for some reason).

- build liblokinet as *either* shared library or static library, but not
both.  Building both makes things more complicated because they had
different names (lokinet-shared or lokinet-static) and seems pointless:
you generally want one or the other.  Now there is just the liblokinet
target, which will be shared or static depending on the value of
BUILD_SHARED_LIBS.

- Simplify lokinet-cryptography AVX2 code: just build *one* library, and
add in the additional AVX2 files when possible, rather than building two
and needing to merge them.

- Compress STATIC_LINK and STATIC_LINK_RUNTIME into just STATIC_LINK.
It makes no sense to use one of these (_RUNTIME) on Windows and the
other on non-Windows when they appear to try to do the same thing.

- remove a bunch of annotations from `endif(FOO)` -> `endif()`.

- move all the tuntap compilation code (including OS-specific source
file selection) into vendor/CMakeLists.txt and build tuntap as an
intermediate OBJECT library rather than keeping a global variable in 5
different files.

- move release motto define to root cmake; it made no sense being
duplicated in both unix.cmake and win32.cmake

- fix add_log_tag to not stomp on any existing source compile flags with
its definition.  Also use proper compile definition property instead of
cramming it into compile flags.

- make optimization/linker flags less hacky.  There's no reason for us
to force particular optimization flags because the cmake build type
already does that (e.g. -DCMAKE_BUILD_TYPE=Release does -O3).  Not doing
that also silences a bunch of cmake warnings because it thinks "-O0 -g3"
etc.  are link libraries (which is reasonable: that's what the code was
telling cmake they are).

- sets the default build type to RelWithDebInfo which gives us `-O2 -g`
if you don't specify a build type.

- Move PIC up (so that the things loaded in unix.cmake, notably libuv,
have it set).

- Add a custom `curl` interface library that carries the correct link
target and include paths for curl (system or bundled).
2020-05-17 23:31:23 -03:00
Jason Rhinelander
74cc73d46b DOWNLOAD_SODIUM=FORCE to always download libsodium
This bypasses the check for a compatible local libsodium.
2020-02-06 16:28:35 -04:00
Jason Rhinelander
2b93ccb393 Bump libsodium required version to 1.0.18
We use crypto_core_ed25519_scalar_mul which is only exported by
libsodium >= 1.0.18.
2020-02-02 16:38:48 -04:00
Jason Rhinelander
955c475dbe Enable cpu detection on amd64
The optional runtime detection shouldn't rely on being compiled in avx2
mode.
2020-01-08 20:45:25 -04:00
Jason Rhinelander
6069b726e1 Fix ntru avx2 compilation when DOWNLOAD_SODIUM
We don't explicitly have to link against it, but it doesn't hurt *and*
this also pulls in the proper sodium include path, which we do need.
2020-01-07 19:58:18 -04:00
Jason Rhinelander
210cb837c6 Enable -avx2 -fma for ntru even when compiling without AVX2 support
This code is runtime guarded with CPU feature tests, so even if we are
making a non-AVX2 build we still want to compile the avx code path with
-mavx2 -mfma so that it can be opportunistically used when run on
AVX2-supporting CPUs (particularly for the debs and release binaries).
2020-01-07 18:39:46 -04:00
Jason Rhinelander
54b644e280 Add -DDOWNLOAD_SODIUM to re-enabled dl&build of sodium
Also supported in the Makefile (e.g. `make DOWNLOAD_SODIUM=ON`)

Also DRYs out the Makefile a little.
2019-12-16 20:52:44 -04:00
Jeff Becker
30a8bb681f
more 2019-12-16 09:04:35 -05:00
Jeff Becker
31150fa4d0
require version 2019-12-16 09:03:19 -05:00
Jason Rhinelander
cdca34e628 Fix runtime AVX2 detection
The feature flags come via __cpuid_count instead of __cpuid

Also removes a couple unneeded headers.
2019-11-21 11:50:04 -04:00
Jason Rhinelander
57ccb1fd5c Move sodium download into separate cmake include 2019-10-31 17:49:08 -03:00
Jeff Becker
c1a81d26f1
pull in libsodium if local version sucks 2019-10-31 15:30:02 -04:00
Rick V
d02d4ac044
remove vendored libsodium 2019-10-30 18:02:35 -05:00
Jeff
49b410b437
Merge pull request #888 from majestrate/fix-broken-build-2019-10-30
fix typo in cmake
2019-10-30 13:02:54 -04:00
Jeff Becker
fc4900094f
if this works i'll be pissed at gcc 2019-10-30 12:58:54 -04:00
Jeff Becker
2cb15e7e0b
enable see2 when used 2019-10-30 12:45:51 -04:00
Jeff Becker
0a204b7760
try disabling extra calls for some reason sodium_memcmp destroys the stack and i have no idea why 2019-10-30 12:39:15 -04:00
Jason Rhinelander
0774213e87 Fix cmake sodium version check 2019-10-30 13:25:23 -03:00
Jeff Becker
f228eca39e
fix typo 2019-10-30 10:46:29 -04:00
Jeff Becker
3ebea458e9
use vendored libsodium if we dont have a good version 2019-10-29 12:31:36 -04:00
Jeff Becker
f38240f945
devendor libsodium by default except for android 2019-10-29 12:01:58 -04:00
Rick V
294b98527d
clang-format remaining code, use __asm__ for avx2 port since we
insist on straight C99 without extensions (asm isn't special in
C99, __asm__ is)
2019-09-03 08:02:35 -05:00
Rick V
595b15d538
make format crypto/ 2019-09-03 08:02:35 -05:00
Rick V
b3a975ff8e
sun fix
fix testing on sun
2019-08-27 06:53:08 -05:00
Jeff Becker
1f761a1cb0
* fix arm cross compile on ubuntu disco
* add toolchain option for cross compile
2019-07-16 09:41:43 -04:00
Michael
0b4d787042
More work on router docker image
- Multi-stage docker build (final image only 15MB!)
- Build in release mode
    - Fix bug with release mode
    - Fix compiler being dumb AF
    - Disable FORTIFY for now
- Enable LTO when making a staticly linked release
- Fix some gcc specific warnings
- Refactor cmake stuff into multiple files
2019-04-28 17:04:52 +01:00
Michael
4143472a17
Add cmake module to target a library as 'system', and fix a few warnings 2019-04-25 00:27:31 +01:00
michael-loki
0195152e05 Allow builds on MSVC (#518)
* Import cxxopts to replace getopts usage

* Add visual studio build things

* Fixup abseil build parts

* Replace __attribute__((unused)) with ABSL_ATTRIBUTE_UNUSED

* Fixup minor windows build issues

* Replace getopts usage

* Temporarily fixup .rc files

* More minor windows fixes

* Get a working build

* Revert .rc files

* Revert changes to nodedb
2019-04-19 13:24:33 -05:00
Jeff Becker
3da6551e82
make android compile 2019-04-08 11:54:19 -04:00
Ryan Tharp
98e3753764 fix typo 2019-02-18 05:12:13 -08:00
Ryan Tharp
25d00e2974 Merge remote-tracking branch 'origin/master' 2019-02-18 02:00:36 -08:00
Ryan Tharp
ad91071633 Fix undefined behaviors and misaligned member access 2019-02-18 01:59:33 -08:00
Michael
90373b806c
Fix log tag after cmake changes 2019-02-15 20:49:10 +00:00
Michael
1aeacb0043
Refactor CMakeLists into distinct directories 2019-02-12 01:19:37 +00:00
Michael
3b3926a0ea
Refactor CMakeLists into distinct directories 2019-02-09 16:30:29 +00:00
despair
d9863128b9 the intrinsic variant is 32-bit clean
the ASM variant is not

found it

fix

something is wrong with the external build

hmm

why is this critical section doing nothing

fix multiple init

debug init

ok fixed
2018-11-19 04:29:36 -06:00
Jeff Becker
9db99d4d04
fix debian build 2018-11-13 10:16:14 -05:00
despair
907e557696 fuck the apple compiler
bad merge!

make -Werror optional for end-users
2018-11-12 23:39:47 -06:00