diff --git a/README.md b/README.md
index 1d917fe..0ec2b9e 100644
--- a/README.md
+++ b/README.md
@@ -20,6 +20,7 @@ For more about `avo`:
* Introductory talk ["Better `x86` Assembly Generation with Go"](https://www.youtube.com/watch?v=6Y5CZ7_tyA4) at [dotGo 2019](https://2019.dotgo.eu/) ([slides](https://speakerdeck.com/mmcloughlin/better-x86-assembly-generation-with-go))
* [Longer tutorial at Gophercon 2019](https://www.youtube.com/watch?v=WaD8sNqroAw) showing a highly-optimized dot product ([slides](https://speakerdeck.com/mmcloughlin/better-x86-assembly-generation-with-go-gophercon-2019))
* Watch [Filippo Valsorda](https://filippo.io/) live code the [rewrite of `filippo.io/edwards25519` assembly with `avo`](https://vimeo.com/679848853)
+* Explore [projects using `avo`](doc/adopters.md)
* Discuss `avo` and general Go assembly topics in the [#assembly](https://gophers.slack.com/archives/C6WDZJ70S) channel of [Gophers Slack](https://invite.slack.golangbridge.org/)
_Note: APIs subject to change while `avo` is still in an experimental phase. You can use it to build [real things](examples) but we suggest you pin a version with your package manager of choice._
@@ -227,6 +228,8 @@ Popular projects using `avo`:
:star: 107
> Accelerate aggregated MD5 hashing performance up to 8x for AVX512 and 4x for AVX2. Useful for server applications that need to compute many MD5 sums in parallel.
+See the [full list of projects using `avo`](doc/adopters.md).
+
## Contributing
Contributions to `avo` are welcome:
diff --git a/doc/adopters.md b/doc/adopters.md
new file mode 100644
index 0000000..bdca067
--- /dev/null
+++ b/doc/adopters.md
@@ -0,0 +1,89 @@
+# Adopters
+
+
[klauspost / **compress**](https://github.com/klauspost/compress) / **s2**
+
+Optimized Go Compression Packages
+
+
[golang / **crypto**](https://github.com/golang/crypto) / **curve25519**
+
+[mirror] Go supplementary cryptography libraries
+
+
[klauspost / **reedsolomon**](https://github.com/klauspost/reedsolomon)
+
+Reed-Solomon Erasure Coding in Go
+
+
[segmentio / **asm**](https://github.com/segmentio/asm)
+
+Go library providing algorithms optimized to leverage the characteristics of modern CPUs
+
+
[zeebo / **blake3**](https://github.com/zeebo/blake3)
+
+Pure Go implementation of BLAKE3 with AVX2 and SSE4.1 acceleration
+
+
[lukechampine / **blake3**](https://github.com/lukechampine/blake3)
+
+A pure-Go implementation of the BLAKE3 cryptographic hash function
+
+
[zeebo / **xxh3**](https://github.com/zeebo/xxh3)
+
+XXH3 algorithm in Go
+
+
[dgryski / **go-bloomindex**](https://github.com/dgryski/go-bloomindex)
+
+Bloom-filter based search index
+
+
[minio / **md5-simd**](https://github.com/minio/md5-simd)
+
+Accelerate aggregated MD5 hashing performance up to 8x for AVX512 and 4x for AVX2. Useful for server applications that need to compute many MD5 sums in parallel.
+
+
[phoreproject / **bls**](https://github.com/phoreproject/bls)
+
+Go implementation of the BLS12-381 pairing
+
+
[FiloSottile / **edwards25519**](https://github.com/FiloSottile/edwards25519)
+
+filippo.io/edwards25519 — A safer, faster, and more powerful low-level edwards25519 Go implementation.
+
+
[lukechampine / **us**](https://github.com/lukechampine/us) / **merkle/blake2b**
+
+An alternative interface to Sia
+
+
[oasisprotocol / **curve25519-voi**](https://github.com/oasisprotocol/curve25519-voi)
+
+High-performance Curve25519/ristretto255 for Go
+
+
[dgryski / **go-sip13**](https://github.com/dgryski/go-sip13)
+
+siphash 1-3
+
+
[orisano / **wyhash**](https://github.com/orisano/wyhash)
+
+A pure-Go wyhash implementation.
+
+
[oasisprotocol / **deoxysii**](https://github.com/oasisprotocol/deoxysii)
+
+Go Deoxys-II-256-128
+
+
[mmcloughlin / **md4**](https://github.com/mmcloughlin/md4)
+
+Assembly-optimized MD4 hash algorithm in Go
+
+
[dgryski / **go-marvin32**](https://github.com/dgryski/go-marvin32)
+
+Assembly-optimized Marvin32 hash function
+
+
[dgryski / **go-speck**](https://github.com/dgryski/go-speck)
+
+SPECK cipher
+
+
[dgryski / **go-chaskey**](https://github.com/dgryski/go-chaskey)
+
+go-chaskey: an implementation of chaskey, an efficient MAC for microcontrollers
+
+
[ericlagergren / **lwcrypto**](https://github.com/ericlagergren/lwcrypto) / **ascon**
+
+NIST Lightweight Cryptography finalists
+
+
[ericlagergren / **lwcrypto**](https://github.com/ericlagergren/lwcrypto) / **grain**
+
+NIST Lightweight Cryptography finalists
diff --git a/internal/cmd/docgen/main.go b/internal/cmd/docgen/main.go
index 9b37fda..0fb500a 100644
--- a/internal/cmd/docgen/main.go
+++ b/internal/cmd/docgen/main.go
@@ -42,6 +42,7 @@ func mainerr() (err error) {
t.Funcs(template.FuncMap{
"include": include,
"snippet": snippet,
+ "avatar": avatar,
})
// Load template.
@@ -163,3 +164,9 @@ func snippet(filename, start, end string) (string, error) {
return buf.String(), nil
}
+
+// avatar returns HTML for a Github user avatar.
+func avatar(owner string) (string, error) {
+ format := `
`
+ return fmt.Sprintf(format, owner), nil
+}
diff --git a/internal/cmd/docgen/templates/adopters.tmpl b/internal/cmd/docgen/templates/adopters.tmpl
new file mode 100644
index 0000000..9c370b3
--- /dev/null
+++ b/internal/cmd/docgen/templates/adopters.tmpl
@@ -0,0 +1,7 @@
+# Adopters
+{{ range .Packages.Ranked }}
+{{ avatar .Repository.Owner }} [{{ .Repository.Owner }} / **{{ .Repository.Name }}**]({{ .Repository.URL }})
+{{- if .SubPackage }} / **{{ .SubPackage}}**{{ end }}
+
+{{ .Metadata.Description }}
+{{ end -}}
diff --git a/internal/cmd/docgen/templates/readme.tmpl b/internal/cmd/docgen/templates/readme.tmpl
index 7177faf..452226d 100644
--- a/internal/cmd/docgen/templates/readme.tmpl
+++ b/internal/cmd/docgen/templates/readme.tmpl
@@ -20,6 +20,7 @@ For more about `avo`:
* Introductory talk ["Better `x86` Assembly Generation with Go"](https://www.youtube.com/watch?v=6Y5CZ7_tyA4) at [dotGo 2019](https://2019.dotgo.eu/) ([slides](https://speakerdeck.com/mmcloughlin/better-x86-assembly-generation-with-go))
* [Longer tutorial at Gophercon 2019](https://www.youtube.com/watch?v=WaD8sNqroAw) showing a highly-optimized dot product ([slides](https://speakerdeck.com/mmcloughlin/better-x86-assembly-generation-with-go-gophercon-2019))
* Watch [Filippo Valsorda](https://filippo.io/) live code the [rewrite of `filippo.io/edwards25519` assembly with `avo`](https://vimeo.com/679848853)
+* Explore [projects using `avo`](doc/adopters.md)
* Discuss `avo` and general Go assembly topics in the [#assembly](https://gophers.slack.com/archives/C6WDZJ70S) channel of [Gophers Slack](https://invite.slack.golangbridge.org/)
_Note: APIs subject to change while `avo` is still in an experimental phase. You can use it to build [real things](examples) but we suggest you pin a version with your package manager of choice._
@@ -106,13 +107,15 @@ Popular projects using `avo`:
{{ range .Packages.Top 10 -}}
{{ if lt .Metadata.Stars 100 }}{{break}}{{ end -}}
-
[{{ .Repository.Owner }} / **{{ .Repository.Name }}**]({{ .Repository.URL }})
+{{ avatar .Repository.Owner }} [{{ .Repository.Owner }} / **{{ .Repository.Name }}**]({{ .Repository.URL }})
{{- if .SubPackage }} / **{{ .SubPackage}}**{{ end }}
:star: {{ .Metadata.Stars }}
> {{ .Metadata.Description }}
{{ end -}}
+See the [full list of projects using `avo`](doc/adopters.md).
+
## Contributing
Contributions to `avo` are welcome:
diff --git a/script/doc b/script/doc
index 2fd7068..14b5ba7 100755
--- a/script/doc
+++ b/script/doc
@@ -5,6 +5,7 @@ go install ./internal/cmd/docgen
pkgs="tests/thirdparty/packages.json"
docgen -pkgs "${pkgs}" -type readme -output README.md
+docgen -pkgs "${pkgs}" -type adopters -output doc/adopters.md
# Process simple file embeddings with embedmd.
find . -name '*.md' | xargs embedmd -w