]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/gc: support -installsuffix in the compiler and builder
authorDave Day <djd@golang.org>
Thu, 3 Oct 2013 03:48:47 +0000 (13:48 +1000)
committerDave Day <djd@golang.org>
Thu, 3 Oct 2013 03:48:47 +0000 (13:48 +1000)
Add the -installsuffix flag to gc and {5,6,8}l, which overrides -race
for the suffix if both are supplied.
Pass this flag from the go tool for build and install.

R=rsc
CC=golang-dev
https://golang.org/cl/14246044

src/cmd/5l/obj.c
src/cmd/6l/obj.c
src/cmd/8l/obj.c
src/cmd/gc/go.h
src/cmd/gc/lex.c
src/cmd/go/build.go
src/cmd/go/testflag.go
src/cmd/ld/lib.c
src/cmd/ld/lib.h

index 0b687a2ee824f19568cb501014e368dbfc3d74b7..80f5787dc44ef7601642c0be599c43a400ce3593 100644 (file)
@@ -117,6 +117,7 @@ main(int argc, char *argv[])
        flagstr("extldflags", "flags for external linker", &extldflags);
        flagcount("f", "ignore version mismatch", &debug['f']);
        flagcount("g", "disable go package data checks", &debug['g']);
+       flagstr("installsuffix", "pkg directory suffix", &flag_installsuffix);
        flagstr("k", "sym: set field tracking symbol", &tracksym);
        flagfn1("linkmode", "mode: set link mode (internal, external, auto)", setlinkmode);
        flagcount("n", "dump symbol table", &debug['n']);
index a12b6e6f9ba95b1502e73b8509b217b3a8cafb61..ae649a74b63b5954513e26567b99f3b30e367ce5 100644 (file)
@@ -112,6 +112,7 @@ main(int argc, char *argv[])
        flagstr("extldflags", "flags for external linker", &extldflags);
        flagcount("f", "ignore version mismatch", &debug['f']);
        flagcount("g", "disable go package data checks", &debug['g']);
+       flagstr("installsuffix", "pkg directory suffix", &flag_installsuffix);
        flagfn1("linkmode", "mode: set link mode (internal, external, auto)", setlinkmode);
        flagstr("k", "sym: set field tracking symbol", &tracksym);
        flagcount("n", "dump symbol table", &debug['n']);
index e049de7b07435987359a5599d129e328026c9ec9..3fdc413810e25c67e5a7f900b309421a049470bc 100644 (file)
@@ -118,6 +118,7 @@ main(int argc, char *argv[])
        flagstr("extldflags", "flags for external linker", &extldflags);
        flagcount("f", "ignore version mismatch", &debug['f']);
        flagcount("g", "disable go package data checks", &debug['g']);
+       flagstr("installsuffix", "pkg directory suffix", &flag_installsuffix);
        flagfn1("linkmode", "mode: set link mode (internal, external, auto)", setlinkmode);
        flagstr("k", "sym: set field tracking symbol", &tracksym);
        flagstr("o", "outfile: set output file", &outfile);
index 7ba1c7e8829ca2d256c4079fc17b5618007bb498..562f16890c398aed97f830c10b1f391c7c5e2dd6 100644 (file)
@@ -976,6 +976,7 @@ EXTERN      int     typecheckok;
 EXTERN int     compiling_runtime;
 EXTERN int     compiling_wrappers;
 EXTERN int     pure_go;
+EXTERN char*   flag_installsuffix;
 EXTERN int     flag_race;
 EXTERN int     flag_largemodel;
 EXTERN int     noescape;
index a1473eb407fad67a38c1efeab2bcca4bbc7e244b..8c739391a75d9f6c23d62b5553ec8e664f3a9c85 100644 (file)
@@ -257,6 +257,7 @@ main(int argc, char *argv[])
        flagcount("g", "debug code generation", &debug['g']);
        flagcount("h", "halt on error", &debug['h']);
        flagcount("i", "debug line number stack", &debug['i']);
+       flagstr("installsuffix", "pkg directory suffix", &flag_installsuffix);
        flagcount("j", "debug runtime-initialized variables", &debug['j']);
        flagcount("l", "disable inlining", &debug['l']);
        flagcount("m", "print optimization decisions", &debug['m']);
