vixl: init at 8.0.0

+488
+445
pkgs/by-name/vi/vixl/add_missing_meson_support.patch
··· 1 + From 7c6adc3fbb3624261b9c4d4e0702018697486e3b Mon Sep 17 00:00:00 2001 2 + From: Andrea Pappacoda <andrea@pappacoda.it> 3 + Date: Wed, 7 Aug 2024 00:11:15 +0200 4 + Subject: [PATCH] build: add Meson support 5 + 6 + I was trying to package Vixl, but the SCons build system does not 7 + provide an install target, so I would've had to add it. It seemed too 8 + difficult, so I directly created a quite basic Meson build script. 9 + 10 + It provides most features of the SCons script, except for tests and 11 + benchmarks, while adding a rich install target, with library soname 12 + versioning and a pkg-config file. 13 + 14 + Meson is a simple yet powerful build system, and you're interested in 15 + using it as your main build system I could add tests and benchmarks :) 16 + 17 + Origin: upstream, https://github.com/Linaro/vixl/pull/7 18 + Last-Update: 2025-03-22 19 + --- 20 + AUTHORS | 1 + 21 + doc/aarch32/meson.build | 12 +++ 22 + doc/aarch64/meson.build | 21 +++++ 23 + doc/aarch64/topics/meson.build | 21 +++++ 24 + doc/meson.build | 21 +++++ 25 + meson.build | 158 +++++++++++++++++++++++++++++++++ 26 + meson_options.txt | 40 +++++++++ 27 + src/aarch32/meson.build | 30 +++++++ 28 + src/aarch64/meson.build | 47 ++++++++++ 29 + 9 files changed, 351 insertions(+) 30 + create mode 100644 doc/aarch32/meson.build 31 + create mode 100644 doc/aarch64/meson.build 32 + create mode 100644 doc/aarch64/topics/meson.build 33 + create mode 100644 doc/meson.build 34 + create mode 100644 meson.build 35 + create mode 100644 meson_options.txt 36 + create mode 100644 src/aarch32/meson.build 37 + create mode 100644 src/aarch64/meson.build 38 + 39 + diff --git a/AUTHORS b/AUTHORS 40 + index 257ec9d3..13809d26 100644 41 + --- a/AUTHORS 42 + +++ b/AUTHORS 43 + @@ -6,3 +6,4 @@ 44 + ARM Ltd. <*@arm.com> 45 + Google Inc. <*@google.com> 46 + Linaro <*@linaro.org> 47 + +Andrea Pappacoda <andrea@pappacoda.it> 48 + diff --git a/doc/aarch32/meson.build b/doc/aarch32/meson.build 49 + new file mode 100644 50 + index 00000000..e07fc46d 51 + --- /dev/null 52 + +++ b/doc/aarch32/meson.build 53 + @@ -0,0 +1,12 @@ 54 + +# SPDX-FileCopyrightText: 2021 VIXL authors 55 + +# SPDX-License-Identifier: BSD-3-Clause 56 + + 57 + +custom_target( 58 + + 'doc_aarch32', 59 + + command: [markdown, '@INPUT@'], 60 + + input: 'getting-started-aarch32.md', 61 + + output: '@BASENAME@.html', 62 + + capture: true, 63 + + install: true, 64 + + install_dir: doc_dir/'aarch32' 65 + +) 66 + diff --git a/doc/aarch64/meson.build b/doc/aarch64/meson.build 67 + new file mode 100644 68 + index 00000000..d25f8bfa 69 + --- /dev/null 70 + +++ b/doc/aarch64/meson.build 71 + @@ -0,0 +1,21 @@ 72 + +# SPDX-FileCopyrightText: 2021 VIXL authors 73 + +# SPDX-License-Identifier: BSD-3-Clause 74 + + 75 + +doc_aarch64_files = [ 76 + + 'getting-started-aarch64', 77 + + 'supported-instructions-aarch64' 78 + +] 79 + + 80 + +foreach file : doc_aarch64_files 81 + + custom_target( 82 + + 'doc_aarch64_' + file, 83 + + command: [markdown, '@INPUT@'], 84 + + input: file + '.md', 85 + + output: file + '.html', 86 + + capture: true, 87 + + install: true, 88 + + install_dir: doc_dir/'aarch64' 89 + + ) 90 + +endforeach 91 + + 92 + +subdir('topics') 93 + diff --git a/doc/aarch64/topics/meson.build b/doc/aarch64/topics/meson.build 94 + new file mode 100644 95 + index 00000000..c6e8542b 96 + --- /dev/null 97 + +++ b/doc/aarch64/topics/meson.build 98 + @@ -0,0 +1,21 @@ 99 + +# SPDX-FileCopyrightText: 2021 VIXL authors 100 + +# SPDX-License-Identifier: BSD-3-Clause 101 + + 102 + +doc_aarch64_topics_files = [ 103 + + 'extending-the-disassembler', 104 + + 'index', 105 + + 'state-trace', 106 + + 'ycm' 107 + +] 108 + + 109 + +foreach file : doc_aarch64_topics_files 110 + + custom_target( 111 + + 'doc_aarch64_topics_' + file, 112 + + command: [markdown, '@INPUT@'], 113 + + input: file + '.md', 114 + + output: file + '.html', 115 + + capture: true, 116 + + install: true, 117 + + install_dir: doc_dir/'aarch64'/'topics' 118 + + ) 119 + +endforeach 120 + diff --git a/doc/meson.build b/doc/meson.build 121 + new file mode 100644 122 + index 00000000..cbfe193d 123 + --- /dev/null 124 + +++ b/doc/meson.build 125 + @@ -0,0 +1,21 @@ 126 + +# SPDX-FileCopyrightText: 2021 VIXL authors 127 + +# SPDX-License-Identifier: BSD-3-Clause 128 + + 129 + +doc_dir = get_option('datadir')/'doc'/meson.project_name() 130 + + 131 + +custom_target( 132 + + 'doc', 133 + + command: [markdown, '@INPUT@'], 134 + + input: '..'/'README.md', 135 + + output: '@BASENAME@.html', 136 + + capture: true, 137 + + install: true, 138 + + install_dir: doc_dir 139 + +) 140 + + 141 + +if build_a32 or build_t32 142 + + subdir('aarch32') 143 + +endif 144 + +if build_a64 145 + + subdir('aarch64') 146 + +endif 147 + diff --git a/meson.build b/meson.build 148 + new file mode 100644 149 + index 00000000..e0f8f79a 150 + --- /dev/null 151 + +++ b/meson.build 152 + @@ -0,0 +1,158 @@ 153 + +# SPDX-FileCopyrightText: 2021 VIXL authors 154 + +# SPDX-License-Identifier: BSD-3-Clause 155 + + 156 + +project( 157 + + 'vixl', 158 + + 'cpp', 159 + + default_options: [ 160 + + 'cpp_std=c++17', 161 + + 'buildtype=release', 162 + + 'warning_level=3', 163 + + 'werror=true', 164 + + 'd_ndebug=if-release', 165 + + 'b_lto=true' 166 + + ], 167 + + license: 'BSD-3-Clause', 168 + + meson_version: '>=0.50.0', 169 + + version: '8.0.0', 170 + +) 171 + + 172 + +deps = [] 173 + +extra_args = [] 174 + + 175 + +if get_option('debug') 176 + + extra_args += '-DVIXL_DEBUG' 177 + +endif 178 + + 179 + +hosts_32bit = ['arc', 'arm', 'c2000', 'csky', 'mips', 'ppc', 'riscv32', 'rx', 'sparc', 'wasm32', 'x86'] 180 + +can_target_aarch64 = not (host_machine.cpu_family() in hosts_32bit) 181 + + 182 + +build_a32 = false 183 + +build_t32 = false 184 + +build_a64 = false 185 + + 186 + +targets = get_option('target') 187 + +if 'auto' in targets or 'all' in targets 188 + + if can_target_aarch64 or 'all' in targets 189 + + extra_args += [ 190 + + '-DVIXL_INCLUDE_TARGET_A32', 191 + + '-DVIXL_INCLUDE_TARGET_T32', 192 + + '-DVIXL_INCLUDE_TARGET_A64' 193 + + ] 194 + + build_a32 = true 195 + + build_t32 = true 196 + + build_a64 = true 197 + + else 198 + + extra_args += [ 199 + + '-DVIXL_INCLUDE_TARGET_A32', 200 + + '-DVIXL_INCLUDE_TARGET_T32' 201 + + ] 202 + + build_a32 = true 203 + + build_t32 = true 204 + + endif 205 + +else 206 + + if 'a32' in targets or 'aarch32' in targets 207 + + extra_args += [ 208 + + '-DVIXL_INCLUDE_TARGET_A32' 209 + + ] 210 + + build_a32 = true 211 + + endif 212 + + if 't32' in targets or 'aarch32' in targets 213 + + extra_args += [ 214 + + '-DVIXL_INCLUDE_TARGET_T32' 215 + + ] 216 + + build_t32 = true 217 + + endif 218 + + if 'a64' in targets or 'aarch64' in targets 219 + + extra_args += [ 220 + + '-DVIXL_INCLUDE_TARGET_A64' 221 + + ] 222 + + build_a64 = true 223 + + endif 224 + +endif 225 + + 226 + +target_sources = [] 227 + +if build_a32 or build_t32 228 + + subdir('src'/'aarch32') 229 + +endif 230 + +if build_a64 231 + + subdir('src'/'aarch64') 232 + +endif 233 + + 234 + +if get_option('simulator') == 'auto' 235 + + if not (host_machine.cpu_family() == 'aarch64') and can_target_aarch64 236 + + extra_args += '-DVIXL_INCLUDE_SIMULATOR_AARCH64' 237 + + deps += dependency('threads') 238 + + endif 239 + +elif get_option('simulator') == 'aarch64' 240 + + if can_target_aarch64 and build_a64 241 + + extra_args += '-DVIXL_INCLUDE_SIMULATOR_AARCH64' 242 + + deps += dependency('threads') 243 + + else 244 + + error('Building an AArch64 simulator implies that VIXL targets AArch64. Set `target` to include `aarch64` or `a64`.') 245 + + endif 246 + +endif 247 + + 248 + +allocator = get_option('code_buffer_allocator') 249 + +if (allocator == 'auto' and host_machine.system() == 'linux') or allocator == 'mmap' 250 + + extra_args += '-DVIXL_CODE_BUFFER_MMAP' 251 + +else 252 + + extra_args += '-DVIXL_CODE_BUFFER_MALLOC' 253 + +endif 254 + + 255 + +if get_option('implicit_checks') 256 + + extra_args += '-DVIXL_ENABLE_IMPLICIT_CHECKS' 257 + +endif 258 + + 259 + +markdown = find_program('markdown', required: get_option('doc')) 260 + +if markdown.found() 261 + + subdir('doc') 262 + +endif 263 + + 264 + +libvixl = library( 265 + + 'vixl', 266 + + 'src'/'code-buffer-vixl.cc', 267 + + 'src'/'compiler-intrinsics-vixl.cc', 268 + + 'src'/'cpu-features.cc', 269 + + 'src'/'utils-vixl.cc', 270 + + cpp_args: extra_args, 271 + + include_directories: 'src', 272 + + dependencies: deps, 273 + + install: true, 274 + + sources: target_sources, 275 + + version: meson.project_version() 276 + +) 277 + + 278 + +vixl_dep = declare_dependency( 279 + + compile_args: extra_args, 280 + + include_directories: 'src', 281 + + link_with: libvixl 282 + +) 283 + + 284 + +if meson.version().version_compare('>=0.54.0') 285 + + meson.override_dependency('vixl', vixl_dep) 286 + +endif 287 + + 288 + +install_headers( 289 + + 'src'/'assembler-base-vixl.h', 290 + + 'src'/'code-buffer-vixl.h', 291 + + 'src'/'code-generation-scopes-vixl.h', 292 + + 'src'/'compiler-intrinsics-vixl.h', 293 + + 'src'/'cpu-features.h', 294 + + 'src'/'globals-vixl.h', 295 + + 'src'/'invalset-vixl.h', 296 + + 'src'/'macro-assembler-interface.h', 297 + + 'src'/'platform-vixl.h', 298 + + 'src'/'pool-manager-impl.h', 299 + + 'src'/'pool-manager.h', 300 + + 'src'/'utils-vixl.h', 301 + + subdir: 'vixl' 302 + +) 303 + + 304 + +import('pkgconfig').generate( 305 + + libvixl, 306 + + description: 'ARMv8 Runtime Code Generation Library', 307 + + extra_cflags: extra_args, 308 + + subdirs: 'vixl', 309 + + url: 'https://github.com/Linaro/vixl' 310 + +) 311 + diff --git a/meson_options.txt b/meson_options.txt 312 + new file mode 100644 313 + index 00000000..b7b5428d 314 + --- /dev/null 315 + +++ b/meson_options.txt 316 + @@ -0,0 +1,40 @@ 317 + +# SPDX-FileCopyrightText: 2021 VIXL authors 318 + +# SPDX-License-Identifier: BSD-3-Clause 319 + + 320 + +option( 321 + + 'target', 322 + + type: 'array', 323 + + choices: ['auto', 'all', 'aarch32', 'a32', 't32', 'aarch64', 'a64'], 324 + + value: ['auto'], 325 + + description: 'Target ISA/Architecture' 326 + +) 327 + + 328 + +option( 329 + + 'simulator', 330 + + type: 'combo', 331 + + choices: ['auto', 'aarch64', 'none'], 332 + + value: 'auto', 333 + + description: 'Simulators to include' 334 + +) 335 + + 336 + +option( 337 + + 'code_buffer_allocator', 338 + + type: 'combo', 339 + + choices: ['auto', 'malloc', 'mmap'], 340 + + value: 'auto', 341 + + description: 'Configure the allocation mechanism in the CodeBuffer' 342 + +) 343 + + 344 + +option( 345 + + 'implicit_checks', 346 + + type: 'boolean', 347 + + value: false, 348 + + description: 'Allow signals raised from simulated invalid (e.g: out of bounds) memory reads to be handled by the host.' 349 + +) 350 + + 351 + +option( 352 + + 'doc', 353 + + type: 'feature', 354 + + value: 'auto', 355 + + description: 'Convert documentation to HTML (requires the `markdown` program)' 356 + +) 357 + diff --git a/src/aarch32/meson.build b/src/aarch32/meson.build 358 + new file mode 100644 359 + index 00000000..0b22336f 360 + --- /dev/null 361 + +++ b/src/aarch32/meson.build 362 + @@ -0,0 +1,30 @@ 363 + +# SPDX-FileCopyrightText: 2021 VIXL authors 364 + +# SPDX-License-Identifier: BSD-3-Clause 365 + + 366 + +# Need to wrap the filenames in files() otherwise this array would be treated 367 + +# as a simple array of strings, and when used in the master meson.build they 368 + +# would refer to nonexistent paths. Wrapping in files() ensures that the 369 + +# filenames will be always relative to this directory, even if referenced in 370 + +# a different one. As a general rule, when I need to refer to a file from a 371 + +# different build directory I should wrap it in files(). 372 + + 373 + +target_sources += files( 374 + + 'assembler-aarch32.cc', 375 + + 'constants-aarch32.cc', 376 + + 'disasm-aarch32.cc', 377 + + 'instructions-aarch32.cc', 378 + + 'location-aarch32.cc', 379 + + 'macro-assembler-aarch32.cc', 380 + + 'operands-aarch32.cc' 381 + +) 382 + + 383 + +install_headers( 384 + + 'assembler-aarch32.h', 385 + + 'constants-aarch32.h', 386 + + 'disasm-aarch32.h', 387 + + 'instructions-aarch32.h', 388 + + 'location-aarch32.h', 389 + + 'macro-assembler-aarch32.h', 390 + + 'operands-aarch32.h', 391 + + subdir: 'vixl'/'aarch32' 392 + +) 393 + diff --git a/src/aarch64/meson.build b/src/aarch64/meson.build 394 + new file mode 100644 395 + index 00000000..2898c8f6 396 + --- /dev/null 397 + +++ b/src/aarch64/meson.build 398 + @@ -0,0 +1,47 @@ 399 + +# SPDX-FileCopyrightText: 2021 VIXL authors 400 + +# SPDX-License-Identifier: BSD-3-Clause 401 + + 402 + +# Need to wrap the filenames in files() otherwise this array would be treated 403 + +# as a simple array of strings, and when used in the master meson.build they 404 + +# would refer to nonexistent paths. Wrapping in files() ensures that the 405 + +# filenames will be always relative to this directory, even if referenced in 406 + +# a different one. As a general rule, when I need to refer to a file from a 407 + +# different build directory I should wrap it in files(). 408 + + 409 + +target_sources += files( 410 + + 'assembler-aarch64.cc', 411 + + 'assembler-sve-aarch64.cc', 412 + + 'cpu-aarch64.cc', 413 + + 'cpu-features-auditor-aarch64.cc', 414 + + 'debugger-aarch64.cc', 415 + + 'decoder-aarch64.cc', 416 + + 'disasm-aarch64.cc', 417 + + 'instructions-aarch64.cc', 418 + + 'logic-aarch64.cc', 419 + + 'macro-assembler-aarch64.cc', 420 + + 'macro-assembler-sve-aarch64.cc', 421 + + 'operands-aarch64.cc', 422 + + 'pointer-auth-aarch64.cc', 423 + + 'registers-aarch64.cc', 424 + + 'simulator-aarch64.cc' 425 + +) 426 + + 427 + +install_headers( 428 + + 'abi-aarch64.h', 429 + + 'assembler-aarch64.h', 430 + + 'constants-aarch64.h', 431 + + 'cpu-aarch64.h', 432 + + 'cpu-features-auditor-aarch64.h', 433 + + 'debugger-aarch64.h', 434 + + 'decoder-aarch64.h', 435 + + 'decoder-constants-aarch64.h', 436 + + 'decoder-visitor-map-aarch64.h', 437 + + 'disasm-aarch64.h', 438 + + 'instructions-aarch64.h', 439 + + 'macro-assembler-aarch64.h', 440 + + 'operands-aarch64.h', 441 + + 'registers-aarch64.h', 442 + + 'simulator-aarch64.h', 443 + + 'simulator-constants-aarch64.h', 444 + + subdir: 'vixl'/'aarch64' 445 + +)
+43
pkgs/by-name/vi/vixl/package.nix
··· 1 + { 2 + lib, 3 + stdenv, 4 + fetchFromGitHub, 5 + meson, 6 + fetchpatch, 7 + multimarkdown, 8 + ninja, 9 + pkg-config, 10 + }: 11 + 12 + stdenv.mkDerivation (finalAttrs: { 13 + pname = "vixl"; 14 + version = "8.0.0"; 15 + 16 + src = fetchFromGitHub { 17 + owner = "Linaro"; 18 + repo = "vixl"; 19 + tag = finalAttrs.version; 20 + hash = "sha256-VW4Zoh4L8AXoL2kgthAtHkrTnoKpSa9MsBTEGROUrj4="; 21 + }; 22 + 23 + # Add missing meson build support 24 + # See: https://github.com/Linaro/vixl/pull/7 25 + patches = [ ./add_missing_meson_support.patch ]; 26 + 27 + nativeBuildInputs = [ 28 + meson 29 + multimarkdown 30 + ninja 31 + pkg-config 32 + ]; 33 + 34 + strictDeps = true; 35 + 36 + meta = { 37 + description = "AArch32 and AArch64 runtime code generation library"; 38 + homepage = "https://github.com/Linaro/vixl"; 39 + license = lib.licenses.bsd3; 40 + platforms = lib.platforms.unix; 41 + maintainers = with lib.maintainers; [ onny ]; 42 + }; 43 + })