本项目支持的make命令:
| 命令 | 用途 |
|---|---|
-| `make all` | 构建镜像(`-O1`) |
-| `make instable` | æ\9e\84建é\95\9cå\83\8fï¼\88`-O2`ï¼\89**â\80»** |
+| `make all` | 构建镜像(`-O2`,但禁用CSE相关的优化项 **※** ) |
+| `make instable` | æ\9e\84建é\95\9cå\83\8fï¼\88`-O2`ï¼\8cå¼\80å\90¯CSEç\9b¸å\85³ä¼\98å\8c\96ï¼\89 |
| `make all-debug` | 构建适合调试用的镜像(`-Og`) |
| `make run` | 使用QEMU运行build目录下的镜像|
| `make debug-qemu` | 构建并使用QEMU进行调试 |
| `make debug-qemu-vscode` | 用于vscode整合 |
| `make clean` | 删除build目录 |
-**※:由于在`-O2`模式下,GCC会进行大量的优化,这导致LunaixOS会出现一些非常奇怪、离谱的bug,从而影响到基本运行。调试这些bug需要大量的汗水与时间,属于日后维护的任务。所以,在目前,LunaixOS将默认最大的优化程度设置为比较安全的`-O1`。`make instable`仅用于方便日后的对该问题的进一步调试。**
+**※:由于在`-O2`模式下,GCC会进行CSE优化,这导致LunaixOS会出现一些非常奇怪、离谱的bug,从而影响到基本运行。具体原因有待调查。**
## 运行以及Issue
ARCH_OPT := -D__ARCH_IA32
-O := -O1
+O := -O2
W := -Wall -Wextra -Wno-unknown-pragmas \
-Wno-unused-function \
-Wno-unused-but-set-variable \
-Wno-unused-parameter \
-Wno-unused-variable\
-Werror=incompatible-pointer-types
-
-CFLAGS := -std=gnu99 -ffreestanding $(O) $(W) $(ARCH_OPT)
+
+OFLAGS := -fno-gcse\
+ -fno-gcse-lm\
+ -fno-cse-follow-jumps\
+ -fno-cse-skip-blocks\
+ -fno-optimize-strlen\
+ -fno-tree-builtin-call-dce
+
+CFLAGS := -std=gnu99 -ffreestanding $(O) $(OFLAGS) $(W) $(ARCH_OPT)
LDFLAGS := -ffreestanding $(O) -nostdlib -lgcc
\ No newline at end of file