Skip to content

Commit 5c3276e

Browse files
committed
fix: enable tg-chX crates to pass dry-run publish checks
1 parent cafcab1 commit 5c3276e

34 files changed

Lines changed: 758 additions & 216 deletions

ch1/Cargo.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,11 @@ nobios = [
1818
"tg-sbi/nobios",
1919
]
2020

21+
[profile.dev]
22+
panic = "abort"
23+
24+
[profile.release]
25+
panic = "abort"
26+
2127
[dependencies]
2228
tg-sbi = { path = "../tg-sbi", version = "0.1.0-preview.1" }

ch1/build.rs

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
11
fn main() {
22
use std::{env, fs, path::PathBuf};
33

4-
let ld = &PathBuf::from(env::var_os("OUT_DIR").unwrap()).join("linker.ld");
5-
fs::write(
6-
ld,
7-
if env::var("CARGO_FEATURE_NOBIOS").is_ok() {
8-
NOBIOS_LINKER
9-
} else {
10-
LINKER
11-
},
12-
)
13-
.unwrap();
4+
let target_arch = env::var("CARGO_CFG_TARGET_ARCH").unwrap_or_default();
5+
6+
// 只在 RISC-V64 架构上使用链接脚本
7+
if target_arch == "riscv64" {
8+
let ld = &PathBuf::from(env::var_os("OUT_DIR").unwrap()).join("linker.ld");
9+
fs::write(
10+
ld,
11+
if env::var("CARGO_FEATURE_NOBIOS").is_ok() {
12+
NOBIOS_LINKER
13+
} else {
14+
LINKER
15+
},
16+
)
17+
.unwrap();
18+
println!("cargo:rustc-link-arg=-T{}", ld.display());
19+
}
20+
1421
println!("cargo:rerun-if-changed=build.rs");
1522
println!("cargo:rerun-if-env-changed=CARGO_FEATURE_NOBIOS");
16-
println!("cargo:rustc-link-arg=-T{}", ld.display());
1723
}
1824

1925
const LINKER: &[u8] = b"

ch1/src/main.rs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1+
//! 第一章:应用程序与基本执行环境
2+
//!
3+
//! 本章实现了一个最简单的 RISC-V S 态裸机程序,展示操作系统的最小执行环境。
14
#![no_std]
25
#![no_main]
3-
#![deny(warnings)]
6+
#![cfg_attr(target_arch = "riscv64", deny(warnings, missing_docs))]
7+
#![cfg_attr(not(target_arch = "riscv64"), allow(dead_code))]
48

59
use tg_sbi;
610

711
/// Supervisor 汇编入口。
812
///
913
/// 设置栈并跳转到 Rust。
14+
#[cfg(target_arch = "riscv64")]
1015
#[unsafe(naked)]
1116
#[no_mangle]
1217
#[link_section = ".text.entry"]
@@ -36,7 +41,27 @@ extern "C" fn rust_main() -> ! {
3641
}
3742

3843
/// Rust 异常处理函数,以异常方式关机。
44+
#[cfg(target_arch = "riscv64")]
3945
#[panic_handler]
4046
fn panic(_: &core::panic::PanicInfo) -> ! {
4147
tg_sbi::shutdown(true)
4248
}
49+
50+
/// 非 RISC-V64 架构的占位实现
51+
#[cfg(not(target_arch = "riscv64"))]
52+
mod stub {
53+
#[panic_handler]
54+
fn panic(_: &core::panic::PanicInfo) -> ! {
55+
loop {}
56+
}
57+
58+
#[no_mangle]
59+
pub extern "C" fn main() -> i32 {
60+
0
61+
}
62+
63+
#[no_mangle]
64+
pub extern "C" fn __libc_start_main() -> i32 {
65+
0
66+
}
67+
}

ch2/Cargo.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ nobios = [
1818
"tg-sbi/nobios",
1919
]
2020

21+
[profile.dev]
22+
panic = "abort"
23+
24+
[profile.release]
25+
panic = "abort"
26+
2127
[dependencies]
2228
riscv = "0.10.1"
2329

