mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
This CL removes the remaining visible uses of the "architecture letter" concept. (They are no longer in tool names nor in source directory names.) Because the architecture letter concept is now gone, delete GOCHAR from "go env" output, and change go/build.ArchChar to return an error always. The architecture letter is still used in the compiler and linker sources as a clumsy architecture enumeration, but that use is not visible to Go users and can be cleaned up separately. Change-Id: I4d97a38f372003fb610c9c5241bea440d9dbeb8d Reviewed-on: https://go-review.googlesource.com/10289 Reviewed-by: Rob Pike <r@golang.org>
69 lines
1.8 KiB
Go
69 lines
1.8 KiB
Go
// Copyright 2015 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Package flags implements top-level flags and the usage message for the assembler.
|
|
package flags
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
var (
|
|
Debug = flag.Bool("debug", false, "dump instructions as they are parsed")
|
|
OutputFile = flag.String("o", "", "output file; default foo.6 for /a/b/c/foo.s on amd64")
|
|
PrintOut = flag.Bool("S", false, "print assembly and machine code")
|
|
TrimPath = flag.String("trimpath", "", "remove prefix from recorded source file paths")
|
|
Shared = flag.Bool("shared", false, "generate code that can be linked into a shared library")
|
|
Dynlink = flag.Bool("dynlink", false, "support references to Go symbols defined in other shared libraries")
|
|
)
|
|
|
|
var (
|
|
D MultiFlag
|
|
I MultiFlag
|
|
)
|
|
|
|
func init() {
|
|
flag.Var(&D, "D", "predefined symbol with optional simple value -D=identifer=value; can be set multiple times")
|
|
flag.Var(&I, "I", "include directory; can be set multiple times")
|
|
}
|
|
|
|
// MultiFlag allows setting a value multiple times to collect a list, as in -I=dir1 -I=dir2.
|
|
type MultiFlag []string
|
|
|
|
func (m *MultiFlag) String() string {
|
|
return fmt.Sprint(*m)
|
|
}
|
|
|
|
func (m *MultiFlag) Set(val string) error {
|
|
(*m) = append(*m, val)
|
|
return nil
|
|
}
|
|
|
|
func Usage() {
|
|
fmt.Fprintf(os.Stderr, "usage: asm [options] file.s\n")
|
|
fmt.Fprintf(os.Stderr, "Flags:\n")
|
|
flag.PrintDefaults()
|
|
os.Exit(2)
|
|
}
|
|
|
|
func Parse() {
|
|
flag.Usage = Usage
|
|
flag.Parse()
|
|
if flag.NArg() != 1 {
|
|
flag.Usage()
|
|
}
|
|
|
|
// Flag refinement.
|
|
if *OutputFile == "" {
|
|
input := filepath.Base(flag.Arg(0))
|
|
if strings.HasSuffix(input, ".s") {
|
|
input = input[:len(input)-2]
|
|
}
|
|
*OutputFile = fmt.Sprintf("%s.o", input)
|
|
}
|
|
}
|