Skip to content

Trying to cross compile with cross-rs #52

Description

@conner-replogle

I am attempting to build this for RP Pi Zero 2 W and am getting this error

error: failed to run custom build command for `libcamera-sys v0.3.0`

Caused by:
  process didn't exit successfully: `/target/release/build/libcamera-sys-afb3f3cd418809b6/build-script-build` (exit status: 101)
  --- stdout
  cargo:rerun-if-env-changed=LIBCAMERA_NO_PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS_aarch64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS_aarch64_unknown_linux_gnu
  cargo:rerun-if-env-changed=TARGET_PKG_CONFIG_ALLOW_CROSS
  cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS
  cargo:rerun-if-env-changed=PKG_CONFIG_aarch64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_aarch64_unknown_linux_gnu
  cargo:rerun-if-env-changed=TARGET_PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG
  cargo:rerun-if-env-changed=LIBCAMERA_STATIC
  cargo:rerun-if-env-changed=LIBCAMERA_DYNAMIC
  cargo:rerun-if-env-changed=PKG_CONFIG_ALL_STATIC
  cargo:rerun-if-env-changed=PKG_CONFIG_ALL_DYNAMIC
  cargo:rerun-if-env-changed=PKG_CONFIG_PATH_aarch64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_PATH_aarch64_unknown_linux_gnu
  cargo:rerun-if-env-changed=TARGET_PKG_CONFIG_PATH
  cargo:rerun-if-env-changed=PKG_CONFIG_PATH
  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_aarch64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_aarch64_unknown_linux_gnu
  cargo:rerun-if-env-changed=TARGET_PKG_CONFIG_LIBDIR
  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_aarch64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_aarch64_unknown_linux_gnu
  cargo:rerun-if-env-changed=TARGET_PKG_CONFIG_SYSROOT_DIR
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR
  cargo:rerun-if-env-changed=SYSROOT
  cargo:rerun-if-env-changed=LIBCAMERA_STATIC
  cargo:rerun-if-env-changed=LIBCAMERA_DYNAMIC
  cargo:rerun-if-env-changed=PKG_CONFIG_ALL_STATIC
  cargo:rerun-if-env-changed=PKG_CONFIG_ALL_DYNAMIC
  cargo:rustc-link-search=native=/usr/local/lib/x86_64-linux-gnu
  cargo:rustc-link-lib=camera
  cargo:rustc-link-lib=camera-base
  cargo:rerun-if-env-changed=PKG_CONFIG_aarch64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_aarch64_unknown_linux_gnu
  cargo:rerun-if-env-changed=TARGET_PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG
  cargo:rerun-if-env-changed=LIBCAMERA_STATIC
  cargo:rerun-if-env-changed=LIBCAMERA_DYNAMIC
  cargo:rerun-if-env-changed=PKG_CONFIG_ALL_STATIC
  cargo:rerun-if-env-changed=PKG_CONFIG_ALL_DYNAMIC
  cargo:rerun-if-env-changed=PKG_CONFIG_PATH_aarch64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_PATH_aarch64_unknown_linux_gnu
  cargo:rerun-if-env-changed=TARGET_PKG_CONFIG_PATH
  cargo:rerun-if-env-changed=PKG_CONFIG_PATH
  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_aarch64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_aarch64_unknown_linux_gnu
  cargo:rerun-if-env-changed=TARGET_PKG_CONFIG_LIBDIR
  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_aarch64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_aarch64_unknown_linux_gnu
  cargo:rerun-if-env-changed=TARGET_PKG_CONFIG_SYSROOT_DIR
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR
  cargo:rustc-link-lib=camera
  cargo:rerun-if-changed=c_api/controls.h
  cargo:rerun-if-changed=c_api/version.h
  cargo:rerun-if-changed=c_api/camera_manager.h
  cargo:rerun-if-changed=c_api/camera.h
  cargo:rerun-if-changed=c_api/signal.h
  cargo:rerun-if-changed=c_api/framebuffer.h
  cargo:rerun-if-changed=c_api/stream.h
  cargo:rerun-if-changed=c_api/logging.h
  cargo:rerun-if-changed=c_api/pixel_format.h
  cargo:rerun-if-changed=c_api/request.h
  cargo:rerun-if-changed=c_api/geometry.h
  cargo:rerun-if-changed=c_api/framebuffer_allocator.h
  cargo:rerun-if-changed=c_api/libcamera_ids.hpp
  cargo:rerun-if-changed=c_api/geometry.cpp
  cargo:rerun-if-changed=c_api/controls.cpp
  cargo:rerun-if-changed=c_api/logging.cpp
  cargo:rerun-if-changed=c_api/camera.cpp
  cargo:rerun-if-changed=c_api/request.cpp
  cargo:rerun-if-changed=c_api/framebuffer.cpp
  cargo:rerun-if-changed=c_api/pixel_format.cpp
  cargo:rerun-if-changed=c_api/framebuffer_allocator.cpp
  cargo:rerun-if-changed=c_api/stream.cpp
  cargo:rerun-if-changed=c_api/camera_manager.cpp
  OUT_DIR = Some(/target/aarch64-unknown-linux-gnu/release/build/libcamera-sys-89d397fb4369d845/out)
  OPT_LEVEL = Some(3)
  TARGET = Some(aarch64-unknown-linux-gnu)
  HOST = Some(x86_64-unknown-linux-gnu)
  cargo:rerun-if-env-changed=CXX_aarch64-unknown-linux-gnu
  CXX_aarch64-unknown-linux-gnu = None
  cargo:rerun-if-env-changed=CXX_aarch64_unknown_linux_gnu
  CXX_aarch64_unknown_linux_gnu = Some(aarch64-linux-gnu-g++)
  cargo:rerun-if-env-changed=CC_KNOWN_WRAPPER_CUSTOM
  CC_KNOWN_WRAPPER_CUSTOM = None
  RUSTC_WRAPPER = None
  cargo:rerun-if-env-changed=CC_ENABLE_DEBUG_OUTPUT
  cargo:rerun-if-env-changed=CRATE_CC_NO_DEFAULTS
  CRATE_CC_NO_DEFAULTS = None
  DEBUG = Some(false)
  CARGO_CFG_TARGET_FEATURE = Some(neon)
  cargo:rerun-if-env-changed=CXXFLAGS_aarch64-unknown-linux-gnu
  CXXFLAGS_aarch64-unknown-linux-gnu = None
  cargo:rerun-if-env-changed=CXXFLAGS_aarch64_unknown_linux_gnu
  CXXFLAGS_aarch64_unknown_linux_gnu = None
  cargo:rerun-if-env-changed=TARGET_CXXFLAGS
  TARGET_CXXFLAGS = None
  cargo:rerun-if-env-changed=CXXFLAGS
  CXXFLAGS = None
  CARGO_ENCODED_RUSTFLAGS = Some()
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  cargo:rerun-if-env-changed=AR_aarch64-unknown-linux-gnu
  AR_aarch64-unknown-linux-gnu = None
  cargo:rerun-if-env-changed=AR_aarch64_unknown_linux_gnu
  AR_aarch64_unknown_linux_gnu = Some(aarch64-linux-gnu-ar)
  cargo:rerun-if-env-changed=ARFLAGS_aarch64-unknown-linux-gnu
  ARFLAGS_aarch64-unknown-linux-gnu = None
  cargo:rerun-if-env-changed=ARFLAGS_aarch64_unknown_linux_gnu
  ARFLAGS_aarch64_unknown_linux_gnu = None
  cargo:rerun-if-env-changed=TARGET_ARFLAGS
  TARGET_ARFLAGS = None
  cargo:rerun-if-env-changed=ARFLAGS
  ARFLAGS = None
  cargo:rustc-link-lib=static=camera_c_api
  cargo:rustc-link-search=native=/target/aarch64-unknown-linux-gnu/release/build/libcamera-sys-89d397fb4369d845/out
  cargo:rerun-if-env-changed=CXXSTDLIB_aarch64-unknown-linux-gnu
  CXXSTDLIB_aarch64-unknown-linux-gnu = None
  cargo:rerun-if-env-changed=CXXSTDLIB_aarch64_unknown_linux_gnu
  CXXSTDLIB_aarch64_unknown_linux_gnu = None
  cargo:rerun-if-env-changed=TARGET_CXXSTDLIB
  TARGET_CXXSTDLIB = None
  cargo:rerun-if-env-changed=CXXSTDLIB
  CXXSTDLIB = None
  cargo:rustc-link-lib=stdc++

  --- stderr
  Failed to run rustfmt: cannot find binary path (non-fatal, continuing)
  /usr/bin/../lib/gcc-cross/aarch64-linux-gnu/9/../../../../include/c++/9/utility:68:10: fatal error: 'bits/c++config.h' file not found
  thread 'main' panicked at /Users/username/.cargo/registry/src/index.crates.io-6f17d22bba15001f/libcamera-sys-0.3.0/build.rs:87:39:
  Unable to generate bindings: ClangDiagnostic("/usr/bin/../lib/gcc-cross/aarch64-linux-gnu/9/../../../../include/c++/9/utility:68:10: fatal error: 'bits/c++config.h' file not found\n")
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Build failed!

This is the cross config I came up with by looking at the CI. Libcamera builds however it still fails not sure what to do.

[workspace.metadata.cross.target.aarch64-unknown-linux-gnu]
# Install libssl-dev:arm64, see <https://github.com/cross-rs/cross/blob/main/docs/custom_images.md#adding-dependencies-to-existing-images>
pre-build = [
    "dpkg --add-architecture $CROSS_DEB_ARCH",
    "apt-get update",
    "apt-get -y install python3-pip", 
    "apt-get -y install pkg-config", 
    "apt-get -y install g++-aarch64-linux-gnu", 
    "pip install meson", 
    "apt-get -y install libyaml-dev python3-yaml python3-ply python3-jinja2 ninja-build clang",
    "git clone https://git.libcamera.org/libcamera/libcamera.git deps/libcamera --branch v0.1.0",
    "cd deps/libcamera",
    "meson build -Dipas=vimc -Dpipelines=vimc",
    "ninja -C build install"
]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions