rust-lang / rust-lang/rust-bindgen

Unable to generate bindings for Arduino library IRremote.hpp on MacOS

Open
#2,830 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Rust
Stars
5.3k
Forks
829
Avg merge
1d 1h
Merged PRs (30d)
15

Description

Input C/C++ Header

Since the header file generated has 15000+ lines, I won't copy it here, you can find the repository Arduino-IRremote

Bindgen Invocation
fn configure_bindgen_for_arduino(config: &Config) -> Builder {
    let mut builder = Builder::default();
    for (k, v) in &config.definitions {
        builder = builder.clang_arg(&format!("-D{}={}", k, v));
    }
    for flag in &config.flags {
        builder = builder.clang_arg(flag);
    }
    builder = builder
        .clang_args(&["-x", "c++"])
        .use_core()
        .header("wrapper.h")
        .layout_tests(false)
        .parse_callbacks(Box::new(bindgen::CargoCallbacks::new()));

    for include_dir in config.include_dirs() {
        builder = builder.clang_arg(&format!("-I{}", include_dir.to_string_lossy()));
    }

    for item in &config.bindgen_lists.allowlist_function {
        builder = builder.allowlist_function(item);
    }

    for item in &config.bindgen_lists.allowlist_type {
        builder = builder.allowlist_type(item);
    }

    for item in &config.bindgen_lists.blocklist_function {
        builder = builder.blocklist_function(item);
    }

    for item in &config.bindgen_lists.blocklist_type {
        builder = builder.blocklist_type(item);
    }

    builder
}

fn generate_bindings(config: &Config) {
    let bindings: Bindings = configure_bindgen_for_arduino(&config)
        .generate()
        .expect("Unable to generate bindings");
    let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
    bindings
        .write_to_file(out_path.join("bindings.rs"))
        .expect("Couldn't write bindings!");
}

definitions and flags

definitions:
  ARDUINO: "10807"
  F_CPU: 16000000L
  ARDUINO_AVR_UNO: "1"
  ARDUINO_ARCH_AVR: "1"
flags:
  - "-mmcu=atmega328p"
# binding filter
bindgen_lists:
  allowlist_function:
    # - Arduino.*
    - Servo.*
    - IRsend.*
  allowlist_type:
    - Servo.*
    - IRsend.*
  blocklist_function:
    - Print.*
    - String.*
    - std::.*
  blocklist_type:
    - Print.*
    - String.*
    - std::.*

wrapper.h

