def test_different_arch(self): settings = Settings.loads(get_default_settings_yml()) settings.os = "FreeBSD" settings.arch = "x86" self.assertTrue( cross_building(settings, self_os="FreeBSD", self_arch="x86_64")) with mock.patch("platform.system", mock.MagicMock(return_value='FreeBSD')), \ mock.patch("platform.machine", mock.MagicMock(return_value="x86_64")): self.assertTrue(cross_building(settings)) settings.os_build = "FreeBSD" settings.arch_build = "x86_64" self.assertTrue(cross_building(settings))
def _get_host_build_target_flags(self): """Based on google search for build/host triplets, it could need a lot and complex verification""" arch_detected = detected_architecture() or platform.machine() os_detected = detected_os() or platform.system() if self._os_target and self._arch_target: try: target = get_gnu_triplet(self._os_target, self._arch_target, self._compiler) except ConanException as exc: self._conanfile.output.warn(str(exc)) target = None else: target = None if os_detected is None or arch_detected is None or self._arch is None or self._os is None: return False, False, target if not cross_building(self._conanfile.settings, os_detected, arch_detected): return False, False, target try: build = get_gnu_triplet(os_detected, arch_detected, self._compiler) except ConanException as exc: self._conanfile.output.warn(str(exc)) build = None try: host = get_gnu_triplet(self._os, self._arch, self._compiler) except ConanException as exc: self._conanfile.output.warn(str(exc)) host = None return build, host, target
def _get_host_build_target_flags(self): """Based on google search for build/host triplets, it could need a lot and complex verification""" if self._os_target and self._arch_target: try: target = get_gnu_triplet(self._os_target, self._arch_target, self._compiler) except ConanException as exc: self._conanfile.output.warn(str(exc)) target = None else: target = None if self._os_build is None or self._arch_build is None or self._arch_host is None or self._os_host is None: return False, False, target if not cross_building(self._conanfile, self._os_build, self._arch_build): return False, False, target try: build = get_gnu_triplet(self._os_build, self._arch_build, self._compiler) except ConanException as exc: self._conanfile.output.warn(str(exc)) build = None try: host = get_gnu_triplet(self._os_host, self._arch_host, self._compiler) except ConanException as exc: self._conanfile.output.warn(str(exc)) host = None return build, host, target
def configure(self, source_folder=None): source = self._conanfile.source_folder if source_folder: source = os.path.join(self._conanfile.source_folder, source_folder) cmd = "meson setup" if cross_building(self._conanfile): cmd += ' --cross-file "{}"'.format(MesonToolchain.cross_filename) else: cmd += ' --native-file "{}"'.format(MesonToolchain.native_filename) cmd += ' "{}" "{}"'.format(self._build_dir, source) if self._conanfile.package_folder: cmd += ' -Dprefix="{}"'.format(self._conanfile.package_folder) self._run(cmd)
def _get_package_names(self, packages, arch_names): """ Parse package names according it architecture :param packages: list with all package to be installed e.g. ["libusb-dev libfoobar-dev"] :param arch_names: Package suffix/prefix name used by installer tool :return: list with all parsed names e.g. ["libusb-dev:armhf libfoobar-dev:armhf"] """ if self._conanfile and self._conanfile.settings and cross_building(self._conanfile): _, build_arch, _, host_arch = get_cross_building_settings(self._conanfile) arch = host_arch or build_arch parsed_packages = [] for package in packages: for package_name in package.split(" "): parsed_packages.append(self._tool.get_package_name(package_name, arch, arch_names)) return parsed_packages return packages
def gcc_build(self): with tools.chdir(self.source_subfolder): self.run("autoreconf -f -i") autotools = AutoToolsBuildEnvironment(self) _args = ["--prefix=%s/build"%(os.getcwd()), "--enable-introspection"] if self.options.shared: _args.extend(['--enable-shared=yes','--enable-static=no']) else: _args.extend(['--enable-shared=no','--enable-static=yes']) autotools.configure(args=_args) autotools.make()#args=["-j2"]) if not cross_building(self.settings): self.run('make check') autotools.install()
def test_x86_x64(self): settings = Settings.loads(default_settings_yml) settings.os = "FreeBSD" settings.arch = "x86_64" self.assertTrue( cross_building(settings, self_os="FreeBSD", self_arch="x86", skip_x64_x86=True)) self.assertTrue( cross_building(settings, self_os="FreeBSD", self_arch="x86", skip_x64_x86=False)) with mock.patch("platform.system", mock.MagicMock(return_value='FreeBSD')), \ mock.patch("platform.machine", mock.MagicMock(return_value="x86")): self.assertTrue(cross_building(settings, skip_x64_x86=True)) self.assertTrue(cross_building(settings, skip_x64_x86=False)) settings.os_build = "FreeBSD" settings.arch_build = "x86" self.assertTrue(cross_building(settings, skip_x64_x86=True)) self.assertTrue(cross_building(settings, skip_x64_x86=False))
def generate(self): if cross_building(self._conanfile): self._write_cross_file() else: self._write_native_file() write_conanvcvars(self._conanfile)