@@ -577,7 +578,7 @@ static int
 findpkg(Strlit *name)
 {
        Idir *p;
-       char *q, *race;
+       char *q, *suffix, *suffixsep;
 
        if(islocalname(name)) {
                if(safemode)
@@ -615,13 +616,19 @@ findpkg(Strlit *name)
                        return 1;
        }
        if(goroot != nil) {
-               race = "";
-               if(flag_race)
-                       race = "_race";
-               snprint(namebuf, sizeof(namebuf), "%s/pkg/%s_%s%s/%Z.a", goroot, goos, goarch, race, name);
+               suffix = "";
+               suffixsep = "";
+               if(flag_installsuffix != nil) {
+                       suffixsep = "_";
+                       suffix = flag_installsuffix;
+               } else if(flag_race) {
+                       suffixsep = "_";
+                       suffix = "race";
+               }
+               snprint(namebuf, sizeof(namebuf), "%s/pkg/%s_%s%s%s/%Z.a", goroot, goos, goarch, suffixsep, suffix, name);
                if(access(namebuf, 0) >= 0)
                        return 1;
-               snprint(namebuf, sizeof(namebuf), "%s/pkg/%s_%s%s/%Z.%c", goroot, goos, goarch, race, name, thechar);
+               snprint(namebuf, sizeof(namebuf), "%s/pkg/%s_%s%s%s/%Z.%c", goroot, goos, goarch, suffixsep, suffix, name, thechar);
                if(access(namebuf, 0) >= 0)
                        return 1;
        }
index b7edd49ce021b1d4511a7a99c95f0cb96194a00d..cfbf30d918b33f0382fa4f006be0dfc471a8c018 100644 (file)
@@ -1530,6 +1530,9 @@ func (gcToolchain) gc(b *builder, p *Package, obj string, importArgs []string, g
        if extFiles == 0 {
                gcargs = append(gcargs, "-complete")
        }
+       if buildContext.InstallSuffix != "" {
+               gcargs = append(gcargs, "-installsuffix", buildContext.InstallSuffix)
+       }
 
        args := stringList(tool(archChar+"g"), "-o", ofile, buildGcflags, gcargs, "-D", p.localPrefix, importArgs)
        for _, f := range gofiles {
@@ -1579,6 +1582,9 @@ func (gcToolchain) ld(b *builder, p *Package, out string, allactions []*action,
                }
        }
        ldflags := buildLdflags
+       if buildContext.InstallSuffix != "" {
+               ldflags = append(ldflags, "-installsuffix", buildContext.InstallSuffix)
+       }
        if cxx {
                // The program includes C++ code.  If the user has not
                // specified the -extld option, then default to
index d931d35b6a70813255ed31213b19cf1a44016f81..aea81d8f83479c63606988fd0485fe0ba924c20c 100644 (file)
@@ -82,6 +82,7 @@ var testFlagDefn = []*testFlagSpec{
        {name: "tags"},
        {name: "compiler"},
        {name: "race", boolVar: &buildRace},
+       {name: "installsuffix"},
 
        // passed to 6.out, adding a "test." prefix to the name if necessary: -v becomes -test.v.
        {name: "bench", passToTest: true},
index f9c27732807434f49c6081edcb41c6dd68bd3525..da522dc0c78bacf58b9feb8ac5c3874fac8b09d1 100644 (file)
@@ -91,7 +91,7 @@ Lflag(char *arg)
 void
 libinit(void)
 {
-       char *race;
+       char *suffix, *suffixsep;
 
        fmtinstall('i', iconv);
        fmtinstall('Y', Yconv);
@@ -101,10 +101,16 @@ libinit(void)
                print("goarch is not known: %s\n", goarch);
 
        // add goroot to the end of the libdir list.
-       race = "";
-       if(flag_race)
-               race = "_race";
-       Lflag(smprint("%s/pkg/%s_%s%s", goroot, goos, goarch, race));
+       suffix = "";
+       suffixsep = "";
+       if(flag_installsuffix != nil) {
+               suffixsep = "_";
+               suffix = flag_installsuffix;
+       } else if(flag_race) {
+               suffixsep = "_";
+               suffix = "race";
+       }
+       Lflag(smprint("%s/pkg/%s_%s%s%s", goroot, goos, goarch, suffixsep, suffix));
 
        // Unix doesn't like it when we write to a running (or, sometimes,
        // recently run) binary, so remove the output file before writing it.
index f268ea13addbbf6e8b6728a7f2f23b09d5a52d99..be95bb46e81b14cf1495b85a147fbc5a9ea1438b 100644 (file)
@@ -160,6 +160,7 @@ EXTERN      char**  ldflag;
 EXTERN int     havedynamic;
 EXTERN int     iscgo;
 EXTERN int     elfglobalsymndx;
+EXTERN char*   flag_installsuffix;
 EXTERN int     flag_race;
 EXTERN int flag_shared;
 EXTERN char*   tracksym;