#include <Arduino.h>
#include <IRremote.hpp>
Actual Results
--- stderr
  clang: warning: argument unused during compilation: '-mmcu=atmega328p' [-Wunused-command-line-argument]
  In file included from __bindgen.cpp:1:
  In file included from ./wrapper.h:1:
  In file included from /Users/zhangzhi/Library/Arduino15/packages/arduino/hardware/avr/1.8.6/cores/arduino/Arduino.h:28:
  In file included from /Users/zhangzhi/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/avr/include/avr/pgmspace.h:90:
  /Users/zhangzhi/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/avr/include/avr/io.h:711:6: warning: "device type not defined" [-W#warnings]
  #    warning "device type not defined"
       ^
  In file included from __bindgen.cpp:1:
  In file included from ./wrapper.h:1:
  In file included from /Users/zhangzhi/Library/Arduino15/packages/arduino/hardware/avr/1.8.6/cores/arduino/Arduino.h:234:
  In file included from /Users/zhangzhi/Library/Arduino15/packages/arduino/hardware/avr/1.8.6/cores/arduino/USBAPI.h:25:
  /Users/zhangzhi/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/avr/include/avr/eeprom.h:41:3: warning: "Device does not have EEPROM available." [-W#warnings]
  # warning "Device does not have EEPROM available."
    ^
  In file included from __bindgen.cpp:1:
  In file included from ./wrapper.h:1:
  In file included from /Users/zhangzhi/Library/Arduino15/packages/arduino/hardware/avr/1.8.6/cores/arduino/Arduino.h:234:
  In file included from /Users/zhangzhi/Library/Arduino15/packages/arduino/hardware/avr/1.8.6/cores/arduino/USBAPI.h:27:
  /Users/zhangzhi/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/avr/include/util/delay.h:112:3: warning: "Compiler optimizations disabled; functions from <util/delay.h> won't work as designed" [-W#warnings]
  # warning "Compiler optimizations disabled; functions from <util/delay.h> won't work as designed"
    ^
  In file included from __bindgen.cpp:1:
  In file included from ./wrapper.h:3:
  In file included from /Users/zhangzhi/Documents/Arduino/libraries/IRremote/src/IRremote.hpp:264:
  /Users/zhangzhi/Documents/Arduino/libraries/IRremote/src/private/IRTimer.hpp:1987:2: error: Internal code configuration error, no timer functions implemented for this CPU / board
  #error Internal code configuration error, no timer functions implemented for this CPU / board
   ^
  3 warnings and 1 error generated.
  thread 'main' panicked at build.rs:235:39:
  called `Result::unwrap()` on an `Err` value: Custom { kind: Other, error: "clang exited with non-zero status" }
  stack backtrace:
     0:        0x108ec4b63 - std::backtrace_rs::backtrace::libunwind::trace::h03136b7b4ce63c8d
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/../../backtrace/src/backtrace/libunwind.rs:105:5
     1:        0x108ec4b63 - std::backtrace_rs::backtrace::trace_unsynchronized::he50d19b877e32d81
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
     2:        0x108ec4b63 - std::sys_common::backtrace::_print_fmt::ha128008280351119
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/sys_common/backtrace.rs:68:5
     3:        0x108ec4b63 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h84ee1fd57c46bba1
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/sys_common/backtrace.rs:44:22
     4:        0x108eeaaeb - core::fmt::rt::Argument::fmt::hf4a4a456fa7ca3e0
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/core/src/fmt/rt.rs:142:9
     5:        0x108eeaaeb - core::fmt::write::h123b335250020b84
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/core/src/fmt/mod.rs:1153:17
     6:        0x108ec171e - std::io::Write::write_fmt::hda015eca4cf47a4e
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/io/mod.rs:1843:15
     7:        0x108ec4951 - std::sys_common::backtrace::_print::h7323b605ff848043
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/sys_common/backtrace.rs:47:5
     8:        0x108ec4951 - std::sys_common::backtrace::print::ha8973aaaf4ba8d60
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/sys_common/backtrace.rs:34:9
     9:        0x108ec6649 - std::panicking::default_hook::{{closure}}::h75f2ccfa168dcb7c
    10:        0x108ec63b0 - std::panicking::default_hook::h00c64a52932be1d3
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/panicking.rs:292:9
    11:        0x108ec708e - std::panicking::rust_panic_with_hook::hfde80e8a46eed7c0
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/panicking.rs:779:13
    12:        0x108ec69e4 - std::panicking::begin_panic_handler::{{closure}}::hff01ef6aad810b31
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/panicking.rs:657:13
    13:        0x108ec5039 - std::sys_common::backtrace::__rust_end_short_backtrace::h330cba627087babe
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/sys_common/backtrace.rs:171:18
    14:        0x108ec6716 - rust_begin_unwind
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/panicking.rs:645:5
    15:        0x108f0c835 - core::panicking::panic_fmt::h2a011b097ccd0049
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/core/src/panicking.rs:72:14
    16:        0x108f0ce15 - core::result::unwrap_failed::hea2c2659c9676c1d
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/core/src/result.rs:1654:5
    17:        0x10881a0c2 - core::result::Result<T,E>::unwrap::h52e532e81b022259
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/core/src/result.rs:1077:23
    18:        0x10881a0c2 - build_script_build::configure_bindgen_for_arduino::h64bc02a44425595f
                                 at /Users/zhangzhi/workspace/rust/arduino/tutorial/arduino_uno_example/build.rs:235:5
    19:        0x10881a5ea - build_script_build::generate_bindings::hbc9f012bdfac1aab
                                 at /Users/zhangzhi/workspace/rust/arduino/tutorial/arduino_uno_example/build.rs:241:30
    20:        0x108817255 - build_script_build::main::h43213882a8b71a63
                                 at /Users/zhangzhi/workspace/rust/arduino/tutorial/arduino_uno_example/build.rs:27:5
    21:        0x10881532e - core::ops::function::FnOnce::call_once::h8f814b1c2ecb4147
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/core/src/ops/function.rs:250:5
    22:        0x10880c9b1 - std::sys_common::backtrace::__rust_begin_short_backtrace::h75f3245420fd938c
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/sys_common/backtrace.rs:155:18
    23:        0x10880a5c4 - std::rt::lang_start::{{closure}}::h1c65cce0f3365ab2
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/rt.rs:166:18
    24:        0x108ebcc40 - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::h31936847bb2ea9da
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/core/src/ops/function.rs:284:13
    25:        0x108ebcc40 - std::panicking::try::do_call::hd0b7a38aaf21d85e
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/panicking.rs:552:40
    26:        0x108ebcc40 - std::panicking::try::he975670dbe333245
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/panicking.rs:516:19
    27:        0x108ebcc40 - std::panic::catch_unwind::hfeafa5faebbec479
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/panic.rs:146:14
    28:        0x108ebcc40 - std::rt::lang_start_internal::{{closure}}::h143264f88c4ac43b
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/rt.rs:148:48
    29:        0x108ebcc40 - std::panicking::try::do_call::h8214801e1afde609
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/panicking.rs:552:40
    30:        0x108ebcc40 - std::panicking::try::hc61b00624572adb5
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/panicking.rs:516:19
    31:        0x108ebcc40 - std::panic::catch_unwind::h02bc6883fb1430ae
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/panic.rs:146:14
    32:        0x108ebcc40 - std::rt::lang_start_internal::h8309c4bfb14094e1
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/rt.rs:148:20
    33:        0x10880a597 - std::rt::lang_start::h51b4cbc837c762d5
                                 at /rustc/0ad927c0c07b65fc0dae37105e09c877c87c296a/library/std/src/rt.rs:165:17
    34:        0x10881ab98 - _main
Expected Results

generate bindings

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the failure from build.rs using wrapper.h, the Arduino.h and IRremote.hpp headers, and the listed bindgen configuration on macOS. Investigate why the AVR board configuration reaches IRremote's no-timer error under clang, then verify that binding generation completes for the reported Arduino setup without the fatal diagnostic.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp, macos, rust
Domain
devtools, embedded-iot
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
28/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.