From c4ac6de5ae3f486f68cc0e9630d125a236e1772d Mon Sep 17 00:00:00 2001 From: kdeme Date: Thu, 30 Apr 2020 17:51:30 +0200 Subject: [PATCH] Set up repo to make use of nimbus-build-system --- .gitignore | 22 +- .gitmodules | 100 ++++++++- LICENSE-APACHEv2 | 205 ++++++++++++++++++ LICENSE-MIT | 25 +++ Makefile | 106 +++++++-- config.nims | 57 +++++ env.sh | 8 + nim-waku.nimble | 11 - vendor/news | 1 + vendor/nim-bearssl | 1 + vendor/nim-chronicles | 1 + vendor/nim-chronos | 1 + vendor/nim-confutils | 1 + vendor/nim-faststreams | 1 + vendor/nim-http-utils | 1 + vendor/nim-json-rpc | 1 + vendor/nim-json-serialization | 1 + vendor/nim-libbacktrace | 1 + vendor/nim-metrics | 1 + vendor/nim-nat-traversal | 1 + vendor/nim-serialization | 1 + vendor/nim-stint | 1 + vendor/nimbus-build-system | 1 + vendor/nimcrypto | 1 + waku.nimble | 55 +++++ {node => waku/node}/README.md | 0 {node => waku/node}/v0/README.md | 0 {node => waku/node}/v0/config.nim | 0 {node => waku/node}/v0/docker/Dockerfile | 0 {node => waku/node}/v0/docker/Makefile | 0 .../v0/examples/waku-grafana-dashboard.json | 0 .../v0/metrics/prometheus/prometheus.yml | 0 .../waku-sim-all-nodes-grafana-dashboard.json | 0 {node => waku/node}/v0/nim.cfg | 0 {node => waku/node}/v0/quicksim.nim | 0 {node => waku/node}/v0/rpc/wakucallsigs.nim | 0 {node => waku/node}/v0/start_network.nim | 0 {node => waku/node}/v0/wakunode.nim | 0 {node => waku/node}/v2/README.md | 0 {node => waku/node}/v2/config.nim | 0 {node => waku/node}/v2/quicksim.nim | 0 {node => waku/node}/v2/rpc/wakucallsigs.nim | 0 {node => waku/node}/v2/rpc/wakurpc.nim | 0 {node => waku/node}/v2/wakunode.nim | 0 {protocol => waku/protocol}/README.md | 0 .../protocol}/v2/waku_protocol.nim | 0 46 files changed, 575 insertions(+), 30 deletions(-) create mode 100644 LICENSE-APACHEv2 create mode 100644 LICENSE-MIT create mode 100644 config.nims create mode 100755 env.sh delete mode 100644 nim-waku.nimble create mode 160000 vendor/news create mode 160000 vendor/nim-bearssl create mode 160000 vendor/nim-chronicles create mode 160000 vendor/nim-chronos create mode 160000 vendor/nim-confutils create mode 160000 vendor/nim-faststreams create mode 160000 vendor/nim-http-utils create mode 160000 vendor/nim-json-rpc create mode 160000 vendor/nim-json-serialization create mode 160000 vendor/nim-libbacktrace create mode 160000 vendor/nim-metrics create mode 160000 vendor/nim-nat-traversal create mode 160000 vendor/nim-serialization create mode 160000 vendor/nim-stint create mode 160000 vendor/nimbus-build-system create mode 160000 vendor/nimcrypto create mode 100644 waku.nimble rename {node => waku/node}/README.md (100%) rename {node => waku/node}/v0/README.md (100%) rename {node => waku/node}/v0/config.nim (100%) rename {node => waku/node}/v0/docker/Dockerfile (100%) rename {node => waku/node}/v0/docker/Makefile (100%) rename {node => waku/node}/v0/examples/waku-grafana-dashboard.json (100%) rename {node => waku/node}/v0/metrics/prometheus/prometheus.yml (100%) rename {node => waku/node}/v0/metrics/waku-sim-all-nodes-grafana-dashboard.json (100%) rename {node => waku/node}/v0/nim.cfg (100%) rename {node => waku/node}/v0/quicksim.nim (100%) rename {node => waku/node}/v0/rpc/wakucallsigs.nim (100%) rename {node => waku/node}/v0/start_network.nim (100%) rename {node => waku/node}/v0/wakunode.nim (100%) rename {node => waku/node}/v2/README.md (100%) rename {node => waku/node}/v2/config.nim (100%) rename {node => waku/node}/v2/quicksim.nim (100%) rename {node => waku/node}/v2/rpc/wakucallsigs.nim (100%) rename {node => waku/node}/v2/rpc/wakurpc.nim (100%) rename {node => waku/node}/v2/wakunode.nim (100%) rename {protocol => waku/protocol}/README.md (100%) rename {protocol => waku/protocol}/v2/waku_protocol.nim (100%) diff --git a/.gitignore b/.gitignore index c795b054e..96e64b826 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,21 @@ -build \ No newline at end of file +/nimcache + +# Executables shall be put in an ignored build/ directory +/build + +# Nimble packages +/vendor/.nimble + +# ntags/ctags output +/tags + +# a symlink that can't be added to the repo because of Windows +/waku.nims + +# Ignore dynamic, static libs and libtool archive files +*.so +*.dylib +*.a +*.la +*.exe +*.dll diff --git a/.gitmodules b/.gitmodules index 9e68778b7..57049b412 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,15 +1,105 @@ [submodule "vendor/nimbus"] path = vendor/nimbus - url = git@github.com:status-im/nimbus.git + url = https://github.com/status-im/nimbus.git + ignore = dirty + branch = master [submodule "vendor/nim-eth"] path = vendor/nim-eth - url = git@github.com:status-im/nim-eth.git + url = https://github.com/status-im/nim-eth.git + ignore = dirty + branch = master [submodule "vendor/nim-secp256k1"] path = vendor/nim-secp256k1 - url = git@github.com:status-im/nim-secp256k1.git + url = https://github.com/status-im/nim-secp256k1.git + ignore = dirty + branch = master [submodule "vendor/nim-libp2p"] path = vendor/nim-libp2p - url = git@github.com:status-im/nim-libp2p.git + url = https://github.com/status-im/nim-libp2p.git + ignore = dirty + branch = master [submodule "vendor/nim-stew"] path = vendor/nim-stew - url = git@github.com:status-im/nim-stew.git + url = https://github.com/status-im/nim-stew.git + ignore = dirty + branch = master +[submodule "vendor/nimbus-build-system"] + path = vendor/nimbus-build-system + url = https://github.com/status-im/nimbus-build-system.git + ignore = dirty + branch = master +[submodule "vendor/nim-nat-traversal"] + path = vendor/nim-nat-traversal + url = https://github.com/status-im/nim-nat-traversal.git + ignore = dirty + branch = master +[submodule "vendor/nim-libbacktrace"] + path = vendor/nim-libbacktrace + url = https://github.com/status-im/nim-libbacktrace.git + ignore = dirty + branch = master +[submodule "vendor/nim-confutils"] + path = vendor/nim-confutils + url = https://github.com/status-im/nim-confutils.git + ignore = dirty + branch = master +[submodule "vendor/nim-chronicles"] + path = vendor/nim-chronicles + url = https://github.com/status-im/nim-chronicles.git + ignore = dirty + branch = master +[submodule "vendor/nim-faststreams"] + path = vendor/nim-faststreams + url = https://github.com/status-im/nim-faststreams.git + ignore = dirty + branch = master +[submodule "vendor/nim-chronos"] + path = vendor/nim-chronos + url = https://github.com/status-im/nim-chronos.git + ignore = dirty + branch = master +[submodule "vendor/nim-json-serialization"] + path = vendor/nim-json-serialization + url = https://github.com/status-im/nim-json-serialization.git + ignore = dirty + branch = master +[submodule "vendor/nim-serialization"] + path = vendor/nim-serialization + url = https://github.com/status-im/nim-serialization.git + ignore = dirty + branch = master +[submodule "vendor/nimcrypto"] + path = vendor/nimcrypto + url = https://github.com/cheatfate/nimcrypto.git + ignore = dirty + branch = master +[submodule "vendor/nim-metrics"] + path = vendor/nim-metrics + url = https://github.com/status-im/nim-metrics.git + ignore = dirty + branch = master +[submodule "vendor/nim-stint"] + path = vendor/nim-stint + url = https://github.com/status-im/nim-stint.git + ignore = dirty + branch = master +[submodule "vendor/nim-json-rpc"] + path = vendor/nim-json-rpc + url = https://github.com/status-im/nim-json-rpc.git + ignore = dirty + branch = master +[submodule "vendor/nim-http-utils"] + path = vendor/nim-http-utils + url = https://github.com/status-im/nim-http-utils.git + ignore = dirty + branch = master +[submodule "vendor/news"] + path = vendor/news + url = https://github.com/tormund/news.git + ignore = dirty + branch = master +[submodule "vendor/nim-bearssl"] + path = vendor/nim-bearssl + url = https://github.com/status-im/nim-bearssl.git + ignore = dirty + branch = master diff --git a/LICENSE-APACHEv2 b/LICENSE-APACHEv2 new file mode 100644 index 000000000..81e878725 --- /dev/null +++ b/LICENSE-APACHEv2 @@ -0,0 +1,205 @@ +beacon_chain is licensed under the Apache License version 2 +Copyright (c) 2018 Status Research & Development GmbH +----------------------------------------------------- + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018 Status Research & Development GmbH + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/LICENSE-MIT b/LICENSE-MIT new file mode 100644 index 000000000..4b6dda470 --- /dev/null +++ b/LICENSE-MIT @@ -0,0 +1,25 @@ +beacon_chain is licensed under the MIT License +Copyright (c) 2018 Status Research & Development GmbH +----------------------------------------------------- + +The MIT License (MIT) + +Copyright (c) 2018 Status Research & Development GmbH + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Makefile b/Makefile index e67c645a8..5da40826e 100644 --- a/Makefile +++ b/Makefile @@ -1,19 +1,99 @@ -all: wakunode start_network quicksim +# Copyright (c) 2020 Status Research & Development GmbH. Licensed under +# either of: +# - Apache License, version 2.0 +# - MIT license +# at your option. This file may not be copied, modified, or distributed except +# according to those terms. -start_network: node/v0/start_network.nim - nim c --threads:on -o:build/start_network node/v0/start_network.nim +SHELL := bash # the shell used internally by Make -quicksim: node/v0/quicksim.nim - nim c --threads:on -o:build/quicksim node/v0/quicksim.nim +# used inside the included makefiles +BUILD_SYSTEM_DIR := vendor/nimbus-build-system -wakunode: node/v0/wakunode.nim - nim c --threads:on -o:build/wakunode node/v0/wakunode.nim +# we don't want an error here, so we can handle things later, in the ".DEFAULT" target +-include $(BUILD_SYSTEM_DIR)/makefiles/variables.mk -wakunode2: node/v2/wakunode.nim - nim c --threads:on -o:build/wakunode2 node/v2/wakunode.nim +.PHONY: \ + all \ + deps \ + update \ + wakunode \ + test \ + clean \ + libbacktrace -quicksim2: node/v2/quicksim.nim - nim c --threads:on -o:build/quicksim2 node/v2/quicksim.nim +ifeq ($(NIM_PARAMS),) +# "variables.mk" was not included, so we update the submodules. +GIT_SUBMODULE_UPDATE := git submodule update --init --recursive +.DEFAULT: + +@ echo -e "Git submodules not found. Running '$(GIT_SUBMODULE_UPDATE)'.\n"; \ + $(GIT_SUBMODULE_UPDATE); \ + echo +# Now that the included *.mk files appeared, and are newer than this file, Make will restart itself: +# https://www.gnu.org/software/make/manual/make.html#Remaking-Makefiles +# +# After restarting, it will execute its original goal, so we don't have to start a child Make here +# with "$(MAKE) $(MAKECMDGOALS)". Isn't hidden control flow great? -protocol2: protocol/v2/waku_protocol.nim - nim c --threads:on -o:build/protocol2 protocol/v2/waku_protocol.nim +else # "variables.mk" was included. Business as usual until the end of this file. + +# default target, because it's the first one that doesn't start with '.' +all: | wakunode + +# must be included after the default target +-include $(BUILD_SYSTEM_DIR)/makefiles/targets.mk + +# "-d:release" implies "--stacktrace:off" and it cannot be added to config.nims +ifeq ($(USE_LIBBACKTRACE), 0) +NIM_PARAMS := $(NIM_PARAMS) -d:debug -d:disable_libbacktrace +else +NIM_PARAMS := $(NIM_PARAMS) -d:release +endif + +deps: | deps-common waku.nims +ifneq ($(USE_LIBBACKTRACE), 0) +deps: | libbacktrace +endif + +#- deletes and recreates "waku.nims" which on Windows is a copy instead of a proper symlink +update: | update-common + rm -rf waku.nims && \ + $(MAKE) waku.nims $(HANDLE_OUTPUT) + +# a phony target, because teaching `make` how to do conditional recompilation of Nim projects is too complicated +wakunode: | build deps + echo -e $(BUILD_MSG) "build/$@" && \ + $(ENV_SCRIPT) nim wakunode $(NIM_PARAMS) waku.nims + +wakusim: | build deps wakunode + echo -e $(BUILD_MSG) "build/$@" && \ + $(ENV_SCRIPT) nim wakusim $(NIM_PARAMS) waku.nims + +wakunode2: | build deps + echo -e $(BUILD_MSG) "build/$@" && \ + $(ENV_SCRIPT) nim wakunode2 $(NIM_PARAMS) waku.nims + +wakusim2: | build deps wakunode2 + echo -e $(BUILD_MSG) "build/$@" && \ + $(ENV_SCRIPT) nim wakusim2 $(NIM_PARAMS) waku.nims + +# symlink +waku.nims: + ln -s waku.nimble $@ + +# nim-libbacktrace +libbacktrace: + + $(MAKE) -C vendor/nim-libbacktrace --no-print-directory BUILD_CXX_LIB=0 + +# builds and runs the test suite +test: | build deps + $(ENV_SCRIPT) nim test $(NIM_PARAMS) waku.nims + +# usual cleaning +clean: | clean-common + rm -rf build/{wakunode,quicksim,start_network} +ifneq ($(USE_LIBBACKTRACE), 0) + + $(MAKE) -C vendor/nim-libbacktrace clean $(HANDLE_OUTPUT) +endif + +endif # "variables.mk" was not included diff --git a/config.nims b/config.nims new file mode 100644 index 000000000..1335d48d3 --- /dev/null +++ b/config.nims @@ -0,0 +1,57 @@ +if defined(release): + switch("nimcache", "nimcache/release/$projectName") +else: + switch("nimcache", "nimcache/debug/$projectName") + +if defined(windows): + # disable timestamps in Windows PE headers - https://wiki.debian.org/ReproducibleBuilds/TimestampsInPEBinaries + switch("passL", "-Wl,--no-insert-timestamp") + # increase stack size + switch("passL", "-Wl,--stack,8388608") + # https://github.com/nim-lang/Nim/issues/4057 + --tlsEmulation:off + if defined(i386): + # set the IMAGE_FILE_LARGE_ADDRESS_AWARE flag so we can use PAE, if enabled, and access more than 2 GiB of RAM + switch("passL", "-Wl,--large-address-aware") + + # The dynamic Chronicles output currently prevents us from using colors on Windows + # because these require direct manipulations of the stdout File object. + switch("define", "chronicles_colors=off") + +# This helps especially for 32-bit x86, which sans SSE2 and newer instructions +# requires quite roundabout code generation for cryptography, and other 64-bit +# and larger arithmetic use cases, along with register starvation issues. When +# engineering a more portable binary release, this should be tweaked but still +# use at least -msse2 or -msse3. +if defined(disableMarchNative): + switch("passC", "-msse3") +else: + switch("passC", "-march=native") + if defined(windows): + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65782 + # ("-fno-asynchronous-unwind-tables" breaks Nim's exception raising, sometimes) + switch("passC", "-mno-avx512vl") + +--threads:on +--opt:speed +--excessiveStackTrace:on +# enable metric collection +--define:metrics +# for heap-usage-by-instance-type metrics and object base-type strings +--define:nimTypeNames + +# the default open files limit is too low on macOS (512), breaking the +# "--debugger:native" build. It can be increased with `ulimit -n 1024`. +if not defined(macosx): + # add debugging symbols and original files and line numbers + --debugger:native + if not (defined(windows) and defined(i386)) and not defined(disable_libbacktrace): + # light-weight stack traces using libbacktrace and libunwind + --define:nimStackTraceOverride + switch("import", "libbacktrace") + +--define:nimOldCaseObjects # https://github.com/status-im/nim-confutils/issues/9 + +# `switch("warning[CaseTransition]", "off")` fails with "Error: invalid command line option: '--warning[CaseTransition]'" +switch("warning", "CaseTransition:off") + diff --git a/env.sh b/env.sh new file mode 100755 index 000000000..f90ba9a74 --- /dev/null +++ b/env.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# We use ${BASH_SOURCE[0]} instead of $0 to allow sourcing this file +# and we fall back to a Zsh-specific special var to also support Zsh. +REL_PATH="$(dirname ${BASH_SOURCE[0]:-${(%):-%x}})" +ABS_PATH="$(cd ${REL_PATH}; pwd)" +source ${ABS_PATH}/vendor/nimbus-build-system/scripts/env.sh + diff --git a/nim-waku.nimble b/nim-waku.nimble deleted file mode 100644 index 13483875a..000000000 --- a/nim-waku.nimble +++ /dev/null @@ -1,11 +0,0 @@ -# Package - -version = "0.1.0" -author = "Status Research & Development GmbH" -description = "Waku, Private P2P Messaging for Resource-Rerestricted Devices" -license = "MIT" -srcDir = "src" -#bin = @["build/waku"] - -# Dependencies -requires "nim >= 1.2.0" diff --git a/vendor/news b/vendor/news new file mode 160000 index 000000000..8ea2ee260 --- /dev/null +++ b/vendor/news @@ -0,0 +1 @@ +Subproject commit 8ea2ee260207c57a4b495931508569e181bb7b93 diff --git a/vendor/nim-bearssl b/vendor/nim-bearssl new file mode 160000 index 000000000..68c6d2730 --- /dev/null +++ b/vendor/nim-bearssl @@ -0,0 +1 @@ +Subproject commit 68c6d27304245c948526487b37e10951acf7dbc8 diff --git a/vendor/nim-chronicles b/vendor/nim-chronicles new file mode 160000 index 000000000..af184ae47 --- /dev/null +++ b/vendor/nim-chronicles @@ -0,0 +1 @@ +Subproject commit af184ae47e20672b68d20e7cacd3b726533548e1 diff --git a/vendor/nim-chronos b/vendor/nim-chronos new file mode 160000 index 000000000..357baa52a --- /dev/null +++ b/vendor/nim-chronos @@ -0,0 +1 @@ +Subproject commit 357baa52a0ea3da699c8229d97230c7f4340da92 diff --git a/vendor/nim-confutils b/vendor/nim-confutils new file mode 160000 index 000000000..6e5d57049 --- /dev/null +++ b/vendor/nim-confutils @@ -0,0 +1 @@ +Subproject commit 6e5d570490989c753d4645ba9173ef9358d302bb diff --git a/vendor/nim-faststreams b/vendor/nim-faststreams new file mode 160000 index 000000000..caab5c917 --- /dev/null +++ b/vendor/nim-faststreams @@ -0,0 +1 @@ +Subproject commit caab5c917ffd4a4c583dad9c59d2e1012eee9baa diff --git a/vendor/nim-http-utils b/vendor/nim-http-utils new file mode 160000 index 000000000..33d70b9f3 --- /dev/null +++ b/vendor/nim-http-utils @@ -0,0 +1 @@ +Subproject commit 33d70b9f378591e074838d6608a4468940137357 diff --git a/vendor/nim-json-rpc b/vendor/nim-json-rpc new file mode 160000 index 000000000..5c0d09611 --- /dev/null +++ b/vendor/nim-json-rpc @@ -0,0 +1 @@ +Subproject commit 5c0d0961114bcaaf3da52d5918bf0b85ef0e4ce9 diff --git a/vendor/nim-json-serialization b/vendor/nim-json-serialization new file mode 160000 index 000000000..cb695d175 --- /dev/null +++ b/vendor/nim-json-serialization @@ -0,0 +1 @@ +Subproject commit cb695d175fd809f6262f1ebc329e7c0b1d4505f5 diff --git a/vendor/nim-libbacktrace b/vendor/nim-libbacktrace new file mode 160000 index 000000000..fc63983c7 --- /dev/null +++ b/vendor/nim-libbacktrace @@ -0,0 +1 @@ +Subproject commit fc63983c73ba541413f12ee70a2b6f025b03efea diff --git a/vendor/nim-metrics b/vendor/nim-metrics new file mode 160000 index 000000000..65c91f1a7 --- /dev/null +++ b/vendor/nim-metrics @@ -0,0 +1 @@ +Subproject commit 65c91f1a7b5bf83968d0bebab74d14ddb6e9a432 diff --git a/vendor/nim-nat-traversal b/vendor/nim-nat-traversal new file mode 160000 index 000000000..2403c3392 --- /dev/null +++ b/vendor/nim-nat-traversal @@ -0,0 +1 @@ +Subproject commit 2403c33929c74f2d150f50dc8bc3a598af70661a diff --git a/vendor/nim-serialization b/vendor/nim-serialization new file mode 160000 index 000000000..9f085c33a --- /dev/null +++ b/vendor/nim-serialization @@ -0,0 +1 @@ +Subproject commit 9f085c33a9dc381bcf455225ccfad893b3d0361e diff --git a/vendor/nim-stint b/vendor/nim-stint new file mode 160000 index 000000000..9e49b0014 --- /dev/null +++ b/vendor/nim-stint @@ -0,0 +1 @@ +Subproject commit 9e49b00148884a01d61478ae5d2c69b543b93ceb diff --git a/vendor/nimbus-build-system b/vendor/nimbus-build-system new file mode 160000 index 000000000..e8e1f1c2c --- /dev/null +++ b/vendor/nimbus-build-system @@ -0,0 +1 @@ +Subproject commit e8e1f1c2cff5aebf74dff07b1cf119134267922b diff --git a/vendor/nimcrypto b/vendor/nimcrypto new file mode 160000 index 000000000..30d0ceaba --- /dev/null +++ b/vendor/nimcrypto @@ -0,0 +1 @@ +Subproject commit 30d0ceaba02c0b966515f98873a0404786fbf796 diff --git a/waku.nimble b/waku.nimble new file mode 100644 index 000000000..70c6eb6a6 --- /dev/null +++ b/waku.nimble @@ -0,0 +1,55 @@ +mode = ScriptMode.Verbose + +### Package +version = "0.1.0" +author = "Status Research & Development GmbH" +description = "Waku, Private P2P Messaging for Resource-Rerestricted Devices" +license = "MIT or Apache License 2.0" +srcDir = "src" +#bin = @["build/waku"] + +### Dependencies +requires "nim >= 1.2.0", + "chronicles", + "confutils", + "chronos", + "eth", + "json_rpc", + "libbacktrace", + "nimcrypto", + "stew", + "stint", + "metrics", + "libp2p" # For wakunode v2 + +### Helper functions +proc buildBinary(name: string, srcDir = "./", params = "", lang = "c") = + if not dirExists "build": + mkDir "build" + # allow something like "nim nimbus --verbosity:0 --hints:off nimbus.nims" + var extra_params = params + for i in 2..