ch2/build.rs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,20 @@ fn main() {
66
println!("cargo:rerun-if-env-changed=APP_ASM");
77
println!("cargo:rerun-if-env-changed=CARGO_FEATURE_NOBIOS");
88

9-
let nobios = env::var("CARGO_FEATURE_NOBIOS").is_ok();
9+
let target_arch = env::var("CARGO_CFG_TARGET_ARCH").unwrap_or_default();
1010

11-
let linker_script = if nobios {
12-
tg_linker::NOBIOS_SCRIPT
13-
} else {
14-
tg_linker::SCRIPT
15-
};
11+
// 只在 RISC-V64 架构上使用链接脚本
12+
if target_arch == "riscv64" {
13+
let nobios = env::var("CARGO_FEATURE_NOBIOS").is_ok();
1614

17-
let ld = &PathBuf::from(env::var_os("OUT_DIR").unwrap()).join("linker.ld");
18-
fs::write(ld, linker_script).unwrap();
19-
println!("cargo:rustc-link-arg=-T{}", ld.display());
15+
let linker_script = if nobios {
16+
tg_linker::NOBIOS_SCRIPT
17+
} else {
18+
tg_linker::SCRIPT
19+
};
20+
21+
let ld = &PathBuf::from(env::var_os("OUT_DIR").unwrap()).join("linker.ld");
22+
fs::write(ld, linker_script).unwrap();
23+
println!("cargo:rustc-link-arg=-T{}", ld.display());
24+
}
2025
}

ch2/src/main.rs

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1+
//! 第二章:批处理系统
2+
//!
3+
//! 本章实现了一个批处理操作系统,支持特权级切换和 Trap 处理,能够依次加载并运行多个用户程序。
14
#![no_std]
25
#![no_main]
3-
#![deny(warnings)]
6+
#![cfg_attr(target_arch = "riscv64", deny(warnings, missing_docs))]
7+
#![cfg_attr(not(target_arch = "riscv64"), allow(dead_code))]
48

59
#[macro_use]
610
extern crate tg_console;
@@ -13,8 +17,10 @@ use tg_sbi;
1317
use tg_syscall::{Caller, SyscallId};
1418

1519
// 用户程序内联进来。
20+
#[cfg(target_arch = "riscv64")]
1621
core::arch::global_asm!(include_str!(env!("APP_ASM")));
1722
// 定义内核入口。
23+
#[cfg(target_arch = "riscv64")]
1824
tg_linker::boot0!(rust_main; stack = 8 * 4096);
1925

2026
extern "C" fn rust_main() -> ! {
@@ -65,6 +71,7 @@ extern "C" fn rust_main() -> ! {
6571
}
6672

6773
/// Rust 异常处理函数,以异常方式关机。
74+
#[cfg(target_arch = "riscv64")]
6875
#[panic_handler]
6976
fn panic(info: &core::panic::PanicInfo) -> ! {
7077
println!("{info}");
@@ -138,3 +145,22 @@ mod impls {
138145
}
139146
}
140147
}
148+
149+
/// 非 RISC-V64 架构的占位实现
150+
#[cfg(not(target_arch = "riscv64"))]
151+
mod stub {
152+
#[panic_handler]
153+
fn panic(_: &core::panic::PanicInfo) -> ! {
154+
loop {}
155+
}
156+
157+
#[no_mangle]
158+
pub extern "C" fn main() -> i32 {
159+
0
160+
}
161+
162+
#[no_mangle]
163+
pub extern "C" fn __libc_start_main() -> i32 {
164+
0
165+
}
166+
}

ch3/Cargo.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ nobios = [
1919
"tg-sbi/nobios",
2020
]
2121

22+
[profile.dev]
23+
panic = "abort"
24+
25+
[profile.release]
26+
panic = "abort"
27+
2228
[dependencies]
2329
riscv = "0.10.1"
2430

