Go frontend: add -fgo-embedcfg option
authorIan Lance Taylor <iant@golang.org>
Tue, 5 Jan 2021 01:40:11 +0000 (17:40 -0800)
committerIan Lance Taylor <iant@golang.org>
Tue, 5 Jan 2021 01:41:16 +0000 (17:41 -0800)
This option will be used by the go command to implement go:embed directives,
which are new with the upcoming Go 1.16 release.

* lang.opt (fgo-embedcfg): New option.
* go-c.h (struct go_create_gogo_args): Add embedcfg field.
* go-lang.c (go_embedcfg): New static variable.
(go_langhook_init): Set go_create_gogo_args embedcfg field.
(go_langhook_handle_option): Handle OPT_fgo_embedcfg_.
* gccgo.texi (Invoking gccgo): Document -fgo-embedcfg.

gcc/go/gccgo.texi
gcc/go/go-c.h
gcc/go/go-lang.c
gcc/go/lang.opt

index 37adf20d55b4359f3644bb9ef9c7077df94cf757..ce6b518bb7b01ce0a4eec9c91a678d4ad3943643 100644 (file)
@@ -262,6 +262,15 @@ Apply special rules for compiling the runtime package.  Implicit
 memory allocation is forbidden.  Some additional compiler directives
 are supported.
 
+@item -fgo-embedcfg=@var{file}
+@cindex @option{-fgo-embedcfg}
+Identify a JSON file used to map patterns used with special
+@code{//go:embed} comments to the files named by the patterns.  The
+JSON file should have two components: @code{Patterns} maps each
+pattern to a list of file names, and @code{Files} maps each file name
+to a full path to the file.  This option is intended for use by the
+@command{go} command to implement @code{//go:embed}.
+
 @item -g
 @cindex @option{-g for gccgo}
 This is the standard @command{gcc} option (@pxref{Debugging Options, ,
index 651a787088a34a90c5116c36841429d6107943ee..5930eadf7fd8d892bdef7c142d039822f6b19710 100644 (file)
@@ -41,6 +41,7 @@ struct go_create_gogo_args
   const char* prefix;
   const char* relative_import_path;
   const char* c_header;
+  const char* embedcfg;
   Backend* backend;
   Linemap* linemap;
   bool check_divide_by_zero;
index eba40e471a29d0e59d32e6fbb56b16bb4eebff2b..a01db8dbdcd9a3a08989161762484275036da257 100644 (file)
@@ -89,6 +89,7 @@ static const char *go_pkgpath = NULL;
 static const char *go_prefix = NULL;
 static const char *go_relative_import_path = NULL;
 static const char *go_c_header = NULL;
+static const char *go_embedcfg = NULL;
 
 /* Language hooks.  */
 
@@ -112,6 +113,7 @@ go_langhook_init (void)
   args.prefix = go_prefix;
   args.relative_import_path = go_relative_import_path;
   args.c_header = go_c_header;
+  args.embedcfg = go_embedcfg;
   args.check_divide_by_zero = go_check_divide_zero;
   args.check_divide_overflow = go_check_divide_overflow;
   args.compiling_runtime = go_compiling_runtime;
@@ -282,6 +284,10 @@ go_langhook_handle_option (
       go_c_header = arg;
       break;
 
+    case OPT_fgo_embedcfg_:
+      go_embedcfg = arg;
+      break;
+
     default:
       /* Just return 1 to indicate that the option is valid.  */
       break;
index 454a118695e50314781d7d4ad03816d306684263..7d6780eb0cdb878f0b58e10b960c69455109c09b 100644 (file)
@@ -57,6 +57,10 @@ fgo-dump-
 Go Joined RejectNegative
 -fgo-dump-<type>       Dump Go frontend internal information.
 
+fgo-embedcfg=
+Go Joined RejectNegative
+-fgo-embedcfg=<file>   List embedded files via go:embed
+
 fgo-optimize-
 Go Joined
 -fgo-optimize-<type>   Turn on optimization passes in the frontend.