Merge branch 'main' into 'main'

removed hotfix, as this has been integrated into cargo-ndk already

See merge request veilid/veilid!269
This commit is contained in:
Christien Rioux 2024-04-20 15:14:33 +00:00
commit a0de48771e
11 changed files with 122 additions and 131 deletions

View File

@ -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=<path to sdk>
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

View File

@ -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

View File

@ -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 <<END
# Add environment variables
cat >>$HOME/.profile <<END
source "\$HOME/.cargo/env"
export PATH=\$PATH:\$HOME/Android/Sdk/ndk/25.1.8937393/toolchains/llvm/prebuilt/linux-x86_64/bin:\$HOME/Android/Sdk/platform-tools:\$HOME/Android/Sdk/cmdline-tools/latest/bin
export PATH=\$PATH:\$HOME/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin:\$HOME/Android/Sdk/platform-tools:\$HOME/Android/Sdk/cmdline-tools/latest/bin
export ANDROID_HOME=\$HOME/Android/Sdk
END
break ;;
[nN] ) echo Skipping Android SDK;
cat >> $HOME/.profile <<END
break
;;
[nN])
echo Skipping Android SDK
cat >>$HOME/.profile <<END
source "\$HOME/.cargo/env"
END
break;;
break
;;
* ) echo invalid response;;
esac
*) echo invalid response ;;
esac
done
echo Complete! Exit and reopen the shell and continue with ./setup_linux.sh

View File

@ -1,14 +1,14 @@
#!/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
SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/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

View File

@ -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'

View File

@ -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"
linker = "/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android34-clang"

View File

@ -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();
}

View File

@ -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"])
}
}
}

View File

@ -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"])
}
}
}

View File

@ -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"
}
}

View File

@ -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"])
}
}
}