首先,大概总结一下.opt中常用的定义词:
//
// (某处理类/某特征类/某打印类)定义词==【Warning,Optimization, Driver,Common,Target, Joined,JoinedOrMissing,Separate,Undocumented】
//
// 某打印类gcc选项gcc_flags==【CL_PARAMS,CL_WARNING,CL_OPTIMIZATION, CL_COMMON,CL_TARGET,CL_C, CL_JOINED,CL_SEPARATE,CL_UNDOCUMENTED】<-- print_specific_help()
// 某处理类gcc选项gcc_flags==【CL_DRIVER,CL_COMMON,CL_TARGET,CL_C等】
// 某特征类gcc选项gcc_flags==【CL_JOINED,CL_SEPARATE等】
//
// CL_WARNING告警类gcc选项
// CL_OPTIMIZATION优化类gcc选项
//
// CL_DRIVER驱动器类gcc选项 ---- 标记 gcc驱动器处理的gcc选项
// CL_TARGET目标机类gcc选项 ---- 标记 目标机处理的gcc选项
// CL_COMMON通用类gcc选项 ---- 标记 通用处理的gcc选项
//
// CL_JOINED连体式gcc选项参数, 如 gcc选项"-DXYG=1"
// CL_SEPARATE隔开式gcc选项参数, 如 gcc选项"-D XYG=1"
//
// CL_UNDOCUMENTED未文档类gcc选项: print_specific_help()-->print_filtered_help()
//
//
// (选项值和类型)定义词==【Mask(置掩码)或InverseMask(清掩码), Enum(选项参数枚举型),Var(选项值名,正值),Init(选项初值), 通用延缓选项指针Defer】
//
// 定义词==【MissingArgError(丢参数的错误串%qs) Negative(之后互斥选项) Args(隔开式选项参数个数)】
//
// 定义词==【Alias(其正名选项名,其正名选项参数串,否定串)】,如【Alias(fstack-check=, specific, no) Alias(Wformat=, 1, 0)】
//
// (选项特征)定义词==【SeparateAlias,NegativeAlias, 拒gcc驱动器处理RejectDriver, 使能时可打印Report】
//
// (选项值特征)定义词==【驱动器类gcc选项时无参数串NoDriverArg,拒假值RejectNegative,可缺省JoinedOrMissing, 整值UInteger,宽整值Host_Wide_Int,变小写字母ToLower】
//
// (某语言告警子类gcc选项的)定义词==【LangEnabledBy(某语言类,总告警类选项,正值,假值)】
//
// (某通用告警子类gcc选项的)定义词==【EnabledBy(总告警类选项)】
//
gcc编译器选项的实现(1):在.opt中定义gcc选项
//
// mips: gcc选项定义【语言选集/lang.opt c.opt common.opt g.opt mips-tables.opt mips.opt gnu-user.opt linux.opt linux-android.opt】
// i86: gcc选项定义【语言选集/lang.opt c.opt common.opt fused-madd.opt i386.opt gnu-user.opt linux.opt linux-android.opt】
// arm: gcc选项定义【语言选集/lang.opt c.opt common.opt arm-tables.opt arm.opt】
//
请参考 c.opt中的一些定义
;;
;; 定义 某语言类Language
;;
Language
C
Language
ObjC
Language
C++
;;
;; 定义 选项名 ---- gcc选项"-E" 请见 c_common_post_options()
;;
E
C ObjC C++ ObjC++ Undocumented Var(flag_preprocess_only)
;;
;; 定义 选项名 ---- 关注: 标记【驱动器类gcc选项时无参数串NoDriverArg】
;;
MD
C ObjC C++ ObjC++ NoDriverArg Separate MissingArgError(missing filename after %qs)
;;
;; 定义 选项名 ---- 关注: 标记【某语言告警子类gcc选项C/Warning LangEnabledBy(某语言类,总告警类选项,正值,假值)】, 请见 C_handle_option_auto():OPT_Wall:warn_main
;;
Wmain
C ObjC C++ ObjC++ Var(warn_main) Init(-1) Warning LangEnabledBy(C ObjC,Wall, 2, 0)
Warn about suspicious declarations of \"main\"
请参考 common.opt中的一些定义——隔开式、连体式、别名选项、选项值变量
;;
;; 定义 目标机选项标志target_flags==TARGET_DEFAULT_TARGET_FLAGS
;;
Variable
int target_flags
;;
;; 定义 选项变量和类型Variable
;;
Variable
bool warn_larger_than
;;
;; 定义 选项变量和类型Variable ---- 关注: 宽整值Host_Wide_Int 来自【选项宽整型HOST_WIDE_INT】
;;
Variable
HOST_WIDE_INT larger_than_size
;;
;; 别名采用【隔开式gcc选项参数Separate】
;;
;; 定义 选项名 ---- 关注: 标记【Alias(其正名选项名,其正名选项参数串,否定串) MissingArgError(丢参数的错误串%qs)】
;;
-output
Common Driver Separate Alias(o) MissingArgError(missing filename after %qs)
;;
;; 别名采用【连体式gcc选项参数Joined】
;;
-output=
Common Driver Joined Alias(o) MissingArgError(missing filename after %qs)
;;
;; 正常采用【隔开式gcc选项参数Separate 连体式gcc选项参数Joined】
;;
;; 定义 选项名 ---- 关注: 标记【驱动器类gcc选项Driver,通用类gcc选项Common】,对应【Alias(其正名选项名,其正名选项参数串,否定串)】, 请见 driver_handle_option(),common_handle_option():OPT_o
;;
o
Common Driver Joined Separate Var(asm_file_name) MissingArgError(missing filename after %qs)
-o <file> Place output into <file>
;;
;; 别名采用【隔开式gcc选项参数Separate】
;;
-sysroot
Driver Separate Alias(-sysroot=)
;;
;; 正式采用【连体式gcc选项参数或可缺省JoinedOrMissing】
;;
;; 定义 选项名 ---- 关注: 标记【驱动器类gcc选项Driver】, 且没有【Var(选项值名,正值)】, 请见 driver_handle_option():OPT__sysroot_
;;
-sysroot=
Driver JoinedOrMissing
请参考 linux.opt中的一些定义——互斥选项
;;
;; 定义 选项名 ---- 关注: 标记【Var(选项值名,正值) Init(选项初值) Negative(之后互斥选项)】, 直接设置 handle_option()-->set_option()
;;
mbionic
Target Report RejectNegative Var(linux_libc,LIBC_BIONIC) Init(DEFAULT_LIBC) Negative(mglibc)
Use Bionic C library
;;
mglibc
Target Report RejectNegative Var(linux_libc,LIBC_GLIBC) Negative(muclibc)
Use GNU C library
;;
muclibc
Target Report RejectNegative Var(linux_libc,LIBC_UCLIBC) Negative(mbionic)
Use uClibc C library
请参考 i386.opt中的一些定义——互斥选项
;;
;; 定义 目标机特定的gcc选项头文件HeaderInclude
;;
HeaderInclude
config/i386/i386-opts.h
;;
;; 定义 选项变量和类型Variable ---- 关注: 宽整值Host_Wide_Int 来自【选项宽整型HOST_WIDE_INT】, 以及 gcc选项初始值global_options_init
;;
; Bit flags that specify the ISA we are compiling for.
Variable
HOST_WIDE_INT ix86_isa_flags = TARGET_64BIT_DEFAULT | TARGET_SUBTARGET_ISA_DEFAULT
;;
;; 定义 选项名 ---- 关注: 指定变量的选项标志ix86_isa_flags==OPTION_MASK_ISA_64BIT 来自【InverseMask(清掩码)】
;;
m32
Target RejectNegative Negative(m64) Report InverseMask(ISA_64BIT) Var(ix86_isa_flags) Save
Generate 32bit i386 code
;;
;; 定义 选项名 ---- 关注: 指定变量的选项标志ix86_isa_flags==OPTION_MASK_ABI_64 来自【Mask(置掩码)】
;;
m64
Target RejectNegative Negative(mx32) Report Mask(ABI_64) Var(ix86_isa_flags) Save
Generate 64bit x86-64 code