LLVM

llvm 记录

词法分析
clang -fmodules -fsyntax-only -Xclang -dump-tokens main.m

语法分析生成AST(抽象语法树)
clang -fmodules -fsyntax-only -Xclang -ast-dump main.m

无优化的代码(O0)
clang -S -fobjc-arc -emit-llvm main.m -o main00.ll

优化代码(Os)
clang -Os -S -fobjc-arc -emit-llvm main.m -o mainOs.ll // Os 最快最小

Bitcode优化
clang -emit-llvm -c main.ll -o main.bc

生成汇编
clang -S -fobjc-arc main.bc -o mainbc.s

生成目标文件(Object)此时已经被转换为机器码但是不能被执行(需要将所有资源链接起来才可以)
clang -fmodules -c main.s -o main.o

xcrun 查看目标文件符号
xcrun nm -nm main.o

生成可执行文件(链接)
clang main.o -o main
此时继续使用xcrun可以看到undefined 已经被指明了来源库

流程