github.com/sergiusens/goreleaser@v0.34.3-0.20171009111917-ae6f7c157c5c/internal/buildtarget/targets.go (about)

     1  package buildtarget
     2  
     3  import (
     4  	"github.com/apex/log"
     5  	"github.com/goreleaser/goreleaser/config"
     6  )
     7  
     8  // All returns all valid build targets for a given build
     9  func All(build config.Build) (targets []Target) {
    10  	for _, target := range allBuildTargets(build) {
    11  		if !valid(target) {
    12  			log.WithField("target", target.PrettyString()).
    13  				Debug("skipped invalid build")
    14  			continue
    15  		}
    16  		if ignored(build, target) {
    17  			log.WithField("target", target.PrettyString()).
    18  				Debug("skipped ignored build")
    19  			continue
    20  		}
    21  		targets = append(targets, target)
    22  	}
    23  	return
    24  }
    25  
    26  func allBuildTargets(build config.Build) (targets []Target) {
    27  	for _, goos := range build.Goos {
    28  		for _, goarch := range build.Goarch {
    29  			if goarch == "arm" {
    30  				for _, goarm := range build.Goarm {
    31  					targets = append(targets, New(goos, goarch, goarm))
    32  				}
    33  				continue
    34  			}
    35  			targets = append(targets, New(goos, goarch, ""))
    36  		}
    37  	}
    38  	return
    39  }
    40  
    41  func ignored(build config.Build, target Target) bool {
    42  	for _, ig := range build.Ignore {
    43  		if ig.Goos != "" && ig.Goos != target.OS {
    44  			continue
    45  		}
    46  		if ig.Goarch != "" && ig.Goarch != target.Arch {
    47  			continue
    48  		}
    49  		if ig.Goarm != "" && ig.Goarm != target.Arm {
    50  			continue
    51  		}
    52  		return true
    53  	}
    54  	return false
    55  }
    56  
    57  func valid(target Target) bool {
    58  	var s = target.OS + target.Arch
    59  	for _, a := range validTargets {
    60  		if a == s {
    61  			return true
    62  		}
    63  	}
    64  	return false
    65  }
    66  
    67  // list from https://golang.org/doc/install/source#environment
    68  var validTargets = []string{
    69  	"androidarm",
    70  	"darwin386",
    71  	"darwinamd64",
    72  	// "darwinarm", - requires admin rights and other ios stuff
    73  	// "darwinarm64", - requires admin rights and other ios stuff
    74  	"dragonflyamd64",
    75  	"freebsd386",
    76  	"freebsdamd64",
    77  	"freebsdarm",
    78  	"linux386",
    79  	"linuxamd64",
    80  	"linuxarm",
    81  	"linuxarm64",
    82  	"linuxppc64",
    83  	"linuxppc64le",
    84  	"linuxmips",
    85  	"linuxmipsle",
    86  	"linuxmips64",
    87  	"linuxmips64le",
    88  	"linuxs390x",
    89  	"netbsd386",
    90  	"netbsdamd64",
    91  	"netbsdarm",
    92  	"openbsd386",
    93  	"openbsdamd64",
    94  	"openbsdarm",
    95  	"plan9386",
    96  	"plan9amd64",
    97  	"solarisamd64",
    98  	"windows386",
    99  	"windowsamd64",
   100  }