feat: add support 16kb page Android

This commit is contained in:
NickVs2015
2026-03-17 15:30:21 +03:00
parent 2b5c2cb021
commit 132b6bc083
5 changed files with 29 additions and 1 deletions

View File

@@ -51,6 +51,13 @@ if(WIN32 OR (APPLE AND NOT IOS) OR (LINUX AND NOT ANDROID))
endif()
qt_standard_project_setup()
# 16KB page size support for Android 15+ / Google Play
# Must be set before any targets are defined so it applies to all compiled-from-source libraries
if(ANDROID)
add_link_options("-Wl,-z,max-page-size=16384")
endif()
qt_add_executable(${PROJECT} MANUAL_FINALIZATION)
target_include_directories(${PROJECT} PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>

View File

@@ -11,6 +11,8 @@ class AmneziaLibxray(ConanFile):
version = "1.0.0"
settings = "os", "arch"
options = {"page_16k": [True, False]}
default_options = {"page_16k": True}
def layout(self):
basic_layout(self, build_folder=".")
@@ -34,7 +36,8 @@ class AmneziaLibxray(ConanFile):
def build(self):
self._patch_sources()
self.run("./build.sh android")
cgo_ldflags = 'CGO_LDFLAGS="-Wl,-z,max-page-size=16384" ' if self.options.page_16k else ""
self.run(f'{cgo_ldflags}./build.sh android')
def package(self):
copy(self, "libxray.aar", src=self.build_folder, dst=os.path.join(self.package_folder, "aar"))

View File

@@ -1,5 +1,6 @@
from conan import ConanFile
from conan.tools.cmake import cmake_layout, CMake, CMakeToolchain
from conan.tools.env import VirtualBuildEnv
from conan.tools.files import copy, replace_in_file
from conan.errors import ConanInvalidConfiguration
from conan.tools.scm import Git
@@ -12,6 +13,8 @@ class AwgAndroid(ConanFile):
version = "1.1.7"
settings = "os", "arch", "build_type", "compiler"
package_type = "shared-library"
options = {"page_16k": [True, False]}
default_options = {"page_16k": True}
def layout(self):
cmake_layout(self)
@@ -35,8 +38,15 @@ class AwgAndroid(ConanFile):
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")
if self.options.page_16k:
tc.extra_ldflags = ["-Wl,-z,max-page-size=16384"]
tc.generate()
vbe = VirtualBuildEnv(self)
if self.options.page_16k:
vbe.environment().define("CGO_LDFLAGS", "-Wl,-z,max-page-size=16384")
vbe.generate()
def _patch_sources(self):
if platform.system() == 'Darwin':
replace_in_file(self,

View File

@@ -26,6 +26,7 @@ class LibSSHRecipe(ConanFile):
"with_zlib": [True, False],
"crypto_backend": ["openssl", "gcrypt", "mbedtls"],
"with_symbol_versioning": [True, False],
"page_16k": [True, False],
}
default_options = {
"shared": False,
@@ -33,6 +34,7 @@ class LibSSHRecipe(ConanFile):
"with_zlib": True,
"crypto_backend": "openssl",
"with_symbol_versioning": True,
"page_16k": True,
}
def config_options(self):
@@ -90,6 +92,8 @@ class LibSSHRecipe(ConanFile):
tc.preprocessor_definitions["S_IWRITE"] = "S_IRUSR"
tc.preprocessor_definitions["S_IWRITE"] = "S_IWUSR"
tc.preprocessor_definitions["S_IEXEC"] = "S_IXUSR"
if self.options.page_16k:
tc.extra_ldflags = ["-Wl,-z,max-page-size=16384"]
tc.generate()
deps = CMakeDeps(self)

View File

@@ -11,6 +11,8 @@ class OpenvpnPtAndroid(ConanFile):
version = "1.0.0"
package_type = "shared-library"
settings = "os", "arch", "build_type", "compiler"
options = {"page_16k": [True, False]}
default_options = {"page_16k": True}
def layout(self):
cmake_layout(self)
@@ -36,6 +38,8 @@ class OpenvpnPtAndroid(ConanFile):
tc = CMakeToolchain(self)
tc.variables["ANDROID_PACKAGE_NAME"] = "org.amnezia.vpn"
tc.variables["ANDROID_PLATFORM"] = 24
if self.options.page_16k:
tc.extra_ldflags = ["-Wl,-z,max-page-size=16384"]
tc.generate()
def build(self):