Commit Graph

522 Commits

Author SHA1 Message Date
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
ab4ee954b9 Remove DEBIAN option
This hasn't been used in a long time; the debian packaging lives in
separate branches instead.
2020-05-17 21:29:05 -03:00
Jason Rhinelander
a45bec7c4f Removed RPI definition
This was a long-obsolete fix for things that don't matter anymore.
2020-05-17 21:28:25 -03:00
Jeff Becker
64157d5d44 track libcurl and libuv with cmake, add libuv submodule 2020-05-17 14:53:28 -03:00
Jeff Becker
39b32a9ccc
move check for std::filesystem and std::optional down 2020-05-15 09:43:53 -04:00
Jeff Becker
abc1f67430
check for std::optional as macos can be broke af sometimes 2020-05-15 09:40:24 -04:00
Jeff Becker
1072d9b505
detect travis using environmental vars 2020-05-15 09:12:00 -04:00
Jeff Becker
a7d616843f
add shitty check for running in travis with workarounds because god is dead and travis-ci fucking sucks. 2020-05-15 09:01:47 -04:00
Jason Rhinelander
1697bf90fe C++17
Compiles with C++17, replaces ghc::filesystem with std::filesystem,
nonstd::optional with std::optional, and llarp::string_view with
std::string_view.
2020-05-01 17:43:27 -03:00
Jason Rhinelander
6080a9427b No LINUX variable in cmake
Just let the pkg_check fail when libsystemd isn't install; it shouldn't
hurt anything.
2020-04-22 12:02:05 -03:00
Jason Rhinelander
3048ccf3f8 Set -mmacosx-version-min the cmake way 2020-04-21 20:01:24 -03:00
Jason Rhinelander
f8209baf50 Move release motto string into CMakeLists.txt
Right after project() which contains the version, so that version +
motto updates are basically in one place (and so that non-Makefile cmake
invocations get it).
2020-04-19 23:18:48 -03:00
Jason Rhinelander
ebb1950941 Add -DBUILD_PACKAGE=ON to make cpack code opt-in 2020-04-19 23:18:41 -03:00
Jason Rhinelander
3dd3d48fbb Consolidate cmake vars & definitions
CMake will set version variables itself if you give the version in the
project(), which is cleaner.  Also removes some (nearly) duplicate
definitions and settings added in basic_definitions.cmake for unknown
reasons.

