Skip to content

Trying to cross compile with cross-rs #52

@conner-replogle

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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions