From 425b31c0235a006a403eee84e1043d02f169bd85 Mon Sep 17 00:00:00 2001 From: Christien Rioux Date: Tue, 7 Nov 2023 19:27:08 -0500 Subject: [PATCH 1/7] make capnp only necessary if modifying generated files --- Earthfile | 26 ------ dev-setup/setup_linux.sh | 140 ++++++++++++++++-------------- dev-setup/setup_macos.sh | 120 +++++++++++++------------ scripts/earthly/install_protoc.sh | 37 -------- veilid-core/build.rs | 100 ++++++++------------- 5 files changed, 179 insertions(+), 244 deletions(-) delete mode 100755 scripts/earthly/install_protoc.sh diff --git a/Earthfile b/Earthfile index 53af93f5..a7d173cc 100644 --- a/Earthfile +++ b/Earthfile @@ -26,22 +26,6 @@ deps-base: RUN apt-get -y update RUN apt-get install -y iproute2 curl build-essential cmake libssl-dev openssl file git pkg-config libdbus-1-dev libdbus-glib-1-dev libgirepository1.0-dev libcairo2-dev checkinstall unzip libncursesw5-dev libncurses5-dev -# Install Cap'n Proto -deps-capnp: - FROM +deps-base - COPY scripts/earthly/install_capnproto.sh / - RUN /bin/bash /install_capnproto.sh 1; rm /install_capnproto.sh - SAVE ARTIFACT /usr/local/bin/capnp* bin/ - SAVE ARTIFACT /usr/local/lib/lib* lib/ - SAVE ARTIFACT /usr/local/lib/pkgconfig lib/ - -# Install protoc -deps-protoc: - FROM +deps-base - COPY scripts/earthly/install_protoc.sh / - RUN /bin/bash /install_protoc.sh; rm /install_protoc.sh - SAVE ARTIFACT /usr/local/bin/protoc bin/protoc - # Install Rust deps-rust: FROM +deps-base @@ -75,11 +59,6 @@ deps-rust: # Install android tooling deps-android: FROM +deps-base - BUILD +deps-protoc - COPY +deps-protoc/bin/* /usr/local/bin/ - BUILD +deps-capnp - COPY +deps-capnp/bin/* /usr/local/bin/ - COPY +deps-capnp/lib/* /usr/local/lib/ BUILD +deps-rust COPY +deps-rust/cargo /usr/local/cargo COPY +deps-rust/rustup /usr/local/rustup @@ -96,11 +75,6 @@ deps-android: # Just linux build not android deps-linux: FROM +deps-base - BUILD +deps-protoc - COPY +deps-protoc/bin/* /usr/local/bin/ - BUILD +deps-capnp - COPY +deps-capnp/bin/* /usr/local/bin/ - COPY +deps-capnp/lib/* /usr/local/lib/ BUILD +deps-rust COPY +deps-rust/cargo /usr/local/cargo COPY +deps-rust/rustup /usr/local/rustup diff --git a/dev-setup/setup_linux.sh b/dev-setup/setup_linux.sh index 019169de..107acb0b 100755 --- a/dev-setup/setup_linux.sh +++ b/dev-setup/setup_linux.sh @@ -17,75 +17,75 @@ if ! lsb_release -d | grep -qEi 'debian|buntu|mint' && [ -z "$(command -v dnf)" echo Not a supported Linux exit 1 fi + while true; do -read -p "Did you install Android SDK? Y/N " response + read -p "Did you install Android SDK? Y/N " response -case $response in - [yY] ) echo Checking android setup...; + case $response in + [yY] ) echo Checking android setup...; -# ensure ANDROID_SDK_ROOT is defined and exists -if [ -d "$ANDROID_SDK_ROOT" ]; then - echo '[X] $ANDROID_SDK_ROOT is defined and exists' -else - echo '$ANDROID_SDK_ROOT is not defined or does not exist' - exit 1 -fi + # ensure ANDROID_SDK_ROOT is defined and exists + if [ -d "$ANDROID_SDK_ROOT" ]; then + echo '[X] $ANDROID_SDK_ROOT is defined and exists' + else + echo '$ANDROID_SDK_ROOT is not defined or does not exist' + exit 1 + fi -# ensure Android Command Line Tools exist -if [ -d "$ANDROID_SDK_ROOT/cmdline-tools/latest/bin" ]; then - echo '[X] Android command line tools are installed' -else - echo 'Android command line tools are not installed' - exit 1 -fi + # ensure Android Command Line Tools exist + if [ -d "$ANDROID_SDK_ROOT/cmdline-tools/latest/bin" ]; then + echo '[X] Android command line tools are installed' + else + echo 'Android command line tools are not installed' + exit 1 + fi -# ensure ANDROID_NDK_HOME is defined and exists -if [ -d "$ANDROID_NDK_HOME" ]; then - echo '[X] $ANDROID_NDK_HOME is defined and exists' -else - echo '$ANDROID_NDK_HOME is not defined or does not exist' - exit 1 -fi + # ensure ANDROID_NDK_HOME is defined and exists + if [ -d "$ANDROID_NDK_HOME" ]; then + echo '[X] $ANDROID_NDK_HOME is defined and exists' + else + echo '$ANDROID_NDK_HOME is not defined or does not exist' + exit 1 + fi -# ensure ndk is installed -if [ -f "$ANDROID_NDK_HOME/ndk-build" ]; then - echo '[X] Android NDK is installed at the location $ANDROID_NDK_HOME' -else - echo 'Android NDK is not installed at the location $ANDROID_NDK_HOME' - exit 1 -fi + # ensure ndk is installed + if [ -f "$ANDROID_NDK_HOME/ndk-build" ]; then + echo '[X] Android NDK is installed at the location $ANDROID_NDK_HOME' + else + echo 'Android NDK is not installed at the location $ANDROID_NDK_HOME' + exit 1 + fi -# ensure cmake is installed -if [ -d "$ANDROID_SDK_ROOT/cmake" ]; then - echo '[X] Android SDK CMake is installed' -else - echo 'Android SDK CMake is not installed' - exit 1 -fi + # ensure cmake is installed + if [ -d "$ANDROID_SDK_ROOT/cmake" ]; then + echo '[X] Android SDK CMake is installed' + else + echo 'Android SDK CMake is not installed' + exit 1 + fi -# ensure emulator is installed -if [ -d "$ANDROID_SDK_ROOT/emulator" ]; then - echo '[X] Android SDK emulator is installed' -else - echo 'Android SDK emulator is not installed' - exit 1 -fi + # ensure emulator is installed + if [ -d "$ANDROID_SDK_ROOT/emulator" ]; then + echo '[X] Android SDK emulator is installed' + else + echo 'Android SDK emulator is not installed' + exit 1 + fi -# ensure adb is installed -if command -v adb &> /dev/null; then - echo '[X] adb is available in the path' -else - echo 'adb is not available in the path' - exit 1 -fi -break;; -[nN] ) echo Skipping android SDK config check...; -break;; - -* ) echo invalid response;; - -esac + # ensure adb is installed + if command -v adb &> /dev/null; then + echo '[X] adb is available in the path' + else + echo 'adb is not available in the path' + exit 1 + fi + break;; + [nN] ) echo Skipping Android SDK config check...; + break;; + * ) echo invalid response;; + esac done + # ensure rustup is installed if command -v rustup &> /dev/null; then echo '[X] rustup is available in the path' @@ -119,7 +119,21 @@ cargo install wasm-bindgen-cli wasm-pack cargo-edit # install pip packages pip3 install --upgrade bumpversion -# Install capnproto using the same mechanism as our earthly build -$SCRIPTDIR/../scripts/earthly/install_capnproto.sh -# Install protoc using the same mechanism as our earthly build -$SCRIPTDIR/../scripts/earthly/install_protoc.sh +# install capnp +while true; do + read -p "Will you be modifying the capnproto schema? Y/N (say N if unsure)" response + + case $response in + [yY] ) echo Installing capnproto...; + + # Install capnproto using the same mechanism as our earthly build + $SCRIPTDIR/../scripts/earthly/install_capnproto.sh + + break;; + [nN] ) echo Skipping capnproto installation...; + break;; + * ) echo invalid response;; + esac +done + + diff --git a/dev-setup/setup_macos.sh b/dev-setup/setup_macos.sh index 0ec96c1c..34ed33fa 100755 --- a/dev-setup/setup_macos.sh +++ b/dev-setup/setup_macos.sh @@ -7,69 +7,77 @@ if [ ! "$(uname)" == "Darwin" ]; then echo Not running on MacOS exit 1 fi -read -p "Did you install Android SDK? Y/N " response -case $response in - [yY] ) echo Checking android setup...; -# ensure ANDROID_SDK_ROOT is defined and exists -if [ -d "$ANDROID_SDK_ROOT" ]; then - echo '[X] $ANDROID_SDK_ROOT is defined and exists' -else - echo '$ANDROID_SDK_ROOT is not defined or does not exist' - exit 1 -fi +while true; do -# ensure Android Command Line Tools exist -if [ -d "$ANDROID_SDK_ROOT/cmdline-tools/latest/bin" ]; then - echo '[X] Android command line tools are installed' -else - echo 'Android command line tools are not installed' - exit 1 -fi + read -p "Did you install Android SDK? Y/N " response + case $response in + [yY] ) echo Checking android setup...; + # ensure ANDROID_SDK_ROOT is defined and exists + if [ -d "$ANDROID_SDK_ROOT" ]; then + echo '[X] $ANDROID_SDK_ROOT is defined and exists' + else + echo '$ANDROID_SDK_ROOT is not defined or does not exist' + exit 1 + fi -# ensure Android SDK packages are installed -$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager build-tools\;33.0.1 ndk\;25.1.8937393 cmake\;3.22.1 platform-tools platforms\;android-33 + # ensure Android Command Line Tools exist + if [ -d "$ANDROID_SDK_ROOT/cmdline-tools/latest/bin" ]; then + echo '[X] Android command line tools are installed' + else + echo 'Android command line tools are not installed' + exit 1 + fi -# ensure ANDROID_NDK_HOME is defined and exists -if [ -d "$ANDROID_NDK_HOME" ]; then - echo '[X] $ANDROID_NDK_HOME is defined and exists' -else - echo '$ANDROID_NDK_HOME is not defined or does not exist' - exit 1 -fi + # ensure Android SDK packages are installed + $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager build-tools\;33.0.1 ndk\;25.1.8937393 cmake\;3.22.1 platform-tools platforms\;android-33 -# ensure ndk is installed -if [ -f "$ANDROID_NDK_HOME/ndk-build" ]; then - echo '[X] Android NDK is installed at the location $ANDROID_NDK_HOME' -else - echo 'Android NDK is not installed at the location $ANDROID_NDK_HOME' - exit 1 -fi + # ensure ANDROID_NDK_HOME is defined and exists + if [ -d "$ANDROID_NDK_HOME" ]; then + echo '[X] $ANDROID_NDK_HOME is defined and exists' + else + echo '$ANDROID_NDK_HOME is not defined or does not exist' + exit 1 + fi -# ensure cmake is installed -if [ -d "$ANDROID_SDK_ROOT/cmake" ]; then - echo '[X] Android SDK CMake is installed' -else - echo 'Android SDK CMake is not installed' - exit 1 -fi + # ensure ndk is installed + if [ -f "$ANDROID_NDK_HOME/ndk-build" ]; then + echo '[X] Android NDK is installed at the location $ANDROID_NDK_HOME' + else + echo 'Android NDK is not installed at the location $ANDROID_NDK_HOME' + exit 1 + fi -# ensure emulator is installed -if [ -d "$ANDROID_SDK_ROOT/emulator" ]; then - echo '[X] Android SDK emulator is installed' -else - echo 'Android SDK emulator is not installed' - exit 1 -fi + # ensure cmake is installed + if [ -d "$ANDROID_SDK_ROOT/cmake" ]; then + echo '[X] Android SDK CMake is installed' + else + echo 'Android SDK CMake is not installed' + exit 1 + fi -# ensure adb is installed -if command -v adb &> /dev/null; then - echo '[X] adb is available in the path' -else - echo 'adb is not available in the path' - exit 1 -fi -esac + # ensure emulator is installed + if [ -d "$ANDROID_SDK_ROOT/emulator" ]; then + echo '[X] Android SDK emulator is installed' + else + echo 'Android SDK emulator is not installed' + exit 1 + fi + + # ensure adb is installed + if command -v adb &> /dev/null; then + echo '[X] adb is available in the path' + else + echo 'adb is not available in the path' + exit 1 + fi + break;; + [nN] ) echo Skipping Android SDK config check...; + break;; + + * ) echo invalid response;; + esac +done # ensure brew is installed if command -v brew &> /dev/null; then @@ -130,7 +138,7 @@ if [ "$BREW_USER" == "" ]; then BREW_USER=`whoami` fi fi -sudo -H -u $BREW_USER brew install capnp cmake wabt llvm protobuf openjdk@17 jq +sudo -H -u $BREW_USER brew install capnp cmake wabt llvm openjdk@17 jq # install targets rustup target add aarch64-apple-darwin aarch64-apple-ios aarch64-apple-ios-sim x86_64-apple-darwin x86_64-apple-ios wasm32-unknown-unknown aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android diff --git a/scripts/earthly/install_protoc.sh b/scripts/earthly/install_protoc.sh deleted file mode 100755 index d01a780e..00000000 --- a/scripts/earthly/install_protoc.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -PROTOC_VERSION="24.3" # Keep in sync with veilid-core/build.rs - -UNAME_M=$(uname -m) -if [[ "$UNAME_M" == "x86_64" ]]; then - PROTOC_ARCH=x86_64 -elif [[ "$UNAME_M" == "aarch64" ]]; then - PROTOC_ARCH=aarch_64 -else - echo Unsupported build architecture - exit 1 -fi - -mkdir /tmp/protoc-install -pushd /tmp/protoc-install -curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v$PROTOC_VERSION/protoc-$PROTOC_VERSION-linux-$PROTOC_ARCH.zip -unzip protoc-$PROTOC_VERSION-linux-$PROTOC_ARCH.zip -if [ "$EUID" -ne 0 ]; then - if command -v checkinstall &> /dev/null; then - sudo checkinstall --pkgversion=$PROTOC_VERSION -y cp -r bin include /usr/local/ - cp *.deb ~ - else - sudo cp -r bin include /usr/local/ - fi - popd - sudo rm -rf /tmp/protoc-install -else - if command -v checkinstall &> /dev/null; then - checkinstall --pkgversion=$PROTOC_VERSION -y cp -r bin include /usr/local/ - cp *.deb ~ - else - cp -r bin include /usr/local/ - fi - popd - rm -rf /tmp/protoc-install -fi diff --git a/veilid-core/build.rs b/veilid-core/build.rs index a40f249a..226e9d48 100644 --- a/veilid-core/build.rs +++ b/veilid-core/build.rs @@ -1,20 +1,16 @@ use glob::glob; use std::{ - env, + env, fs, io, + path::Path, process::{Command, Stdio}, }; -const CAPNP_VERSION: &str = "1.0.1"; // Keep in sync with scripts/install_capnp.sh -const PROTOC_VERSION: &str = "24.3"; // Keep in sync with scripts/install_protoc.sh +const CAPNP_VERSION: &str = "1.0.1"; fn get_desired_capnp_version_string() -> String { CAPNP_VERSION.to_string() } -fn get_desired_protoc_version_string() -> String { - PROTOC_VERSION.to_string() -} - fn get_capnp_version_string() -> String { let output = Command::new("capnp") .arg("--version") @@ -32,35 +28,29 @@ fn get_capnp_version_string() -> String { s[20..].to_owned() } -fn get_protoc_version_string() -> String { - let output = Command::new("protoc") - .arg("--version") - .stdout(Stdio::piped()) - .output() - .expect("protoc was not in the PATH"); - let s = String::from_utf8(output.stdout) - .expect("'protoc --version' output was not a valid string") - .trim() - .to_owned(); +fn is_input_file_outdated(input: P1, output: P2) -> io::Result +where + P1: AsRef, + P2: AsRef, +{ + let out_meta = fs::metadata(output); + if let Ok(meta) = out_meta { + let output_mtime = meta.modified()?; - if !s.starts_with("libprotoc ") { - panic!("invalid protoc version string: {}", s); + // if input file is more recent than our output, we are outdated + let input_meta = fs::metadata(input)?; + let input_mtime = input_meta.modified()?; + + Ok(input_mtime > output_mtime) + } else { + // output file not found, we are outdated + Ok(true) } - s[10..].to_owned() } -fn main() { - if std::env::var("DOCS_RS").is_ok() - || std::env::var("CARGO_CFG_DOC").is_ok() - || std::env::var("BUILD_DOCS").is_ok() - { - return; - } - +fn do_capnp_build() { let desired_capnp_version_string = get_desired_capnp_version_string(); let capnp_version_string = get_capnp_version_string(); - let desired_protoc_version_string = get_desired_protoc_version_string(); - let protoc_version_string = get_protoc_version_string(); // Check capnp version let desired_capnp_major_version = desired_capnp_version_string @@ -89,45 +79,16 @@ fn main() { ); } - // Check protoc version - let desired_protoc_major_version = desired_protoc_version_string - .split_once('.') - .unwrap() - .0 - .parse::() - .expect("should be valid int"); - if protoc_version_string - .split_once('.') - .unwrap() - .0 - .parse::() - .expect("should be valid int") - < desired_protoc_major_version - { - panic!( - "protoc version should be at least major version {} but is {}", - desired_protoc_major_version, protoc_version_string - ); - } else if protoc_version_string != desired_protoc_version_string { - println!( - "cargo:warning=protoc version may be untested: {}", - protoc_version_string - ); - } - ::capnpc::CompilerCommand::new() .file("proto/veilid.capnp") .output_path(".") .run() .expect("compiling schema"); +} - // Fix for missing __extenddftf2 on Android x86_64 Emulator +// Fix for missing __extenddftf2 on Android x86_64 Emulator +fn fix_android_emulator() { let target_os = env::var("CARGO_CFG_TARGET_OS").unwrap(); - // if target_os == "android" || target_os == "linux" { - // println!("cargo:rustc-link-lib=stdc++"); - // } else { - // println!("cargo:rustc-link-lib=c++"); - // } let target_arch = env::var("CARGO_CFG_TARGET_ARCH").unwrap(); if target_arch == "x86_64" && target_os == "android" { let missing_library = "clang_rt.builtins-x86_64-android"; @@ -142,3 +103,18 @@ fn main() { println!("cargo:rustc-link-lib=static={missing_library}"); } } + +fn main() { + if std::env::var("DOCS_RS").is_ok() + || std::env::var("CARGO_CFG_DOC").is_ok() + || std::env::var("BUILD_DOCS").is_ok() + { + return; + } + + if is_input_file_outdated("./proto/veilid.capnp", "./proto/veilid_capnp.rs").unwrap() { + do_capnp_build(); + } + + fix_android_emulator(); +} From ffacbdfe2566e598c0a5f676ff66fd8eb4ce9db3 Mon Sep 17 00:00:00 2001 From: Christien Rioux Date: Tue, 7 Nov 2023 20:38:36 -0500 Subject: [PATCH 2/7] clarify error --- veilid-core/build.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/veilid-core/build.rs b/veilid-core/build.rs index 226e9d48..4d8395d8 100644 --- a/veilid-core/build.rs +++ b/veilid-core/build.rs @@ -16,7 +16,7 @@ fn get_capnp_version_string() -> String { .arg("--version") .stdout(Stdio::piped()) .output() - .expect("capnp was not in the PATH"); + .expect("capnp was not in the PATH, and is required for the build when you have changed any .capnp files"); let s = String::from_utf8(output.stdout) .expect("'capnp --version' output was not a valid string") .trim() From c67a427610659d2419cdac388e8859be883c904b Mon Sep 17 00:00:00 2001 From: Christien Rioux Date: Tue, 7 Nov 2023 21:06:29 -0500 Subject: [PATCH 3/7] mtime fixes --- Cargo.lock | 22 ++++++++++++++++++++++ veilid-core/Cargo.toml | 1 + veilid-core/build.rs | 5 +++++ 3 files changed, 28 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 559f2fd3..05f41c32 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1830,6 +1830,18 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a481586acf778f1b1455424c343f71124b048ffa5f4fc3f8f6ae9dc432dcb3c7" +[[package]] +name = "filetime" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall 0.3.5", + "windows-sys 0.48.0", +] + [[package]] name = "flate2" version = "1.0.28" @@ -3930,6 +3942,15 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags 1.3.2", +] + [[package]] name = "redox_syscall" version = "0.4.1" @@ -5521,6 +5542,7 @@ dependencies = [ "enum-as-inner", "enumset", "eyre", + "filetime", "flume", "futures-util", "getrandom", diff --git a/veilid-core/Cargo.toml b/veilid-core/Cargo.toml index 6a3a4692..c12abb15 100644 --- a/veilid-core/Cargo.toml +++ b/veilid-core/Cargo.toml @@ -274,6 +274,7 @@ wasm-logger = "0.2.0" [build-dependencies] capnpc = "0.18.0" glob = "0.3.1" +filetime = "0.2.22" [package.metadata.wasm-pack.profile.release] wasm-opt = ["-O", "--enable-mutable-globals"] diff --git a/veilid-core/build.rs b/veilid-core/build.rs index 4d8395d8..3324b5f8 100644 --- a/veilid-core/build.rs +++ b/veilid-core/build.rs @@ -1,3 +1,4 @@ +use filetime::{set_file_mtime, FileTime}; use glob::glob; use std::{ env, fs, io, @@ -84,6 +85,9 @@ fn do_capnp_build() { .output_path(".") .run() .expect("compiling schema"); + + // If successful, update modification time + set_file_mtime("proto/veilid_capnp.rs", FileTime::now()).unwrap(); } // Fix for missing __extenddftf2 on Android x86_64 Emulator @@ -113,6 +117,7 @@ fn main() { } if is_input_file_outdated("./proto/veilid.capnp", "./proto/veilid_capnp.rs").unwrap() { + println!("cargo:warning=rebuilding proto/veilid_capnp.rs because it is older than proto/veilid.capnp"); do_capnp_build(); } From 3c8df50a343843d917d2971982fc4ebb116882fc Mon Sep 17 00:00:00 2001 From: Christien Rioux Date: Tue, 7 Nov 2023 22:07:52 -0500 Subject: [PATCH 4/7] clarify development.md --- DEVELOPMENT.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 5b738d24..c0cdc797 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -150,9 +150,7 @@ Install Git from Install Rust from (this may prompt you to run the Visual Studio Installer, and reboot, before proceeding). -Ensure that protoc.exe is in a directory in your path. For example, it can be obtained from - -Ensure that capnp.exe (for Cap’n Proto 1.0.1) is in a directory in your path. For example, it can be obtained from the distribution. Please note that the Windows Package Manager Community Repository (i.e., winget) as of 2023-09-15 has version 0.10.4, which is not sufficient. +Optional (only if modifying capnp schema): Ensure that capnp.exe (for Cap’n Proto 1.0.1) is in a directory in your path. For example, it can be obtained from the distribution. Please note that the Windows Package Manager Community Repository (i.e., winget) as of 2023-09-15 has version 0.10.4, which is not sufficient. Start a Command Prompt window. From e53e312fce62de8d555c047ed92db38ca2313bff Mon Sep 17 00:00:00 2001 From: Christien Rioux Date: Tue, 7 Nov 2023 22:09:45 -0500 Subject: [PATCH 5/7] some more clarifications --- DEVELOPMENT.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index c0cdc797..b3a40d57 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -22,9 +22,12 @@ welcome! Running the setup script requires: -* Android SDK and NDK * Rust +Optionally, to build for Android: + +* Android SDK and NDK + You may decide to use Android Studio [here](https://developer.android.com/studio) to maintain your Android dependencies. If so, use the dependency manager within your IDE. If you plan on using Flutter for Veilid development, the Android Studio @@ -95,12 +98,15 @@ Development of Veilid on MacOS is possible on both Intel and ARM hardware. Development requires: -* Android Studio * Xcode, preferably latest version * Homebrew [here](https://brew.sh) -* Android SDK and NDK * Rust +Optionally, to build for Android: + +* Android Studio +* Android SDK and NDK + You will need to use Android Studio [here](https://developer.android.com/studio) to maintain your Android dependencies. Use the SDK Manager in the IDE to install the following packages (use package details view to select version): From 145295d63bf35d76011aa9621e8cb5bd6dbc8d5a Mon Sep 17 00:00:00 2001 From: Christien Rioux Date: Tue, 7 Nov 2023 22:13:35 -0500 Subject: [PATCH 6/7] more cleanup --- DEVELOPMENT.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index b3a40d57..a4c029bc 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -24,7 +24,7 @@ Running the setup script requires: * Rust -Optionally, to build for Android: +#### Optionally, to build for Android: * Android SDK and NDK @@ -102,7 +102,7 @@ Development requires: * Homebrew [here](https://brew.sh) * Rust -Optionally, to build for Android: +#### Optionally, to build for Android: * Android Studio * Android SDK and NDK From 6f8f636d5dba9ade9b675b3fd9c6fee18cecb109 Mon Sep 17 00:00:00 2001 From: Christien Rioux Date: Wed, 8 Nov 2023 08:04:53 -0500 Subject: [PATCH 7/7] disable dht test in CI --- veilid-core/src/intf/native/system.rs | 7 +++++++ veilid-core/src/intf/wasm/system.rs | 4 ++++ veilid-core/src/tests/common/test_dht.rs | 5 +++++ veilid-core/src/tests/native/mod.rs | 4 ++-- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/veilid-core/src/intf/native/system.rs b/veilid-core/src/intf/native/system.rs index 0400f6f9..04cc43e7 100644 --- a/veilid-core/src/intf/native/system.rs +++ b/veilid-core/src/intf/native/system.rs @@ -191,3 +191,10 @@ pub async fn ptr_lookup(ip_addr: IpAddr) -> EyreResult { } } } + +pub fn env_variable_is_defined>(s: S) -> bool { + match std::env::var(s.as_ref()) { + Ok(v) => !v.is_empty(), + Err(_) => false, + } +} diff --git a/veilid-core/src/intf/wasm/system.rs b/veilid-core/src/intf/wasm/system.rs index de8e158a..e6aaf286 100644 --- a/veilid-core/src/intf/wasm/system.rs +++ b/veilid-core/src/intf/wasm/system.rs @@ -39,3 +39,7 @@ pub async fn txt_lookup>(_host: S) -> EyreResult> { pub async fn ptr_lookup(_ip_addr: IpAddr) -> EyreResult { bail!("wasm does not support ptr lookup") } + +pub fn env_variable_is_defined>(s: S) -> bool { + false +} diff --git a/veilid-core/src/tests/common/test_dht.rs b/veilid-core/src/tests/common/test_dht.rs index 8fabca95..6c796ea3 100644 --- a/veilid-core/src/tests/common/test_dht.rs +++ b/veilid-core/src/tests/common/test_dht.rs @@ -334,6 +334,11 @@ async fn wait_for_public_internet_ready(api: &VeilidAPI) { } pub async fn test_all() { + if intf::env_variable_is_defined("CI") { + info!("skipping DHT test in CI"); + return; + } + let (update_callback, config_callback) = setup_veilid_core(); let api = api_startup(update_callback, config_callback) .await diff --git a/veilid-core/src/tests/native/mod.rs b/veilid-core/src/tests/native/mod.rs index ce33bc12..78dbae30 100644 --- a/veilid-core/src/tests/native/mod.rs +++ b/veilid-core/src/tests/native/mod.rs @@ -12,8 +12,6 @@ pub async fn run_all_tests() { test_types::test_all().await; info!("TEST: test_veilid_core"); test_veilid_core::test_all().await; - info!("TEST: test_dht"); - test_dht::test_all().await; info!("TEST: test_veilid_config"); test_veilid_config::test_all().await; info!("TEST: test_connection_table"); @@ -32,6 +30,8 @@ pub async fn run_all_tests() { veilid_api::tests::test_serialize_json::test_all().await; info!("TEST: routing_table::test_serialize_routing_table"); routing_table::tests::test_serialize_routing_table::test_all().await; + info!("TEST: test_dht"); + test_dht::test_all().await; info!("Finished unit tests"); }