取消了 i8* == i8* 实际使用 strcmp 的规则

This commit is contained in:
2026-07-30 21:56:41 +08:00
parent cfc30d735c
commit 377b60fd67
54 changed files with 129 additions and 3730 deletions

View File

@@ -47,7 +47,7 @@ Viper 项目使用 `project.json` 配置文件管理编译和链接参数。
| `name` | string | 项目名称 |
| `version` | string | 项目版本 |
| `source_dir` | string | 源代码目录(相对于 project.json 所在目录) |
| `temp_dir` | string | 临时文件目录(存放 .pyi 存根等) |
| `temp_dir` | string | 临时文件目录(存放 .vpi 存根等) |
| `output_dir` | string | 输出文件目录 |
### 编译器配置
@@ -122,12 +122,12 @@ VKernel/
├── project.json # 项目配置
├── linker.ld # 链接脚本
├── Kernel/ # 源代码目录
│ ├── main.py # 内核入口
│ ├── bootinfo.py
│ ├── main.vp # 内核入口
│ ├── bootinfo.vp
│ ├── intr/
│ │ ├── gdt.py
│ │ ├── idt.py
│ │ └── syscall.py
│ │ ├── gdt.vp
│ │ ├── idt.vp
│ │ └── syscall.vp
│ ├── drivers/
│ │ ├── serial/
│ │ ├── video/
@@ -135,7 +135,7 @@ VKernel/
│ │ └── ...
│ └── ...
├── temp/ # 临时文件(自动生成)
│ ├── <SHA1>.pyi # 签名存根(阶段一生成)
│ ├── <SHA1>.vpi # 签名存根(阶段一生成)
│ ├── <SHA1>.stub.ll # LLVM IR 声明(阶段一生成)
│ └── _sha1_map.txt # SHA1→源文件路径映射
└── output/ # 输出文件(自动生成)
@@ -150,7 +150,7 @@ VKernel/
HelloWorld/
├── project.json # 项目配置
├── linker.ld # 链接脚本
├── main.py # 应用入口
├── main.vp # 应用入口
├── temp/ # 临时文件
└── output/ # 输出文件
└── helloworld.elf # ELF 可执行文件
@@ -162,7 +162,7 @@ HelloWorld/
SerialLogger/
├── project.json # 项目配置
├── linker.ld # 链接脚本
├── serial_logger.py # 库源码
├── serial_logger.vp # 库源码
├── temp/ # 临时文件
└── output/ # 输出文件
```
@@ -233,14 +233,14 @@ TransPyC 支持基于 SHA1 的增量编译,与两阶段编译模型紧密耦
### 阶段一增量
- 每个源文件按内容计算 SHA1 哈希16位
- 如果 `<SHA1>.pyi``<SHA1>.stub.ll` 已存在,则跳过生成(缓存命中)
- 如果 `<SHA1>.vpi``<SHA1>.stub.ll` 已存在,则跳过生成(缓存命中)
- 只有源文件内容变化导致 SHA1 变化时才重新生成声明接口
- `temp/_sha1_map.txt` 记录 SHA1 → 源文件路径的映射,格式为 `<sha1>:<relative_path>`
### 阶段二增量
- 阶段二加载 `temp/_sha1_map.txt` 重建 SHA1 映射
- 过滤掉不在当前 SHA1 映射中的旧 `.pyi``.stub.ll` 文件
- 过滤掉不在当前 SHA1 映射中的旧 `.vpi``.stub.ll` 文件
- 共享符号表一次性构建,避免每个文件重复加载
### SHA1 命名空间与增量编译的协同