dsh-remote 0.8.50 → 0.8.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/README.en.md +8 -0
  2. package/README.md +22 -0
  3. package/lib/client.js +15 -3
  4. package/lib/index.js +269 -8
  5. package/lib/instructions.js +288 -0
  6. package/lib/openssh.js +10 -1
  7. package/lib/pool.js +29 -1
  8. package/lib/remote-fs.js +26 -1
  9. package/lib/sftp-surface.js +46 -3
  10. package/lib/sshconfig.js +13 -3
  11. package/node_modules/buildcheck/.eslintrc.js +5 -0
  12. package/node_modules/buildcheck/.github/workflows/ci.yml +88 -0
  13. package/node_modules/buildcheck/.github/workflows/lint.yml +27 -0
  14. package/node_modules/buildcheck/.npmignore +3 -0
  15. package/node_modules/buildcheck/LICENSE +19 -0
  16. package/node_modules/buildcheck/README.md +106 -0
  17. package/node_modules/buildcheck/deps/Find-VisualStudio.cs +250 -0
  18. package/node_modules/buildcheck/lib/findvs.js +361 -0
  19. package/node_modules/buildcheck/lib/index.js +738 -0
  20. package/node_modules/buildcheck/package.json +36 -0
  21. package/node_modules/buildcheck/test/test.js +8 -0
  22. package/node_modules/cpu-features/.eslintrc.js +5 -0
  23. package/node_modules/cpu-features/.github/workflows/ci.yml +74 -0
  24. package/node_modules/cpu-features/.github/workflows/lint.yml +27 -0
  25. package/node_modules/cpu-features/LICENSE +19 -0
  26. package/node_modules/cpu-features/README.md +59 -0
  27. package/node_modules/cpu-features/binding.gyp +16 -0
  28. package/node_modules/cpu-features/buildcheck.js +32 -0
  29. package/node_modules/cpu-features/deps/cpu_features/.clang-format +4 -0
  30. package/node_modules/cpu-features/deps/cpu_features/.dockerignore +31 -0
  31. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/Dockerfile +5 -0
  32. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/aarch64_linux_cmake.yml +30 -0
  33. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_freebsd_cmake.yml +22 -0
  34. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_linux_bazel.yml +26 -0
  35. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_linux_cmake.yml +31 -0
  36. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_macos_cmake.yml +43 -0
  37. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_windows_cmake.yml +25 -0
  38. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/arm_linux_cmake.yml +31 -0
  39. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/clang_format.yml +24 -0
  40. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/mips_linux_cmake.yml +30 -0
  41. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/power_linux_cmake.yml +29 -0
  42. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/riscv_linux_cmake.yml +28 -0
  43. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/s390x_linux_cmake.yml +27 -0
  44. package/node_modules/cpu-features/deps/cpu_features/.grenrc.yml +21 -0
  45. package/node_modules/cpu-features/deps/cpu_features/BUILD.bazel +329 -0
  46. package/node_modules/cpu-features/deps/cpu_features/CMakeLists.txt +261 -0
  47. package/node_modules/cpu-features/deps/cpu_features/CONTRIBUTING.md +23 -0
  48. package/node_modules/cpu-features/deps/cpu_features/LICENSE +230 -0
  49. package/node_modules/cpu-features/deps/cpu_features/README.md +272 -0
  50. package/node_modules/cpu-features/deps/cpu_features/WORKSPACE +19 -0
  51. package/node_modules/cpu-features/deps/cpu_features/bazel/ci/README.md +5 -0
  52. package/node_modules/cpu-features/deps/cpu_features/bazel/platforms.bzl +11 -0
  53. package/node_modules/cpu-features/deps/cpu_features/cmake/CpuFeaturesConfig.cmake.in +3 -0
  54. package/node_modules/cpu-features/deps/cpu_features/cmake/CpuFeaturesNdkCompatConfig.cmake.in +3 -0
  55. package/node_modules/cpu-features/deps/cpu_features/cmake/README.md +30 -0
  56. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/Makefile +252 -0
  57. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/README.md +40 -0
  58. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/doc/docker.dot +64 -0
  59. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/doc/docker.svg +312 -0
  60. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/doc/generate_image.sh +7 -0
  61. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/docker/amd64/Dockerfile +48 -0
  62. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/docker/toolchain/Dockerfile +34 -0
  63. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/sample/CMakeLists.txt +22 -0
  64. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/sample/main.cpp +11 -0
  65. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/vagrant/freebsd/Vagrantfile +107 -0
  66. package/node_modules/cpu-features/deps/cpu_features/cmake/googletest.CMakeLists.txt.in +15 -0
  67. package/node_modules/cpu-features/deps/cpu_features/cpu_features.gyp +105 -0
  68. package/node_modules/cpu-features/deps/cpu_features/include/cpu_features_cache_info.h +54 -0
  69. package/node_modules/cpu-features/deps/cpu_features/include/cpu_features_macros.h +384 -0
  70. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_aarch64.h +259 -0
  71. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_arm.h +121 -0
  72. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_mips.h +74 -0
  73. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_ppc.h +149 -0
  74. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_riscv.h +72 -0
  75. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_s390x.h +108 -0
  76. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_x86.h +288 -0
  77. package/node_modules/cpu-features/deps/cpu_features/include/internal/bit_utils.h +40 -0
  78. package/node_modules/cpu-features/deps/cpu_features/include/internal/cpuid_x86.h +37 -0
  79. package/node_modules/cpu-features/deps/cpu_features/include/internal/filesystem.h +39 -0
  80. package/node_modules/cpu-features/deps/cpu_features/include/internal/hwcaps.h +240 -0
  81. package/node_modules/cpu-features/deps/cpu_features/include/internal/stack_line_reader.h +49 -0
  82. package/node_modules/cpu-features/deps/cpu_features/include/internal/string_view.h +110 -0
  83. package/node_modules/cpu-features/deps/cpu_features/include/internal/windows_utils.h +70 -0
  84. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/CMakeLists.txt +60 -0
  85. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/README.md +4 -0
  86. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/cpu-features.c +205 -0
  87. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/cpu-features.h +320 -0
  88. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/ndk-compat-test.c +12 -0
  89. package/node_modules/cpu-features/deps/cpu_features/patches/0001-Add-Apple-Silicon-Support.patch +456 -0
  90. package/node_modules/cpu-features/deps/cpu_features/scripts/generate_badges.d +165 -0
  91. package/node_modules/cpu-features/deps/cpu_features/scripts/make_release.sh +75 -0
  92. package/node_modules/cpu-features/deps/cpu_features/scripts/run_integration.sh +490 -0
  93. package/node_modules/cpu-features/deps/cpu_features/scripts/test_integration.sh +79 -0
  94. package/node_modules/cpu-features/deps/cpu_features/src/copy.inl +19 -0
  95. package/node_modules/cpu-features/deps/cpu_features/src/define_introspection.inl +86 -0
  96. package/node_modules/cpu-features/deps/cpu_features/src/define_introspection_and_hwcaps.inl +26 -0
  97. package/node_modules/cpu-features/deps/cpu_features/src/equals.inl +22 -0
  98. package/node_modules/cpu-features/deps/cpu_features/src/filesystem.c +62 -0
  99. package/node_modules/cpu-features/deps/cpu_features/src/hwcaps.c +169 -0
  100. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64__base_implementation.inl +88 -0
  101. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64_linux_or_android.c +79 -0
  102. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64_macos_or_iphone.c +82 -0
  103. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64_windows.c +138 -0
  104. package/node_modules/cpu-features/deps/cpu_features/src/impl_arm_linux_or_android.c +212 -0
  105. package/node_modules/cpu-features/deps/cpu_features/src/impl_mips_linux_or_android.c +93 -0
  106. package/node_modules/cpu-features/deps/cpu_features/src/impl_ppc_linux.c +163 -0
  107. package/node_modules/cpu-features/deps/cpu_features/src/impl_riscv_linux.c +111 -0
  108. package/node_modules/cpu-features/deps/cpu_features/src/impl_s390x_linux.c +120 -0
  109. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86__base_implementation.inl +2055 -0
  110. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_freebsd.c +68 -0
  111. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_linux_or_android.c +58 -0
  112. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_macos.c +57 -0
  113. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_windows.c +58 -0
  114. package/node_modules/cpu-features/deps/cpu_features/src/stack_line_reader.c +132 -0
  115. package/node_modules/cpu-features/deps/cpu_features/src/string_view.c +192 -0
  116. package/node_modules/cpu-features/deps/cpu_features/src/utils/list_cpu_features.c +461 -0
  117. package/node_modules/cpu-features/deps/cpu_features/test/CMakeLists.txt +114 -0
  118. package/node_modules/cpu-features/deps/cpu_features/test/bit_utils_test.cc +53 -0
  119. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_aarch64_test.cc +396 -0
  120. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_arm_test.cc +384 -0
  121. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_mips_test.cc +176 -0
  122. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_ppc_test.cc +131 -0
  123. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_riscv_test.cc +180 -0
  124. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_s390x_test.cc +82 -0
  125. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_x86_test.cc +1729 -0
  126. package/node_modules/cpu-features/deps/cpu_features/test/filesystem_for_testing.cc +103 -0
  127. package/node_modules/cpu-features/deps/cpu_features/test/filesystem_for_testing.h +61 -0
  128. package/node_modules/cpu-features/deps/cpu_features/test/hwcaps_for_testing.cc +52 -0
  129. package/node_modules/cpu-features/deps/cpu_features/test/hwcaps_for_testing.h +31 -0
  130. package/node_modules/cpu-features/deps/cpu_features/test/stack_line_reader_test.cc +132 -0
  131. package/node_modules/cpu-features/deps/cpu_features/test/string_view_test.cc +202 -0
  132. package/node_modules/cpu-features/lib/index.js +5 -0
  133. package/node_modules/cpu-features/package.json +40 -0
  134. package/node_modules/cpu-features/src/binding.cc +151 -0
  135. package/node_modules/cpu-features/test/test.js +12 -0
  136. package/package.json +1 -1
