@@ -251,7 +251,7 @@ class InternalDriverOpt : Group<internal_driver_Group>,
251251 Flags<[DriverOption, HelpHidden]>;
252252def driver_mode : Joined<["--"], "driver-mode=">, Group<internal_driver_Group>,
253253 Flags<[CoreOption, DriverOption, HelpHidden]>,
254- HelpText<"Set the driver mode to either 'gcc', 'g++', 'cpp', or 'cl '">;
254+ HelpText<"Set the driver mode to either 'gcc', 'g++', 'cpp', 'cl', or 'fortran '">;
255255def rsp_quoting : Joined<["--"], "rsp-quoting=">, Group<internal_driver_Group>,
256256 Flags<[CoreOption, DriverOption, HelpHidden]>,
257257 HelpText<"Set the rsp quoting to either 'posix', or 'windows'">;
@@ -2934,19 +2934,28 @@ defm devirtualize : BooleanFFlag<"devirtualize">, Group<clang_ignored_gcc_optimi
29342934defm devirtualize_speculatively : BooleanFFlag<"devirtualize-speculatively">,
29352935 Group<clang_ignored_gcc_optimization_f_Group>;
29362936
2937+ // gfortran options that we recognize in the driver and pass along when
2938+ // invoking GCC to compile Fortran code.
2939+ def flang_rt_Group : OptionGroup<"Flang runtime library Group">;
2940+ def pgi_fortran_Group : OptionGroup<"PGI Fortran compatibility Group">,
2941+ Flags<[HelpHidden]>;
2942+
29372943// Generic gfortran options.
29382944def A_DASH : Joined<["-"], "A-">, Group<gfortran_Group>;
29392945def J : JoinedOrSeparate<["-"], "J">, Flags<[RenderJoined]>, Group<gfortran_Group>;
2940- def cpp : Flag<["-"], "cpp">, Group<gfortran_Group>;
2941- def nocpp : Flag<["-"], "nocpp">, Group<gfortran_Group>;
2946+ def cpp : Flag<["-"], "cpp">, Group<gfortran_Group>,
2947+ HelpText<"Preprocess Fortran files">;
2948+ def nocpp : Flag<["-"], "nocpp">, Group<gfortran_Group>,
2949+ HelpText<"Don't preprocess Fortran files">;
29422950def static_libgfortran : Flag<["-"], "static-libgfortran">, Group<gfortran_Group>;
29432951
29442952// "f" options with values for gfortran.
29452953def fblas_matmul_limit_EQ : Joined<["-"], "fblas-matmul-limit=">, Group<gfortran_Group>;
29462954def fcheck_EQ : Joined<["-"], "fcheck=">, Group<gfortran_Group>;
29472955def fcoarray_EQ : Joined<["-"], "fcoarray=">, Group<gfortran_Group>;
29482956def fconvert_EQ : Joined<["-"], "fconvert=">, Group<gfortran_Group>;
2949- def ffixed_line_length_VALUE : Joined<["-"], "ffixed-line-length-">, Group<gfortran_Group>;
2957+ def ffixed_line_length_VALUE : Joined<["-"], "ffixed-line-length-">, Group<gfortran_Group>,
2958+ HelpText<"Set line length in fixed-form format Fortran, current supporting only 72 and 132 characters">;
29502959def ffpe_trap_EQ : Joined<["-"], "ffpe-trap=">, Group<gfortran_Group>;
29512960def ffree_line_length_VALUE : Joined<["-"], "ffree-line-length-">, Group<gfortran_Group>;
29522961def finit_character_EQ : Joined<["-"], "finit-character=">, Group<gfortran_Group>;
@@ -2959,30 +2968,45 @@ def fmax_stack_var_size_EQ : Joined<["-"], "fmax-stack-var-size=">, Group<gfortr
29592968def fmax_subrecord_length_EQ : Joined<["-"], "fmax-subrecord-length=">, Group<gfortran_Group>;
29602969def frecord_marker_EQ : Joined<["-"], "frecord-marker=">, Group<gfortran_Group>;
29612970
2971+ // Define a group for Fortran source format
2972+ def fortran_format_Group : OptionGroup<"Fortran format Group">, Group<gfortran_Group>;
29622973// "f" flags for gfortran.
29632974defm aggressive_function_elimination : BooleanFFlag<"aggressive-function-elimination">, Group<gfortran_Group>;
29642975defm align_commons : BooleanFFlag<"align-commons">, Group<gfortran_Group>;
29652976defm all_intrinsics : BooleanFFlag<"all-intrinsics">, Group<gfortran_Group>;
29662977defm automatic : BooleanFFlag<"automatic">, Group<gfortran_Group>;
2967- defm backslash : BooleanFFlag<"backslash">, Group<gfortran_Group>;
2978+ def fbackslash: Flag<["-"], "fbackslash">, Group<gfortran_Group>,
2979+ HelpText<"Treat backslash as C-style escape character">;
2980+ def fnobackslash: Flag<["-"], "fno-backslash">, Group<gfortran_Group>,
2981+ HelpText<"Treat backslash like any other character in character strings">;
29682982defm backtrace : BooleanFFlag<"backtrace">, Group<gfortran_Group>;
29692983defm bounds_check : BooleanFFlag<"bounds-check">, Group<gfortran_Group>;
29702984defm check_array_temporaries : BooleanFFlag<"check-array-temporaries">, Group<gfortran_Group>;
29712985defm cray_pointer : BooleanFFlag<"cray-pointer">, Group<gfortran_Group>;
29722986defm d_lines_as_code : BooleanFFlag<"d-lines-as-code">, Group<gfortran_Group>;
29732987defm d_lines_as_comments : BooleanFFlag<"d-lines-as-comments">, Group<gfortran_Group>;
29742988defm default_double_8 : BooleanFFlag<"default-double-8">, Group<gfortran_Group>;
2975- defm default_integer_8 : BooleanFFlag<"default-integer-8">, Group<gfortran_Group>;
2976- defm default_real_8 : BooleanFFlag<"default-real-8">, Group<gfortran_Group>;
2989+ def default_integer_8_f : Flag<["-"], "fdefault-integer-8">, Group<gfortran_Group>,
2990+ HelpText<"Treat INTEGER and LOGICAL as INTEGER*8 and LOGICAL*8">;
2991+ def default_integer_8_fno : Flag<["-"], "fno-default-integer-8">, Group<gfortran_Group>;
2992+ def default_real_8_f : Flag<["-"], "fdefault-real-8">, Group<gfortran_Group>,
2993+ HelpText<"Treat REAL as REAL*8">;
2994+ def default_real_8_fno : Flag<["-"], "fno-default-real-8">, Group<gfortran_Group>;
29772995defm dollar_ok : BooleanFFlag<"dollar-ok">, Group<gfortran_Group>;
29782996defm dump_fortran_optimized : BooleanFFlag<"dump-fortran-optimized">, Group<gfortran_Group>;
29792997defm dump_fortran_original : BooleanFFlag<"dump-fortran-original">, Group<gfortran_Group>;
29802998defm dump_parse_tree : BooleanFFlag<"dump-parse-tree">, Group<gfortran_Group>;
29812999defm external_blas : BooleanFFlag<"external-blas">, Group<gfortran_Group>;
29823000defm f2c : BooleanFFlag<"f2c">, Group<gfortran_Group>;
2983- defm fixed_form : BooleanFFlag<"fixed-form">, Group<gfortran_Group>;
2984- defm free_form : BooleanFFlag<"free-form">, Group<gfortran_Group>;
2985- defm frontend_optimize : BooleanFFlag<"frontend-optimize">, Group<gfortran_Group>;
3001+ def fixed_form_on : Flag<["-"], "ffixed-form">, Group<fortran_format_Group>,
3002+ HelpText<"Enable fixed-form format for Fortran">;
3003+ def fixed_form_off : Flag<["-"], "fno-fixed-form">, Group<fortran_format_Group>,
3004+ HelpText<"Disable fixed-form format for Fortran">;
3005+ def free_form_on : Flag<["-"], "ffree-form">, Group<fortran_format_Group>,
3006+ HelpText<"Enable free-form format for Fortran">;
3007+ def free_form_off : Flag<["-"], "fno-free-form">, Group<fortran_format_Group>,
3008+ HelpText<"Disable free-form format for Fortran">;
3009+ defm frontend_optimize : BooleanFFlag<"frontend-optimize">, Group<fortran_format_Group>;
29863010defm implicit_none : BooleanFFlag<"implicit-none">, Group<gfortran_Group>;
29873011defm init_local_zero : BooleanFFlag<"init-local-zero">, Group<gfortran_Group>;
29883012defm integer_4_integer_8 : BooleanFFlag<"integer-4-integer-8">, Group<gfortran_Group>;
@@ -3007,6 +3031,119 @@ defm stack_arrays : BooleanFFlag<"stack-arrays">, Group<gfortran_Group>;
30073031defm underscoring : BooleanFFlag<"underscoring">, Group<gfortran_Group>;
30083032defm whole_file : BooleanFFlag<"whole-file">, Group<gfortran_Group>;
30093033
3034+ // Flang-specific options
3035+ multiclass BooleanKFlag<string name> {
3036+ def _on : Flag<["-"], "K"#name>;
3037+ def _off : Flag<["-"], "Kno"#name>;
3038+ }
3039+
3040+ multiclass BooleanMFlag<string name> {
3041+ def _on : Flag<["-"], "M"#name>;
3042+ def _off : Flag<["-"], "Mno"#name>;
3043+ }
3044+
3045+ def Mfixed : Flag<["-"], "Mfixed">, Group<fortran_format_Group>,
3046+ HelpText<"Force fixed-form format Fortran">,
3047+ Flags<[HelpHidden]>;
3048+ def Mfree_on: Flag<["-"], "Mfree">, Group<fortran_format_Group>,
3049+ HelpText<"Enable free-form format for Fortran">,
3050+ Flags<[HelpHidden]>;
3051+ def Mfree_off: Flag<["-"], "Mnofree">, Group<fortran_format_Group>,
3052+ HelpText<"Disable free-form format for Fortran">,
3053+ Flags<[HelpHidden]>;
3054+ def Mfreeform_on: Flag<["-"], "Mfreeform">, Group<fortran_format_Group>,
3055+ HelpText<"Enable free-form format for Fortran">,
3056+ Flags<[HelpHidden]>;
3057+ def Mfreeform_off: Flag<["-"], "Mnofreeform">, Group<fortran_format_Group>,
3058+ HelpText<"Disable free-form format for Fortran">,
3059+ Flags<[HelpHidden]>;
3060+
3061+ def Mipa: Joined<["-"], "Mipa">, Group<pgi_fortran_Group>;
3062+ def Mstackarrays: Joined<["-"], "Mstack_arrays">, Group<pgi_fortran_Group>;
3063+ def pc: JoinedOrSeparate<["-"], "pc">, Group<pgi_fortran_Group>;
3064+ def Mfprelaxed: Joined<["-"], "Mfprelaxed">, Group<pgi_fortran_Group>;
3065+ def Mnofprelaxed: Joined<["-"], "Mnofprelaxed">, Group<pgi_fortran_Group>;
3066+ defm Mstride0: BooleanMFlag<"stride0">, Group<pgi_fortran_Group>;
3067+ defm Mrecursive: BooleanMFlag<"recursive">, Group<pgi_fortran_Group>;
3068+ defm Mreentrant: BooleanMFlag<"reentrant">, Group<pgi_fortran_Group>;
3069+ defm Mbounds: BooleanMFlag<"bounds">, Group<pgi_fortran_Group>;
3070+ def Mdaz_on: Flag<["-"], "Mdaz">, Group<pgi_fortran_Group>,
3071+ HelpText<"Treat denormalized numbers as zero">;
3072+ def Mdaz_off: Flag<["-"], "Mnodaz">, Group<pgi_fortran_Group>,
3073+ HelpText<"Disable treating denormalized numbers as zero">;
3074+ def Kieee_on : Flag<["-"], "Kieee">, Group<pgi_fortran_Group>,
3075+ HelpText<"Enable IEEE division">;
3076+ def Kieee_off : Flag<["-"], "Knoieee">, Group<pgi_fortran_Group>,
3077+ HelpText<"Disable IEEE division">;
3078+ def Mextend : Flag<["-"], "Mextend">, Group<pgi_fortran_Group>,
3079+ HelpText<"Allow lines up to 132 characters in Fortran sources">;
3080+ def Mpreprocess : Flag<["-"], "Mpreprocess">, Group<pgi_fortran_Group>,
3081+ HelpText<"Preprocess Fortran files">;
3082+ def Mstandard: Flag<["-"], "Mstandard">, Group<pgi_fortran_Group>,
3083+ HelpText<"Check Fortran standard conformance">;
3084+ def Mchkptr: Flag<["-"], "Mchkptr">, Group<pgi_fortran_Group>;
3085+ defm Minline: BooleanMFlag<"inline">, Group<pgi_fortran_Group>;
3086+ def fma: Flag<["-"], "fma">, Group<pgi_fortran_Group>,
3087+ HelpText<"Enable generation of FMA instructions">;
3088+ def nofma: Flag<["-"], "nofma">, Group<pgi_fortran_Group>,
3089+ HelpText<"Disable generation of FMA instructions">;
3090+ defm Mfma: BooleanMFlag<"fma">, Group<pgi_fortran_Group>,
3091+ HelpText<"Enable generation of FMA instructions">;
3092+ def mp: Flag<["-"], "mp">, Group<pgi_fortran_Group>,
3093+ HelpText<"Enable OpenMP">;
3094+ def nomp: Flag<["-"], "nomp">, Group<pgi_fortran_Group>,
3095+ HelpText<"Do not link with OpenMP library libomp">;
3096+ def Mflushz_on: Flag<["-"], "Mflushz">, Group<pgi_fortran_Group>,
3097+ HelpText<"Set SSE to flush-to-zero mode">;
3098+ def Mflushz_off: Flag<["-"], "Mnoflushz">, Group<pgi_fortran_Group>,
3099+ HelpText<"Disabling setting SSE to flush-to-zero mode">;
3100+ def Msave_on: Flag<["-"], "Msave">, Group<pgi_fortran_Group>,
3101+ HelpText<"Assume all Fortran variables have SAVE attribute">;
3102+ def Msave_off: Flag<["-"], "Mnosave">, Group<pgi_fortran_Group>,
3103+ HelpText<"Assume no Fortran variables have SAVE attribute">;
3104+ def Mcache_align_on: Flag<["-"], "Mcache_align">, Group<pgi_fortran_Group>,
3105+ HelpText<"Align large objects on cache-line boundaries">;
3106+ def Mcache_align_off: Flag<["-"], "Mnocache_align">, Group<pgi_fortran_Group>,
3107+ HelpText<"Disable aligning large objects on cache-line boundaries">;
3108+ def ModuleDir : Separate<["-"], "module">, Group<pgi_fortran_Group>,
3109+ HelpText<"Fortran module path">;
3110+ def Minform_EQ : Joined<["-"], "Minform=">,
3111+ HelpText<"Set error level of messages to display">;
3112+ def Mallocatable_EQ : Joined<["-"], "Mallocatable=">,
3113+ HelpText<"Select semantics for assignments to allocatables (F03 or F95)">;
3114+ def Mbyteswapio: Flag<["-"], "Mbyteswapio">, Group<pgi_fortran_Group>,
3115+ HelpText<"Swap byte-order for unformatted input/output">;
3116+ def byteswapio: Flag<["-"], "byteswapio">, Group<gfortran_Group>,
3117+ HelpText<"Swap byte-order for unformatted input/output">;
3118+ def Mbackslash: Flag<["-"], "Mbackslash">, Group<pgi_fortran_Group>,
3119+ HelpText<"Treat backslash like any other character in character strings">;
3120+ def Mnobackslash: Flag<["-"], "Mnobackslash">, Group<pgi_fortran_Group>,
3121+ HelpText<"Treat backslash as C-style escape character">;
3122+ def staticFlangLibs: Flag<["-"], "static-flang-libs">, Group<flang_rt_Group>,
3123+ HelpText<"Link using static Flang libraries">;
3124+ def noFlangLibs: Flag<["-"], "no-flang-libs">, Group<flang_rt_Group>,
3125+ HelpText<"Do not link against Flang libraries">;
3126+ def r8: Flag<["-"], "r8">, Group<pgi_fortran_Group>,
3127+ HelpText<"Treat REAL as REAL*8">;
3128+ def i8: Flag<["-"], "i8">, Group<pgi_fortran_Group>,
3129+ HelpText<"Treat INTEGER and LOGICAL as INTEGER*8 and LOGICAL*8">;
3130+ def no_fortran_main: Flag<["-"], "fno-fortran-main">, Group<gfortran_Group>,
3131+ HelpText<"Don't link in Fortran main">;
3132+ def Mnomain: Flag<["-"], "Mnomain">, Group<pgi_fortran_Group>,
3133+ HelpText<"Don't link in Fortran main">;
3134+
3135+ // Flang internal debug options
3136+ def Mx_EQ : Joined<["-"], "Mx,">, Group<pgi_fortran_Group>;
3137+ def My_EQ : Joined<["-"], "My,">, Group<pgi_fortran_Group>;
3138+ def Hx_EQ : Joined<["-"], "Hx,">, Group<pgi_fortran_Group>;
3139+ def Hy_EQ : Joined<["-"], "Hy,">, Group<pgi_fortran_Group>;
3140+ def Wm_EQ : Joined<["-"], "Wm,">, Group<pgi_fortran_Group>;
3141+
3142+ def Mq_EQ : Joined<["-"], "Mq,">, Group<pgi_fortran_Group>;
3143+ def Hq_EQ : Joined<["-"], "Hq,">, Group<pgi_fortran_Group>;
3144+ def Mqq_EQ : Joined<["-"], "Mqq,">, Group<pgi_fortran_Group>;
3145+ def Hqq_EQ : Joined<["-"], "Hqq,">, Group<pgi_fortran_Group>;
3146+ def Wh_EQ : Joined<["-"], "Wh,">, Group<pgi_fortran_Group>;
30103147
30113148include "CC1Options.td"
30123149
0 commit comments