170 lines
4.8 KiB
Python
170 lines
4.8 KiB
Python
from .base import ConfigInfo, MetaConfigInfo
|
|
from kiwixbuild.utils import pj
|
|
from kiwixbuild._global import get_target_step, option
|
|
|
|
|
|
class AndroidConfigInfo(ConfigInfo):
|
|
build = "android"
|
|
static = True
|
|
toolchain_names = ["android-ndk"]
|
|
compatible_hosts = ["fedora", "debian"]
|
|
|
|
def __str__(self):
|
|
return "android"
|
|
|
|
@property
|
|
def libdir(self):
|
|
return "lib/{}".format(self.arch_full)
|
|
|
|
@property
|
|
def binaries_name(self):
|
|
arch_full = self.arch_full
|
|
return {
|
|
"CC": "{}-{}".format(arch_full, "clang"),
|
|
"CXX": "{}-{}".format(arch_full, "clang++"),
|
|
"AR": "{}-{}".format(arch_full, "ar"),
|
|
"STRIP": "{}-{}".format(arch_full, "strip"),
|
|
"RANLIB": "{}-{}".format(arch_full, "ranlib"),
|
|
"LD": "{}-{}".format(arch_full, "ld"),
|
|
}
|
|
|
|
def binaries(self):
|
|
install_path = self.install_path
|
|
binaries = {
|
|
k: pj(install_path, "bin", v) for k, v in self.binaries_name.items()
|
|
}
|
|
binaries["PKGCONFIG"] = "pkg-config"
|
|
return binaries
|
|
|
|
@property
|
|
def ndk_builder(self):
|
|
return get_target_step("android-ndk", self.name)
|
|
|
|
@property
|
|
def install_path(self):
|
|
return self.ndk_builder.install_path
|
|
|
|
def get_cross_config(self):
|
|
extra_libs = [
|
|
"-llog",
|
|
"-Wl,--exclude-libs,libgcc.a",
|
|
"-Wl,--exclude-libs,libunwind.a",
|
|
]
|
|
extra_cflags = [
|
|
"-I{}".format(include_dir) for include_dir in self.get_include_dirs()
|
|
]
|
|
if hasattr(self, "march"):
|
|
extra_libs.append("-march={}".format(self.march))
|
|
extra_cflags.append("-march={}".format(self.march))
|
|
return {
|
|
"exe_wrapper_def": "",
|
|
"install_path": self.install_path,
|
|
"binaries": self.binaries(),
|
|
"root_path": pj(self.install_path, "sysroot"),
|
|
"extra_libs": extra_libs,
|
|
"extra_cflags": extra_cflags,
|
|
"host_machine": {
|
|
"system": "Android",
|
|
"lsystem": "android",
|
|
"cpu_family": self.arch,
|
|
"cpu": self.cpu,
|
|
"endian": "little",
|
|
"abi": self.abi,
|
|
},
|
|
}
|
|
|
|
def get_env(self):
|
|
env = super().get_env()
|
|
root_path = pj(self.install_path, "sysroot")
|
|
env["PKG_CONFIG_LIBDIR"] = pj(root_path, "lib", "pkgconfig")
|
|
env["NDK_DEBUG"] = "0"
|
|
return env
|
|
|
|
def get_bin_dir(self):
|
|
return [pj(self.install_path, "bin")]
|
|
|
|
def set_comp_flags(self, env):
|
|
super().set_comp_flags(env)
|
|
root_path = pj(self.install_path, "sysroot")
|
|
march = "-march={}".format(self.march) if hasattr(self, "march") else ""
|
|
env["CFLAGS"] = (
|
|
"-fPIC -D_LARGEFILE64_SOURCE=1 -D_FILE_OFFSET_BITS=64 --sysroot={} {} ".format(
|
|
root_path, march
|
|
)
|
|
+ env["CFLAGS"]
|
|
)
|
|
env["CXXFLAGS"] = (
|
|
"-fPIC -D_LARGEFILE64_SOURCE=1 -D_FILE_OFFSET_BITS=64 --sysroot={} {} ".format(
|
|
root_path, march
|
|
)
|
|
+ env["CXXFLAGS"]
|
|
)
|
|
env["LDFLAGS"] = "--sysroot={} {} ".format(root_path, march) + env["LDFLAGS"]
|
|
|
|
def set_compiler(self, env):
|
|
binaries = self.binaries()
|
|
for k, v in binaries.items():
|
|
env[k] = v
|
|
|
|
@property
|
|
def configure_options(self):
|
|
yield "--host={}".format(self.arch_full)
|
|
|
|
def finalize_setup(self):
|
|
super().finalize_setup()
|
|
self.buildEnv.cmake_crossfile = self._gen_crossfile(
|
|
"cmake_android_cross_file.txt", "cmake_cross_file.txt"
|
|
)
|
|
self.buildEnv.meson_crossfile = self._gen_crossfile("meson_cross_file.txt")
|
|
|
|
|
|
class AndroidArm(AndroidConfigInfo):
|
|
name = "android_arm"
|
|
arch = cpu = "arm"
|
|
arch_full = "arm-linux-androideabi"
|
|
abi = "armeabi-v7a"
|
|
march = "armv7-a"
|
|
|
|
|
|
class AndroidArm64(AndroidConfigInfo):
|
|
name = "android_arm64"
|
|
arch = "arm64"
|
|
arch_full = "aarch64-linux-android"
|
|
cpu = "aarch64"
|
|
abi = "arm64-v8a"
|
|
|
|
|
|
class AndroidX86(AndroidConfigInfo):
|
|
name = "android_x86"
|
|
arch = abi = "x86"
|
|
arch_full = "i686-linux-android"
|
|
cpu = "i686"
|
|
|
|
|
|
class AndroidX8664(AndroidConfigInfo):
|
|
name = "android_x86_64"
|
|
arch = cpu = abi = "x86_64"
|
|
arch_full = "x86_64-linux-android"
|
|
|
|
|
|
class Android(MetaConfigInfo):
|
|
name = "android"
|
|
compatible_hosts = ["fedora", "debian"]
|
|
|
|
@property
|
|
def arch_name(self):
|
|
return "multi-linux-android"
|
|
|
|
@property
|
|
def subConfigNames(self):
|
|
return ["android_{}".format(arch) for arch in option("android_arch")]
|
|
|
|
def add_targets(self, targetName, targets):
|
|
return super().add_targets(targetName, targets)
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
def set_comp_flags(self, env):
|
|
pass
|