From b5bccfca1164c3f5de038a8db68ca2634c68a26f Mon Sep 17 00:00:00 2001 From: NickVs2015 Date: Tue, 12 May 2026 18:35:50 +0300 Subject: [PATCH] fix: add build android via Win --- recipes/amnezia-libxray/conanfile.py | 7 +++-- recipes/awg-android/conanfile.py | 42 ++++++++++++++++++++++--- recipes/openvpn-pt-android/conanfile.py | 3 +- 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/recipes/amnezia-libxray/conanfile.py b/recipes/amnezia-libxray/conanfile.py index 187b05ae2..52a40ea3b 100644 --- a/recipes/amnezia-libxray/conanfile.py +++ b/recipes/amnezia-libxray/conanfile.py @@ -51,12 +51,15 @@ class AmneziaLibxray(ConanFile): def build(self): self._patch_sources() - self.run("./build.sh android") + if self.settings_build.os == "Windows": + self.run("bash build.sh android") + else: + self.run("./build.sh android") def package(self): copy(self, "libxray.aar", src=self.build_folder, dst=os.path.join(self.package_folder, "aar")) def package_info(self): self.cpp_info.set_property("cmake_extra_variables", { - "AMNEZIA_LIBXRAY_PATH": os.path.join(self.package_folder, "aar", "libxray.aar"), + "AMNEZIA_LIBXRAY_PATH": Path(self.package_folder, "aar", "libxray.aar").as_posix(), }) diff --git a/recipes/awg-android/conanfile.py b/recipes/awg-android/conanfile.py index 246f4be2c..3543613f4 100644 --- a/recipes/awg-android/conanfile.py +++ b/recipes/awg-android/conanfile.py @@ -1,11 +1,13 @@ from conan import ConanFile from conan.tools.cmake import cmake_layout, CMake, CMakeToolchain from conan.tools.files import copy, replace_in_file +from conan.tools.env import VirtualBuildEnv, Environment from conan.errors import ConanInvalidConfiguration from conan.tools.scm import Git import os import platform +from pathlib import Path class AwgAndroid(ConanFile): name = "awg-android" @@ -21,6 +23,11 @@ class AwgAndroid(ConanFile): def build_requirements(self): self.tool_requires("cmake/[>=3.4.1 <4]") + if platform.system() == "Windows": + self.tool_requires("ninja/[*]") + self.tool_requires("go/[*]") + if not self.conf.get("tools.microsoft.bash:path", check_type=str): + self.tool_requires("msys2/cci.latest") def validate(self): if self.settings.os != "Android": @@ -35,9 +42,11 @@ class AwgAndroid(ConanFile): ) def generate(self): + VirtualBuildEnv(self).generate() + tc = CMakeToolchain(self) - tc.variables["GRADLE_USER_HOME"] = os.path.join(self.build_folder, "gradle_user_home") - tc.variables["CMAKE_LIBRARY_OUTPUT_DIRECTORY"] = os.path.join(self.build_folder, "out") + tc.variables["GRADLE_USER_HOME"] = Path(os.path.join(self.build_folder, "gradle_user_home")).as_posix() + tc.variables["CMAKE_LIBRARY_OUTPUT_DIRECTORY"] = Path(os.path.join(self.build_folder, "out")).as_posix() # not to warn in case of strtok() usage tc.extra_cflags = ["-Wno-deprecated-declarations"] tc.generate() @@ -64,6 +73,31 @@ class AwgAndroid(ConanFile): 'sha256sum -c', 'shasum -a 256 -c' ) + elif platform.system() == 'Windows': + # elf-cleaner uses sys/mman.h (POSIX only) and cannot be built on Windows; + # skip it — DT_FLAGS_1 warnings only affect Android < 6.0 + replace_in_file(self, + os.path.join(self.source_folder, "tunnel", "tools", "CMakeLists.txt"), + '# Strip unwanted ELF sections to prevent DT_FLAGS_1 warnings on old Android versions\n' + 'file(GLOB ELF_CLEANER_SOURCES elf-cleaner/*.c elf-cleaner/*.cpp)\n' + 'add_custom_target(elf-cleaner COMMENT "Building elf-cleaner" VERBATIM COMMAND cc\n' + ' -O2 -DPACKAGE_NAME="elf-cleaner" -DPACKAGE_VERSION="" -DCOPYRIGHT=""\n' + ' -o "${CMAKE_CURRENT_BINARY_DIR}/elf-cleaner" ${ELF_CLEANER_SOURCES}\n' + ')\n' + 'add_custom_command(TARGET libwg.so POST_BUILD VERBATIM COMMAND "${CMAKE_CURRENT_BINARY_DIR}/elf-cleaner"\n' + ' --api-level "${ANDROID_NATIVE_API_LEVEL}" "$")\n' + 'add_dependencies(libwg.so elf-cleaner)\n' + 'add_custom_command(TARGET libwg-quick.so POST_BUILD VERBATIM COMMAND "${CMAKE_CURRENT_BINARY_DIR}/elf-cleaner"\n' + ' --api-level "${ANDROID_NATIVE_API_LEVEL}" "$")\n' + 'add_dependencies(libwg-quick.so elf-cleaner)', + '', + ) + # patch Makefile: skip Go download, use 'go' already in PATH from tool_requires + replace_in_file(self, + os.path.join(self.source_folder, "tunnel", "tools", "libwg-go", "Makefile"), + '$(DESTDIR)/libwg-go.so: export PATH := $(BUILDDIR)/go-$(GO_VERSION)/bin/:$(PATH)\n$(DESTDIR)/libwg-go.so: $(BUILDDIR)/go-$(GO_VERSION)/.prepared go.mod', + '$(DESTDIR)/libwg-go.so: go.mod', + ) def build(self): self._patch_sources() @@ -81,6 +115,6 @@ class AwgAndroid(ConanFile): self.cpp_info.set_property("cmake_target_name", "amnezia::awg-android") self.cpp_info.libs = [ "wg-go" ] self.cpp_info.set_property("cmake_extra_variables", { - "AMNEZIA_ANDROID_LIBWG_PATH": os.path.join(self.package_folder, "bin", "libwg.so"), - "AMNEZIA_ANDROID_LIBWG_QUICK_PATH": os.path.join(self.package_folder, "bin", "libwg-quick.so"), + "AMNEZIA_ANDROID_LIBWG_PATH": Path(os.path.join(self.package_folder, "bin", "libwg.so")).as_posix(), + "AMNEZIA_ANDROID_LIBWG_QUICK_PATH": Path(os.path.join(self.package_folder, "bin", "libwg-quick.so")).as_posix(), }) diff --git a/recipes/openvpn-pt-android/conanfile.py b/recipes/openvpn-pt-android/conanfile.py index c9010f0b2..c437fb7ca 100644 --- a/recipes/openvpn-pt-android/conanfile.py +++ b/recipes/openvpn-pt-android/conanfile.py @@ -5,6 +5,7 @@ from conan.tools.scm import Git from conan.errors import ConanInvalidConfiguration import os +from pathlib import Path class OpenvpnPtAndroid(ConanFile): name = "openvpn-pt-android" @@ -53,5 +54,5 @@ class OpenvpnPtAndroid(ConanFile): self.cpp_info.set_property("cmake_target_name", "amnezia::openvpn-pt-android") self.cpp_info.libs = [ "ovpn3", "ovpnutil", "rsapss" ] self.cpp_info.set_property("cmake_extra_variables", { - "OPENVPN_PT_ANDROID_LIBCK_OVPN_PLUGIN_PATH": os.path.join(self.package_folder, "lib", "libck-ovpn-plugin.so") + "OPENVPN_PT_ANDROID_LIBCK_OVPN_PLUGIN_PATH": Path(self.package_folder, "lib", "libck-ovpn-plugin.so").as_posix() })