@@ -0,0 +1,456 @@
1
+ diff --git a/deps/cpu_features/CMakeLists.txt b/deps/cpu_features/CMakeLists.txt
2
+ index bcc9bb0..7a4f641 100644
3
+ --- a/deps/cpu_features/CMakeLists.txt
4
+ +++ b/deps/cpu_features/CMakeLists.txt
5
+ @@ -1,4 +1,4 @@
6
+ -cmake_minimum_required(VERSION 3.0)
7
+ +cmake_minimum_required(VERSION 3.19.2)
8
+
9
+ # option() honors normal variables.
10
+ # see: https://cmake.org/cmake/help/git-stage/policy/CMP0077.html
11
+ @@ -147,7 +147,7 @@ target_link_libraries(cpu_features PUBLIC ${CMAKE_DL_LIBS})
12
+ target_include_directories(cpu_features
13
+ PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/cpu_features>
14
+ )
15
+ -if(PROCESSOR_IS_X86)
16
+ +if(PROCESSOR_IS_X86 OR PROCESSOR_IS_AARCH64)
17
+ if(APPLE)
18
+ target_compile_definitions(cpu_features PRIVATE HAVE_SYSCTLBYNAME)
19
+ endif()
20
+ diff --git a/deps/cpu_features/include/cpu_features_macros.h b/deps/cpu_features/include/cpu_features_macros.h
21
+ index 215b567..652335d 100644
22
+ --- a/deps/cpu_features/include/cpu_features_macros.h
23
+ +++ b/deps/cpu_features/include/cpu_features_macros.h
24
+ @@ -39,7 +39,7 @@
25
+ #define CPU_FEATURES_ARCH_ARM
26
+ #endif
27
+
28
+ -#if (defined(__aarch64__) || defined(_M_ARM64))
29
+ +#if (defined(__aarch64__) || defined(__arm64__) || defined(_M_ARM64))
30
+ #define CPU_FEATURES_ARCH_AARCH64
31
+ #endif
32
+
33
+ diff --git a/deps/cpu_features/src/impl_aarch64__base_implementation.inl b/deps/cpu_features/src/impl_aarch64__base_implementation.inl
34
+ new file mode 100644
35
+ index 0000000..9677a6f
36
+ --- /dev/null
37
+ +++ b/deps/cpu_features/src/impl_aarch64__base_implementation.inl
38
+ @@ -0,0 +1,88 @@
39
+ +// Copyright 2021 Google LLC
40
+ +//
41
+ +// Licensed under the Apache License, Version 2.0 (the "License");
42
+ +// you may not use this file except in compliance with the License.
43
+ +// You may obtain a copy of the License at
44
+ +//
45
+ +// http://www.apache.org/licenses/LICENSE-2.0
46
+ +//
47
+ +// Unless required by applicable law or agreed to in writing, software
48
+ +// distributed under the License is distributed on an "AS IS" BASIS,
49
+ +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
50
+ +// See the License for the specific language governing permissions and
51
+ +// limitations under the License.
52
+ +
53
+ +#include <stdbool.h>
54
+ +
55
+ +#include "cpuinfo_aarch64.h"
56
+ +#include "internal/bit_utils.h"
57
+ +#include "internal/filesystem.h"
58
+ +#include "internal/stack_line_reader.h"
59
+ +#include "internal/string_view.h"
60
+ +
61
+ +#if !defined(CPU_FEATURES_ARCH_AARCH64)
62
+ +#error "Cannot compile aarch64_base on a non aarch64 platform."
63
+ +#endif
64
+ +
65
+ +////////////////////////////////////////////////////////////////////////////////
66
+ +// Definitions for introspection.
67
+ +////////////////////////////////////////////////////////////////////////////////
68
+ +#define INTROSPECTION_TABLE \
69
+ + LINE(AARCH64_FP, fp, "fp", AARCH64_HWCAP_FP, 0) \
70
+ + LINE(AARCH64_ASIMD, asimd, "asimd", AARCH64_HWCAP_ASIMD, 0) \
71
+ + LINE(AARCH64_EVTSTRM, evtstrm, "evtstrm", AARCH64_HWCAP_EVTSTRM, 0) \
72
+ + LINE(AARCH64_AES, aes, "aes", AARCH64_HWCAP_AES, 0) \
73
+ + LINE(AARCH64_PMULL, pmull, "pmull", AARCH64_HWCAP_PMULL, 0) \
74
+ + LINE(AARCH64_SHA1, sha1, "sha1", AARCH64_HWCAP_SHA1, 0) \
75
+ + LINE(AARCH64_SHA2, sha2, "sha2", AARCH64_HWCAP_SHA2, 0) \
76
+ + LINE(AARCH64_CRC32, crc32, "crc32", AARCH64_HWCAP_CRC32, 0) \
77
+ + LINE(AARCH64_ATOMICS, atomics, "atomics", AARCH64_HWCAP_ATOMICS, 0) \
78
+ + LINE(AARCH64_FPHP, fphp, "fphp", AARCH64_HWCAP_FPHP, 0) \
79
+ + LINE(AARCH64_ASIMDHP, asimdhp, "asimdhp", AARCH64_HWCAP_ASIMDHP, 0) \
80
+ + LINE(AARCH64_CPUID, cpuid, "cpuid", AARCH64_HWCAP_CPUID, 0) \
81
+ + LINE(AARCH64_ASIMDRDM, asimdrdm, "asimdrdm", AARCH64_HWCAP_ASIMDRDM, 0) \
82
+ + LINE(AARCH64_JSCVT, jscvt, "jscvt", AARCH64_HWCAP_JSCVT, 0) \
83
+ + LINE(AARCH64_FCMA, fcma, "fcma", AARCH64_HWCAP_FCMA, 0) \
84
+ + LINE(AARCH64_LRCPC, lrcpc, "lrcpc", AARCH64_HWCAP_LRCPC, 0) \
85
+ + LINE(AARCH64_DCPOP, dcpop, "dcpop", AARCH64_HWCAP_DCPOP, 0) \
86
+ + LINE(AARCH64_SHA3, sha3, "sha3", AARCH64_HWCAP_SHA3, 0) \
87
+ + LINE(AARCH64_SM3, sm3, "sm3", AARCH64_HWCAP_SM3, 0) \
88
+ + LINE(AARCH64_SM4, sm4, "sm4", AARCH64_HWCAP_SM4, 0) \
89
+ + LINE(AARCH64_ASIMDDP, asimddp, "asimddp", AARCH64_HWCAP_ASIMDDP, 0) \
90
+ + LINE(AARCH64_SHA512, sha512, "sha512", AARCH64_HWCAP_SHA512, 0) \
91
+ + LINE(AARCH64_SVE, sve, "sve", AARCH64_HWCAP_SVE, 0) \
92
+ + LINE(AARCH64_ASIMDFHM, asimdfhm, "asimdfhm", AARCH64_HWCAP_ASIMDFHM, 0) \
93
+ + LINE(AARCH64_DIT, dit, "dit", AARCH64_HWCAP_DIT, 0) \
94
+ + LINE(AARCH64_USCAT, uscat, "uscat", AARCH64_HWCAP_USCAT, 0) \
95
+ + LINE(AARCH64_ILRCPC, ilrcpc, "ilrcpc", AARCH64_HWCAP_ILRCPC, 0) \
96
+ + LINE(AARCH64_FLAGM, flagm, "flagm", AARCH64_HWCAP_FLAGM, 0) \
97
+ + LINE(AARCH64_SSBS, ssbs, "ssbs", AARCH64_HWCAP_SSBS, 0) \
98
+ + LINE(AARCH64_SB, sb, "sb", AARCH64_HWCAP_SB, 0) \
99
+ + LINE(AARCH64_PACA, paca, "paca", AARCH64_HWCAP_PACA, 0) \
100
+ + LINE(AARCH64_PACG, pacg, "pacg", AARCH64_HWCAP_PACG, 0) \
101
+ + LINE(AARCH64_DCPODP, dcpodp, "dcpodp", 0, AARCH64_HWCAP2_DCPODP) \
102
+ + LINE(AARCH64_SVE2, sve2, "sve2", 0, AARCH64_HWCAP2_SVE2) \
103
+ + LINE(AARCH64_SVEAES, sveaes, "sveaes", 0, AARCH64_HWCAP2_SVEAES) \
104
+ + LINE(AARCH64_SVEPMULL, svepmull, "svepmull", 0, AARCH64_HWCAP2_SVEPMULL) \
105
+ + LINE(AARCH64_SVEBITPERM, svebitperm, "svebitperm", 0, \
106
+ + AARCH64_HWCAP2_SVEBITPERM) \
107
+ + LINE(AARCH64_SVESHA3, svesha3, "svesha3", 0, AARCH64_HWCAP2_SVESHA3) \
108
+ + LINE(AARCH64_SVESM4, svesm4, "svesm4", 0, AARCH64_HWCAP2_SVESM4) \
109
+ + LINE(AARCH64_FLAGM2, flagm2, "flagm2", 0, AARCH64_HWCAP2_FLAGM2) \
110
+ + LINE(AARCH64_FRINT, frint, "frint", 0, AARCH64_HWCAP2_FRINT) \
111
+ + LINE(AARCH64_SVEI8MM, svei8mm, "svei8mm", 0, AARCH64_HWCAP2_SVEI8MM) \
112
+ + LINE(AARCH64_SVEF32MM, svef32mm, "svef32mm", 0, AARCH64_HWCAP2_SVEF32MM) \
113
+ + LINE(AARCH64_SVEF64MM, svef64mm, "svef64mm", 0, AARCH64_HWCAP2_SVEF64MM) \
114
+ + LINE(AARCH64_SVEBF16, svebf16, "svebf16", 0, AARCH64_HWCAP2_SVEBF16) \
115
+ + LINE(AARCH64_I8MM, i8mm, "i8mm", 0, AARCH64_HWCAP2_I8MM) \
116
+ + LINE(AARCH64_BF16, bf16, "bf16", 0, AARCH64_HWCAP2_BF16) \
117
+ + LINE(AARCH64_DGH, dgh, "dgh", 0, AARCH64_HWCAP2_DGH) \
118
+ + LINE(AARCH64_RNG, rng, "rng", 0, AARCH64_HWCAP2_RNG) \
119
+ + LINE(AARCH64_BTI, bti, "bti", 0, AARCH64_HWCAP2_BTI) \
120
+ + LINE(AARCH64_MTE, mte, "mte", 0, AARCH64_HWCAP2_MTE) \
121
+ + LINE(AARCH64_ECV, ecv, "ecv", 0, AARCH64_HWCAP2_ECV) \
122
+ + LINE(AARCH64_AFP, afp, "afp", 0, AARCH64_HWCAP2_AFP) \
123
+ + LINE(AARCH64_RPRES, rpres, "rpres", 0, AARCH64_HWCAP2_RPRES)
124
+ +#define INTROSPECTION_PREFIX Aarch64
125
+ +#define INTROSPECTION_ENUM_PREFIX AARCH64
126
+ +#include "define_introspection_and_hwcaps.inl"
127
+ diff --git a/deps/cpu_features/src/impl_aarch64_linux_or_android.c b/deps/cpu_features/src/impl_aarch64_linux_or_android.c
128
+ index ef923d9..c0a764c 100644
129
+ --- a/deps/cpu_features/src/impl_aarch64_linux_or_android.c
130
+ +++ b/deps/cpu_features/src/impl_aarch64_linux_or_android.c
131
+ @@ -17,81 +17,7 @@
132
+ #ifdef CPU_FEATURES_ARCH_AARCH64
133
+ #if defined(CPU_FEATURES_OS_LINUX) || defined(CPU_FEATURES_OS_ANDROID)
134
+
135
+ -#include "cpuinfo_aarch64.h"
136
+ -
137
+ -////////////////////////////////////////////////////////////////////////////////
138
+ -// Definitions for introspection.
139
+ -////////////////////////////////////////////////////////////////////////////////
140
+ -#define INTROSPECTION_TABLE \
141
+ - LINE(AARCH64_FP, fp, "fp", AARCH64_HWCAP_FP, 0) \
142
+ - LINE(AARCH64_ASIMD, asimd, "asimd", AARCH64_HWCAP_ASIMD, 0) \
143
+ - LINE(AARCH64_EVTSTRM, evtstrm, "evtstrm", AARCH64_HWCAP_EVTSTRM, 0) \
144
+ - LINE(AARCH64_AES, aes, "aes", AARCH64_HWCAP_AES, 0) \
145
+ - LINE(AARCH64_PMULL, pmull, "pmull", AARCH64_HWCAP_PMULL, 0) \
146
+ - LINE(AARCH64_SHA1, sha1, "sha1", AARCH64_HWCAP_SHA1, 0) \
147
+ - LINE(AARCH64_SHA2, sha2, "sha2", AARCH64_HWCAP_SHA2, 0) \
148
+ - LINE(AARCH64_CRC32, crc32, "crc32", AARCH64_HWCAP_CRC32, 0) \
149
+ - LINE(AARCH64_ATOMICS, atomics, "atomics", AARCH64_HWCAP_ATOMICS, 0) \
150
+ - LINE(AARCH64_FPHP, fphp, "fphp", AARCH64_HWCAP_FPHP, 0) \
151
+ - LINE(AARCH64_ASIMDHP, asimdhp, "asimdhp", AARCH64_HWCAP_ASIMDHP, 0) \
152
+ - LINE(AARCH64_CPUID, cpuid, "cpuid", AARCH64_HWCAP_CPUID, 0) \
153
+ - LINE(AARCH64_ASIMDRDM, asimdrdm, "asimdrdm", AARCH64_HWCAP_ASIMDRDM, 0) \
154
+ - LINE(AARCH64_JSCVT, jscvt, "jscvt", AARCH64_HWCAP_JSCVT, 0) \
155
+ - LINE(AARCH64_FCMA, fcma, "fcma", AARCH64_HWCAP_FCMA, 0) \
156
+ - LINE(AARCH64_LRCPC, lrcpc, "lrcpc", AARCH64_HWCAP_LRCPC, 0) \
157
+ - LINE(AARCH64_DCPOP, dcpop, "dcpop", AARCH64_HWCAP_DCPOP, 0) \
158
+ - LINE(AARCH64_SHA3, sha3, "sha3", AARCH64_HWCAP_SHA3, 0) \
159
+ - LINE(AARCH64_SM3, sm3, "sm3", AARCH64_HWCAP_SM3, 0) \
160
+ - LINE(AARCH64_SM4, sm4, "sm4", AARCH64_HWCAP_SM4, 0) \
161
+ - LINE(AARCH64_ASIMDDP, asimddp, "asimddp", AARCH64_HWCAP_ASIMDDP, 0) \
162
+ - LINE(AARCH64_SHA512, sha512, "sha512", AARCH64_HWCAP_SHA512, 0) \
163
+ - LINE(AARCH64_SVE, sve, "sve", AARCH64_HWCAP_SVE, 0) \
164
+ - LINE(AARCH64_ASIMDFHM, asimdfhm, "asimdfhm", AARCH64_HWCAP_ASIMDFHM, 0) \
165
+ - LINE(AARCH64_DIT, dit, "dit", AARCH64_HWCAP_DIT, 0) \
166
+ - LINE(AARCH64_USCAT, uscat, "uscat", AARCH64_HWCAP_USCAT, 0) \
167
+ - LINE(AARCH64_ILRCPC, ilrcpc, "ilrcpc", AARCH64_HWCAP_ILRCPC, 0) \
168
+ - LINE(AARCH64_FLAGM, flagm, "flagm", AARCH64_HWCAP_FLAGM, 0) \
169
+ - LINE(AARCH64_SSBS, ssbs, "ssbs", AARCH64_HWCAP_SSBS, 0) \
170
+ - LINE(AARCH64_SB, sb, "sb", AARCH64_HWCAP_SB, 0) \
171
+ - LINE(AARCH64_PACA, paca, "paca", AARCH64_HWCAP_PACA, 0) \
172
+ - LINE(AARCH64_PACG, pacg, "pacg", AARCH64_HWCAP_PACG, 0) \
173
+ - LINE(AARCH64_DCPODP, dcpodp, "dcpodp", 0, AARCH64_HWCAP2_DCPODP) \
174
+ - LINE(AARCH64_SVE2, sve2, "sve2", 0, AARCH64_HWCAP2_SVE2) \
175
+ - LINE(AARCH64_SVEAES, sveaes, "sveaes", 0, AARCH64_HWCAP2_SVEAES) \
176
+ - LINE(AARCH64_SVEPMULL, svepmull, "svepmull", 0, AARCH64_HWCAP2_SVEPMULL) \
177
+ - LINE(AARCH64_SVEBITPERM, svebitperm, "svebitperm", 0, \
178
+ - AARCH64_HWCAP2_SVEBITPERM) \
179
+ - LINE(AARCH64_SVESHA3, svesha3, "svesha3", 0, AARCH64_HWCAP2_SVESHA3) \
180
+ - LINE(AARCH64_SVESM4, svesm4, "svesm4", 0, AARCH64_HWCAP2_SVESM4) \
181
+ - LINE(AARCH64_FLAGM2, flagm2, "flagm2", 0, AARCH64_HWCAP2_FLAGM2) \
182
+ - LINE(AARCH64_FRINT, frint, "frint", 0, AARCH64_HWCAP2_FRINT) \
183
+ - LINE(AARCH64_SVEI8MM, svei8mm, "svei8mm", 0, AARCH64_HWCAP2_SVEI8MM) \
184
+ - LINE(AARCH64_SVEF32MM, svef32mm, "svef32mm", 0, AARCH64_HWCAP2_SVEF32MM) \
185
+ - LINE(AARCH64_SVEF64MM, svef64mm, "svef64mm", 0, AARCH64_HWCAP2_SVEF64MM) \
186
+ - LINE(AARCH64_SVEBF16, svebf16, "svebf16", 0, AARCH64_HWCAP2_SVEBF16) \
187
+ - LINE(AARCH64_I8MM, i8mm, "i8mm", 0, AARCH64_HWCAP2_I8MM) \
188
+ - LINE(AARCH64_BF16, bf16, "bf16", 0, AARCH64_HWCAP2_BF16) \
189
+ - LINE(AARCH64_DGH, dgh, "dgh", 0, AARCH64_HWCAP2_DGH) \
190
+ - LINE(AARCH64_RNG, rng, "rng", 0, AARCH64_HWCAP2_RNG) \
191
+ - LINE(AARCH64_BTI, bti, "bti", 0, AARCH64_HWCAP2_BTI) \
192
+ - LINE(AARCH64_MTE, mte, "mte", 0, AARCH64_HWCAP2_MTE) \
193
+ - LINE(AARCH64_ECV, ecv, "ecv", 0, AARCH64_HWCAP2_ECV) \
194
+ - LINE(AARCH64_AFP, afp, "afp", 0, AARCH64_HWCAP2_AFP) \
195
+ - LINE(AARCH64_RPRES, rpres, "rpres", 0, AARCH64_HWCAP2_RPRES)
196
+ -#define INTROSPECTION_PREFIX Aarch64
197
+ -#define INTROSPECTION_ENUM_PREFIX AARCH64
198
+ -#include "define_introspection_and_hwcaps.inl"
199
+ -
200
+ -////////////////////////////////////////////////////////////////////////////////
201
+ -// Implementation.
202
+ -////////////////////////////////////////////////////////////////////////////////
203
+ -
204
+ -#include <stdbool.h>
205
+ -
206
+ -#include "internal/bit_utils.h"
207
+ -#include "internal/filesystem.h"
208
+ -#include "internal/stack_line_reader.h"
209
+ -#include "internal/string_view.h"
210
+ +#include "impl_aarch64__base_implementation.inl"
211
+
212
+ static bool HandleAarch64Line(const LineResult result,
213
+ Aarch64Info* const info) {
214
+ diff --git a/deps/cpu_features/src/impl_aarch64_macos_or_iphone.c b/deps/cpu_features/src/impl_aarch64_macos_or_iphone.c
215
+ new file mode 100644
216
+ index 0000000..0f95058
217
+ --- /dev/null
218
+ +++ b/deps/cpu_features/src/impl_aarch64_macos_or_iphone.c
219
+ @@ -0,0 +1,82 @@
220
+ +// Copyright 2021 Google LLC
221
+ +//
222
+ +// Licensed under the Apache License, Version 2.0 (the "License");
223
+ +// you may not use this file except in compliance with the License.
224
+ +// You may obtain a copy of the License at
225
+ +//
226
+ +// http://www.apache.org/licenses/LICENSE-2.0
227
+ +//
228
+ +// Unless required by applicable law or agreed to in writing, software
229
+ +// distributed under the License is distributed on an "AS IS" BASIS,
230
+ +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
231
+ +// See the License for the specific language governing permissions and
232
+ +// limitations under the License.
233
+ +
234
+ +#include "cpu_features_macros.h"
235
+ +
236
+ +#ifdef CPU_FEATURES_ARCH_AARCH64
237
+ +#if defined(CPU_FEATURES_OS_MACOS) || defined(CPU_FEATURES_OS_IPHONE)
238
+ +
239
+ +#include "impl_aarch64__base_implementation.inl"
240
+ +
241
+ +#if !defined(HAVE_SYSCTLBYNAME)
242
+ +#error "Darwin needs support for sysctlbyname"
243
+ +#endif
244
+ +#include <sys/sysctl.h>
245
+ +
246
+ +#if defined(CPU_FEATURES_MOCK_SYSCTL_AARCH64)
247
+ +extern bool GetDarwinSysCtlByName(const char*);
248
+ +extern int GetDarwinSysCtlByNameValue(const char* name);
249
+ +#else
250
+ +static int GetDarwinSysCtlByNameValue(const char* name) {
251
+ + int enabled;
252
+ + size_t enabled_len = sizeof(enabled);
253
+ + const int failure = sysctlbyname(name, &enabled, &enabled_len, NULL, 0);
254
+ + return failure ? 0 : enabled;
255
+ +}
256
+ +
257
+ +static bool GetDarwinSysCtlByName(const char* name) {
258
+ + return GetDarwinSysCtlByNameValue(name) != 0;
259
+ +}
260
+ +#endif
261
+ +
262
+ +static const Aarch64Info kEmptyAarch64Info;
263
+ +
264
+ +Aarch64Info GetAarch64Info(void) {
265
+ + Aarch64Info info = kEmptyAarch64Info;
266
+ +
267
+ + // Handling Darwin platform through sysctlbyname.
268
+ + info.implementer = GetDarwinSysCtlByNameValue("hw.cputype");
269
+ + info.variant = GetDarwinSysCtlByNameValue("hw.cpusubtype");
270
+ + info.part = GetDarwinSysCtlByNameValue("hw.cpufamily");
271
+ + info.revision = GetDarwinSysCtlByNameValue("hw.cpusubfamily");
272
+ +
273
+ + info.features.fp = GetDarwinSysCtlByName("hw.optional.floatingpoint");
274
+ + info.features.asimd = GetDarwinSysCtlByName("hw.optional.AdvSIMD");
275
+ + info.features.aes = GetDarwinSysCtlByName("hw.optional.arm.FEAT_AES");
276
+ + info.features.pmull = GetDarwinSysCtlByName("hw.optional.arm.FEAT_PMULL");
277
+ + info.features.sha1 = GetDarwinSysCtlByName("hw.optional.arm.FEAT_SHA1");
278
+ + info.features.sha2 = GetDarwinSysCtlByName("hw.optional.arm.FEAT_SHA2");
279
+ + info.features.crc32 = GetDarwinSysCtlByName("hw.optional.armv8_crc32");
280
+ + info.features.atomics = GetDarwinSysCtlByName("hw.optional.armv8_1_atomics");
281
+ + info.features.fphp = GetDarwinSysCtlByName("hw.optional.neon_hpfp");
282
+ + info.features.jscvt = GetDarwinSysCtlByName("hw.optional.arm.FEAT_JSCVT");
283
+ + info.features.fcma = GetDarwinSysCtlByName("hw.optional.arm.FEAT_FCMA");
284
+ + info.features.lrcpc = GetDarwinSysCtlByName("hw.optional.arm.FEAT_LRCPC");
285
+ + info.features.sha3 = GetDarwinSysCtlByName("hw.optional.armv8_2_sha3");
286
+ + info.features.sha512 = GetDarwinSysCtlByName("hw.optional.armv8_2_sha512");
287
+ + info.features.asimdfhm = GetDarwinSysCtlByName("hw.optional.armv8_2_fhm");
288
+ + info.features.flagm = GetDarwinSysCtlByName("hw.optional.arm.FEAT_FLAGM");
289
+ + info.features.flagm2 = GetDarwinSysCtlByName("hw.optional.arm.FEAT_FLAGM2");
290
+ + info.features.ssbs = GetDarwinSysCtlByName("hw.optional.arm.FEAT_SSBS");
291
+ + info.features.sb = GetDarwinSysCtlByName("hw.optional.arm.FEAT_SB");
292
+ + info.features.i8mm = GetDarwinSysCtlByName("hw.optional.arm.FEAT_I8MM");
293
+ + info.features.bf16 = GetDarwinSysCtlByName("hw.optional.arm.FEAT_BF16");
294
+ + info.features.bti = GetDarwinSysCtlByName("hw.optional.arm.FEAT_BTI");
295
+ + info.features.ecv = GetDarwinSysCtlByName("hw.optional.arm.FEAT_ECV");
296
+ +
297
+ + return info;
298
+ +}
299
+ +
300
+ +#endif // defined(CPU_FEATURES_OS_MACOS) || defined(CPU_FEATURES_OS_IPHONE)
301
+ +#endif // CPU_FEATURES_ARCH_AARCH64
302
+ diff --git a/deps/cpu_features/test/CMakeLists.txt b/deps/cpu_features/test/CMakeLists.txt
303
+ index f627d74..80a0466 100644
304
+ --- a/deps/cpu_features/test/CMakeLists.txt
305
+ +++ b/deps/cpu_features/test/CMakeLists.txt
306
+ @@ -74,7 +74,12 @@ if(PROCESSOR_IS_AARCH64)
307
+ add_executable(cpuinfo_aarch64_test
308
+ cpuinfo_aarch64_test.cc
309
+ ../src/impl_aarch64_linux_or_android.c
310
+ + ../src/impl_aarch64_macos_or_iphone.c
311
+ ../src/impl_aarch64_windows.c)
312
+ + if(APPLE)
313
+ + target_compile_definitions(cpuinfo_aarch64_test PUBLIC CPU_FEATURES_MOCK_SYSCTL_AARCH64)
314
+ + target_compile_definitions(cpuinfo_aarch64_test PRIVATE HAVE_SYSCTLBYNAME)
315
+ + endif()
316
+ target_compile_definitions(cpuinfo_aarch64_test PUBLIC CPU_FEATURES_MOCK_CPUID_AARCH64)
317
+ target_link_libraries(cpuinfo_aarch64_test all_libraries)
318
+ add_test(NAME cpuinfo_aarch64_test COMMAND cpuinfo_aarch64_test)
319
+ diff --git a/deps/cpu_features/test/cpuinfo_aarch64_test.cc b/deps/cpu_features/test/cpuinfo_aarch64_test.cc
320
+ index ef9abae..b43d1aa 100644
321
+ --- a/deps/cpu_features/test/cpuinfo_aarch64_test.cc
322
+ +++ b/deps/cpu_features/test/cpuinfo_aarch64_test.cc
323
+ @@ -96,6 +96,125 @@ TEST(CpuinfoAarch64Test, Aarch64FeaturesEnum) {
324
+ #if defined(CPU_FEATURES_OS_LINUX)
325
+ void DisableHardwareCapabilities() { SetHardwareCapabilities(0, 0); }
326
+
327
+ +#if defined(CPU_FEATURES_OS_MACOS)
328
+ +
329
+ +class FakeCpu {
330
+ + public:
331
+ + bool GetDarwinSysCtlByName(std::string name) const {
332
+ + return darwin_sysctlbyname_.count(name);
333
+ + }
334
+ +
335
+ + int GetDarwinSysCtlByNameValue(std::string name) const {
336
+ + std::map<std::string, int>::const_iterator iter = darwin_sysctlbynamevalue_.find(name);
337
+ + if (iter != std::end(darwin_sysctlbynamevalue_)) {
338
+ + return iter->second;
339
+ + }
340
+ +
341
+ + return 0;
342
+ + }
343
+ +
344
+ + void SetDarwinSysCtlByName(std::string name) {
345
+ + darwin_sysctlbyname_.insert(name);
346
+ + }
347
+ +
348
+ + void SetDarwinSysCtlByNameValue(std::string name, int value) {
349
+ + darwin_sysctlbynamevalue_[name] = value;
350
+ + }
351
+ + private:
352
+ + std::set<std::string> darwin_sysctlbyname_;
353
+ + std::map<std::string, int> darwin_sysctlbynamevalue_;
354
+ +};
355
+ +
356
+ +static FakeCpu* g_fake_cpu_instance = nullptr;
357
+ +
358
+ +static FakeCpu& cpu() {
359
+ + assert(g_fake_cpu_instance != nullptr);
360
+ + return *g_fake_cpu_instance;
361
+ +}
362
+ +
363
+ +extern "C" bool GetDarwinSysCtlByName(const char* name) {
364
+ + return cpu().GetDarwinSysCtlByName(name);
365
+ +}
366
+ +
367
+ +extern "C" int GetDarwinSysCtlByNameValue(const char *name) {
368
+ + return cpu().GetDarwinSysCtlByNameValue(name);
369
+ +}
370
+ +
371
+ +class CpuinfoAarch64Test : public ::testing::Test {
372
+ + protected:
373
+ + void SetUp() override {
374
+ + assert(g_fake_cpu_instance == nullptr);
375
+ + g_fake_cpu_instance = new FakeCpu();
376
+ + }
377
+ + void TearDown() override {
378
+ + delete g_fake_cpu_instance;
379
+ + g_fake_cpu_instance = nullptr;
380
+ + }
381
+ +};
382
+ +
383
+ +TEST_F(CpuinfoAarch64Test, FromDarwinSysctlFromName) {
384
+ + cpu().SetDarwinSysCtlByName("hw.optional.floatingpoint");
385
+ + cpu().SetDarwinSysCtlByName("hw.optional.neon");
386
+ + cpu().SetDarwinSysCtlByName("hw.optional.neon_hpfp");
387
+ + cpu().SetDarwinSysCtlByName("hw.optional.neon_fp16");
388
+ + cpu().SetDarwinSysCtlByName("hw.optional.armv8_1_atomics");
389
+ + cpu().SetDarwinSysCtlByName("hw.optional.armv8_crc32");
390
+ + cpu().SetDarwinSysCtlByName("hw.optional.armv8_2_fhm");
391
+ + cpu().SetDarwinSysCtlByName("hw.optional.armv8_2_sha512");
392
+ + cpu().SetDarwinSysCtlByName("hw.optional.armv8_2_sha3");
393
+ + cpu().SetDarwinSysCtlByName("hw.optional.amx_version");
394
+ + cpu().SetDarwinSysCtlByName("hw.optional.ucnormal_mem");
395
+ + cpu().SetDarwinSysCtlByName("hw.optional.arm64");
396
+ +
397
+ + cpu().SetDarwinSysCtlByNameValue("hw.cputype", 16777228);
398
+ + cpu().SetDarwinSysCtlByNameValue("hw.cpusubtype", 2);
399
+ + cpu().SetDarwinSysCtlByNameValue("hw.cpu64bit", 1);
400
+ + cpu().SetDarwinSysCtlByNameValue("hw.cpufamily", 458787763);
401
+ + cpu().SetDarwinSysCtlByNameValue("hw.cpusubfamily", 2);
402
+ +
403
+ + const auto info = GetAarch64Info();
404
+ +
405
+ + EXPECT_EQ(info.implementer, 0x100000C);
406
+ + EXPECT_EQ(info.variant, 2);
407
+ + EXPECT_EQ(info.part, 0x1B588BB3);
408
+ + EXPECT_EQ(info.revision, 2);
409
+ +
410
+ + EXPECT_TRUE(info.features.fp);
411
+ + EXPECT_FALSE(info.features.asimd);
412
+ + EXPECT_FALSE(info.features.evtstrm);
413
+ + EXPECT_FALSE(info.features.aes);
414
+ + EXPECT_FALSE(info.features.pmull);
415
+ + EXPECT_FALSE(info.features.sha1);
416
+ + EXPECT_FALSE(info.features.sha2);
417
+ + EXPECT_TRUE(info.features.crc32);
418
+ + EXPECT_TRUE(info.features.atomics);
419
+ + EXPECT_TRUE(info.features.fphp);
420
+ + EXPECT_FALSE(info.features.asimdhp);
421
+ + EXPECT_FALSE(info.features.cpuid);
422
+ + EXPECT_FALSE(info.features.asimdrdm);
423
+ + EXPECT_FALSE(info.features.jscvt);
424
+ + EXPECT_FALSE(info.features.fcma);
425
+ + EXPECT_FALSE(info.features.lrcpc);
426
+ + EXPECT_FALSE(info.features.dcpop);
427
+ + EXPECT_TRUE(info.features.sha3);
428
+ + EXPECT_FALSE(info.features.sm3);
429
+ + EXPECT_FALSE(info.features.sm4);
430
+ + EXPECT_FALSE(info.features.asimddp);
431
+ + EXPECT_TRUE(info.features.sha512);
432
+ + EXPECT_FALSE(info.features.sve);
433
+ + EXPECT_TRUE(info.features.asimdfhm);
434
+ + EXPECT_FALSE(info.features.dit);
435
+ + EXPECT_FALSE(info.features.uscat);
436
+ + EXPECT_FALSE(info.features.ilrcpc);
437
+ + EXPECT_FALSE(info.features.flagm);
438
+ + EXPECT_FALSE(info.features.ssbs);
439
+ + EXPECT_FALSE(info.features.sb);
440
+ + EXPECT_FALSE(info.features.paca);
441
+ + EXPECT_FALSE(info.features.pacg);
442
+ +}
443
+ +
444
+ +#else
445
+ +
446
+ TEST(CpuinfoAarch64Test, FromHardwareCap) {
447
+ ResetHwcaps();
448
+ SetHardwareCapabilities(AARCH64_HWCAP_FP | AARCH64_HWCAP_AES, 0);
449
+ @@ -163,6 +282,7 @@ TEST(CpuinfoAarch64Test, FromHardwareCap2) {
450
+ EXPECT_FALSE(info.features.dgh);
451
+ EXPECT_FALSE(info.features.rng);
452
+ }
453
+ +#endif // CPU_FEATURES_OS_MACOS
454
+
455
+ TEST(CpuinfoAarch64Test, ARMCortexA53) {
456
+ ResetHwcaps();
@@ -0,0 +1,165 @@
1
+ import std.algorithm : each, map, cartesianProduct, filter, joiner, sort, uniq;
2
+ import std.array : array;
3
+ import std.conv : to;
4
+ import std.format;
5
+ import std.range : chain, only;
6
+ import std.stdio;
7
+ import std.traits : EnumMembers;
8
+
9
+ enum BuildSystem
10
+ {
11
+ CMake,
12
+ Bazel
13
+ }
14
+
15
+ enum Cpu
16
+ {
17
+ amd64,
18
+ AArch64,
19
+ ARM,
20
+ MIPS,
21
+ POWER,
22
+ RISCV,
23
+ s390x,
24
+ }
25
+
26
+ enum Os
27
+ {
28
+ Linux,
29
+ FreeBSD,
30
+ MacOS,
31
+ Windows,
32
+ }
33
+
34
+ struct Badge
35
+ {
36
+ const:
37
+
38
+ Cpu cpu;
39
+ Os os;
40
+ BuildSystem build_system;
41
+
42
+ string id()
43
+ {
44
+ return format("%d%c%d", cast(uint)(os) + 1, cast(char)('a' + cpu), cast(uint)(build_system));
45
+ }
46
+
47
+ string disabled_image_ref()
48
+ {
49
+ return format("[d%d]", cast(uint)(build_system));
50
+ }
51
+
52
+ string link_ref()
53
+ {
54
+ return format("[l%s]", id());
55
+ }
56
+
57
+ string image_ref()
58
+ {
59
+ return format("[i%s]", id());
60
+ }
61
+
62
+ bool enabled()
63
+ {
64
+ final switch (build_system)
65
+ {
66
+ case BuildSystem.CMake:
67
+ return os == Os.Linux || cpu == Cpu.amd64;
68
+ case BuildSystem.Bazel:
69
+ return os == Os.Linux && cpu == Cpu.amd64;
70
+ }
71
+ }
72
+
73
+ string text()
74
+ {
75
+ if (enabled())
76
+ return format("[![]%s]%s", image_ref, link_ref);
77
+ return format("![]%s", disabled_image_ref);
78
+ }
79
+
80
+ string disabled_image_link()
81
+ {
82
+ return format("%s: https://img.shields.io/badge/%s-N%%2FA-lightgrey", disabled_image_ref, build_system);
83
+ }
84
+
85
+ string filename()
86
+ {
87
+ import std.uni : toLower;
88
+
89
+ return toLower(format("%s_%s_%s.yml", cpu, os, build_system));
90
+ }
91
+
92
+ string link_decl()
93
+ {
94
+ return format("%s: https://github.com/google/cpu_features/actions/workflows/%s", link_ref, filename());
95
+ }
96
+
97
+ string image_decl()
98
+ {
99
+ return format(
100
+ "%s: https://img.shields.io/github/actions/workflow/status/google/cpu_features/%s?branch=main&label=%s", image_ref, filename(), build_system);
101
+ }
102
+ }
103
+
104
+ auto tableHeader(in Cpu[] cpus)
105
+ {
106
+ return chain(only("Os"), cpus.map!(to!string)).array;
107
+ }
108
+
109
+ auto tableAlignment(in Cpu[] cpus)
110
+ {
111
+ return chain(only(":--"), cpus.map!(v => "--:")).array;
112
+ }
113
+
114
+ auto tableCell(Range)(in Os os, in Cpu cpu, Range badges)
115
+ {
116
+ return badges
117
+ .filter!(b => b.cpu == cpu && b.os == os)
118
+ .map!(b => b.text())
119
+ .joiner("<br/>")
120
+ .to!string;
121
+ }
122
+
123
+ auto tableRow(Range)(in Os os, in Cpu[] cpus, Range badges)
124
+ {
125
+ return chain(only(os.to!string), cpus.map!(cpu => tableCell(os, cpu, badges))).array;
126
+ }
127
+
128
+ auto tableRows(Range)(in Os[] oses, in Cpu[] cpus, Range badges)
129
+ {
130
+ return oses.map!(os => tableRow(os, cpus, badges)).array;
131
+ }
132
+
133
+ auto table(Range)(in Os[] oses, in Cpu[] cpus, Range badges)
134
+ {
135
+ return chain(only(tableHeader(cpus)), only(tableAlignment(cpus)), tableRows(oses, cpus, badges));
136
+ }
137
+
138
+ void main()
139
+ {
140
+ immutable allCpus = [EnumMembers!Cpu];
141
+ immutable allOses = [EnumMembers!Os];
142
+ immutable allBuildSystems = [EnumMembers!BuildSystem];
143
+
144
+ auto badges = cartesianProduct(allCpus, allOses, allBuildSystems).map!(
145
+ t => Badge(t[0], t[1], t[2]));
146
+
147
+ writefln("%(|%-( %s |%) |\n%) |", table(allOses, allCpus, badges));
148
+ writeln();
149
+ badges
150
+ .filter!(b => !b.enabled)
151
+ .map!(b => b.disabled_image_link())
152
+ .array
153
+ .sort
154
+ .uniq
155
+ .each!writeln;
156
+
157
+ badges
158
+ .filter!(b => b.enabled)
159
+ .map!(b => [b.link_decl(), b.image_decl()])
160
+ .joiner()
161
+ .array
162
+ .sort
163
+ .uniq
164
+ .each!writeln;
165
+ }