diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 422755aa..964d97b1 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -22,11 +22,11 @@ welcome! Running the setup script requires: -* Rust +- Rust #### Optionally, to build for Android: -* Android SDK and NDK +- 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 @@ -35,11 +35,11 @@ method is highly recommended as you may run into path problems with the 'flutter command line without it. If you do so, you may skip to [Run Veilid setup script](#Run Veilid setup script). -* build-tools;33.0.1 -* ndk;25.1.8937393 -* cmake;3.22.1 -* platform-tools -* platforms;android-33 +- build-tools;34.0.0 +- ndk;26.3.11579264 +- cmake;3.22.1 +- platform-tools +- platforms;android-34 #### Setup Dependencies using the CLI @@ -56,9 +56,9 @@ the command line to install the requisite package versions: ```shell sdkmanager --install "platform-tools" -sdkmanager --install "platforms;android-33" -sdkmanager --install "build-tools;33.0.1" -sdkmanager --install "ndk;25.1.8937393" +sdkmanager --install "platforms;android-34" +sdkmanager --install "build-tools;34.0.0" +sdkmanager --install "ndk;26.3.11579264" sdkmanager --install "cmake;3.22.1" ``` @@ -66,7 +66,7 @@ Export environment variables and add the Android SDK platform-tools directory to your path. See [instructions here](https://developer.android.com/tools/variables). ```shell -cat << EOF >> ~/.profile +cat << EOF >> ~/.profile export ANDROID_HOME= export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools EOF @@ -97,23 +97,23 @@ Development of Veilid on MacOS is possible on both Intel and ARM hardware. Development requires: -* Xcode, preferably latest version -* Homebrew [here](https://brew.sh) -* Rust +- Xcode, preferably latest version +- Homebrew [here](https://brew.sh) +- Rust #### Optionally, to build for Android: -* Android Studio -* Android SDK and NDK +- 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): -* Android SDK Build Tools (33.0.1) -* NDK (Side-by-side) (25.1.8937393) -* Cmake (3.22.1) -* Android SDK 33 -* Android SDK Command Line Tools (latest) (7.0/latest) +- Android SDK Build Tools (34.0.0) +- NDK (Side-by-side) (26.3.11579264) +- Cmake (3.22.1) +- Android SDK 34 +- Android SDK Command Line Tools (latest) (7.0/latest) #### Setup command line environment diff --git a/Earthfile b/Earthfile index 14d3506e..5a68825e 100644 --- a/Earthfile +++ b/Earthfile @@ -68,7 +68,7 @@ deps-android: RUN mkdir /Android; mkdir /Android/Sdk RUN curl -o /Android/cmdline-tools.zip https://dl.google.com/android/repository/commandlinetools-linux-9123335_latest.zip RUN cd /Android; unzip /Android/cmdline-tools.zip - RUN yes | /Android/cmdline-tools/bin/sdkmanager --sdk_root=/Android/Sdk build-tools\;33.0.1 ndk\;25.1.8937393 cmake\;3.22.1 platform-tools platforms\;android-33 cmdline-tools\;latest + RUN yes | /Android/cmdline-tools/bin/sdkmanager --sdk_root=/Android/Sdk build-tools\;34.0.0 ndk\;26.3.11579264 cmake\;3.22.1 platform-tools platforms\;android-34 cmdline-tools\;latest RUN rm -rf /Android/cmdline-tools RUN apt-get clean @@ -155,7 +155,7 @@ build-linux-arm64: build-android: FROM +code-android WORKDIR /veilid/veilid-core - ENV PATH=$PATH:/Android/Sdk/ndk/25.1.8937393/toolchains/llvm/prebuilt/linux-x86_64/bin/ + ENV PATH=$PATH:/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/ RUN cargo build --target aarch64-linux-android --release RUN cargo build --target armv7-linux-androideabi --release RUN cargo build --target i686-linux-android --release @@ -261,4 +261,4 @@ package-linux-arm64: package-linux: BUILD +package-linux-amd64 - BUILD +package-linux-arm64 + BUILD +package-linux-arm64 \ No newline at end of file diff --git a/dev-setup/install_linux_prerequisites.sh b/dev-setup/install_linux_prerequisites.sh index 6941ddf0..a6c6a3d2 100755 --- a/dev-setup/install_linux_prerequisites.sh +++ b/dev-setup/install_linux_prerequisites.sh @@ -1,7 +1,7 @@ #!/bin/bash set -eo pipefail -if [ $(id -u) -eq 0 ]; then +if [ $(id -u) -eq 0 ]; then echo "Don't run this as root" exit fi @@ -27,40 +27,45 @@ elif [ ! -z "$(command -v dnf)" ]; then sudo dnf groupinstall -y 'Development Tools' fi - # Install Rust curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y -c clippy --profile default source "$HOME/.cargo/env" #ask if they want to install optional android sdk (and install if yes) while true; do -read -p "Do you want to install Android SDK (optional) Y/N) " response + read -p "Do you want to install Android SDK (optional) Y/N) " response -case $response in -[yY] ) echo Installing Android SDK...; -# Install Android SDK -mkdir $HOME/Android; mkdir $HOME/Android/Sdk -curl -o $HOME/Android/cmdline-tools.zip https://dl.google.com/android/repository/commandlinetools-linux-9123335_latest.zip -cd $HOME/Android; unzip $HOME/Android/cmdline-tools.zip -$HOME/Android/cmdline-tools/bin/sdkmanager --sdk_root=$HOME/Android/Sdk build-tools\;33.0.1 ndk\;25.1.8937393 cmake\;3.22.1 platform-tools platforms\;android-33 cmdline-tools\;latest emulator -cd $HOME -rm -rf $HOME/Android/cmdline-tools $HOME/Android/cmdline-tools.zip + case $response in + [yY]) + echo Installing Android SDK... + # Install Android SDK + mkdir $HOME/Android + mkdir $HOME/Android/Sdk + curl -o $HOME/Android/cmdline-tools.zip https://dl.google.com/android/repository/commandlinetools-linux-9123335_latest.zip + cd $HOME/Android + unzip $HOME/Android/cmdline-tools.zip + $HOME/Android/cmdline-tools/bin/sdkmanager --sdk_root=$HOME/Android/Sdk build-tools\;34.0.0 ndk\;26.3.11579264 cmake\;3.22.1 platform-tools platforms\;android-34 cmdline-tools\;latest emulator + cd $HOME + rm -rf $HOME/Android/cmdline-tools $HOME/Android/cmdline-tools.zip -# Add environment variables -cat >> $HOME/.profile <>$HOME/.profile <> $HOME/.profile <>$HOME/.profile </dev/null 2>&1 && pwd )" +SCRIPTDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" -if [[ "$(uname)" != "Linux" ]]; then +if [[ "$(uname)" != "Linux" ]]; then echo Not running Linux exit 1 fi @@ -22,7 +22,8 @@ while true; do read -p "Did you install Android SDK? Y/N " response case $response in - [yY] ) echo Checking android setup...; + [yY]) + echo Checking android setup... # ensure ANDROID_HOME is defined and exists if [ -d "$ANDROID_HOME" ]; then @@ -34,16 +35,16 @@ while true; do # ensure Android Command Line Tools exist if [ -d "$ANDROID_HOME/cmdline-tools/latest/bin" ]; then - echo '[X] Android command line tools are installed' + echo '[X] Android command line tools are installed' else echo 'Android command line tools are not installed' exit 1 fi # ensure ndk is installed - ANDROID_NDK_HOME="$ANDROID_HOME/ndk/25.1.8937393" + ANDROID_NDK_HOME="$ANDROID_HOME/ndk/26.3.11579264" if [ -f "$ANDROID_NDK_HOME/ndk-build" ]; then - echo '[X] Android NDK is installed at the location $ANDROID_NDK_HOME' + 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 @@ -51,7 +52,7 @@ while true; do # ensure cmake is installed if [ -d "$ANDROID_HOME/cmake" ]; then - echo '[X] Android SDK CMake is installed' + echo '[X] Android SDK CMake is installed' else echo 'Android SDK CMake is not installed' exit 1 @@ -59,28 +60,31 @@ while true; do # ensure emulator is installed if [ -d "$ANDROID_HOME/emulator" ]; then - echo '[X] Android SDK emulator is installed' + 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 + 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;; + 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 +if command -v rustup &>/dev/null; then echo '[X] rustup is available in the path' else echo 'rustup is not available in the path' @@ -88,7 +92,7 @@ else fi # ensure cargo is installed -if command -v cargo &> /dev/null; then +if command -v cargo &>/dev/null; then echo '[X] cargo is available in the path' else echo 'cargo is not available in the path' @@ -96,7 +100,7 @@ else fi # ensure pip3 is installed -if command -v pip3 &> /dev/null; then +if command -v pip3 &>/dev/null; then echo '[X] pip3 is available in the path' else echo 'pip3 is not available in the path' @@ -117,14 +121,18 @@ 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...; + [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;; + 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 646adb69..6ebb5b99 100755 --- a/dev-setup/setup_macos.sh +++ b/dev-setup/setup_macos.sh @@ -1,7 +1,7 @@ #!/bin/bash set -eo pipefail -SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +SCRIPTDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" if [ ! "$(uname)" == "Darwin" ]; then echo Not running on MacOS @@ -12,7 +12,8 @@ while true; do read -p "Did you install Android SDK? Y/N " response case $response in - [yY] ) echo Checking android setup...; + [yY]) + echo Checking android setup... # ensure ANDROID_HOME is defined and exists if [ -d "$ANDROID_HOME" ]; then echo '[X] $ANDROID_HOME is defined and exists' @@ -23,17 +24,17 @@ while true; do # ensure Android Command Line Tools exist if [ -d "$ANDROID_HOME/cmdline-tools/latest/bin" ]; then - echo '[X] Android command line tools are installed' + echo '[X] Android command line tools are installed' else echo 'Android command line tools are not installed' exit 1 fi # ensure Android SDK packages are installed - $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager build-tools\;33.0.1 ndk\;25.1.8937393 cmake\;3.22.1 platform-tools platforms\;android-33 + $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager build-tools\;34.0.0 ndk\;26.3.11579264 cmake\;3.22.1 platform-tools platforms\;android-34 # ensure ANDROID_NDK_HOME is defined and exists - ANDROID_NDK_HOME="$ANDROID_HOME/ndk/25.1.8937393" + ANDROID_NDK_HOME="$ANDROID_HOME/ndk/26.3.11579264" if [ -d "$ANDROID_NDK_HOME" ]; then echo '[X] Android NDK is defined and exists' else @@ -43,7 +44,7 @@ while true; do # ensure ndk is installed if [ -f "$ANDROID_NDK_HOME/ndk-build" ]; then - echo '[X] Android NDK is installed at the location $ANDROID_NDK_HOME' + 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 @@ -51,7 +52,7 @@ while true; do # ensure cmake is installed if [ -d "$ANDROID_HOME/cmake" ]; then - echo '[X] Android SDK CMake is installed' + echo '[X] Android SDK CMake is installed' else echo 'Android SDK CMake is not installed' exit 1 @@ -59,29 +60,32 @@ while true; do # ensure emulator is installed if [ -d "$ANDROID_HOME/emulator" ]; then - echo '[X] Android SDK emulator is installed' + 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 + 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;; + break + ;; + [nN]) + echo Skipping Android SDK config check... + break + ;; - * ) echo invalid response;; + *) echo invalid response ;; esac done # ensure brew is installed -if command -v brew &> /dev/null; then +if command -v brew &>/dev/null; then echo '[X] brew is available in the path' else echo 'brew is not available in the path' @@ -89,7 +93,7 @@ else fi # ensure xcode is installed -if command -v xcode-select &> /dev/null; then +if command -v xcode-select &>/dev/null; then echo '[X] XCode is available in the path' else echo 'XCode is not available in the path' @@ -97,7 +101,7 @@ else fi # ensure rustup is installed -if command -v rustup &> /dev/null; then +if command -v rustup &>/dev/null; then echo '[X] rustup is available in the path' else echo 'rustup is not available in the path' @@ -105,7 +109,7 @@ else fi # ensure cargo is installed -if command -v cargo &> /dev/null; then +if command -v cargo &>/dev/null; then echo '[X] cargo is available in the path' else echo 'cargo is not available in the path' @@ -113,7 +117,7 @@ else fi # ensure pip3 is installed -if command -v pip3 &> /dev/null; then +if command -v pip3 &>/dev/null; then echo '[X] pip3 is available in the path' else echo 'pip3 is not available in the path' @@ -130,9 +134,9 @@ else fi # ensure we have command line tools -xcode-select --install 2> /dev/null || true +xcode-select --install 2>/dev/null || true until [ -d /Library/Developer/CommandLineTools/usr/bin ]; do - sleep 5; + sleep 5 done # install packages @@ -155,7 +159,7 @@ cargo install wasm-bindgen-cli wasm-pack cargo-edit # install pip packages pip3 install --upgrade bumpversion -if command -v pod &> /dev/null; then +if command -v pod &>/dev/null; then echo '[X] CocoaPods is available in the path' else echo 'CocoaPods is not available in the path, installing it now' diff --git a/scripts/earthly/cargo-android/config.toml b/scripts/earthly/cargo-android/config.toml index e2552b9f..f4703f0a 100644 --- a/scripts/earthly/cargo-android/config.toml +++ b/scripts/earthly/cargo-android/config.toml @@ -1,8 +1,8 @@ [target.aarch64-linux-android] -linker = "/Android/Sdk/ndk/25.1.8937393/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android33-clang" +linker = "/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android34-clang" [target.armv7-linux-androideabi] -linker = "/Android/Sdk/ndk/25.1.8937393/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi33-clang" +linker = "/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi33-clang" [target.x86_64-linux-android] -linker = "/Android/Sdk/ndk/25.1.8937393/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android33-clang" +linker = "/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android34-clang" [target.i686-linux-android] -linker = "/Android/Sdk/ndk/25.1.8937393/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android33-clang" \ No newline at end of file +linker = "/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android34-clang" diff --git a/veilid-core/build.rs b/veilid-core/build.rs index 47f006b4..36a0609b 100644 --- a/veilid-core/build.rs +++ b/veilid-core/build.rs @@ -1,10 +1,9 @@ -use glob::glob; use sha2::{Digest, Sha256}; use std::fs::OpenOptions; use std::io::BufRead; use std::io::Write; use std::{ - env, io, + io, path::Path, process::{Command, Stdio}, }; @@ -126,28 +125,6 @@ fn do_capnp_build() { append_hash("proto/veilid.capnp", "proto/veilid_capnp.rs"); } -// Fix for missing __extenddftf2 on Android x86_64 Emulator -fn fix_android_emulator() { - let target_os = env::var("CARGO_CFG_TARGET_OS").unwrap(); - 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"; - let android_home = env::var("ANDROID_HOME") - .or(env::var("ANDROID_SDK_ROOT")) - .expect("ANDROID_HOME or ANDROID_SDK_ROOT not set"); - let lib_path = glob(&format!( - "{android_home}/ndk/25.1.8937393/**/lib{missing_library}.a" - )) - .expect("failed to glob") - .next() - .expect("Need libclang_rt.builtins-x86_64-android.a") - .unwrap(); - let lib_dir = lib_path.parent().unwrap(); - println!("cargo:rustc-link-search={}", lib_dir.display()); - 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() @@ -160,6 +137,4 @@ fn main() { println!("cargo:warning=rebuilding proto/veilid_capnp.rs because it has changed from the last generation of proto/veilid.capnp"); do_capnp_build(); } - - fix_android_emulator(); } diff --git a/veilid-core/src/tests/android/veilid_core_android_tests/app/build.gradle b/veilid-core/src/tests/android/veilid_core_android_tests/app/build.gradle index af4abe42..e3e31a9d 100644 --- a/veilid-core/src/tests/android/veilid_core_android_tests/app/build.gradle +++ b/veilid-core/src/tests/android/veilid_core_android_tests/app/build.gradle @@ -3,13 +3,13 @@ plugins { } android { - compileSdkVersion 33 - buildToolsVersion "33.0.1" + compileSdkVersion 34 + buildToolsVersion "34.0.0" defaultConfig { applicationId "com.veilid.veilid_core_android_tests" minSdkVersion 24 - targetSdkVersion 33 + targetSdkVersion 34 versionCode 1 versionName "1.0" @@ -38,7 +38,7 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } - ndkVersion '25.1.8937393' + ndkVersion '26.3.11579264' // Required to copy libc++_shared.so externalNativeBuild { @@ -82,5 +82,4 @@ afterEvaluate { def buildType = "${variant.buildType.name.capitalize()}" tasks["generate${productFlavor}${buildType}Assets"].dependsOn(tasks["cargoBuild"]) } -} - +} \ No newline at end of file diff --git a/veilid-flutter/android/build.gradle b/veilid-flutter/android/build.gradle index 2f67d5a7..a0a5930c 100644 --- a/veilid-flutter/android/build.gradle +++ b/veilid-flutter/android/build.gradle @@ -63,7 +63,7 @@ android { } } - ndkVersion '25.1.8937393' + ndkVersion '26.3.11579264' // Required to copy libc++_shared.so externalNativeBuild { @@ -99,4 +99,4 @@ afterEvaluate { def buildType = "${variant.buildType.name.capitalize()}" tasks["generate${productFlavor}${buildType}Assets"].dependsOn(tasks["cargoBuild"]) } -} +} \ No newline at end of file diff --git a/veilid-flutter/example/android/app/build.gradle b/veilid-flutter/example/android/app/build.gradle index 3b74008a..ea37478f 100644 --- a/veilid-flutter/example/android/app/build.gradle +++ b/veilid-flutter/example/android/app/build.gradle @@ -27,7 +27,7 @@ apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { compileSdkVersion flutter.compileSdkVersion - ndkVersion '25.1.8937393' + ndkVersion '26.3.11579264' compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 @@ -71,4 +71,4 @@ flutter { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" -} +} \ No newline at end of file diff --git a/veilid-tools/src/tests/android/veilid_tools_android_tests/app/build.gradle b/veilid-tools/src/tests/android/veilid_tools_android_tests/app/build.gradle index ebcf32e0..8a2c040c 100644 --- a/veilid-tools/src/tests/android/veilid_tools_android_tests/app/build.gradle +++ b/veilid-tools/src/tests/android/veilid_tools_android_tests/app/build.gradle @@ -4,7 +4,7 @@ plugins { android { compileSdkVersion 33 - buildToolsVersion "33.0.1" + buildToolsVersion "34.0.0" defaultConfig { applicationId "com.veilid.veilid_tools_android_tests" @@ -38,7 +38,7 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } - ndkVersion '25.1.8937393' + ndkVersion '26.3.11579264' // Required to copy libc++_shared.so externalNativeBuild { @@ -82,4 +82,4 @@ afterEvaluate { def buildType = "${variant.buildType.name.capitalize()}" tasks["generate${productFlavor}${buildType}Assets"].dependsOn(tasks["cargoBuild"]) } -} +} \ No newline at end of file