aboutsummaryrefslogtreecommitdiffhomepage
path: root/compileopts
diff options
context:
space:
mode:
authorAyke van Laethem <[email protected]>2023-05-13 13:26:34 +0200
committerRon Evans <[email protected]>2023-05-17 11:21:15 +0200
commit4c682680ca00523fb5ffac722bc3f19296e3e60f (patch)
treeccf25fb26ffb9e6c0198bdd411535893f6da1ec5 /compileopts
parentaf76c807e27fa2d964b3b10cb2a07677554c9f3f (diff)
downloadtinygo-4c682680ca00523fb5ffac722bc3f19296e3e60f.tar.gz
tinygo-4c682680ca00523fb5ffac722bc3f19296e3e60f.zip
compileopts: don't filter build tags, use specific build tags instead
This basically reverts https://github.com/tinygo-org/tinygo/pull/3357 and replaces it with a different mechanism to get to the same goal. I do not think filtering tags like this is a good idea: it's the wrong part of the compiler to be concerned with such tags (that part sets tags, but doesn't modify existing tags). Instead, I've written the //go:build lines in such a way that it has the same effect: WASI defaults to leveldb, everything else defaults to fnv, and it's possible to override the default using build tags.
Diffstat (limited to 'compileopts')
-rw-r--r--compileopts/config.go27
-rw-r--r--compileopts/config_test.go132
2 files changed, 1 insertions, 158 deletions
diff --git a/compileopts/config.go b/compileopts/config.go
index 402f0a9e0..9a4bc3106 100644
--- a/compileopts/config.go
+++ b/compileopts/config.go
@@ -75,8 +75,7 @@ func (c *Config) GOARM() string {
// BuildTags returns the complete list of build tags used during this build.
func (c *Config) BuildTags() []string {
- targetTags := filterTags(c.Target.BuildTags, c.Options.Tags)
- tags := append(targetTags, []string{"tinygo", "math_big_pure_go", "gc." + c.GC(), "scheduler." + c.Scheduler(), "serial." + c.Serial()}...)
+ tags := append(c.Target.BuildTags, []string{"tinygo", "math_big_pure_go", "gc." + c.GC(), "scheduler." + c.Scheduler(), "serial." + c.Serial()}...)
for i := 1; i <= c.GoMinorVersion; i++ {
tags = append(tags, fmt.Sprintf("go1.%d", i))
}
@@ -552,27 +551,3 @@ type TestConfig struct {
BenchMem bool
Shuffle string
}
-
-// filterTags removes predefined build tags for a target if a conflicting option
-// is provided by the user.
-func filterTags(targetTags []string, userTags []string) []string {
- var filtered []string
- for _, t := range targetTags {
- switch {
- case strings.HasPrefix(t, "runtime_memhash_"):
- overridden := false
- for _, ut := range userTags {
- if strings.HasPrefix(ut, "runtime_memhash_") {
- overridden = true
- break
- }
- }
- if !overridden {
- filtered = append(filtered, t)
- }
- default:
- filtered = append(filtered, t)
- }
- }
- return filtered
-}
diff --git a/compileopts/config_test.go b/compileopts/config_test.go
deleted file mode 100644
index 00b0b0e9b..000000000
--- a/compileopts/config_test.go
+++ /dev/null
@@ -1,132 +0,0 @@
-package compileopts
-
-import (
- "fmt"
- "strings"
- "testing"
-)
-
-func TestBuildTags(t *testing.T) {
- tests := []struct {
- targetTags []string
- userTags []string
- result []string
- }{
- {
- targetTags: []string{},
- userTags: []string{},
- result: []string{
- "tinygo",
- "math_big_pure_go",
- "gc.conservative",
- "scheduler.none",
- "serial.none",
- },
- },
- {
- targetTags: []string{"bear"},
- userTags: []string{},
- result: []string{
- "bear",
- "tinygo",
- "math_big_pure_go",
- "gc.conservative",
- "scheduler.none",
- "serial.none",
- },
- },
- {
- targetTags: []string{},
- userTags: []string{"cat"},
- result: []string{
- "tinygo",
- "math_big_pure_go",
- "gc.conservative",
- "scheduler.none",
- "serial.none",
- "cat",
- },
- },
- {
- targetTags: []string{"bear"},
- userTags: []string{"cat"},
- result: []string{
- "bear",
- "tinygo",
- "math_big_pure_go",
- "gc.conservative",
- "scheduler.none",
- "serial.none",
- "cat",
- },
- },
- {
- targetTags: []string{"bear", "runtime_memhash_leveldb"},
- userTags: []string{"cat"},
- result: []string{
- "bear",
- "runtime_memhash_leveldb",
- "tinygo",
- "math_big_pure_go",
- "gc.conservative",
- "scheduler.none",
- "serial.none",
- "cat",
- },
- },
- {
- targetTags: []string{"bear", "runtime_memhash_leveldb"},
- userTags: []string{"cat", "runtime_memhash_leveldb"},
- result: []string{
- "bear",
- "tinygo",
- "math_big_pure_go",
- "gc.conservative",
- "scheduler.none",
- "serial.none",
- "cat",
- "runtime_memhash_leveldb",
- },
- },
- {
- targetTags: []string{"bear", "runtime_memhash_leveldb"},
- userTags: []string{"cat", "runtime_memhash_sip"},
- result: []string{
- "bear",
- "tinygo",
- "math_big_pure_go",
- "gc.conservative",
- "scheduler.none",
- "serial.none",
- "cat",
- "runtime_memhash_sip",
- },
- },
- }
-
- for _, tc := range tests {
- tt := tc
- t.Run(fmt.Sprintf("%s+%s", strings.Join(tt.targetTags, ","), strings.Join(tt.userTags, ",")), func(t *testing.T) {
- c := &Config{
- Target: &TargetSpec{
- BuildTags: tt.targetTags,
- },
- Options: &Options{
- Tags: tt.userTags,
- },
- }
-
- res := c.BuildTags()
-
- if len(res) != len(tt.result) {
- t.Errorf("expected %d tags, got %d", len(tt.result), len(res))
- }
-
- for i, tag := range tt.result {
- if tag != res[i] {
- t.Errorf("tag %d: expected %s, got %s", i, tt.result[i], tag)
- }
- }
- })
- }
-}