From 20f4bde596202d9a3c9550d492038d22737697e6 Mon Sep 17 00:00:00 2001 From: moce0627 <491745115@qq.com> Date: Mon, 16 Oct 2023 18:49:00 +0800 Subject: [PATCH] feat: compiling libfdt in libfdt-binding --- Cargo.toml | 3 --- Makefile | 2 +- build.rs | 16 ------------- libfdt-binding/Cargo.toml | 1 + libfdt-binding/build.rs | 23 ++++++++++++++++++- libfdt-binding/{ => libfdt}/fdt.c | 0 libfdt-binding/{ => libfdt}/fdt.h | 0 libfdt-binding/{ => libfdt}/fdt_addresses.c | 0 libfdt-binding/{ => libfdt}/fdt_check.c | 0 libfdt-binding/{ => libfdt}/fdt_empty_tree.c | 0 libfdt-binding/{ => libfdt}/fdt_overlay.c | 0 libfdt-binding/{ => libfdt}/fdt_ro.c | 0 libfdt-binding/{ => libfdt}/fdt_rw.c | 0 libfdt-binding/{ => libfdt}/fdt_strerror.c | 0 libfdt-binding/{ => libfdt}/fdt_sw.c | 0 libfdt-binding/{ => libfdt}/fdt_wip.c | 0 libfdt-binding/{ => libfdt}/libfdt.h | 0 libfdt-binding/{ => libfdt}/libfdt_env.h | 0 libfdt-binding/{ => libfdt}/libfdt_internal.h | 0 libfdt-binding/{ => libfdt}/mystr.c | 0 libfdt-binding/{ => libfdt}/wrapper.c | 0 21 files changed, 24 insertions(+), 21 deletions(-) rename libfdt-binding/{ => libfdt}/fdt.c (100%) rename libfdt-binding/{ => libfdt}/fdt.h (100%) rename libfdt-binding/{ => libfdt}/fdt_addresses.c (100%) rename libfdt-binding/{ => libfdt}/fdt_check.c (100%) rename libfdt-binding/{ => libfdt}/fdt_empty_tree.c (100%) rename libfdt-binding/{ => libfdt}/fdt_overlay.c (100%) rename libfdt-binding/{ => libfdt}/fdt_ro.c (100%) rename libfdt-binding/{ => libfdt}/fdt_rw.c (100%) rename libfdt-binding/{ => libfdt}/fdt_strerror.c (100%) rename libfdt-binding/{ => libfdt}/fdt_sw.c (100%) rename libfdt-binding/{ => libfdt}/fdt_wip.c (100%) rename libfdt-binding/{ => libfdt}/libfdt.h (100%) rename libfdt-binding/{ => libfdt}/libfdt_env.h (100%) rename libfdt-binding/{ => libfdt}/libfdt_internal.h (100%) rename libfdt-binding/{ => libfdt}/mystr.c (100%) rename libfdt-binding/{ => libfdt}/wrapper.c (100%) diff --git a/Cargo.toml b/Cargo.toml index 8249c65..3471063 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,9 +23,6 @@ lto = true panic = "abort" debug = true -[build-dependencies] -cc = "1.0" - [dependencies] vm-fdt = { git = "https://github.com/OhmR/vm-fdt" } fdt = { path = "libfdt-binding" } diff --git a/Makefile b/Makefile index a73529d..a3c2bad 100644 --- a/Makefile +++ b/Makefile @@ -72,7 +72,7 @@ debug: qemu -s -S gdb: - ${GDB} -x gdb/aarch64.gdb + ${GDB} -x gdb/${ARCH}.gdb clean: cargo clean diff --git a/build.rs b/build.rs index 09ed177..d85a580 100644 --- a/build.rs +++ b/build.rs @@ -9,25 +9,9 @@ // See the Mulan PSL v2 for more details. use std::process::Command; -use std::fs; use std::env::var; fn main() { - let files = fs::read_dir("libfdt-binding").unwrap().into_iter().filter_map(|f| { - let f = f.as_ref().unwrap(); - if f.file_type().unwrap().is_file() && matches!(f.path().extension(), Some(ext) if ext == "c") { - Some(f.path()) - } else { - None - } - }); - cc::Build::new() - .compiler("aarch64-none-elf-gcc") - .include("libfdt-binding") - .files(files) - .flag("-w") - .compile("fdt-binding"); - let arch = var("CARGO_CFG_TARGET_ARCH").unwrap(); let text_start = if cfg!(feature = "tx2") { if cfg!(feature = "update") { diff --git a/libfdt-binding/Cargo.toml b/libfdt-binding/Cargo.toml index 0d2d370..e97f073 100644 --- a/libfdt-binding/Cargo.toml +++ b/libfdt-binding/Cargo.toml @@ -6,3 +6,4 @@ build = "build.rs" [build-dependencies] bindgen = "0.59.1" +cc = "1.0" diff --git a/libfdt-binding/build.rs b/libfdt-binding/build.rs index 9d8991f..7caea0c 100644 --- a/libfdt-binding/build.rs +++ b/libfdt-binding/build.rs @@ -14,7 +14,28 @@ use std::env; use std::path::PathBuf; fn main() { - println!("cargo:rerun-if-changed=./"); + println!("cargo:rerun-if-changed=wrapper.h"); + println!("cargo:rerun-if-changed=./libfdt"); + println!("cargo:rerun-if-changed=build.rs"); + + // compile libfdt-bingding + let fdt_dirs = ["./", "./libfdt"]; + let c_files = fdt_dirs.iter().flat_map(|path| { + std::fs::read_dir(path).unwrap().filter_map(|f| { + let f = f.unwrap(); + if f.file_type().unwrap().is_file() && matches!(f.path().extension(), Some(ext) if ext == "c") { + Some(f.path()) + } else { + None + } + }) + }); + cc::Build::new() + .compiler("aarch64-none-elf-gcc") + .includes(fdt_dirs) + .files(c_files) + .flag("-w") + .compile("fdt-binding"); let bindings = bindgen::Builder::default() .use_core() diff --git a/libfdt-binding/fdt.c b/libfdt-binding/libfdt/fdt.c similarity index 100% rename from libfdt-binding/fdt.c rename to libfdt-binding/libfdt/fdt.c diff --git a/libfdt-binding/fdt.h b/libfdt-binding/libfdt/fdt.h similarity index 100% rename from libfdt-binding/fdt.h rename to libfdt-binding/libfdt/fdt.h diff --git a/libfdt-binding/fdt_addresses.c b/libfdt-binding/libfdt/fdt_addresses.c similarity index 100% rename from libfdt-binding/fdt_addresses.c rename to libfdt-binding/libfdt/fdt_addresses.c diff --git a/libfdt-binding/fdt_check.c b/libfdt-binding/libfdt/fdt_check.c similarity index 100% rename from libfdt-binding/fdt_check.c rename to libfdt-binding/libfdt/fdt_check.c diff --git a/libfdt-binding/fdt_empty_tree.c b/libfdt-binding/libfdt/fdt_empty_tree.c similarity index 100% rename from libfdt-binding/fdt_empty_tree.c rename to libfdt-binding/libfdt/fdt_empty_tree.c diff --git a/libfdt-binding/fdt_overlay.c b/libfdt-binding/libfdt/fdt_overlay.c similarity index 100% rename from libfdt-binding/fdt_overlay.c rename to libfdt-binding/libfdt/fdt_overlay.c diff --git a/libfdt-binding/fdt_ro.c b/libfdt-binding/libfdt/fdt_ro.c similarity index 100% rename from libfdt-binding/fdt_ro.c rename to libfdt-binding/libfdt/fdt_ro.c diff --git a/libfdt-binding/fdt_rw.c b/libfdt-binding/libfdt/fdt_rw.c similarity index 100% rename from libfdt-binding/fdt_rw.c rename to libfdt-binding/libfdt/fdt_rw.c diff --git a/libfdt-binding/fdt_strerror.c b/libfdt-binding/libfdt/fdt_strerror.c similarity index 100% rename from libfdt-binding/fdt_strerror.c rename to libfdt-binding/libfdt/fdt_strerror.c diff --git a/libfdt-binding/fdt_sw.c b/libfdt-binding/libfdt/fdt_sw.c similarity index 100% rename from libfdt-binding/fdt_sw.c rename to libfdt-binding/libfdt/fdt_sw.c diff --git a/libfdt-binding/fdt_wip.c b/libfdt-binding/libfdt/fdt_wip.c similarity index 100% rename from libfdt-binding/fdt_wip.c rename to libfdt-binding/libfdt/fdt_wip.c diff --git a/libfdt-binding/libfdt.h b/libfdt-binding/libfdt/libfdt.h similarity index 100% rename from libfdt-binding/libfdt.h rename to libfdt-binding/libfdt/libfdt.h diff --git a/libfdt-binding/libfdt_env.h b/libfdt-binding/libfdt/libfdt_env.h similarity index 100% rename from libfdt-binding/libfdt_env.h rename to libfdt-binding/libfdt/libfdt_env.h diff --git a/libfdt-binding/libfdt_internal.h b/libfdt-binding/libfdt/libfdt_internal.h similarity index 100% rename from libfdt-binding/libfdt_internal.h rename to libfdt-binding/libfdt/libfdt_internal.h diff --git a/libfdt-binding/mystr.c b/libfdt-binding/libfdt/mystr.c similarity index 100% rename from libfdt-binding/mystr.c rename to libfdt-binding/libfdt/mystr.c diff --git a/libfdt-binding/wrapper.c b/libfdt-binding/libfdt/wrapper.c similarity index 100% rename from libfdt-binding/wrapper.c rename to libfdt-binding/libfdt/wrapper.c -- Gitee