Squashed 'external/toxcore/c-toxcore/' changes from e29e185c03..f1df709b87
f1df709b87 feat: add ngc events 1b6c907235 refactor: Make event dispatch ordered by receive time. b7f9367f6f test: Upgrade cppcheck, fix some warnings. 766e62bc89 chore: Use `pkg_search_module` directly in cmake. 00ff078f91 cleanup: Use target_link_libraries directly in cmake. c58928cc89 chore: Add `IMPORTED_TARGET` to pkg-config packages. 895a6af122 cleanup: Remove NaCl support. 41dfb1c1c0 fix: unpack enum function names in event impl generator 447666d1a1 chore: Disable targets for cross-compilation. 572924e924 chore: Build a docker image with coverage info in it. 415cb78f5e cleanup: Some portability/warning fixes for Windows builds. 425216d9ec fix: Correct a use-after-free and fix some memory leaks. 4b1cfa3e08 refactor: Change all enum-like `#define` sequences into enums. d3c2704fa9 chore: Fix make_single_file to support core-only. 0ce46b644e refactor: Change the `TCP_PACKET_*` defines into an enum. 22cd38ad50 adopt event impl generation tool to #2392 f31ea1088a add the event impl generation tool 4e603bb613 refactor: Use `enum-from-int` rule from tokstyle. 19d8f180d6 chore: Update github actions `uses`. 6a895be0c7 test: Make esp32 build actually try to instantiate tox. 65d09c9bfb cleanup: Remove test net support. REVERT: e29e185c03 feat: add ngc events git-subtree-dir: external/toxcore/c-toxcore git-subtree-split: f1df709b8792da4c0e946d826b11df77d565064d
This commit is contained in:
@ -1,6 +1,27 @@
|
||||
################################################
|
||||
# autotools-linux
|
||||
FROM toxchat/nacl:latest
|
||||
FROM ubuntu:22.04
|
||||
|
||||
RUN apt-get update && apt-get install --no-install-recommends -y \
|
||||
autoconf \
|
||||
automake \
|
||||
ca-certificates \
|
||||
curl \
|
||||
libconfig-dev \
|
||||
libopus-dev \
|
||||
libsodium-dev \
|
||||
libtool \
|
||||
libvpx-dev \
|
||||
make \
|
||||
pkg-config \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN groupadd -r -g 1000 builder \
|
||||
&& useradd -m --no-log-init -r -g builder -u 1000 builder
|
||||
USER builder
|
||||
|
||||
WORKDIR /home/builder
|
||||
|
||||
# Copy the sources and run the build.
|
||||
COPY --chown=builder:builder . /home/builder/c-toxcore/
|
||||
|
@ -1,13 +1,15 @@
|
||||
FROM toxchat/c-toxcore:sources AS src
|
||||
FROM ubuntu:22.04 AS build
|
||||
FROM ubuntu:20.04 AS build
|
||||
|
||||
RUN apt-get update && \
|
||||
DEBIAN_FRONTEND="noninteractive" apt-get install -y --no-install-recommends \
|
||||
ca-certificates \
|
||||
clang \
|
||||
cmake \
|
||||
curl \
|
||||
gcc \
|
||||
git \
|
||||
golang \
|
||||
golang-1.18 \
|
||||
libconfig-dev \
|
||||
libgtest-dev \
|
||||
libopus-dev \
|
||||
@ -22,10 +24,16 @@ RUN apt-get update && \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& pip3 install --no-cache-dir gcovr
|
||||
RUN ["strip", "-g",\
|
||||
"/usr/lib/x86_64-linux-gnu/libgtest.a",\
|
||||
"/usr/lib/x86_64-linux-gnu/libgtest_main.a"]
|
||||
RUN ["curl", "-s", "https://codecov.io/bash", "-o", "/usr/local/bin/codecov"]
|
||||
RUN ["chmod", "+x", "/usr/local/bin/codecov"]
|
||||
|
||||
ENV CC=clang \
|
||||
CXX=clang++ \
|
||||
PYTHONUNBUFFERED=1
|
||||
PYTHONUNBUFFERED=1 \
|
||||
PATH=$PATH:/usr/lib/go-1.18/bin
|
||||
SHELL ["/bin/bash", "-c"]
|
||||
|
||||
WORKDIR /work
|
||||
@ -41,26 +49,27 @@ RUN source .github/scripts/flags-coverage.sh \
|
||||
-DENABLE_SHARED=OFF \
|
||||
-DMIN_LOGGER_LEVEL=TRACE \
|
||||
-DMUST_BUILD_TOXAV=ON \
|
||||
-DNON_HERMETIC_TESTS=ON \
|
||||
-DNON_HERMETIC_TESTS=OFF \
|
||||
-DSTRICT_ABI=ON \
|
||||
-DAUTOTEST=ON \
|
||||
-DPROXY_TEST=ON \
|
||||
-DUSE_IPV6=OFF \
|
||||
-DTEST_TIMEOUT_SECONDS=30 \
|
||||
-DTEST_TIMEOUT_SECONDS=40 \
|
||||
&& cmake --build _build --parallel 8 --target install
|
||||
|
||||
WORKDIR /work/_build
|
||||
RUN /work/proxy_server \
|
||||
& ctest -j50 --output-on-failure --rerun-failed --repeat until-pass:6
|
||||
RUN /work/other/proxy/proxy_server \
|
||||
& (ctest -j50 --output-on-failure --rerun-failed --repeat until-pass:6 || \
|
||||
ctest -j50 --output-on-failure --rerun-failed --repeat until-pass:6)
|
||||
|
||||
WORKDIR /work/mallocfail
|
||||
RUN ["git", "clone", "--depth=1", "https://github.com/ralight/mallocfail", "/work/mallocfail"]
|
||||
COPY run_mallocfail /usr/local/bin/
|
||||
COPY syscall_funcs.c src/
|
||||
COPY other/docker/coverage/syscall_funcs.c src/
|
||||
RUN gcc -fPIC -shared -O2 -g3 -Wall -Ideps/uthash -Ideps/sha3 deps/*/*.c src/*.c -o mallocfail.so -ldl -lbacktrace \
|
||||
&& install mallocfail.so /usr/local/lib/mallocfail.so
|
||||
|
||||
WORKDIR /work/_build
|
||||
COPY other/docker/coverage/run_mallocfail /usr/local/bin/
|
||||
RUN ["run_mallocfail", "--ctest=2", "--jobs=8"]
|
||||
RUN ["gcovr", \
|
||||
"--sort-percentage", \
|
||||
@ -74,6 +83,4 @@ RUN ["gcovr", \
|
||||
"--exclude=(.+/)?other/", \
|
||||
"--exclude=(.+/)?testing/"]
|
||||
|
||||
FROM nginx:alpine
|
||||
COPY --from=build /work/_build/html/coverage_details.html /usr/share/nginx/html/index.html
|
||||
COPY --from=build /work/_build/html/ /usr/share/nginx/html/
|
||||
WORKDIR /work
|
||||
|
5
other/docker/coverage/Dockerfile.nginx
Normal file
5
other/docker/coverage/Dockerfile.nginx
Normal file
@ -0,0 +1,5 @@
|
||||
# vim:ft=dockerfile
|
||||
FROM toxchat/c-toxcore:coverage AS build
|
||||
FROM nginx:alpine
|
||||
COPY --from=build /work/_build/html/coverage_details.html /usr/share/nginx/html/index.html
|
||||
COPY --from=build /work/_build/html/ /usr/share/nginx/html/
|
@ -1,7 +1,9 @@
|
||||
#!/bin/sh
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -eux
|
||||
|
||||
read -a ci_env <<<"$(bash <(curl -s https://codecov.io/env))"
|
||||
|
||||
docker build -t toxchat/c-toxcore:sources -f other/docker/sources/Dockerfile .
|
||||
docker build -t toxchat/c-toxcore:coverage other/docker/coverage
|
||||
docker run --name toxcore-coverage --rm -it -p "28192:80" toxchat/c-toxcore:coverage
|
||||
docker build -t toxchat/c-toxcore:coverage -f other/docker/coverage/Dockerfile .
|
||||
docker run "${ci_env[@]}" -e CI=true --name toxcore-coverage --rm -t toxchat/c-toxcore:coverage /usr/local/bin/codecov -x "llvm-cov gcov"
|
||||
|
@ -39,8 +39,8 @@ _ENV = {
|
||||
}
|
||||
|
||||
|
||||
def run_mallocfail(tmpdir: str, timeout: float, exe: str,
|
||||
iteration: int) -> bool:
|
||||
def run_mallocfail(tmpdir: str, timeout: float, exe: str, iteration: int,
|
||||
keep_going: bool) -> bool:
|
||||
"""Run a program with mallocfail."""
|
||||
print(f"\x1b[1;33mmallocfail '{exe}' run #{iteration}\x1b[0m")
|
||||
hashes = os.path.join(tmpdir, _HASHES)
|
||||
@ -73,7 +73,8 @@ def run_mallocfail(tmpdir: str, timeout: float, exe: str,
|
||||
print(
|
||||
f"\x1b[1;32mProgram '{exe}' failed to handle OOM situation cleanly\x1b[0m"
|
||||
)
|
||||
raise Exception("Aborting test")
|
||||
if not keep_going:
|
||||
raise Exception("Aborting test")
|
||||
|
||||
return True
|
||||
|
||||
@ -95,7 +96,8 @@ def find_prog(name: str) -> Tuple[Optional[str], ...]:
|
||||
return path
|
||||
return None
|
||||
|
||||
return (attempt(f"./unit_{name}_test"), attempt(f"./auto_{name}_test"))
|
||||
return (attempt(f"./unit_{name}_test"),
|
||||
attempt(f"auto_tests/auto_{name}_test"))
|
||||
|
||||
|
||||
def parse_flags(args: List[str]) -> Tuple[Dict[str, str], List[str]]:
|
||||
@ -110,15 +112,19 @@ def parse_flags(args: List[str]) -> Tuple[Dict[str, str], List[str]]:
|
||||
return flags, exes
|
||||
|
||||
|
||||
def loop_mallocfail(tmpdir: str, timeout: float, exe: str) -> None:
|
||||
def loop_mallocfail(tmpdir: str,
|
||||
timeout: float,
|
||||
exe: str,
|
||||
keep_going: bool = False) -> None:
|
||||
i = 1
|
||||
while run_mallocfail(tmpdir, timeout, exe, i):
|
||||
while run_mallocfail(tmpdir, timeout, exe, i, keep_going):
|
||||
i += 1
|
||||
|
||||
|
||||
def isolated_mallocfail(timeout: int, exe: str) -> None:
|
||||
with tempfile.TemporaryDirectory(prefix="mallocfail") as tmpdir:
|
||||
print(f"\x1b[1;33mRunning for {exe} in isolated path {tmpdir}\x1b[0m")
|
||||
os.mkdir(os.path.join(tmpdir, "auto_tests"))
|
||||
shutil.copy(exe, os.path.join(tmpdir, exe))
|
||||
shutil.copy(_HASHES, os.path.join(tmpdir, _HASHES))
|
||||
loop_mallocfail(tmpdir, timeout, exe)
|
||||
@ -149,7 +155,7 @@ def main(args: List[str]) -> None:
|
||||
# such as llvm_gcov_init fail.
|
||||
if os.path.exists(_PRIMER):
|
||||
print(f"\x1b[1;33mPriming hashes with unit_util_test\x1b[0m")
|
||||
loop_mallocfail(".", timeout, _PRIMER)
|
||||
loop_mallocfail(".", timeout, _PRIMER, keep_going=True)
|
||||
|
||||
print(f"\x1b[1;33m--------------------------------\x1b[0m")
|
||||
print(f"\x1b[1;33mStarting mallocfail for {len(exes)} programs:\x1b[0m")
|
||||
|
8
other/docker/coverage/serve
Executable file
8
other/docker/coverage/serve
Executable file
@ -0,0 +1,8 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eux
|
||||
|
||||
docker build -t toxchat/c-toxcore:sources -f other/docker/sources/Dockerfile .
|
||||
docker build -t toxchat/c-toxcore:coverage -f other/docker/coverage/Dockerfile .
|
||||
docker build -t toxchat/c-toxcore:coverage-nginx -f other/docker/coverage/Dockerfile.nginx other/docker/coverage
|
||||
docker run --name toxcore-coverage --rm -it -p "28192:80" toxchat/c-toxcore:coverage-nginx
|
30
other/docker/cppcheck/Dockerfile
Normal file
30
other/docker/cppcheck/Dockerfile
Normal file
@ -0,0 +1,30 @@
|
||||
FROM alpine:3.19.0
|
||||
|
||||
RUN ["apk", "add", "--no-cache", \
|
||||
"bash", \
|
||||
"cppcheck", \
|
||||
"findutils", \
|
||||
"libconfig-dev", \
|
||||
"libsodium-dev", \
|
||||
"libvpx-dev", \
|
||||
"linux-headers", \
|
||||
"make", \
|
||||
"opus-dev"]
|
||||
|
||||
COPY other/bootstrap_daemon/ /src/workspace/c-toxcore/other/bootstrap_daemon/
|
||||
COPY other/bootstrap_node_packets.* /src/workspace/c-toxcore/other/
|
||||
COPY other/fun/ /src/workspace/c-toxcore/other/fun/
|
||||
COPY auto_tests/check_compat.h /src/workspace/c-toxcore/auto_tests/
|
||||
COPY testing/ /src/workspace/c-toxcore/testing/
|
||||
COPY toxav/ /src/workspace/c-toxcore/toxav/
|
||||
COPY toxcore/ /src/workspace/c-toxcore/toxcore/
|
||||
COPY toxencryptsave/ /src/workspace/c-toxcore/toxencryptsave/
|
||||
COPY third_party/cmp/cmp.h /src/workspace/c-toxcore/third_party/cmp/
|
||||
COPY other/analysis/run-cppcheck \
|
||||
other/analysis/gen-file.sh \
|
||||
other/analysis/variants.sh \
|
||||
/src/workspace/c-toxcore/other/analysis/
|
||||
COPY other/docker/cppcheck/toxcore.cfg \
|
||||
/src/workspace/c-toxcore/other/docker/cppcheck/
|
||||
WORKDIR /src/workspace/c-toxcore
|
||||
RUN ["other/analysis/run-cppcheck"]
|
5
other/docker/cppcheck/run
Executable file
5
other/docker/cppcheck/run
Executable file
@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eux
|
||||
BUILD=cppcheck
|
||||
docker build -t "toxchat/c-toxcore:$BUILD" -f "other/docker/$BUILD/Dockerfile" .
|
117
other/docker/cppcheck/toxcore.cfg
Normal file
117
other/docker/cppcheck/toxcore.cfg
Normal file
@ -0,0 +1,117 @@
|
||||
<?xml version="1.0"?>
|
||||
<def format="2">
|
||||
<memory>
|
||||
<alloc init="false" buffer-size="malloc:2">mem_balloc</alloc>
|
||||
<alloc init="true" buffer-size="malloc:2">mem_alloc</alloc>
|
||||
<alloc init="true" buffer-size="calloc:2,3">mem_valloc</alloc>
|
||||
<realloc init="false" buffer-size="calloc:3,4">mem_vrealloc</realloc>
|
||||
<dealloc arg="2">mem_delete</dealloc>
|
||||
</memory>
|
||||
<resource>
|
||||
<alloc init="true">bin_pack_new</alloc>
|
||||
<dealloc arg="1">bin_pack_free</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">bin_unpack_new</alloc>
|
||||
<dealloc arg="1">bin_unpack_free</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">friendreq_new</alloc>
|
||||
<dealloc arg="1">friendreq_kill</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">logger_new</alloc>
|
||||
<dealloc arg="1">logger_kill</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">mono_time_new</alloc>
|
||||
<dealloc arg="1">mono_time_free</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">ping_array_new</alloc>
|
||||
<dealloc arg="1">ping_array_kill</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">ping_new</alloc>
|
||||
<dealloc arg="1">ping_kill</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">shared_key_cache_new</alloc>
|
||||
<dealloc arg="1">shared_key_cache_free</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">tox_dispatch_new</alloc>
|
||||
<dealloc arg="1">tox_dispatch_free</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">tox_new</alloc>
|
||||
<dealloc arg="1">tox_kill</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">tox_options_new</alloc>
|
||||
<dealloc arg="1">tox_options_free</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_announcements</alloc>
|
||||
<dealloc arg="1">kill_announcements</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_dht</alloc>
|
||||
<dealloc arg="1">kill_dht</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_dht_groupchats</alloc>
|
||||
<dealloc arg="1">kill_dht_groupchats</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_forwarding</alloc>
|
||||
<dealloc arg="1">kill_forwarding</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_friend_connections</alloc>
|
||||
<dealloc arg="1">kill_friend_connections</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_gca_list</alloc>
|
||||
<dealloc arg="1">kill_gca_list</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_groupchats</alloc>
|
||||
<dealloc arg="1">kill_groupchats</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_messenger</alloc>
|
||||
<dealloc arg="1">kill_messenger</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_net_crypto</alloc>
|
||||
<dealloc arg="1">kill_net_crypto</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_networking_ex</alloc>
|
||||
<alloc init="true">new_networking_no_udp</alloc>
|
||||
<dealloc arg="1">kill_networking</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_onion</alloc>
|
||||
<dealloc arg="1">kill_onion</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_onion_announce</alloc>
|
||||
<dealloc arg="1">kill_onion_announce</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_onion_client</alloc>
|
||||
<dealloc arg="1">kill_onion_client</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_tcp_connections</alloc>
|
||||
<dealloc arg="1">kill_tcp_connections</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_tcp_server</alloc>
|
||||
<dealloc arg="1">kill_tcp_server</dealloc>
|
||||
</resource>
|
||||
</def>
|
||||
<!-- vim:ft=xml
|
||||
-->
|
15
other/docker/esp32/BUILD.bazel
Normal file
15
other/docker/esp32/BUILD.bazel
Normal file
@ -0,0 +1,15 @@
|
||||
load("@rules_cc//cc:defs.bzl", "cc_binary")
|
||||
|
||||
cc_binary(
|
||||
name = "host_main",
|
||||
testonly = 1,
|
||||
srcs = [
|
||||
"host_main.cc",
|
||||
"main/tox_main.cc",
|
||||
"main/tox_main.h",
|
||||
],
|
||||
deps = [
|
||||
"//c-toxcore/toxcore:tox",
|
||||
"//c-toxcore/toxcore:tox_events",
|
||||
],
|
||||
)
|
@ -1,48 +1,32 @@
|
||||
FROM toxchat/c-toxcore:sources AS src
|
||||
FROM ubuntu:18.04
|
||||
FROM mluis/qemu-esp32:latest
|
||||
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||
ENV IDF_TARGET=esp32
|
||||
|
||||
RUN apt-get update && \
|
||||
DEBIAN_FRONTEND="noninteractive" apt-get install -y --no-install-recommends \
|
||||
bison \
|
||||
ccache \
|
||||
cmake \
|
||||
flex \
|
||||
git \
|
||||
gperf \
|
||||
libncurses-dev \
|
||||
ninja-build \
|
||||
python \
|
||||
python-cryptography \
|
||||
python-future \
|
||||
python-pip \
|
||||
python-pyparsing \
|
||||
python-serial \
|
||||
python-setuptools \
|
||||
wget \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
WORKDIR /root/toxcore
|
||||
|
||||
ENV ESP32_TARBALL=xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0 \
|
||||
IDF_PATH="/root/esp/esp-idf" \
|
||||
PATH="/root/esp/esp-idf/tools:/root/esp/xtensa-esp32-elf/bin:$PATH"
|
||||
WORKDIR /root/esp
|
||||
RUN wget -q https://dl.espressif.com/dl/$ESP32_TARBALL.tar.gz \
|
||||
&& tar zxf $ESP32_TARBALL.tar.gz \
|
||||
&& rm -f $ESP32_TARBALL.tar.gz \
|
||||
&& git clone -b v3.3 --recursive --depth=1 --shallow-submodules https://github.com/espressif/esp-idf
|
||||
# Build an initial bootstrap hello world just to compile libsodium and other
|
||||
# system level dependencies.
|
||||
COPY other/docker/esp32/sdkconfig \
|
||||
other/docker/esp32/CMakeLists.txt \
|
||||
/root/toxcore/
|
||||
COPY other/docker/esp32/bootstrap/ \
|
||||
/root/toxcore/main/
|
||||
RUN . /root/esp/esp-idf/export.sh && idf.py build
|
||||
|
||||
# Build a hello world first, so the OS and libsodium etc. are compiled.
|
||||
WORKDIR /root/esp/toxcore
|
||||
COPY other/docker/esp32/CMakeLists.txt /root/esp/toxcore/
|
||||
COPY other/docker/esp32/hello/ /root/esp/toxcore/main/
|
||||
RUN idf.py build
|
||||
|
||||
# Then copy over the actual toxcore sources and build those.
|
||||
COPY --from=src /src/third_party/cmp/ /root/esp/toxcore/main/third_party/cmp/
|
||||
COPY --from=src /src/toxencryptsave/defines.h /root/esp/toxcore/main/toxencryptsave/
|
||||
COPY --from=src /src/toxcore/ /root/esp/toxcore/main/toxcore/
|
||||
COPY other/docker/esp32/toxcore/CMakeLists.txt /root/esp/toxcore/main/
|
||||
COPY other/docker/esp32/toxcore/toxcore_main.cc /root/esp/toxcore/main/other/docker/esp32/main/
|
||||
RUN idf.py build
|
||||
# Copy over toxcore sources and build those.
|
||||
COPY third_party/cmp/ /root/toxcore/main/third_party/cmp/
|
||||
COPY toxencryptsave/defines.h /root/toxcore/main/toxencryptsave/
|
||||
COPY toxcore/ /root/toxcore/main/toxcore/
|
||||
COPY other/docker/esp32/main/CMakeLists.txt \
|
||||
/root/toxcore/main/
|
||||
COPY other/docker/esp32/main/*.cc \
|
||||
other/docker/esp32/main/*.h \
|
||||
/root/toxcore/main/other/docker/esp32/main/
|
||||
RUN touch /root/toxcore/main/CMakeLists.txt \
|
||||
&& . /root/esp/esp-idf/export.sh && idf.py build
|
||||
RUN ls -lh build/toxcore.bin \
|
||||
&& shasum build/toxcore.bin
|
||||
&& sha512sum build/toxcore.bin
|
||||
RUN /root/flash.sh build/toxcore.bin
|
||||
|
||||
COPY other/docker/esp32/qemu-test /root/toxcore/
|
||||
RUN ["/root/toxcore/qemu-test"]
|
||||
|
4
other/docker/esp32/bootstrap/CMakeLists.txt
Normal file
4
other/docker/esp32/bootstrap/CMakeLists.txt
Normal file
@ -0,0 +1,4 @@
|
||||
idf_component_register(
|
||||
SRCS hello_main.cc
|
||||
INCLUDE_DIRS "."
|
||||
REQUIRES esp_netif lwip)
|
4
other/docker/esp32/bootstrap/hello_main.cc
Normal file
4
other/docker/esp32/bootstrap/hello_main.cc
Normal file
@ -0,0 +1,4 @@
|
||||
#include <stdio.h>
|
||||
|
||||
// Bootstrap main. Only writes hello world. See ../main/ for the real thing.
|
||||
extern "C" void app_main(void) { printf("Hello world!\n"); }
|
2
other/docker/esp32/bootstrap/idf_component.yml
Normal file
2
other/docker/esp32/bootstrap/idf_component.yml
Normal file
@ -0,0 +1,2 @@
|
||||
dependencies:
|
||||
espressif/libsodium: "==1.0.20"
|
@ -1,4 +0,0 @@
|
||||
set(COMPONENT_SRCS "hello_main.c")
|
||||
set(COMPONENT_ADD_INCLUDEDIRS "")
|
||||
|
||||
register_component()
|
@ -1,6 +0,0 @@
|
||||
#include <stdio.h>
|
||||
|
||||
void app_main(void)
|
||||
{
|
||||
printf("Hello world!\n");
|
||||
}
|
3
other/docker/esp32/host_main.cc
Normal file
3
other/docker/esp32/host_main.cc
Normal file
@ -0,0 +1,3 @@
|
||||
#include "main/tox_main.h"
|
||||
|
||||
int main() { tox_main(); }
|
16
other/docker/esp32/main/CMakeLists.txt
Normal file
16
other/docker/esp32/main/CMakeLists.txt
Normal file
@ -0,0 +1,16 @@
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-missing-field-initializers -Wno-format -DMIN_LOGGER_LEVEL=LOGGER_LEVEL_TRACE")
|
||||
|
||||
file(GLOB toxcore_SRCS "toxcore/*.[ch]" "toxcore/*/*.[ch]")
|
||||
set(COMPONENT_SRCS
|
||||
${toxcore_SRCS}
|
||||
other/docker/esp32/main/app_main.cc
|
||||
other/docker/esp32/main/tox_main.cc
|
||||
other/docker/esp32/main/tox_main.h
|
||||
third_party/cmp/cmp.c
|
||||
third_party/cmp/cmp.h
|
||||
toxencryptsave/defines.h)
|
||||
|
||||
idf_component_register(
|
||||
SRCS ${COMPONENT_SRCS}
|
||||
INCLUDE_DIRS "."
|
||||
REQUIRES esp_eth esp_netif lwip)
|
73
other/docker/esp32/main/app_main.cc
Normal file
73
other/docker/esp32/main/app_main.cc
Normal file
@ -0,0 +1,73 @@
|
||||
#include <esp_eth.h>
|
||||
#include <esp_event.h>
|
||||
#include <esp_log.h>
|
||||
#include <esp_netif.h>
|
||||
#include <esp_netif_sntp.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "tox_main.h"
|
||||
|
||||
static const char *MAIN_TAG = "app_main";
|
||||
static constexpr int NTP_TIMEOUT = 60; // 1 minute
|
||||
|
||||
static esp_eth_handle_t eth_handle = nullptr;
|
||||
static esp_netif_t *eth_netif = nullptr;
|
||||
|
||||
static void event_handler(
|
||||
void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data)
|
||||
{
|
||||
if (event_base == ETH_EVENT) {
|
||||
if (event_id == ETHERNET_EVENT_START) {
|
||||
return;
|
||||
}
|
||||
if (event_id == ETHERNET_EVENT_STOP) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (event_base == IP_EVENT) {
|
||||
if (event_id == IP_EVENT_ETH_GOT_IP) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void register_ethernet(void)
|
||||
{
|
||||
ESP_ERROR_CHECK(esp_netif_init());
|
||||
ESP_ERROR_CHECK(esp_event_loop_create_default());
|
||||
esp_netif_config_t cfg = ESP_NETIF_DEFAULT_ETH();
|
||||
eth_netif = esp_netif_new(&cfg);
|
||||
|
||||
eth_mac_config_t mac_config = ETH_MAC_DEFAULT_CONFIG();
|
||||
eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG();
|
||||
esp_eth_mac_t *mac = esp_eth_mac_new_openeth(&mac_config);
|
||||
|
||||
esp_eth_phy_t *phy = esp_eth_phy_new_dp83848(&phy_config);
|
||||
|
||||
esp_eth_config_t config = ETH_DEFAULT_CONFIG(mac, phy);
|
||||
ESP_ERROR_CHECK(esp_eth_driver_install(&config, ð_handle));
|
||||
ESP_ERROR_CHECK(esp_netif_attach(eth_netif, esp_eth_new_netif_glue(eth_handle)));
|
||||
ESP_ERROR_CHECK(esp_event_handler_register(ETH_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL));
|
||||
ESP_ERROR_CHECK(
|
||||
esp_event_handler_register(IP_EVENT, IP_EVENT_ETH_GOT_IP, &event_handler, NULL));
|
||||
ESP_ERROR_CHECK(esp_eth_start(eth_handle));
|
||||
}
|
||||
|
||||
// Does all the esp32-specific init before running generic tox code.
|
||||
extern "C" void app_main(void)
|
||||
{
|
||||
register_ethernet();
|
||||
|
||||
esp_sntp_config_t config = ESP_NETIF_SNTP_DEFAULT_CONFIG("pool.ntp.org");
|
||||
ESP_ERROR_CHECK(esp_netif_sntp_init(&config));
|
||||
|
||||
if (esp_netif_sntp_sync_wait(pdMS_TO_TICKS(NTP_TIMEOUT * 1000)) != ESP_OK) {
|
||||
ESP_LOGE(MAIN_TAG, "failed to update system time within %ds timeout", NTP_TIMEOUT);
|
||||
return;
|
||||
}
|
||||
|
||||
ESP_LOGI(MAIN_TAG, "time is updated: %lld", time(nullptr));
|
||||
|
||||
tox_main();
|
||||
}
|
98
other/docker/esp32/main/tox_main.cc
Normal file
98
other/docker/esp32/main/tox_main.cc
Normal file
@ -0,0 +1,98 @@
|
||||
#include "../main/tox_main.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "../../../../toxcore/ccompat.h"
|
||||
#include "../../../../toxcore/tox.h"
|
||||
#include "../../../../toxcore/tox_events.h"
|
||||
|
||||
static const char *color(int index)
|
||||
{
|
||||
switch (index) {
|
||||
case 0:
|
||||
return "\033"
|
||||
"[35m";
|
||||
case 1:
|
||||
return "\033"
|
||||
"[36m";
|
||||
}
|
||||
|
||||
return "\033"
|
||||
"[0m";
|
||||
}
|
||||
|
||||
static tox_log_cb log_handler;
|
||||
static void log_handler(Tox *tox, Tox_Log_Level level, const char *file, uint32_t line,
|
||||
const char *func, const char *msg, void *user_data)
|
||||
{
|
||||
const int *index = static_cast<const int *>(user_data);
|
||||
const uint16_t udp_port = tox_self_get_udp_port(tox, nullptr);
|
||||
printf("%s#%d (:%d) [%c] %s:%u(%s): %s\n", color(*index), *index, udp_port,
|
||||
tox_log_level_to_string(level)[0], file, static_cast<unsigned int>(line), func, msg);
|
||||
}
|
||||
|
||||
using Tox_Options_Ptr = std::unique_ptr<Tox_Options, void (*)(Tox_Options *)>;
|
||||
using Tox_Ptr = std::unique_ptr<Tox, void (*)(Tox *)>;
|
||||
|
||||
void tox_main()
|
||||
{
|
||||
printf("Hello Tox!\n");
|
||||
|
||||
Tox_Options_Ptr opts(tox_options_new(nullptr), tox_options_free);
|
||||
assert(opts != nullptr);
|
||||
|
||||
tox_options_set_ipv6_enabled(opts.get(), false);
|
||||
tox_options_set_local_discovery_enabled(opts.get(), false);
|
||||
|
||||
tox_options_set_log_callback(opts.get(), log_handler);
|
||||
|
||||
Tox_Err_New err;
|
||||
|
||||
int index[] = {0, 1};
|
||||
|
||||
tox_options_set_log_user_data(opts.get(), &index[0]);
|
||||
Tox_Ptr tox0(tox_new(opts.get(), &err), tox_kill);
|
||||
printf("tox_new(#0): %p\n", static_cast<void *>(tox0.get()));
|
||||
|
||||
if (err != TOX_ERR_NEW_OK) {
|
||||
printf("tox_new(#0): %s\n", tox_err_new_to_string(err));
|
||||
return;
|
||||
}
|
||||
|
||||
tox_options_set_log_user_data(opts.get(), &index[1]);
|
||||
Tox_Ptr tox1(tox_new(opts.get(), &err), tox_kill);
|
||||
printf("tox_new(#1): %p\n", static_cast<void *>(tox0.get()));
|
||||
|
||||
if (err != TOX_ERR_NEW_OK) {
|
||||
printf("tox_new(#1): %s\n", tox_err_new_to_string(err));
|
||||
return;
|
||||
}
|
||||
|
||||
uint8_t pk[TOX_PUBLIC_KEY_SIZE];
|
||||
tox_self_get_dht_id(tox0.get(), pk);
|
||||
tox_bootstrap(tox1.get(), "localhost", tox_self_get_udp_port(tox0.get(), nullptr), pk, nullptr);
|
||||
|
||||
#if 0
|
||||
tox_self_get_public_key(tox0.get(), pk);
|
||||
tox_friend_add_norequest(tox1.get(), pk, nullptr);
|
||||
|
||||
tox_self_get_public_key(tox1.get(), pk);
|
||||
tox_friend_add_norequest(tox0.get(), pk, nullptr);
|
||||
#endif
|
||||
|
||||
printf("bootstrapping and connecting 2 toxes\n");
|
||||
|
||||
while (tox_self_get_connection_status(tox1.get()) == TOX_CONNECTION_NONE
|
||||
|| tox_self_get_connection_status(tox0.get()) == TOX_CONNECTION_NONE) {
|
||||
tox_events_free(tox_events_iterate(tox0.get(), true, nullptr));
|
||||
tox_events_free(tox_events_iterate(tox1.get(), true, nullptr));
|
||||
|
||||
usleep(tox_iteration_interval(tox0.get()) * 1000);
|
||||
usleep(250); // a bit less noise in the log
|
||||
}
|
||||
}
|
6
other/docker/esp32/main/tox_main.h
Normal file
6
other/docker/esp32/main/tox_main.h
Normal file
@ -0,0 +1,6 @@
|
||||
#ifndef TOX_MAIN_H
|
||||
#define TOX_MAIN_H
|
||||
|
||||
void tox_main();
|
||||
|
||||
#endif // TOX_MAIN_H
|
17
other/docker/esp32/qemu-test
Executable file
17
other/docker/esp32/qemu-test
Executable file
@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -eu
|
||||
|
||||
qemu-system-xtensa \
|
||||
-nographic \
|
||||
-M esp32 \
|
||||
-m 4 \
|
||||
-drive file=flash.bin,if=mtd,format=raw \
|
||||
-nic user,model=open_eth,hostfwd=tcp::80-:80 \
|
||||
-s |
|
||||
tee qemu.log &
|
||||
|
||||
echo "Waiting for program to complete"
|
||||
while ! grep 'Returned from app_main' qemu.log >/dev/null; do
|
||||
sleep 1
|
||||
done
|
@ -1,4 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
docker build -t toxchat/c-toxcore:sources -f other/docker/sources/Dockerfile .
|
||||
docker build -t toxchat/c-toxcore:esp32 -f other/docker/esp32/Dockerfile .
|
||||
|
5
other/docker/esp32/run-host
Executable file
5
other/docker/esp32/run-host
Executable file
@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eux
|
||||
|
||||
bazel run //c-toxcore/other/docker/esp32:host_main
|
1937
other/docker/esp32/sdkconfig
Normal file
1937
other/docker/esp32/sdkconfig
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,12 +0,0 @@
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-missing-field-initializers")
|
||||
|
||||
file(GLOB toxcore_SRCS "toxcore/*.[ch]" "toxcore/*/*.[ch]")
|
||||
set(COMPONENT_SRCS
|
||||
${toxcore_SRCS}
|
||||
other/docker/esp32/main/toxcore_main.cc
|
||||
third_party/cmp/cmp.c
|
||||
third_party/cmp/cmp.h
|
||||
toxencryptsave/defines.h)
|
||||
set(COMPONENT_ADD_INCLUDEDIRS "")
|
||||
|
||||
register_component()
|
@ -1,14 +0,0 @@
|
||||
#include <stdio.h>
|
||||
|
||||
#include "../../../../toxcore/ccompat.h"
|
||||
#include "../../../../toxcore/tox.h"
|
||||
#include "../../../../toxcore/tox_events.h"
|
||||
|
||||
extern "C" void app_main(void)
|
||||
{
|
||||
printf("Hello Tox!\n");
|
||||
|
||||
Tox *tox = tox_new(nullptr, nullptr);
|
||||
tox_events_free(tox_events_iterate(tox, true, nullptr));
|
||||
tox_kill(tox);
|
||||
}
|
@ -39,7 +39,7 @@ RUN tcc \
|
||||
|
||||
COPY other/make_single_file /work/other/
|
||||
RUN \
|
||||
other/make_single_file \
|
||||
other/make_single_file -core \
|
||||
auto_tests/auto_test_support.c \
|
||||
auto_tests/send_message_test.c \
|
||||
testing/misc_tools.c | \
|
||||
@ -47,5 +47,17 @@ RUN \
|
||||
-o send_message_test \
|
||||
-Wall -Werror \
|
||||
-bench -g \
|
||||
$(pkg-config --cflags --libs libsodium opus vpx) \
|
||||
$(pkg-config --cflags --libs libsodium) \
|
||||
&& ./send_message_test | grep 'tox clients connected'
|
||||
|
||||
RUN \
|
||||
other/make_single_file \
|
||||
auto_tests/auto_test_support.c \
|
||||
auto_tests/toxav_basic_test.c \
|
||||
testing/misc_tools.c | \
|
||||
tcc - \
|
||||
-o toxav_basic_test \
|
||||
-Wall -Werror \
|
||||
-bench -g \
|
||||
$(pkg-config --cflags --libs libsodium opus vpx) \
|
||||
&& ./toxav_basic_test | grep 'Test successful'
|
||||
|
Reference in New Issue
Block a user