From c3ecab66dbe62229c867c1709127bf64e2f54abd Mon Sep 17 00:00:00 2001 From: Alexis Grojean Date: Thu, 22 Aug 2024 10:41:42 +0200 Subject: [PATCH 1/6] Enable QR code library in C SDK bindings. --- ledger_secure_sdk_sys/build.rs | 8 ++++++++ ledger_secure_sdk_sys/sdk_stax.h | 1 + 2 files changed, 9 insertions(+) diff --git a/ledger_secure_sdk_sys/build.rs b/ledger_secure_sdk_sys/build.rs index 87c7388b..f8c72a89 100644 --- a/ledger_secure_sdk_sys/build.rs +++ b/ledger_secure_sdk_sys/build.rs @@ -536,6 +536,7 @@ impl SDKBuilder { format!("-I{bsdk}/lib_nbgl/include/").as_str(), format!("-I{bsdk}/lib_ux_sync/include/").as_str(), format!("-I{bsdk}/lib_ux_nbgl/").as_str(), + // format!("-I{bsdk}/qrcode/include/").as_str(), ]); bindings = bindings .header( @@ -556,6 +557,12 @@ impl SDKBuilder { .to_str() .unwrap(), ) + .header( + self.bolos_sdk + .join("qrcode/include/qrcodegen.h") + .to_str() + .unwrap(), + ) } _ => (), } @@ -724,6 +731,7 @@ fn configure_lib_nbgl(command: &mut cc::Build, bolos_sdk: &Path) { .file(bolos_sdk.join("lib_ux_sync/src/ux_sync.c")) .file(bolos_sdk.join("lib_bagl/src/bagl_fonts.c")) .file(bolos_sdk.join("src/os_printf.c")) + .file(bolos_sdk.join("qrcode/src/qrcodegen.c")) .files( glob(bolos_sdk.join("lib_nbgl/src/*.c").to_str().unwrap()) .unwrap() diff --git a/ledger_secure_sdk_sys/sdk_stax.h b/ledger_secure_sdk_sys/sdk_stax.h index cf13c6f3..3f052ce5 100644 --- a/ledger_secure_sdk_sys/sdk_stax.h +++ b/ledger_secure_sdk_sys/sdk_stax.h @@ -1,5 +1,6 @@ #define ST33K1M5 #define HAVE_SPRINTF +#define NBGL_QRCODE #define HAVE_SE_EINK_DISPLAY #define SCREEN_SIZE_WALLET #define HAVE_NBGL From 4da267cbdab8d82410e18d9e9fd80aba8395e33a Mon Sep 17 00:00:00 2001 From: GroM Date: Fri, 23 Aug 2024 17:13:40 +0200 Subject: [PATCH 2/6] Fix to link with arm libc --- ledger_device_sdk/link_wrap.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ledger_device_sdk/link_wrap.sh b/ledger_device_sdk/link_wrap.sh index 31f6cb7e..52447519 100755 --- a/ledger_device_sdk/link_wrap.sh +++ b/ledger_device_sdk/link_wrap.sh @@ -7,7 +7,8 @@ set -x LD=${LD:-rust-lld} # Needed because LLD gets behavior from argv[0] LD=${LD/-ld/-lld} -${LD} "$@" --emit-relocs +LIBC_PATH=$(arm-none-eabi-gcc -print-sysroot)/lib +${LD} "$@" --emit-relocs -L ${LIBC_PATH} -lc echo RUST_LLD DONE From 9ea05b0de5bc9992c194f2c0acac2ab2400dd6cf Mon Sep 17 00:00:00 2001 From: GroM Date: Thu, 29 Aug 2024 17:07:10 +0200 Subject: [PATCH 3/6] Use prebuilt instruction to pass libc link args --- ledger_device_sdk/link_wrap.sh | 3 +-- ledger_secure_sdk_sys/build.rs | 27 +++++++++++++-------------- ledger_secure_sdk_sys/sdk_flex.h | 1 + 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/ledger_device_sdk/link_wrap.sh b/ledger_device_sdk/link_wrap.sh index 52447519..31f6cb7e 100755 --- a/ledger_device_sdk/link_wrap.sh +++ b/ledger_device_sdk/link_wrap.sh @@ -7,8 +7,7 @@ set -x LD=${LD:-rust-lld} # Needed because LLD gets behavior from argv[0] LD=${LD/-ld/-lld} -LIBC_PATH=$(arm-none-eabi-gcc -print-sysroot)/lib -${LD} "$@" --emit-relocs -L ${LIBC_PATH} -lc +${LD} "$@" --emit-relocs echo RUST_LLD DONE diff --git a/ledger_secure_sdk_sys/build.rs b/ledger_secure_sdk_sys/build.rs index f8c72a89..f8f9b12d 100644 --- a/ledger_secure_sdk_sys/build.rs +++ b/ledger_secure_sdk_sys/build.rs @@ -290,7 +290,7 @@ fn header2define(headername: &str) -> Vec<(String, Option)> { struct SDKBuilder { bolos_sdk: PathBuf, api_level: u32, - gcc_toolchain: String, + gcc_toolchain: PathBuf, device: Device, cxdefines: Vec, } @@ -300,7 +300,7 @@ impl SDKBuilder { SDKBuilder { bolos_sdk: PathBuf::new(), api_level: 0, - gcc_toolchain: "".to_string(), + gcc_toolchain: PathBuf::new(), device: Device::NanoS, cxdefines: Vec::new(), } @@ -319,11 +319,11 @@ impl SDKBuilder { .trim(); let gcc_toolchain = if sysroot.is_empty() { - String::from("/usr/include/") + String::from("/usr") } else { - format!("{sysroot}/include") + format!("{sysroot}") }; - self.gcc_toolchain = gcc_toolchain; + self.gcc_toolchain = PathBuf::from(gcc_toolchain); } pub fn device(&mut self) { @@ -413,7 +413,7 @@ impl SDKBuilder { .files(str2path(&self.bolos_sdk, &SDK_USB_FILES)); command = command - .include(&self.gcc_toolchain) + .include(self.gcc_toolchain.join("include")) .include(self.bolos_sdk.join("include")) .include(self.bolos_sdk.join("lib_cxng/include")) .include(self.bolos_sdk.join("lib_stusb")) @@ -461,14 +461,20 @@ impl SDKBuilder { } command.compile("ledger-secure-sdk"); + + let gcc_tc = self.gcc_toolchain.display().to_string(); + + println!("cargo:rustc-link-lib=c"); + println!("cargo:rustc-link-search={gcc_tc}/lib"); } fn generate_bindings(&self) { let bsdk = self.bolos_sdk.display().to_string(); + let gcc_tc = self.gcc_toolchain.display().to_string(); let args = [ "--target=thumbv6m-none-eabi".to_string(), // exact target is irrelevant for bindings "-fshort-enums".to_string(), - format!("-I{}", self.gcc_toolchain), + format!("-I{gcc_tc}/include"), format!("-I{bsdk}/include"), format!("-I{bsdk}/lib_cxng/include/"), format!("-I{bsdk}/lib_stusb/STM32_USB_Device_Library/Core/Inc/"), @@ -536,7 +542,6 @@ impl SDKBuilder { format!("-I{bsdk}/lib_nbgl/include/").as_str(), format!("-I{bsdk}/lib_ux_sync/include/").as_str(), format!("-I{bsdk}/lib_ux_nbgl/").as_str(), - // format!("-I{bsdk}/qrcode/include/").as_str(), ]); bindings = bindings .header( @@ -557,12 +562,6 @@ impl SDKBuilder { .to_str() .unwrap(), ) - .header( - self.bolos_sdk - .join("qrcode/include/qrcodegen.h") - .to_str() - .unwrap(), - ) } _ => (), } diff --git a/ledger_secure_sdk_sys/sdk_flex.h b/ledger_secure_sdk_sys/sdk_flex.h index 1e609459..5c81bdc6 100644 --- a/ledger_secure_sdk_sys/sdk_flex.h +++ b/ledger_secure_sdk_sys/sdk_flex.h @@ -1,6 +1,7 @@ #define ST33K1M5 #define HAVE_DISPLAY_FAST_MODE #define HAVE_SPRINTF +#define NBGL_QRCODE #define HAVE_SE_EINK_DISPLAY #define SCREEN_SIZE_WALLET #define HAVE_NBGL From f846ce5d91415ba3d3483ff47838268ca76e0ee0 Mon Sep 17 00:00:00 2001 From: GroM Date: Thu, 29 Aug 2024 17:18:53 +0200 Subject: [PATCH 4/6] Add comment --- ledger_secure_sdk_sys/build.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ledger_secure_sdk_sys/build.rs b/ledger_secure_sdk_sys/build.rs index f8f9b12d..3d906771 100644 --- a/ledger_secure_sdk_sys/build.rs +++ b/ledger_secure_sdk_sys/build.rs @@ -462,8 +462,8 @@ impl SDKBuilder { command.compile("ledger-secure-sdk"); + /* Link with libc for unresolved symbols */ let gcc_tc = self.gcc_toolchain.display().to_string(); - println!("cargo:rustc-link-lib=c"); println!("cargo:rustc-link-search={gcc_tc}/lib"); } From d7fe861213987850343d01be9ddab39ccc995501 Mon Sep 17 00:00:00 2001 From: GroM Date: Thu, 29 Aug 2024 17:22:46 +0200 Subject: [PATCH 5/6] Bump version --- Cargo.lock | 2 +- ledger_secure_sdk_sys/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ae55ebb2..5f884512 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -489,7 +489,7 @@ dependencies = [ [[package]] name = "ledger_secure_sdk_sys" -version = "1.4.4" +version = "1.4.5" dependencies = [ "bindgen", "cc", diff --git a/ledger_secure_sdk_sys/Cargo.toml b/ledger_secure_sdk_sys/Cargo.toml index d6a93f15..46c34a14 100644 --- a/ledger_secure_sdk_sys/Cargo.toml +++ b/ledger_secure_sdk_sys/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ledger_secure_sdk_sys" -version = "1.4.4" +version = "1.4.5" authors = ["yhql", "agrojean-ledger"] edition = "2021" license.workspace = true From e4601d79430ea3f1638328156824d2714774c66b Mon Sep 17 00:00:00 2001 From: GroM Date: Thu, 29 Aug 2024 17:30:37 +0200 Subject: [PATCH 6/6] Bump versions --- Cargo.lock | 2 +- ledger_device_sdk/Cargo.toml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5f884512..c72f68f5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -474,7 +474,7 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "ledger_device_sdk" -version = "1.15.0" +version = "1.15.1" dependencies = [ "const-zero", "include_gif", diff --git a/ledger_device_sdk/Cargo.toml b/ledger_device_sdk/Cargo.toml index 23d488b6..d512961f 100644 --- a/ledger_device_sdk/Cargo.toml +++ b/ledger_device_sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ledger_device_sdk" -version = "1.15.0" +version = "1.15.1" authors = ["yhql", "yogh333", "agrojean-ledger", "kingofpayne"] edition = "2021" license.workspace = true @@ -21,7 +21,7 @@ rand_core = { version = "0.6.3", default_features = false } zeroize = { version = "1.6.0", default_features = false } numtoa = "0.2.4" const-zero = "0.1.1" -ledger_secure_sdk_sys = { path = "../ledger_secure_sdk_sys", version = "1.4.4" } +ledger_secure_sdk_sys = { path = "../ledger_secure_sdk_sys", version = "1.4.5" } [features] speculos = []