@@ -243,7 +243,7 @@ class InternalDriverOpt : Group<internal_driver_Group>,
243243 Flags<[DriverOption, HelpHidden]>;
244244def driver_mode : Joined<["--"], "driver-mode=">, Group<internal_driver_Group>,
245245 Flags<[CoreOption, DriverOption, HelpHidden]>,
246- HelpText<"Set the driver mode to either 'gcc', 'g++', 'cpp', or 'cl '">;
246+ HelpText<"Set the driver mode to either 'gcc', 'g++', 'cpp', 'cl', or 'fortran '">;
247247def rsp_quoting : Joined<["--"], "rsp-quoting=">, Group<internal_driver_Group>,
248248 Flags<[CoreOption, DriverOption, HelpHidden]>,
249249 HelpText<"Set the rsp quoting to either 'posix', or 'windows'">;
@@ -2550,19 +2550,28 @@ defm devirtualize : BooleanFFlag<"devirtualize">, Group<clang_ignored_gcc_optimi
25502550defm devirtualize_speculatively : BooleanFFlag<"devirtualize-speculatively">,
25512551 Group<clang_ignored_gcc_optimization_f_Group>;
25522552
2553+ // gfortran options that we recognize in the driver and pass along when
2554+ // invoking GCC to compile Fortran code.
2555+ def flang_rt_Group : OptionGroup<"Flang runtime library Group">;
2556+ def pgi_fortran_Group : OptionGroup<"PGI Fortran compatibility Group">,
2557+ Flags<[HelpHidden]>;
2558+
25532559// Generic gfortran options.
25542560def A_DASH : Joined<["-"], "A-">, Group<gfortran_Group>;
25552561def J : JoinedOrSeparate<["-"], "J">, Flags<[RenderJoined]>, Group<gfortran_Group>;
2556- def cpp : Flag<["-"], "cpp">, Group<gfortran_Group>;
2557- def nocpp : Flag<["-"], "nocpp">, Group<gfortran_Group>;
2562+ def cpp : Flag<["-"], "cpp">, Group<gfortran_Group>,
2563+ HelpText<"Preprocess Fortran files">;
2564+ def nocpp : Flag<["-"], "nocpp">, Group<gfortran_Group>,
2565+ HelpText<"Don't preprocess Fortran files">;
25582566def static_libgfortran : Flag<["-"], "static-libgfortran">, Group<gfortran_Group>;
25592567
25602568// "f" options with values for gfortran.
25612569def fblas_matmul_limit_EQ : Joined<["-"], "fblas-matmul-limit=">, Group<gfortran_Group>;
25622570def fcheck_EQ : Joined<["-"], "fcheck=">, Group<gfortran_Group>;
25632571def fcoarray_EQ : Joined<["-"], "fcoarray=">, Group<gfortran_Group>;
25642572def fconvert_EQ : Joined<["-"], "fconvert=">, Group<gfortran_Group>;
2565- def ffixed_line_length_VALUE : Joined<["-"], "ffixed-line-length-">, Group<gfortran_Group>;
2573+ def ffixed_line_length_VALUE : Joined<["-"], "ffixed-line-length-">, Group<gfortran_Group>,
2574+ HelpText<"Set line length in fixed-form format Fortran, current supporting only 72 and 132 characters">;
25662575def ffpe_trap_EQ : Joined<["-"], "ffpe-trap=">, Group<gfortran_Group>;
25672576def ffree_line_length_VALUE : Joined<["-"], "ffree-line-length-">, Group<gfortran_Group>;
25682577def finit_character_EQ : Joined<["-"], "finit-character=">, Group<gfortran_Group>;
@@ -2575,30 +2584,45 @@ def fmax_stack_var_size_EQ : Joined<["-"], "fmax-stack-var-size=">, Group<gfortr
25752584def fmax_subrecord_length_EQ : Joined<["-"], "fmax-subrecord-length=">, Group<gfortran_Group>;
25762585def frecord_marker_EQ : Joined<["-"], "frecord-marker=">, Group<gfortran_Group>;
25772586
2587+ // Define a group for Fortran source format
2588+ def fortran_format_Group : OptionGroup<"Fortran format Group">, Group<gfortran_Group>;
25782589// "f" flags for gfortran.
25792590defm aggressive_function_elimination : BooleanFFlag<"aggressive-function-elimination">, Group<gfortran_Group>;
25802591defm align_commons : BooleanFFlag<"align-commons">, Group<gfortran_Group>;
25812592defm all_intrinsics : BooleanFFlag<"all-intrinsics">, Group<gfortran_Group>;
25822593defm automatic : BooleanFFlag<"automatic">, Group<gfortran_Group>;
2583- defm backslash : BooleanFFlag<"backslash">, Group<gfortran_Group>;
2594+ def fbackslash: Flag<["-"], "fbackslash">, Group<gfortran_Group>,
2595+ HelpText<"Treat backslash as C-style escape character">;
2596+ def fnobackslash: Flag<["-"], "fno-backslash">, Group<gfortran_Group>,
2597+ HelpText<"Treat backslash like any other character in character strings">;
25842598defm backtrace : BooleanFFlag<"backtrace">, Group<gfortran_Group>;
25852599defm bounds_check : BooleanFFlag<"bounds-check">, Group<gfortran_Group>;
25862600defm check_array_temporaries : BooleanFFlag<"check-array-temporaries">, Group<gfortran_Group>;
25872601defm cray_pointer : BooleanFFlag<"cray-pointer">, Group<gfortran_Group>;
25882602defm d_lines_as_code : BooleanFFlag<"d-lines-as-code">, Group<gfortran_Group>;
25892603defm d_lines_as_comments : BooleanFFlag<"d-lines-as-comments">, Group<gfortran_Group>;
25902604defm default_double_8 : BooleanFFlag<"default-double-8">, Group<gfortran_Group>;
2591- defm default_integer_8 : BooleanFFlag<"default-integer-8">, Group<gfortran_Group>;
2592- defm default_real_8 : BooleanFFlag<"default-real-8">, Group<gfortran_Group>;
2605+ def default_integer_8_f : Flag<["-"], "fdefault-integer-8">, Group<gfortran_Group>,
2606+ HelpText<"Treat INTEGER and LOGICAL as INTEGER*8 and LOGICAL*8">;
2607+ def default_integer_8_fno : Flag<["-"], "fno-default-integer-8">, Group<gfortran_Group>;
2608+ def default_real_8_f : Flag<["-"], "fdefault-real-8">, Group<gfortran_Group>,
2609+ HelpText<"Treat REAL as REAL*8">;
2610+ def default_real_8_fno : Flag<["-"], "fno-default-real-8">, Group<gfortran_Group>;
25932611defm dollar_ok : BooleanFFlag<"dollar-ok">, Group<gfortran_Group>;
25942612defm dump_fortran_optimized : BooleanFFlag<"dump-fortran-optimized">, Group<gfortran_Group>;
25952613defm dump_fortran_original : BooleanFFlag<"dump-fortran-original">, Group<gfortran_Group>;
25962614defm dump_parse_tree : BooleanFFlag<"dump-parse-tree">, Group<gfortran_Group>;
25972615defm external_blas : BooleanFFlag<"external-blas">, Group<gfortran_Group>;
25982616defm f2c : BooleanFFlag<"f2c">, Group<gfortran_Group>;
2599- defm fixed_form : BooleanFFlag<"fixed-form">, Group<gfortran_Group>;
2600- defm free_form : BooleanFFlag<"free-form">, Group<gfortran_Group>;
2601- defm frontend_optimize : BooleanFFlag<"frontend-optimize">, Group<gfortran_Group>;
2617+ def fixed_form_on : Flag<["-"], "ffixed-form">, Group<fortran_format_Group>,
2618+ HelpText<"Enable fixed-form format for Fortran">;
2619+ def fixed_form_off : Flag<["-"], "fno-fixed-form">, Group<fortran_format_Group>,
2620+ HelpText<"Disable fixed-form format for Fortran">;
2621+ def free_form_on : Flag<["-"], "ffree-form">, Group<fortran_format_Group>,
2622+ HelpText<"Enable free-form format for Fortran">;
2623+ def free_form_off : Flag<["-"], "fno-free-form">, Group<fortran_format_Group>,
2624+ HelpText<"Disable free-form format for Fortran">;
2625+ defm frontend_optimize : BooleanFFlag<"frontend-optimize">, Group<fortran_format_Group>;
26022626defm implicit_none : BooleanFFlag<"implicit-none">, Group<gfortran_Group>;
26032627defm init_local_zero : BooleanFFlag<"init-local-zero">, Group<gfortran_Group>;
26042628defm integer_4_integer_8 : BooleanFFlag<"integer-4-integer-8">, Group<gfortran_Group>;
@@ -2623,6 +2647,119 @@ defm stack_arrays : BooleanFFlag<"stack-arrays">, Group<gfortran_Group>;
26232647defm underscoring : BooleanFFlag<"underscoring">, Group<gfortran_Group>;
26242648defm whole_file : BooleanFFlag<"whole-file">, Group<gfortran_Group>;
26252649
2650+ // Flang-specific options
2651+ multiclass BooleanKFlag<string name> {
2652+ def _on : Flag<["-"], "K"#name>;
2653+ def _off : Flag<["-"], "Kno"#name>;
2654+ }
2655+
2656+ multiclass BooleanMFlag<string name> {
2657+ def _on : Flag<["-"], "M"#name>;
2658+ def _off : Flag<["-"], "Mno"#name>;
2659+ }
2660+
2661+ def Mfixed : Flag<["-"], "Mfixed">, Group<fortran_format_Group>,
2662+ HelpText<"Force fixed-form format Fortran">,
2663+ Flags<[HelpHidden]>;
2664+ def Mfree_on: Flag<["-"], "Mfree">, Group<fortran_format_Group>,
2665+ HelpText<"Enable free-form format for Fortran">,
2666+ Flags<[HelpHidden]>;
2667+ def Mfree_off: Flag<["-"], "Mnofree">, Group<fortran_format_Group>,
2668+ HelpText<"Disable free-form format for Fortran">,
2669+ Flags<[HelpHidden]>;
2670+ def Mfreeform_on: Flag<["-"], "Mfreeform">, Group<fortran_format_Group>,
2671+ HelpText<"Enable free-form format for Fortran">,
2672+ Flags<[HelpHidden]>;
2673+ def Mfreeform_off: Flag<["-"], "Mnofreeform">, Group<fortran_format_Group>,
2674+ HelpText<"Disable free-form format for Fortran">,
2675+ Flags<[HelpHidden]>;
2676+
2677+ def Mipa: Joined<["-"], "Mipa">, Group<pgi_fortran_Group>;
2678+ def Mstackarrays: Joined<["-"], "Mstack_arrays">, Group<pgi_fortran_Group>;
2679+ def pc: JoinedOrSeparate<["-"], "pc">, Group<pgi_fortran_Group>;
2680+ def Mfprelaxed: Joined<["-"], "Mfprelaxed">, Group<pgi_fortran_Group>;
2681+ def Mnofprelaxed: Joined<["-"], "Mnofprelaxed">, Group<pgi_fortran_Group>;
2682+ defm Mstride0: BooleanMFlag<"stride0">, Group<pgi_fortran_Group>;
2683+ defm Mrecursive: BooleanMFlag<"recursive">, Group<pgi_fortran_Group>;
2684+ defm Mreentrant: BooleanMFlag<"reentrant">, Group<pgi_fortran_Group>;
2685+ defm Mbounds: BooleanMFlag<"bounds">, Group<pgi_fortran_Group>;
2686+ def Mdaz_on: Flag<["-"], "Mdaz">, Group<pgi_fortran_Group>,
2687+ HelpText<"Treat denormalized numbers as zero">;
2688+ def Mdaz_off: Flag<["-"], "Mnodaz">, Group<pgi_fortran_Group>,
2689+ HelpText<"Disable treating denormalized numbers as zero">;
2690+ def Kieee_on : Flag<["-"], "Kieee">, Group<pgi_fortran_Group>,
2691+ HelpText<"Enable IEEE division">;
2692+ def Kieee_off : Flag<["-"], "Knoieee">, Group<pgi_fortran_Group>,
2693+ HelpText<"Disable IEEE division">;
2694+ def Mextend : Flag<["-"], "Mextend">, Group<pgi_fortran_Group>,
2695+ HelpText<"Allow lines up to 132 characters in Fortran sources">;
2696+ def Mpreprocess : Flag<["-"], "Mpreprocess">, Group<pgi_fortran_Group>,
2697+ HelpText<"Preprocess Fortran files">;
2698+ def Mstandard: Flag<["-"], "Mstandard">, Group<pgi_fortran_Group>,
2699+ HelpText<"Check Fortran standard conformance">;
2700+ def Mchkptr: Flag<["-"], "Mchkptr">, Group<pgi_fortran_Group>;
2701+ defm Minline: BooleanMFlag<"inline">, Group<pgi_fortran_Group>;
2702+ def fma: Flag<["-"], "fma">, Group<pgi_fortran_Group>,
2703+ HelpText<"Enable generation of FMA instructions">;
2704+ def nofma: Flag<["-"], "nofma">, Group<pgi_fortran_Group>,
2705+ HelpText<"Disable generation of FMA instructions">;
2706+ defm Mfma: BooleanMFlag<"fma">, Group<pgi_fortran_Group>,
2707+ HelpText<"Enable generation of FMA instructions">;
2708+ def mp: Flag<["-"], "mp">, Group<pgi_fortran_Group>,
2709+ HelpText<"Enable OpenMP">;
2710+ def nomp: Flag<["-"], "nomp">, Group<pgi_fortran_Group>,
2711+ HelpText<"Do not link with OpenMP library libomp">;
2712+ def Mflushz_on: Flag<["-"], "Mflushz">, Group<pgi_fortran_Group>,
2713+ HelpText<"Set SSE to flush-to-zero mode">;
2714+ def Mflushz_off: Flag<["-"], "Mnoflushz">, Group<pgi_fortran_Group>,
2715+ HelpText<"Disabling setting SSE to flush-to-zero mode">;
2716+ def Msave_on: Flag<["-"], "Msave">, Group<pgi_fortran_Group>,
2717+ HelpText<"Assume all Fortran variables have SAVE attribute">;
2718+ def Msave_off: Flag<["-"], "Mnosave">, Group<pgi_fortran_Group>,
2719+ HelpText<"Assume no Fortran variables have SAVE attribute">;
2720+ def Mcache_align_on: Flag<["-"], "Mcache_align">, Group<pgi_fortran_Group>,
2721+ HelpText<"Align large objects on cache-line boundaries">;
2722+ def Mcache_align_off: Flag<["-"], "Mnocache_align">, Group<pgi_fortran_Group>,
2723+ HelpText<"Disable aligning large objects on cache-line boundaries">;
2724+ def ModuleDir : Separate<["-"], "module">, Group<pgi_fortran_Group>,
2725+ HelpText<"Fortran module path">;
2726+ def Minform_EQ : Joined<["-"], "Minform=">,
2727+ HelpText<"Set error level of messages to display">;
2728+ def Mallocatable_EQ : Joined<["-"], "Mallocatable=">,
2729+ HelpText<"Select semantics for assignments to allocatables (F03 or F95)">;
2730+ def Mbyteswapio: Flag<["-"], "Mbyteswapio">, Group<pgi_fortran_Group>,
2731+ HelpText<"Swap byte-order for unformatted input/output">;
2732+ def byteswapio: Flag<["-"], "byteswapio">, Group<gfortran_Group>,
2733+ HelpText<"Swap byte-order for unformatted input/output">;
2734+ def Mbackslash: Flag<["-"], "Mbackslash">, Group<pgi_fortran_Group>,
2735+ HelpText<"Treat backslash like any other character in character strings">;
2736+ def Mnobackslash: Flag<["-"], "Mnobackslash">, Group<pgi_fortran_Group>,
2737+ HelpText<"Treat backslash as C-style escape character">;
2738+ def staticFlangLibs: Flag<["-"], "static-flang-libs">, Group<flang_rt_Group>,
2739+ HelpText<"Link using static Flang libraries">;
2740+ def noFlangLibs: Flag<["-"], "no-flang-libs">, Group<flang_rt_Group>,
2741+ HelpText<"Do not link against Flang libraries">;
2742+ def r8: Flag<["-"], "r8">, Group<pgi_fortran_Group>,
2743+ HelpText<"Treat REAL as REAL*8">;
2744+ def i8: Flag<["-"], "i8">, Group<pgi_fortran_Group>,
2745+ HelpText<"Treat INTEGER and LOGICAL as INTEGER*8 and LOGICAL*8">;
2746+ def no_fortran_main: Flag<["-"], "fno-fortran-main">, Group<gfortran_Group>,
2747+ HelpText<"Don't link in Fortran main">;
2748+ def Mnomain: Flag<["-"], "Mnomain">, Group<pgi_fortran_Group>,
2749+ HelpText<"Don't link in Fortran main">;
2750+
2751+ // Flang internal debug options
2752+ def Mx_EQ : Joined<["-"], "Mx,">, Group<pgi_fortran_Group>;
2753+ def My_EQ : Joined<["-"], "My,">, Group<pgi_fortran_Group>;
2754+ def Hx_EQ : Joined<["-"], "Hx,">, Group<pgi_fortran_Group>;
2755+ def Hy_EQ : Joined<["-"], "Hy,">, Group<pgi_fortran_Group>;
2756+ def Wm_EQ : Joined<["-"], "Wm,">, Group<pgi_fortran_Group>;
2757+
2758+ def Mq_EQ : Joined<["-"], "Mq,">, Group<pgi_fortran_Group>;
2759+ def Hq_EQ : Joined<["-"], "Hq,">, Group<pgi_fortran_Group>;
2760+ def Mqq_EQ : Joined<["-"], "Mqq,">, Group<pgi_fortran_Group>;
2761+ def Hqq_EQ : Joined<["-"], "Hqq,">, Group<pgi_fortran_Group>;
2762+ def Wh_EQ : Joined<["-"], "Wh,">, Group<pgi_fortran_Group>;
26262763
26272764include "CC1Options.td"
26282765
0 commit comments