ch3/build.rs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,20 @@ fn main() {
66
println!("cargo:rerun-if-env-changed=APP_ASM");
77
println!("cargo:rerun-if-env-changed=CARGO_FEATURE_NOBIOS");
88

9-
let nobios = env::var("CARGO_FEATURE_NOBIOS").is_ok();
9+
let target_arch = env::var("CARGO_CFG_TARGET_ARCH").unwrap_or_default();
1010

11-
let linker_script = if nobios {
12-
tg_linker::NOBIOS_SCRIPT
13-
} else {
14-
tg_linker::SCRIPT
15-
};
11+
// 只在 RISC-V64 架构上使用链接脚本
12+
if target_arch == "riscv64" {
13+
let nobios = env::var("CARGO_FEATURE_NOBIOS").is_ok();
1614

17-
let ld = &PathBuf::from(env::var_os("OUT_DIR").unwrap()).join("linker.ld");
18-
fs::write(ld, linker_script).unwrap();
19-
println!("cargo:rustc-link-arg=-T{}", ld.display());
15+
let linker_script = if nobios {
16+
tg_linker::NOBIOS_SCRIPT
17+
} else {
18+
tg_linker::SCRIPT
19+
};
20+
21+
let ld = &PathBuf::from(env::var_os("OUT_DIR").unwrap()).join("linker.ld");
22+
fs::write(ld, linker_script).unwrap();
23+
println!("cargo:rustc-link-arg=-T{}", ld.display());
24+
}
2025
}

ch3/src/main.rs

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1+
//! 第三章:多道程序与分时多任务
2+
//!
3+
//! 本章实现了一个多道程序操作系统,支持多道程序并发执行,能够依次加载并运行多个用户程序。
14
#![no_std]
25
#![no_main]
3-
#![deny(warnings)]
6+
#![cfg_attr(target_arch = "riscv64", deny(warnings, missing_docs))]
7+
#![cfg_attr(not(target_arch = "riscv64"), allow(dead_code))]
48

59
mod task;
610

@@ -14,10 +18,12 @@ use tg_console::log;
1418
use tg_sbi;
1519

1620
// 应用程序内联进来。
21+
#[cfg(target_arch = "riscv64")]
1722
core::arch::global_asm!(include_str!(env!("APP_ASM")));
1823
// 应用程序数量。
1924
const APP_CAPACITY: usize = 32;
2025
// 定义内核入口。
26+
#[cfg(target_arch = "riscv64")]
2127
tg_linker::boot0!(rust_main; stack = (APP_CAPACITY + 2) * 8192);
2228

2329
extern "C" fn rust_main() -> ! {
@@ -104,6 +110,7 @@ extern "C" fn rust_main() -> ! {
104110
}
105111

106112
/// Rust 异常处理函数,以异常方式关机。
113+
#[cfg(target_arch = "riscv64")]
107114
#[panic_handler]
108115
fn panic(info: &core::panic::PanicInfo) -> ! {
109116
println!("{info}");
@@ -197,3 +204,22 @@ mod impls {
197204
}
198205
}
199206
}
207+
208+
/// 非 RISC-V64 架构的占位实现
209+
#[cfg(not(target_arch = "riscv64"))]
210+
mod stub {
211+
#[panic_handler]
212+
fn panic(_: &core::panic::PanicInfo) -> ! {
213+
loop {}
214+
}
215+
216+
#[no_mangle]
217+
pub extern "C" fn main() -> i32 {
218+
0
219+
}
220+
221+
#[no_mangle]
222+
pub extern "C" fn __libc_start_main() -> i32 {
223+
0
224+
}
225+
}

ch4/Cargo.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ nobios = [
1818
"tg-sbi/nobios",
1919
]
2020

21+
[profile.dev]
22+
panic = "abort"
23+
24+
[profile.release]
25+
panic = "abort"
26+
2127
[dependencies]
2228
xmas-elf = "0.8.0"
2329
riscv = "0.10.1"

0 commit comments

Comments
 (0)