diff --git a/python/build/meson.py b/python/build/meson.py index 427d51f0f..09dffe471 100644 --- a/python/build/meson.py +++ b/python/build/meson.py @@ -2,43 +2,37 @@ import os.path, subprocess, sys from build.project import Project -class MesonProject(Project): - def __init__(self, url, md5, installed, configure_args=[], - **kwargs): - Project.__init__(self, url, md5, installed, **kwargs) - self.configure_args = configure_args +def make_cross_file(toolchain): + if toolchain.is_windows: + system = 'windows' + else: + system = 'linux' - def _make_cross_file(self, toolchain): - if toolchain.is_windows: - system = 'windows' + if toolchain.is_arm: + cpu_family = 'arm' + if toolchain.is_armv7: + cpu = 'armv7' else: - system = 'linux' - - if toolchain.is_arm: - cpu_family = 'arm' - if toolchain.is_armv7: - cpu = 'armv7' - else: - cpu = 'armv6' - elif toolchain.is_aarch64: - cpu_family = 'aarch64' - cpu = 'arm64-v8a' + cpu = 'armv6' + elif toolchain.is_aarch64: + cpu_family = 'aarch64' + cpu = 'arm64-v8a' + else: + cpu_family = 'x86' + if 'x86_64' in toolchain.arch: + cpu = 'x86_64' else: - cpu_family = 'x86' - if 'x86_64' in toolchain.arch: - cpu = 'x86_64' - else: - cpu = 'i686' + cpu = 'i686' - # TODO: support more CPUs - endian = 'little' + # TODO: support more CPUs + endian = 'little' - # TODO: write pkg-config wrapper + # TODO: write pkg-config wrapper - path = os.path.join(toolchain.build_path, 'meson.cross') - os.makedirs(toolchain.build_path, exist_ok=True) - with open(path, 'w') as f: - f.write(""" + path = os.path.join(toolchain.build_path, 'meson.cross') + os.makedirs(toolchain.build_path, exist_ok=True) + with open(path, 'w') as f: + f.write(""" [binaries] c = '%s' cpp = '%s' @@ -69,31 +63,40 @@ endian = '%s' repr((toolchain.cppflags + ' ' + toolchain.cxxflags).split()), repr(toolchain.ldflags.split()), system, cpu_family, cpu, endian)) - return path + return path + +def configure(toolchain, src, build, args=()): + cross_file = make_cross_file(toolchain) + configure = [ + 'meson', + src, build, + + '--prefix', toolchain.install_prefix, + + # this is necessary because Meson uses Debian's build machine + # MultiArch path (e.g. "lib/x86_64-linux-gnu") for cross + # builds, which is obviously wrong + '--libdir', 'lib', + + '--buildtype', 'plain', + + '--default-library=static', + + '--cross-file', cross_file, + ] + args + + subprocess.check_call(configure, env=toolchain.env) + +class MesonProject(Project): + def __init__(self, url, md5, installed, configure_args=[], + **kwargs): + Project.__init__(self, url, md5, installed, **kwargs) + self.configure_args = configure_args def configure(self, toolchain): src = self.unpack(toolchain) - cross_file = self._make_cross_file(toolchain) build = self.make_build_path(toolchain) - configure = [ - 'meson', - src, build, - - '--prefix', toolchain.install_prefix, - - # this is necessary because Meson uses Debian's build machine - # MultiArch path (e.g. "lib/x86_64-linux-gnu") for cross - # builds, which is obviously wrong - '--libdir', 'lib', - - '--buildtype', 'plain', - - '--default-library=static', - - '--cross-file', cross_file, - ] + self.configure_args - - subprocess.check_call(configure, env=toolchain.env) + configure(toolchain, src, build, self.configure_args) return build def build(self, toolchain):