diff options
author | Ayke van Laethem <[email protected]> | 2023-05-13 13:26:34 +0200 |
---|---|---|
committer | Ron Evans <[email protected]> | 2023-05-17 11:21:15 +0200 |
commit | 4c682680ca00523fb5ffac722bc3f19296e3e60f (patch) | |
tree | ccf25fb26ffb9e6c0198bdd411535893f6da1ec5 /compileopts | |
parent | af76c807e27fa2d964b3b10cb2a07677554c9f3f (diff) | |
download | tinygo-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.go | 27 | ||||
-rw-r--r-- | compileopts/config_test.go | 132 |
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) - } - } - }) - } -} |