TCC 瘦身計畫 -- 針對 CPU0

開放電腦

簡介

函式庫

處理器

主機板

輸出入

虛擬機

組譯器

連結器

編譯器

嵌入式系統

作業系統

原始碼下載

文件下載

設計想法

訊息

相關網站

參考文獻

最新修改

簡體版

English

TinyCC 程式檔案列表

檔案 必要性 說明
tcc.c O 編譯器主程式 (參數處理)
tcc.h O tcc.c 的定義檔
tccpp.c O* 巨集處理器 (PreProcessor) (2935 行)
tccgen.c O* 程式碼產生與 Parser 剖析函數 (5121 行)
libtcc.h O* 雜湊表、符號表、字串函數,還包含 tcc_compile() 等編譯器函數,Parser 等 (2260 行)
tcctok.h O Tokenizer (Scanner)
elf.h O ELF 定義檔 (從 ELF 官網下載的,非 TinyCC 作者寫的
tccelf.c O ELF 目的碼產生
il-gen.c X IL ?? (ARM?) 的程式碼產生
tccasm.c X 組譯器 (Assembler)
tcccoff.c X COFF 目的碼產生
tccpe.c X PE 目的碼產生
arm-gen.c X ARM 目的碼產生
c67-gen.c X C67 目的碼產生
x86_64-gen.c X x86 64 bit 程式碼產生
i386-gen.c X i386 程式碼產生
i386-asm.c X i386 組譯器
i386-asm.h X i386 組譯器定義檔
il-opcodes.h X IL ?? 指令碼定義檔
stab.h X Indicate the GNU stab.h is in use.

必要性指的是對開放電腦的必要性。

功能 檔案 說明
編譯器 (Compiler) tcc.c,
剖析器 (Parser) tccpp.c
組譯器 (Assembler) tccasm.c , i386-asm.c
中間碼產生 (P-Code) tccgen.c, il-gen.c
目的檔格式 (ObjCode) tccelf.c, tcccoff.c, tccpe.c
程式碼產生 (Code-Gen) tccgen.c, il-gen.c, arm-gen.c, c67-gen.c, x86_64-gen.c, i386-gen.c

在 tcc 的 Makefile 當中就有下列描述,指示建置時哪些檔案是與平台有關的。

PROGS=tcc$(EXESUF)

I386_CROSS = i386-tcc$(EXESUF)
WIN32_CROSS = i386-win32-tcc$(EXESUF)
X64_CROSS = x86_64-tcc$(EXESUF)
ARM_CROSS = arm-tcc-fpa$(EXESUF) arm-tcc-fpa-ld$(EXESUF) \
    arm-tcc-vfp$(EXESUF) arm-tcc-vfp-eabi$(EXESUF)
C67_CROSS = c67-tcc$(EXESUF)

CORE_FILES = tcc.c libtcc.c tccpp.c tccgen.c tccelf.c tccasm.c \
    tcc.h config.h libtcc.h tcctok.h
I386_FILES = $(CORE_FILES) i386-gen.c i386-asm.c i386-asm.h
WIN32_FILES = $(CORE_FILES) i386-gen.c i386-asm.c i386-asm.h tccpe.c
X86_64_FILES = $(CORE_FILES) x86_64-gen.c
ARM_FILES = $(CORE_FILES) arm-gen.c
C67_FILES = $(CORE_FILES) c67-gen.c tcccoff.c

第一次瘦身

因此,在 WIN32 平台下,arm-gen.c, c67-gen.c, x86_64-gen.c, tcccoff.c 可以移除,移除後在 MinGW 中的測試結果如下所示。

ccc@R424-10 ~/cc0
$ make
gcc -o tcc.exe tcc.c -DTCC_TARGET_PE -O2 -g -Wall -fno-strict-aliasing -mpreferr
ed-stack-boundary=2 -march=i386 -falign-functions=0 -Wno-pointer-sign -Wno-sign-
compare -D_FORTIFY_SOURCE=0
gcc -o tiny_impdef.exe win32/tools/tiny_impdef.c -O2 -g -Wall -fno-strict-aliasi
ng -mpreferred-stack-boundary=2 -march=i386 -falign-functions=0 -Wno-pointer-sig
n -Wno-sign-compare -D_FORTIFY_SOURCE=0
gcc -o tiny_libmaker.exe win32/tools/tiny_libmaker.c -O2 -g -Wall -fno-strict-al
iasing -mpreferred-stack-boundary=2 -march=i386 -falign-functions=0 -Wno-pointer
-sign -Wno-sign-compare -D_FORTIFY_SOURCE=0
./tcc.exe -Bwin32 -DTCC_TARGET_PE -o libtcc1.o -c lib/libtcc1.c -O2 -Wall
./tcc.exe -Bwin32 -DTCC_TARGET_PE -o crt1.o -c win32/lib/crt1.c -O2 -Wall
./tcc.exe -Bwin32 -DTCC_TARGET_PE -o wincrt1.o -c win32/lib/wincrt1.c -O2 -Wall
win32/lib/wincrt1.c:35: warning: implicit declaration of function 'exit'
./tcc.exe -Bwin32 -DTCC_TARGET_PE -o dllcrt1.o -c win32/lib/dllcrt1.c -O2 -Wall
./tcc.exe -Bwin32 -DTCC_TARGET_PE -o dllmain.o -c win32/lib/dllmain.c -O2 -Wall
./tcc.exe -Bwin32 -DTCC_TARGET_PE -o chkstk.o -c win32/lib/chkstk.S
./tcc.exe -Bwin32 -DTCC_TARGET_PE -o alloca86.o -c lib/alloca86.S
./tcc.exe -Bwin32 -DTCC_TARGET_PE -o alloca86-bt.o -c lib/alloca86-bt.S
ar rcs libtcc1.a libtcc1.o crt1.o wincrt1.o dllcrt1.o dllmain.o chkstk.o alloca8
6.o alloca86-bt.o
gcc -o libtcc.o -c libtcc.c -DTCC_TARGET_PE -O2 -g -Wall -fno-strict-aliasing -m
preferred-stack-boundary=2 -march=i386 -falign-functions=0 -Wno-pointer-sign -Wn
o-sign-compare -D_FORTIFY_SOURCE=0
ar rcs libtcc.a libtcc.o
gcc -o libtcc_test.exe tests/libtcc_test.c libtcc.a -I. -O2 -g -Wall -fno-strict
-aliasing -mpreferred-stack-boundary=2 -march=i386 -falign-functions=0 -Wno-poin
ter-sign -Wno-sign-compare -D_FORTIFY_SOURCE=0

第二次瘦身

猜測,如果在 Linux 底下,應該可以將 tcccoff.c 與 tcccpe.c 拿掉,因此我們將到 Ubuntu 底下開發測試。

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License