diff --git a/README.md b/README.md index 69df0b5a..a199429f 100644 --- a/README.md +++ b/README.md @@ -9,26 +9,25 @@ instructions) at runtime. | Os | amd64 | AArch64 | ARM | MIPS | POWER | RISCV | LOONGARCH | s390x | | :-- | --: | --: | --: | --: | --: | --: | --: | --: | -| Linux | [![][i1a0]][l1a0]
[![][i1a1]][l1a1] | [![][i1b0]][l1b0]
[![][i1b1]][l1b1] | [![][i1c0]][l1c0]
![][d1] | [![][i1d0]][l1d0]
![][d1] | [![][i1e0]][l1e0]
![][d1] | [![][i1f0]][l1f0]
![][d1] | [![][i1g0]][l1g0]
![][d1] | [![][i1h0]][l1h0]
![][d1] | +| Linux | [![][i1a0]][l1a0]
[![][i1a1]][l1a1] | [![][i1b0]][l1b0]
[![][i1b1]][l1b1] | [![][i1c0]][l1c0]
![][d1] | [![][i1d0]][l1d0]
![][d1] | [![][i1e0]][l1e0]
![][d1] | [![][i1f0]][l1f0]
![][d1] | ![][d0]
![][d1] | [![][i1h0]][l1h0]
![][d1] | | FreeBSD | [![][i2a0]][l2a0]
![][d1] | ![][d0]
![][d1] | ![][d0]
![][d1] | ![][d0]
![][d1] | ![][d0]
![][d1] | ![][d0]
![][d1] | ![][d0]
![][d1] | ![][d0]
![][d1] | | MacOS | [![][i3a0]][l3a0]
![][d1] | ![][d0]
![][d1] | ![][d0]
![][d1] | ![][d0]
![][d1] | ![][d0]
![][d1] | ![][d0]
![][d1] | ![][d0]
![][d1] | ![][d0]
![][d1] | | Windows | [![][i4a0]][l4a0]
![][d1] | ![][d0]
![][d1] | ![][d0]
![][d1] | ![][d0]
![][d1] | ![][d0]
![][d1] | ![][d0]
![][d1] | ![][d0]
![][d1] | ![][d0]
![][d1] | -[d0]: https://img.shields.io/badge/CMake-N%2FA-lightgrey -[d1]: https://img.shields.io/badge/Bazel-N%2FA-lightgrey -[i1a0]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/amd64_linux_cmake.yml?branch=main&label=CMake -[i1a1]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/amd64_linux_bazel.yml?branch=main&label=Bazel -[i1b0]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/aarch64_linux_cmake.yml?branch=main&label=CMake -[i1b1]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/aarch64_linux_bazel.yml?branch=main&label=Bazel -[i1c0]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/arm_linux_cmake.yml?branch=main&label=CMake -[i1d0]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/mips_linux_cmake.yml?branch=main&label=CMake -[i1e0]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/power_linux_cmake.yml?branch=main&label=CMake -[i1f0]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/riscv_linux_cmake.yml?branch=main&label=CMake -[i1g0]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/loongarch_linux_cmake.yml?branch=main&label=CMake -[i1h0]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/s390x_linux_cmake.yml?branch=main&label=CMake -[i2a0]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/amd64_freebsd_cmake.yml?branch=main&label=CMake -[i3a0]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/amd64_macos_cmake.yml?branch=main&label=CMake -[i4a0]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/amd64_windows_cmake.yml?branch=main&label=CMake +[d0]: https://img.shields.io/badge/n%2Fa-lightgrey?&logo=cmake +[d1]: https://img.shields.io/badge/n%2Fa-lightgrey?&logo=data:image/svg%2bxml;base64,PHN2ZyByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNiAuMTZsNS43ODYgNS43ODZMNiAxMS43MzIuMjE0IDUuOTQ2IDYgLjE2MXpNMCA2LjIxNFYxMmw1Ljc4NiA1Ljc4NlYxMkwwIDYuMjE0ek0xOCAuMTZsNS43ODYgNS43ODZMMTggMTEuNzMybC01Ljc4Ni01Ljc4NkwxOCAuMTYxek0yNCA2LjIxNFYxMmwtNS43ODYgNS43ODZWMTJMMjQgNi4yMTR6TTEyIDYuMTZsNS43ODYgNS43ODZMMTIgMTcuNzMybC01Ljc4Ni01Ljc4NkwxMiA2LjE2MXpNMTEuODQgMTguMDU0djUuNzg1bC01Ljc4Ni01Ljc4NXYtNS43ODZsNS43ODUgNS43ODZ6TTEyLjE2IDE4LjA1NGw1Ljc4Ni01Ljc4NnY1Ljc4NmwtNS43ODUgNS43ODV2LTUuNzg1eiIgc3Ryb2tlPSJ0cmFuc3BhcmVudCIgZmlsbD0id2hpdGUiLz48L3N2Zz4= +[i1a0]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/amd64_linux_cmake.yml?branch=main&event=push&label=&logo=cmake +[i1a1]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/amd64_linux_bazel.yml?branch=main&event=push&label=&logo=data:image/svg%2bxml;base64,PHN2ZyByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNiAuMTZsNS43ODYgNS43ODZMNiAxMS43MzIuMjE0IDUuOTQ2IDYgLjE2MXpNMCA2LjIxNFYxMmw1Ljc4NiA1Ljc4NlYxMkwwIDYuMjE0ek0xOCAuMTZsNS43ODYgNS43ODZMMTggMTEuNzMybC01Ljc4Ni01Ljc4NkwxOCAuMTYxek0yNCA2LjIxNFYxMmwtNS43ODYgNS43ODZWMTJMMjQgNi4yMTR6TTEyIDYuMTZsNS43ODYgNS43ODZMMTIgMTcuNzMybC01Ljc4Ni01Ljc4NkwxMiA2LjE2MXpNMTEuODQgMTguMDU0djUuNzg1bC01Ljc4Ni01Ljc4NXYtNS43ODZsNS43ODUgNS43ODZ6TTEyLjE2IDE4LjA1NGw1Ljc4Ni01Ljc4NnY1Ljc4NmwtNS43ODUgNS43ODV2LTUuNzg1eiIgc3Ryb2tlPSJ0cmFuc3BhcmVudCIgZmlsbD0id2hpdGUiLz48L3N2Zz4= +[i1b0]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/aarch64_linux_cmake.yml?branch=main&event=push&label=&logo=cmake +[i1b1]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/aarch64_linux_bazel.yml?branch=main&event=push&label=&logo=data:image/svg%2bxml;base64,PHN2ZyByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNiAuMTZsNS43ODYgNS43ODZMNiAxMS43MzIuMjE0IDUuOTQ2IDYgLjE2MXpNMCA2LjIxNFYxMmw1Ljc4NiA1Ljc4NlYxMkwwIDYuMjE0ek0xOCAuMTZsNS43ODYgNS43ODZMMTggMTEuNzMybC01Ljc4Ni01Ljc4NkwxOCAuMTYxek0yNCA2LjIxNFYxMmwtNS43ODYgNS43ODZWMTJMMjQgNi4yMTR6TTEyIDYuMTZsNS43ODYgNS43ODZMMTIgMTcuNzMybC01Ljc4Ni01Ljc4NkwxMiA2LjE2MXpNMTEuODQgMTguMDU0djUuNzg1bC01Ljc4Ni01Ljc4NXYtNS43ODZsNS43ODUgNS43ODZ6TTEyLjE2IDE4LjA1NGw1Ljc4Ni01Ljc4NnY1Ljc4NmwtNS43ODUgNS43ODV2LTUuNzg1eiIgc3Ryb2tlPSJ0cmFuc3BhcmVudCIgZmlsbD0id2hpdGUiLz48L3N2Zz4= +[i1c0]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/arm_linux_cmake.yml?branch=main&event=push&label=&logo=cmake +[i1d0]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/mips_linux_cmake.yml?branch=main&event=push&label=&logo=cmake +[i1e0]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/power_linux_cmake.yml?branch=main&event=push&label=&logo=cmake +[i1f0]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/riscv_linux_cmake.yml?branch=main&event=push&label=&logo=cmake +[i1h0]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/s390x_linux_cmake.yml?branch=main&event=push&label=&logo=cmake +[i2a0]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/amd64_freebsd_cmake.yml?branch=main&event=push&label=&logo=cmake +[i3a0]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/amd64_macos_cmake.yml?branch=main&event=push&label=&logo=cmake +[i4a0]: https://img.shields.io/github/actions/workflow/status/google/cpu_features/amd64_windows_cmake.yml?branch=main&event=push&label=&logo=cmake [l1a0]: https://github.com/google/cpu_features/actions/workflows/amd64_linux_cmake.yml [l1a1]: https://github.com/google/cpu_features/actions/workflows/amd64_linux_bazel.yml [l1b0]: https://github.com/google/cpu_features/actions/workflows/aarch64_linux_cmake.yml @@ -37,7 +36,6 @@ instructions) at runtime. [l1d0]: https://github.com/google/cpu_features/actions/workflows/mips_linux_cmake.yml [l1e0]: https://github.com/google/cpu_features/actions/workflows/power_linux_cmake.yml [l1f0]: https://github.com/google/cpu_features/actions/workflows/riscv_linux_cmake.yml -[l1g0]: https://github.com/google/cpu_features/actions/workflows/loongarch_linux_cmake.yml [l1h0]: https://github.com/google/cpu_features/actions/workflows/s390x_linux_cmake.yml [l2a0]: https://github.com/google/cpu_features/actions/workflows/amd64_freebsd_cmake.yml [l3a0]: https://github.com/google/cpu_features/actions/workflows/amd64_macos_cmake.yml diff --git a/scripts/generate_badges.d b/scripts/generate_badges.d index 8524737f..79882eb4 100644 --- a/scripts/generate_badges.d +++ b/scripts/generate_badges.d @@ -2,12 +2,17 @@ // 1. copy paste the whole code to https://run.dlang.io/ then click `run` // 2. `docker run --rm -it -v $(pwd):/src dlanguage/dmd dmd -run generate_badges.d` import std.algorithm : each, map, cartesianProduct, filter, joiner, sort, uniq; -import std.array : array; +import std.array; import std.conv : to; import std.format; import std.range : chain, only; import std.stdio; import std.traits : EnumMembers; +import std.string : representation; +import std.base64 : Base64; + +immutable string bazel_svg = ``; +const string bazel_svg_base64 = Base64.encode(representation(bazel_svg)); enum BuildSystem { @@ -45,7 +50,8 @@ const: string id() { - return format("%d%c%d", cast(uint)(os) + 1, cast(char)('a' + cpu), cast(uint)(build_system)); + return format("%d%c%d", cast(uint)(os) + 1, cast(char)('a' + cpu), + cast(uint)(build_system)); } string disabled_image_ref() @@ -65,6 +71,8 @@ const: bool enabled() { + if (cpu == Cpu.LOONGARCH) + return false; final switch (build_system) { case BuildSystem.CMake: @@ -81,9 +89,21 @@ const: return format("![]%s", disabled_image_ref); } + string append_logo(string url) + { + final switch (build_system) + { + case BuildSystem.CMake: + return url ~ "&logo=cmake"; + case BuildSystem.Bazel: + return url ~ "&logo=data:image/svg%2bxml;base64," ~ bazel_svg_base64; + } + } + string disabled_image_link() { - return format("%s: https://img.shields.io/badge/%s-N%%2FA-lightgrey", disabled_image_ref, build_system); + return append_logo(format("%s: https://img.shields.io/badge/n%%2Fa-lightgrey?", + disabled_image_ref)); } string filename() @@ -95,14 +115,16 @@ const: string link_decl() { - return format("%s: https://github.com/google/cpu_features/actions/workflows/%s", link_ref, filename()); + return format("%s: https://github.com/google/cpu_features/actions/workflows/%s", + link_ref, filename()); } string image_decl() { - return format( - "%s: https://img.shields.io/github/actions/workflow/status/google/cpu_features/%s?branch=main&label=%s", image_ref, filename(), build_system); + return append_logo(format("%s: https://img.shields.io/github/actions/workflow/status/google/cpu_features/%s?branch=main&event=push&label=", + image_ref, filename())); } + } auto tableHeader(in Cpu[] cpus) @@ -117,11 +139,9 @@ auto tableAlignment(in Cpu[] cpus) auto tableCell(Range)(in Os os, in Cpu cpu, Range badges) { - return badges - .filter!(b => b.cpu == cpu && b.os == os) + return badges.filter!(b => b.cpu == cpu && b.os == os) .map!(b => b.text()) - .joiner("
") - .to!string; + .joiner("
").to!string; } auto tableRow(Range)(in Os os, in Cpu[] cpus, Range badges) @@ -136,7 +156,8 @@ auto tableRows(Range)(in Os[] oses, in Cpu[] cpus, Range badges) auto table(Range)(in Os[] oses, in Cpu[] cpus, Range badges) { - return chain(only(tableHeader(cpus)), only(tableAlignment(cpus)), tableRows(oses, cpus, badges)); + return chain(only(tableHeader(cpus)), only(tableAlignment(cpus)), + tableRows(oses, cpus, badges)); } void main() @@ -144,26 +165,17 @@ void main() immutable allCpus = [EnumMembers!Cpu]; immutable allOses = [EnumMembers!Os]; immutable allBuildSystems = [EnumMembers!BuildSystem]; - auto badges = cartesianProduct(allCpus, allOses, allBuildSystems).map!( t => Badge(t[0], t[1], t[2])); - writefln("%(|%-( %s |%) |\n%) |", table(allOses, allCpus, badges)); writeln(); - badges - .filter!(b => !b.enabled) + badges.filter!(b => !b.enabled) .map!(b => b.disabled_image_link()) .array .sort .uniq .each!writeln; - - badges - .filter!(b => b.enabled) + badges.filter!(b => b.enabled) .map!(b => [b.link_decl(), b.image_decl()]) - .joiner() - .array - .sort - .uniq - .each!writeln; + .joiner().array.sort.uniq.each!writeln; }