Removes some redundant settings (name, description, version) from the
cpack settings which already default to the values from the project()
call.
2020-04-19 23:16:23 -03:00
Jeff
5b1941222b
unscrew travis-ci (#1223)
* update travis ci clang-format to clang-format-9 because we use that now
add python3-dev package becuase something inside ci thinks it has python but really does not

* try using python3.6

* try working around hot garbage that is travis-ci

* add deadsnakes repo for python3.8

* prevent nullptr deference when running in unit tests

* move python3.8 to main dependancy matrix and add python3.8 to homebrew deps

* add deadsnake apt repo

* add deadsnakes and python3.8 back to previous matrix

* dev package for python

* toggle hive build in ci

* dont add pybind11 if not bulding hive

* revert setting pyenv shim for travis ci

* make native builds on by default except for windows ci

* only apply native build being off for windows release target becuase that broke macos
2020-04-18 16:58:41 -03:00
Jason Rhinelander
3c6aa002b8 Fix errors and warnings compiling on mac 2020-04-10 14:26:50 -03:00
Jeff Becker
3e7acb72e1
more docs, make doxygen work 2020-04-07 13:16:22 -04:00
Jeff
d3091cf9fc
Merge pull request #1167 from tewinget/tooling
RouterHive initial PR
2020-04-07 13:13:02 -04:00
Jeff Becker
a02363325e
move cmake unix down 2020-04-02 11:08:08 -04:00
Jeff Becker
3b26b8b24d
make gitlab pump out 32 bit installers, no lto for builds as that is cursed for now. 2020-04-02 11:08:08 -04:00
Jeff Becker
2190da8c81
cpack win32 2020-04-02 11:08:07 -04:00
Thomas Winget
138a0b33fb jason's computer can't python3 2020-03-03 19:57:09 -05:00
Thomas Winget
771d0b4489 hive pytest framework in place (and path build test works)! 2020-03-03 19:57:09 -05:00
Jeff Becker
a4141617d7 add build infra for toggling hive builds 2020-03-03 19:57:09 -05:00
Jeff Becker
1fdb8b4c94 initial pybind11 introspection code 2020-03-03 19:57:09 -05:00
Rick V
c8c9222b01
remove unused rule 2020-03-03 15:33:11 -06:00
Rick V
c4e8e52fcc
finally remove C++17 requirement on windows (only needed it for
filesystem)
2020-03-03 15:33:10 -06:00
Rick V
dbc559d4ff
finally fix cross-LTO on windows builds 2020-03-03 15:33:10 -06:00
Jason Rhinelander
7a5b105f49 Remove enable_testing() because ctest sucks (and thus we don't use it) 2020-03-03 12:35:01 -04:00
Jason Rhinelander
53c85ebf1d if(LINUX) doesn't work; just try to find libsystemd gently instead 2020-02-25 22:19:41 -04:00
Jason Rhinelander
54236cde9d
Merge pull request #1136 from jagerman/fix-cmake-linux-var
Fix cmake LINUX variable around systemd enabling
2020-02-25 22:11:51 -04:00
Jason Rhinelander
b87adab438 Fix cmake LINUX variable around systemd enabling 2020-02-25 22:10:28 -04:00
Jason Rhinelander
e3bce76a7c Add EXCLUDE_FROM_ALL to subprojects
Prevent `make install` from installing headers/cmake stuff.
2020-02-25 22:00:33 -04:00
Rick V
5295ada917
systemd is linux only 2020-02-25 15:46:37 -06:00
Jason Rhinelander
51ef8d69f8 Default libsystemd support to enabled if found
WITH_SYSTEMD=ON or =OFF works to explicitly enable/disable, but if
omitted the default is now ON if found and OFF if you don't.
2020-02-25 17:01:11 -04:00
Jason Rhinelander
3be0766f27 Bump XSAN build to bionic and add status message 2020-02-24 14:27:44 -04:00
Jason Rhinelander
0839c16f19 Final abseil purge
Bye-bye Google Boost.
2020-02-24 14:27:44 -04:00
Jason Rhinelander
2e9840ea39 Replace abseil date code with Hinnart's date.h
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).
2020-02-24 14:27:44 -04:00
Jason Rhinelander
ac1486d0be Replace absl::optional with optional-lite
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").
2020-02-19 18:21:25 -04:00
Jason Rhinelander
ecdc389e1a Fix typo in option to disable submodule checks 2020-02-17 20:22:13 -04:00
Jason Rhinelander
c522bc0537 ghc::filesystem devendor to submodule
Also removed some unused/old options for conditionally not using
ghc::filesystem and a sodium option that wasn't used anywhere.
2020-02-13 15:47:11 -04:00
Jason Rhinelander
3df4eaef2d Devendor cxxopts to submodule 2020-02-13 15:18:17 -04:00
Jason Rhinelander
edbe0c7bf4 Devendor gtest to a submodule 2020-02-13 15:15:34 -04:00
Jason Rhinelander
5a787de73b Switch abseil & nlohmann to submodules and update to latest stable
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.
2020-02-13 15:14:17 -04:00
Jason Rhinelander
04fa117399 Use -mcpu=native on ppc64le 2020-02-07 00:22:27 -04:00
Jeff Becker
7aa1b2c27c
monotonic time and run testnet at 20% realtime 2020-01-23 12:14:25 -05:00
Jason Rhinelander
7cec0db371 Simplify CRYPTO_FLAGS logic, remove RYZEN_HACK
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).
2020-01-07 18:57:40 -04:00
Jason Rhinelander
6f3757e933 Modernize non-AVX2 tuning to haswell
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.
2020-01-07 18:53:00 -04:00
Jeff
0c979aaa3f
Merge pull request #1017 from despair86/dev
IX86 builds should only require SSE3 by default
2019-12-31 10:32:03 -05:00
Rick V
6bb95ce718 IX86 builds should only require SSE3, and this still allows debian release mgr to override the target selection flag 2019-12-31 09:15:57 -06:00