Skip to content

Commit

Permalink
Build wg with daita support for android
Browse files Browse the repository at this point in the history
  • Loading branch information
albin-mullvad committed Sep 5, 2024
1 parent 78433e8 commit 4adbf3b
Show file tree
Hide file tree
Showing 10 changed files with 27 additions and 39 deletions.
7 changes: 2 additions & 5 deletions mullvad-daemon/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,10 @@ fn main() {
}
res.compile().expect("Unable to generate windows resources");
}
let target_os = std::env::var("CARGO_CFG_TARGET_OS").expect("CARGO_CFG_TARGET_OS not set");

// Enable DAITA by default on desktop
// Enable DAITA by default on desktop and android
println!("cargo::rustc-check-cfg=cfg(daita)");
if let "linux" | "windows" | "macos" = target_os.as_str() {
println!(r#"cargo::rustc-cfg=daita"#);
}
println!(r#"cargo::rustc-cfg=daita"#);
}

fn commit_date() -> String {
Expand Down
8 changes: 2 additions & 6 deletions mullvad-management-interface/build.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
fn main() {
tonic_build::compile_protos("proto/management_interface.proto").unwrap();

let target_os = std::env::var("CARGO_CFG_TARGET_OS").expect("CARGO_CFG_TARGET_OS not set");

// Enable DAITA by default on desktop
// Enable DAITA by default on desktop and android
println!("cargo::rustc-check-cfg=cfg(daita)");
if let "linux" | "windows" | "macos" = target_os.as_str() {
println!(r#"cargo::rustc-cfg=daita"#);
}
println!(r#"cargo::rustc-cfg=daita"#);
}
2 changes: 1 addition & 1 deletion mullvad-management-interface/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
use crate::types;
#[cfg(not(target_os = "android"))]
use futures::{Stream, StreamExt};
#[cfg(daita)]
#[cfg(all(daita, not(target_os = "android")))]
use mullvad_types::wireguard::DaitaSettings;
use mullvad_types::{
access_method::AccessMethodSetting,
Expand Down
8 changes: 2 additions & 6 deletions mullvad-relay-selector/build.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
fn main() {
let target_os = std::env::var("CARGO_CFG_TARGET_OS").expect("CARGO_CFG_TARGET_OS not set");

// Enable DAITA by default on desktop
// Enable DAITA by default on desktop and android
println!("cargo::rustc-check-cfg=cfg(daita)");
if let "linux" | "windows" | "macos" = target_os.as_str() {
println!(r#"cargo::rustc-cfg=daita"#);
}
println!(r#"cargo::rustc-cfg=daita"#);
}
8 changes: 2 additions & 6 deletions mullvad-types/build.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
fn main() {
let target_os = std::env::var("CARGO_CFG_TARGET_OS").expect("CARGO_CFG_TARGET_OS not set");

// Enable DAITA by default on desktop
// Enable DAITA by default on desktop and android
println!("cargo::rustc-check-cfg=cfg(daita)");
if let "linux" | "windows" | "macos" = target_os.as_str() {
println!(r#"cargo::rustc-cfg=daita"#);
}
println!(r#"cargo::rustc-cfg=daita"#);
}
8 changes: 2 additions & 6 deletions talpid-types/build.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
fn main() {
let target_os = std::env::var("CARGO_CFG_TARGET_OS").expect("CARGO_CFG_TARGET_OS not set");

// Enable DAITA by default on desktop
// Enable DAITA by default on desktop and android
println!("cargo::rustc-check-cfg=cfg(daita)");
if let "linux" | "windows" | "macos" = target_os.as_str() {
println!(r#"cargo::rustc-cfg=daita"#);
}
println!(r#"cargo::rustc-cfg=daita"#);
}
6 changes: 2 additions & 4 deletions talpid-wireguard/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,9 @@ fn add_wireguard_go_cfg(target_os: &str) {
println!("cargo::rustc-cfg=wireguard_go");
}

// Enable DAITA by default on desktop
// Enable DAITA by default on desktop and android
println!("cargo::rustc-check-cfg=cfg(daita)");
if matches!(target_os, "linux" | "macos" | "windows") {
println!(r#"cargo::rustc-cfg=daita"#);
}
println!(r#"cargo::rustc-cfg=daita"#);
}

fn declare_libs_dir(base: &str) {
Expand Down
2 changes: 1 addition & 1 deletion wireguard-go-rs/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ thiserror.workspace = true
log.workspace = true
zeroize = "1.8.1"

[target.'cfg(any(target_os = "linux", target_os = "macos"))'.dependencies]
[target.'cfg(not(target_os = "windows"))'.dependencies]
# The app does not depend on maybenot-ffi itself, but adds it as a dependency to expose FFI symbols to wireguard-go.
# This is done, instead of using the makefile in wireguard-go to build maybenot-ffi into its archive, to prevent
# name clashes induced by link-time optimization.
Expand Down
9 changes: 7 additions & 2 deletions wireguard-go-rs/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ fn main() -> anyhow::Result<()> {
match target_os.as_str() {
"linux" => build_static_lib(Os::Linux, true)?,
"macos" => build_static_lib(Os::MacOs, true)?,
"android" => build_android_dynamic_lib(false)?,
"android" => build_android_dynamic_lib(true)?,
// building wireguard-go-rs for windows is not implemented
_ => {}
}
Expand Down Expand Up @@ -192,7 +192,12 @@ fn build_android_dynamic_lib(daita: bool) -> anyhow::Result<()> {
.env("ANDROID_ARCH_NAME", android_arch_name(target))
.env("GOPATH", &go_path)
// Note: -w -s results in a stripped binary
.env("LDFLAGS", format!("-L{out_dir} -w -s"));
.env("LDFLAGS", format!("-L{out_dir} -w -s"))
// Note: the build container overrides CARGO_TARGET_DIR, which will cause problems
// since we will spawn another cargo process as part of building maybenot (which we
// link into libwg). A work around is to simply override the overridden value, and we
// do this by pointing to a target folder in our temporary build folder.
.env("CARGO_TARGET_DIR", tmp_build_dir.join("target"));

exec(build_command)?;

Expand Down
8 changes: 6 additions & 2 deletions wireguard-go-rs/libwg/Android.mk
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,15 @@ GOBUILDVERSION := 1.21.3
GOBUILDTARBALL := https://go.dev/dl/go$(GOBUILDVERSION).$(GOBUILDOS)-$(GOBUILDARCH).tar.gz
GOBUILDVERSION_NEEDED := go version go$(GOBUILDVERSION) $(GOBUILDOS)/$(GOBUILDARCH)


$(DESTDIR)/libwg.so:
mkdir -p $(DESTDIR)
go get -tags "linux android"
# Build libmaybenot
make --directory wireguard-go libmaybenot.a LIBDEST="$(DESTDIR)" TARGET="$(TARGET)" CARGO_TARGET_DIR="$(CARGO_TARGET_DIR)"
# Build wireguard-go
go get -tags "linux android daita"
chmod -fR +w "$(GOPATH)/pkg/mod"
go build -tags "linux android" -ldflags="-X main.socketDirectory=/data/data/$(ANDROID_PACKAGE_NAME)/cache/wireguard" -v -o "$@" -buildmode c-shared
go build -tags "linux android daita" -ldflags="-X main.socketDirectory=/data/data/$(ANDROID_PACKAGE_NAME)/cache/wireguard" -v -o "$@" -buildmode c-shared
rm -f $(DESTDIR)/libwg.h


Expand Down

0 comments on commit 4adbf3b

Please sign in to comment.