frida 16.2.1 → 16.2.3

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 (386) hide show
  1. package/BSDmakefile +6 -0
  2. package/Makefile +16 -0
  3. package/README.md +14 -11
  4. package/configure +18 -0
  5. package/configure.bat +22 -0
  6. package/dist/native.js +0 -8
  7. package/lib/application.ts +98 -0
  8. package/lib/authentication.ts +3 -0
  9. package/lib/build.py +50 -0
  10. package/lib/bus.ts +30 -0
  11. package/lib/cancellable.ts +33 -0
  12. package/lib/child.ts +15 -0
  13. package/lib/crash.ts +11 -0
  14. package/lib/device.ts +329 -0
  15. package/lib/device_manager.ts +69 -0
  16. package/lib/endpoint_parameters.ts +56 -0
  17. package/lib/icon.ts +15 -0
  18. package/lib/index.ts +311 -0
  19. package/lib/iostream.ts +78 -0
  20. package/lib/meson.build +53 -0
  21. package/lib/native.ts +9 -0
  22. package/lib/portal_membership.ts +10 -0
  23. package/lib/portal_service.ts +105 -0
  24. package/lib/process.ts +57 -0
  25. package/lib/relay.ts +44 -0
  26. package/lib/script.ts +352 -0
  27. package/lib/session.ts +113 -0
  28. package/lib/signals.ts +45 -0
  29. package/lib/socket_address.ts +35 -0
  30. package/lib/spawn.ts +4 -0
  31. package/lib/system_parameters.ts +78 -0
  32. package/make.bat +23 -0
  33. package/meson.build +160 -0
  34. package/meson.options +11 -0
  35. package/package.json +27 -6
  36. package/releng/deps.py +1133 -0
  37. package/releng/deps.toml +391 -0
  38. package/releng/devkit-assets/frida-core-example-unix.c +188 -0
  39. package/releng/devkit-assets/frida-core-example-windows.c +197 -0
  40. package/releng/devkit-assets/frida-core-example.sln +28 -0
  41. package/releng/devkit-assets/frida-core-example.vcxproj +157 -0
  42. package/releng/devkit-assets/frida-core-example.vcxproj.filters +27 -0
  43. package/releng/devkit-assets/frida-gum-example-unix.c +122 -0
  44. package/releng/devkit-assets/frida-gum-example-windows.c +132 -0
  45. package/releng/devkit-assets/frida-gum-example.sln +28 -0
  46. package/releng/devkit-assets/frida-gum-example.vcxproj +157 -0
  47. package/releng/devkit-assets/frida-gum-example.vcxproj.filters +27 -0
  48. package/releng/devkit-assets/frida-gumjs-example-unix.c +84 -0
  49. package/releng/devkit-assets/frida-gumjs-example-windows.c +91 -0
  50. package/releng/devkit-assets/frida-gumjs-example.sln +28 -0
  51. package/releng/devkit-assets/frida-gumjs-example.vcxproj +157 -0
  52. package/releng/devkit-assets/frida-gumjs-example.vcxproj.filters +27 -0
  53. package/releng/devkit.py +535 -0
  54. package/releng/env.py +420 -0
  55. package/releng/env_android.py +150 -0
  56. package/releng/env_apple.py +176 -0
  57. package/releng/env_generic.py +373 -0
  58. package/releng/frida_version.py +69 -0
  59. package/releng/machine_file.py +44 -0
  60. package/releng/machine_spec.py +290 -0
  61. package/releng/meson/meson.py +27 -0
  62. package/releng/meson/mesonbuild/__init__.py +0 -0
  63. package/releng/meson/mesonbuild/_pathlib.py +63 -0
  64. package/releng/meson/mesonbuild/_typing.py +69 -0
  65. package/releng/meson/mesonbuild/arglist.py +321 -0
  66. package/releng/meson/mesonbuild/ast/__init__.py +23 -0
  67. package/releng/meson/mesonbuild/ast/interpreter.py +441 -0
  68. package/releng/meson/mesonbuild/ast/introspection.py +374 -0
  69. package/releng/meson/mesonbuild/ast/postprocess.py +109 -0
  70. package/releng/meson/mesonbuild/ast/printer.py +620 -0
  71. package/releng/meson/mesonbuild/ast/visitor.py +161 -0
  72. package/releng/meson/mesonbuild/backend/__init__.py +0 -0
  73. package/releng/meson/mesonbuild/backend/backends.py +2047 -0
  74. package/releng/meson/mesonbuild/backend/ninjabackend.py +3808 -0
  75. package/releng/meson/mesonbuild/backend/nonebackend.py +26 -0
  76. package/releng/meson/mesonbuild/backend/vs2010backend.py +2078 -0
  77. package/releng/meson/mesonbuild/backend/vs2012backend.py +35 -0
  78. package/releng/meson/mesonbuild/backend/vs2013backend.py +34 -0
  79. package/releng/meson/mesonbuild/backend/vs2015backend.py +35 -0
  80. package/releng/meson/mesonbuild/backend/vs2017backend.py +59 -0
  81. package/releng/meson/mesonbuild/backend/vs2019backend.py +54 -0
  82. package/releng/meson/mesonbuild/backend/vs2022backend.py +54 -0
  83. package/releng/meson/mesonbuild/backend/xcodebackend.py +1781 -0
  84. package/releng/meson/mesonbuild/build.py +3249 -0
  85. package/releng/meson/mesonbuild/cargo/__init__.py +5 -0
  86. package/releng/meson/mesonbuild/cargo/builder.py +238 -0
  87. package/releng/meson/mesonbuild/cargo/cfg.py +274 -0
  88. package/releng/meson/mesonbuild/cargo/interpreter.py +733 -0
  89. package/releng/meson/mesonbuild/cargo/manifest.py +227 -0
  90. package/releng/meson/mesonbuild/cargo/version.py +95 -0
  91. package/releng/meson/mesonbuild/cmake/__init__.py +28 -0
  92. package/releng/meson/mesonbuild/cmake/common.py +331 -0
  93. package/releng/meson/mesonbuild/cmake/data/__init__.py +0 -0
  94. package/releng/meson/mesonbuild/cmake/data/preload.cmake +82 -0
  95. package/releng/meson/mesonbuild/cmake/executor.py +241 -0
  96. package/releng/meson/mesonbuild/cmake/fileapi.py +324 -0
  97. package/releng/meson/mesonbuild/cmake/generator.py +186 -0
  98. package/releng/meson/mesonbuild/cmake/interpreter.py +1267 -0
  99. package/releng/meson/mesonbuild/cmake/toolchain.py +248 -0
  100. package/releng/meson/mesonbuild/cmake/traceparser.py +814 -0
  101. package/releng/meson/mesonbuild/cmake/tracetargets.py +161 -0
  102. package/releng/meson/mesonbuild/compilers/__init__.py +86 -0
  103. package/releng/meson/mesonbuild/compilers/asm.py +307 -0
  104. package/releng/meson/mesonbuild/compilers/c.py +788 -0
  105. package/releng/meson/mesonbuild/compilers/c_function_attributes.py +143 -0
  106. package/releng/meson/mesonbuild/compilers/compilers.py +1388 -0
  107. package/releng/meson/mesonbuild/compilers/cpp.py +1035 -0
  108. package/releng/meson/mesonbuild/compilers/cs.py +136 -0
  109. package/releng/meson/mesonbuild/compilers/cuda.py +806 -0
  110. package/releng/meson/mesonbuild/compilers/cython.py +91 -0
  111. package/releng/meson/mesonbuild/compilers/d.py +861 -0
  112. package/releng/meson/mesonbuild/compilers/detect.py +1396 -0
  113. package/releng/meson/mesonbuild/compilers/fortran.py +523 -0
  114. package/releng/meson/mesonbuild/compilers/java.py +113 -0
  115. package/releng/meson/mesonbuild/compilers/mixins/__init__.py +0 -0
  116. package/releng/meson/mesonbuild/compilers/mixins/arm.py +167 -0
  117. package/releng/meson/mesonbuild/compilers/mixins/ccrx.py +113 -0
  118. package/releng/meson/mesonbuild/compilers/mixins/clang.py +170 -0
  119. package/releng/meson/mesonbuild/compilers/mixins/clike.py +1330 -0
  120. package/releng/meson/mesonbuild/compilers/mixins/compcert.py +117 -0
  121. package/releng/meson/mesonbuild/compilers/mixins/elbrus.py +93 -0
  122. package/releng/meson/mesonbuild/compilers/mixins/emscripten.py +89 -0
  123. package/releng/meson/mesonbuild/compilers/mixins/gnu.py +629 -0
  124. package/releng/meson/mesonbuild/compilers/mixins/intel.py +167 -0
  125. package/releng/meson/mesonbuild/compilers/mixins/islinker.py +120 -0
  126. package/releng/meson/mesonbuild/compilers/mixins/metrowerks.py +279 -0
  127. package/releng/meson/mesonbuild/compilers/mixins/pgi.py +88 -0
  128. package/releng/meson/mesonbuild/compilers/mixins/ti.py +130 -0
  129. package/releng/meson/mesonbuild/compilers/mixins/visualstudio.py +458 -0
  130. package/releng/meson/mesonbuild/compilers/mixins/xc16.py +111 -0
  131. package/releng/meson/mesonbuild/compilers/objc.py +120 -0
  132. package/releng/meson/mesonbuild/compilers/objcpp.py +102 -0
  133. package/releng/meson/mesonbuild/compilers/rust.py +230 -0
  134. package/releng/meson/mesonbuild/compilers/swift.py +131 -0
  135. package/releng/meson/mesonbuild/compilers/vala.py +121 -0
  136. package/releng/meson/mesonbuild/coredata.py +1532 -0
  137. package/releng/meson/mesonbuild/dependencies/__init__.py +252 -0
  138. package/releng/meson/mesonbuild/dependencies/base.py +663 -0
  139. package/releng/meson/mesonbuild/dependencies/boost.py +1083 -0
  140. package/releng/meson/mesonbuild/dependencies/cmake.py +656 -0
  141. package/releng/meson/mesonbuild/dependencies/coarrays.py +80 -0
  142. package/releng/meson/mesonbuild/dependencies/configtool.py +163 -0
  143. package/releng/meson/mesonbuild/dependencies/cuda.py +295 -0
  144. package/releng/meson/mesonbuild/dependencies/data/CMakeLists.txt +102 -0
  145. package/releng/meson/mesonbuild/dependencies/data/CMakeListsLLVM.txt +204 -0
  146. package/releng/meson/mesonbuild/dependencies/data/CMakePathInfo.txt +31 -0
  147. package/releng/meson/mesonbuild/dependencies/data/__init__.py +0 -0
  148. package/releng/meson/mesonbuild/dependencies/detect.py +225 -0
  149. package/releng/meson/mesonbuild/dependencies/dev.py +707 -0
  150. package/releng/meson/mesonbuild/dependencies/dub.py +424 -0
  151. package/releng/meson/mesonbuild/dependencies/factory.py +146 -0
  152. package/releng/meson/mesonbuild/dependencies/framework.py +111 -0
  153. package/releng/meson/mesonbuild/dependencies/hdf5.py +168 -0
  154. package/releng/meson/mesonbuild/dependencies/misc.py +618 -0
  155. package/releng/meson/mesonbuild/dependencies/mpi.py +231 -0
  156. package/releng/meson/mesonbuild/dependencies/pkgconfig.py +570 -0
  157. package/releng/meson/mesonbuild/dependencies/platform.py +52 -0
  158. package/releng/meson/mesonbuild/dependencies/python.py +431 -0
  159. package/releng/meson/mesonbuild/dependencies/qt.py +484 -0
  160. package/releng/meson/mesonbuild/dependencies/scalapack.py +142 -0
  161. package/releng/meson/mesonbuild/dependencies/ui.py +281 -0
  162. package/releng/meson/mesonbuild/depfile.py +82 -0
  163. package/releng/meson/mesonbuild/envconfig.py +480 -0
  164. package/releng/meson/mesonbuild/environment.py +987 -0
  165. package/releng/meson/mesonbuild/interpreter/__init__.py +47 -0
  166. package/releng/meson/mesonbuild/interpreter/compiler.py +900 -0
  167. package/releng/meson/mesonbuild/interpreter/dependencyfallbacks.py +386 -0
  168. package/releng/meson/mesonbuild/interpreter/interpreter.py +3595 -0
  169. package/releng/meson/mesonbuild/interpreter/interpreterobjects.py +1096 -0
  170. package/releng/meson/mesonbuild/interpreter/kwargs.py +479 -0
  171. package/releng/meson/mesonbuild/interpreter/mesonmain.py +487 -0
  172. package/releng/meson/mesonbuild/interpreter/primitives/__init__.py +29 -0
  173. package/releng/meson/mesonbuild/interpreter/primitives/array.py +108 -0
  174. package/releng/meson/mesonbuild/interpreter/primitives/boolean.py +52 -0
  175. package/releng/meson/mesonbuild/interpreter/primitives/dict.py +88 -0
  176. package/releng/meson/mesonbuild/interpreter/primitives/integer.py +86 -0
  177. package/releng/meson/mesonbuild/interpreter/primitives/range.py +38 -0
  178. package/releng/meson/mesonbuild/interpreter/primitives/string.py +247 -0
  179. package/releng/meson/mesonbuild/interpreter/type_checking.py +853 -0
  180. package/releng/meson/mesonbuild/interpreterbase/__init__.py +126 -0
  181. package/releng/meson/mesonbuild/interpreterbase/_unholder.py +25 -0
  182. package/releng/meson/mesonbuild/interpreterbase/baseobjects.py +174 -0
  183. package/releng/meson/mesonbuild/interpreterbase/decorators.py +806 -0
  184. package/releng/meson/mesonbuild/interpreterbase/disabler.py +35 -0
  185. package/releng/meson/mesonbuild/interpreterbase/exceptions.py +22 -0
  186. package/releng/meson/mesonbuild/interpreterbase/helpers.py +67 -0
  187. package/releng/meson/mesonbuild/interpreterbase/interpreterbase.py +665 -0
  188. package/releng/meson/mesonbuild/interpreterbase/operator.py +32 -0
  189. package/releng/meson/mesonbuild/linkers/__init__.py +20 -0
  190. package/releng/meson/mesonbuild/linkers/base.py +39 -0
  191. package/releng/meson/mesonbuild/linkers/detect.py +229 -0
  192. package/releng/meson/mesonbuild/linkers/linkers.py +1614 -0
  193. package/releng/meson/mesonbuild/mcompile.py +380 -0
  194. package/releng/meson/mesonbuild/mconf.py +368 -0
  195. package/releng/meson/mesonbuild/mdevenv.py +234 -0
  196. package/releng/meson/mesonbuild/mdist.py +376 -0
  197. package/releng/meson/mesonbuild/mesondata.py +38 -0
  198. package/releng/meson/mesonbuild/mesonlib.py +23 -0
  199. package/releng/meson/mesonbuild/mesonmain.py +289 -0
  200. package/releng/meson/mesonbuild/minit.py +204 -0
  201. package/releng/meson/mesonbuild/minstall.py +864 -0
  202. package/releng/meson/mesonbuild/mintro.py +667 -0
  203. package/releng/meson/mesonbuild/mlog.py +542 -0
  204. package/releng/meson/mesonbuild/modules/__init__.py +270 -0
  205. package/releng/meson/mesonbuild/modules/cmake.py +442 -0
  206. package/releng/meson/mesonbuild/modules/cuda.py +377 -0
  207. package/releng/meson/mesonbuild/modules/dlang.py +117 -0
  208. package/releng/meson/mesonbuild/modules/external_project.py +306 -0
  209. package/releng/meson/mesonbuild/modules/fs.py +323 -0
  210. package/releng/meson/mesonbuild/modules/gnome.py +2215 -0
  211. package/releng/meson/mesonbuild/modules/hotdoc.py +487 -0
  212. package/releng/meson/mesonbuild/modules/i18n.py +405 -0
  213. package/releng/meson/mesonbuild/modules/icestorm.py +123 -0
  214. package/releng/meson/mesonbuild/modules/java.py +112 -0
  215. package/releng/meson/mesonbuild/modules/keyval.py +65 -0
  216. package/releng/meson/mesonbuild/modules/modtest.py +33 -0
  217. package/releng/meson/mesonbuild/modules/pkgconfig.py +744 -0
  218. package/releng/meson/mesonbuild/modules/python.py +556 -0
  219. package/releng/meson/mesonbuild/modules/python3.py +85 -0
  220. package/releng/meson/mesonbuild/modules/qt.py +621 -0
  221. package/releng/meson/mesonbuild/modules/qt4.py +23 -0
  222. package/releng/meson/mesonbuild/modules/qt5.py +23 -0
  223. package/releng/meson/mesonbuild/modules/qt6.py +22 -0
  224. package/releng/meson/mesonbuild/modules/rust.py +355 -0
  225. package/releng/meson/mesonbuild/modules/simd.py +114 -0
  226. package/releng/meson/mesonbuild/modules/sourceset.py +291 -0
  227. package/releng/meson/mesonbuild/modules/wayland.py +151 -0
  228. package/releng/meson/mesonbuild/modules/windows.py +207 -0
  229. package/releng/meson/mesonbuild/mparser.py +1114 -0
  230. package/releng/meson/mesonbuild/msetup.py +365 -0
  231. package/releng/meson/mesonbuild/msubprojects.py +764 -0
  232. package/releng/meson/mesonbuild/mtest.py +2201 -0
  233. package/releng/meson/mesonbuild/munstable_coredata.py +107 -0
  234. package/releng/meson/mesonbuild/optinterpreter.py +276 -0
  235. package/releng/meson/mesonbuild/programs.py +367 -0
  236. package/releng/meson/mesonbuild/rewriter.py +1075 -0
  237. package/releng/meson/mesonbuild/scripts/__init__.py +10 -0
  238. package/releng/meson/mesonbuild/scripts/clangformat.py +55 -0
  239. package/releng/meson/mesonbuild/scripts/clangtidy.py +30 -0
  240. package/releng/meson/mesonbuild/scripts/cleantrees.py +35 -0
  241. package/releng/meson/mesonbuild/scripts/cmake_run_ctgt.py +103 -0
  242. package/releng/meson/mesonbuild/scripts/cmd_or_ps.ps1 +17 -0
  243. package/releng/meson/mesonbuild/scripts/copy.py +19 -0
  244. package/releng/meson/mesonbuild/scripts/coverage.py +214 -0
  245. package/releng/meson/mesonbuild/scripts/delwithsuffix.py +27 -0
  246. package/releng/meson/mesonbuild/scripts/depfixer.py +495 -0
  247. package/releng/meson/mesonbuild/scripts/depscan.py +198 -0
  248. package/releng/meson/mesonbuild/scripts/dirchanger.py +20 -0
  249. package/releng/meson/mesonbuild/scripts/env2mfile.py +402 -0
  250. package/releng/meson/mesonbuild/scripts/externalproject.py +106 -0
  251. package/releng/meson/mesonbuild/scripts/gettext.py +86 -0
  252. package/releng/meson/mesonbuild/scripts/gtkdochelper.py +286 -0
  253. package/releng/meson/mesonbuild/scripts/hotdochelper.py +40 -0
  254. package/releng/meson/mesonbuild/scripts/itstool.py +77 -0
  255. package/releng/meson/mesonbuild/scripts/meson_exe.py +115 -0
  256. package/releng/meson/mesonbuild/scripts/msgfmthelper.py +29 -0
  257. package/releng/meson/mesonbuild/scripts/pycompile.py +54 -0
  258. package/releng/meson/mesonbuild/scripts/python_info.py +121 -0
  259. package/releng/meson/mesonbuild/scripts/regen_checker.py +55 -0
  260. package/releng/meson/mesonbuild/scripts/run_tool.py +58 -0
  261. package/releng/meson/mesonbuild/scripts/scanbuild.py +57 -0
  262. package/releng/meson/mesonbuild/scripts/symbolextractor.py +322 -0
  263. package/releng/meson/mesonbuild/scripts/tags.py +44 -0
  264. package/releng/meson/mesonbuild/scripts/test_loaded_modules.py +14 -0
  265. package/releng/meson/mesonbuild/scripts/uninstall.py +41 -0
  266. package/releng/meson/mesonbuild/scripts/vcstagger.py +35 -0
  267. package/releng/meson/mesonbuild/scripts/yasm.py +24 -0
  268. package/releng/meson/mesonbuild/templates/__init__.py +0 -0
  269. package/releng/meson/mesonbuild/templates/cpptemplates.py +143 -0
  270. package/releng/meson/mesonbuild/templates/cstemplates.py +90 -0
  271. package/releng/meson/mesonbuild/templates/ctemplates.py +126 -0
  272. package/releng/meson/mesonbuild/templates/cudatemplates.py +143 -0
  273. package/releng/meson/mesonbuild/templates/dlangtemplates.py +109 -0
  274. package/releng/meson/mesonbuild/templates/fortrantemplates.py +101 -0
  275. package/releng/meson/mesonbuild/templates/javatemplates.py +94 -0
  276. package/releng/meson/mesonbuild/templates/mesontemplates.py +70 -0
  277. package/releng/meson/mesonbuild/templates/objcpptemplates.py +126 -0
  278. package/releng/meson/mesonbuild/templates/objctemplates.py +126 -0
  279. package/releng/meson/mesonbuild/templates/rusttemplates.py +79 -0
  280. package/releng/meson/mesonbuild/templates/samplefactory.py +41 -0
  281. package/releng/meson/mesonbuild/templates/sampleimpl.py +160 -0
  282. package/releng/meson/mesonbuild/templates/valatemplates.py +82 -0
  283. package/releng/meson/mesonbuild/utils/__init__.py +0 -0
  284. package/releng/meson/mesonbuild/utils/core.py +166 -0
  285. package/releng/meson/mesonbuild/utils/platform.py +27 -0
  286. package/releng/meson/mesonbuild/utils/posix.py +32 -0
  287. package/releng/meson/mesonbuild/utils/universal.py +2445 -0
  288. package/releng/meson/mesonbuild/utils/vsenv.py +126 -0
  289. package/releng/meson/mesonbuild/utils/win32.py +29 -0
  290. package/releng/meson/mesonbuild/wrap/__init__.py +59 -0
  291. package/releng/meson/mesonbuild/wrap/wrap.py +846 -0
  292. package/releng/meson/mesonbuild/wrap/wraptool.py +198 -0
  293. package/releng/meson-scripts/BSDmakefile +6 -0
  294. package/releng/meson-scripts/Makefile +16 -0
  295. package/releng/meson-scripts/configure +18 -0
  296. package/releng/meson-scripts/configure.bat +22 -0
  297. package/releng/meson-scripts/make.bat +23 -0
  298. package/releng/meson_configure.py +506 -0
  299. package/releng/meson_make.py +131 -0
  300. package/releng/mkdevkit.py +107 -0
  301. package/releng/mkfatmacho.py +54 -0
  302. package/releng/post-process-oabi.py +97 -0
  303. package/releng/progress.py +14 -0
  304. package/releng/sync-from-upstream.py +185 -0
  305. package/releng/tomlkit/tomlkit/__init__.py +59 -0
  306. package/releng/tomlkit/tomlkit/_compat.py +22 -0
  307. package/releng/tomlkit/tomlkit/_types.py +83 -0
  308. package/releng/tomlkit/tomlkit/_utils.py +158 -0
  309. package/releng/tomlkit/tomlkit/api.py +308 -0
  310. package/releng/tomlkit/tomlkit/container.py +875 -0
  311. package/releng/tomlkit/tomlkit/exceptions.py +227 -0
  312. package/releng/tomlkit/tomlkit/items.py +1967 -0
  313. package/releng/tomlkit/tomlkit/parser.py +1141 -0
  314. package/releng/tomlkit/tomlkit/py.typed +0 -0
  315. package/releng/tomlkit/tomlkit/source.py +180 -0
  316. package/releng/tomlkit/tomlkit/toml_char.py +52 -0
  317. package/releng/tomlkit/tomlkit/toml_document.py +7 -0
  318. package/releng/tomlkit/tomlkit/toml_file.py +58 -0
  319. package/releng/winenv.py +140 -0
  320. package/scripts/adjust-version.py +19 -0
  321. package/scripts/detect-version.py +40 -0
  322. package/scripts/fetch-abi-bits.py +343 -0
  323. package/scripts/install.js +23 -0
  324. package/scripts/package.py +15 -0
  325. package/src/addon.cc +76 -0
  326. package/src/application.cc +148 -0
  327. package/src/application.h +31 -0
  328. package/src/authentication.cc +174 -0
  329. package/src/authentication.h +24 -0
  330. package/src/bus.cc +167 -0
  331. package/src/bus.h +33 -0
  332. package/src/cancellable.cc +117 -0
  333. package/src/cancellable.h +31 -0
  334. package/src/child.cc +150 -0
  335. package/src/child.h +32 -0
  336. package/src/crash.cc +122 -0
  337. package/src/crash.h +30 -0
  338. package/src/device.cc +1302 -0
  339. package/src/device.h +55 -0
  340. package/src/device_manager.cc +362 -0
  341. package/src/device_manager.h +35 -0
  342. package/src/endpoint_parameters.cc +171 -0
  343. package/src/endpoint_parameters.h +28 -0
  344. package/src/glib_context.cc +62 -0
  345. package/src/glib_context.h +29 -0
  346. package/src/glib_object.cc +25 -0
  347. package/src/glib_object.h +37 -0
  348. package/src/iostream.cc +247 -0
  349. package/src/iostream.h +30 -0
  350. package/src/meson.build +26 -0
  351. package/src/operation.h +94 -0
  352. package/src/portal_membership.cc +100 -0
  353. package/src/portal_membership.h +26 -0
  354. package/src/portal_service.cc +401 -0
  355. package/src/portal_service.h +40 -0
  356. package/src/process.cc +135 -0
  357. package/src/process.h +30 -0
  358. package/src/relay.cc +139 -0
  359. package/src/relay.h +31 -0
  360. package/src/runtime.cc +443 -0
  361. package/src/runtime.h +64 -0
  362. package/src/script.cc +301 -0
  363. package/src/script.h +36 -0
  364. package/src/session.cc +860 -0
  365. package/src/session.h +42 -0
  366. package/src/signals.cc +334 -0
  367. package/src/signals.h +47 -0
  368. package/src/spawn.cc +95 -0
  369. package/src/spawn.h +27 -0
  370. package/src/usage_monitor.h +117 -0
  371. package/src/uv_context.cc +118 -0
  372. package/src/uv_context.h +40 -0
  373. package/src/win_delay_load_hook.cc +63 -0
  374. package/subprojects/frida-core.wrap +8 -0
  375. package/subprojects/nan.wrap +9 -0
  376. package/subprojects/packagefiles/nan.patch +13 -0
  377. package/test/data/index.ts +13 -0
  378. package/test/data/unixvictim-linux-x86 +0 -0
  379. package/test/data/unixvictim-linux-x86_64 +0 -0
  380. package/test/data/unixvictim-macos +0 -0
  381. package/test/device.ts +27 -0
  382. package/test/device_manager.ts +16 -0
  383. package/test/labrat.ts +32 -0
  384. package/test/script.ts +176 -0
  385. package/test/session.ts +73 -0
  386. package/tsconfig.json +18 -0
@@ -0,0 +1,130 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright 2012-2019 The Meson development team
3
+
4
+ from __future__ import annotations
5
+
6
+ """Representations specific to the Texas Instruments compiler family."""
7
+
8
+ import os
9
+ import typing as T
10
+
11
+ from ...mesonlib import EnvironmentException
12
+
13
+ if T.TYPE_CHECKING:
14
+ from ...envconfig import MachineInfo
15
+ from ...environment import Environment
16
+ from ...compilers.compilers import Compiler
17
+ else:
18
+ # This is a bit clever, for mypy we pretend that these mixins descend from
19
+ # Compiler, so we get all of the methods and attributes defined for us, but
20
+ # for runtime we make them descend from object (which all classes normally
21
+ # do). This gives up DRYer type checking, with no runtime impact
22
+ Compiler = object
23
+
24
+ ti_optimization_args: T.Dict[str, T.List[str]] = {
25
+ 'plain': [],
26
+ '0': ['-O0'],
27
+ 'g': ['-Ooff'],
28
+ '1': ['-O1'],
29
+ '2': ['-O2'],
30
+ '3': ['-O3'],
31
+ 's': ['-O4']
32
+ }
33
+
34
+ ti_debug_args: T.Dict[bool, T.List[str]] = {
35
+ False: [],
36
+ True: ['-g']
37
+ }
38
+
39
+
40
+ class TICompiler(Compiler):
41
+
42
+ id = 'ti'
43
+
44
+ def __init__(self) -> None:
45
+ if not self.is_cross:
46
+ raise EnvironmentException('TI compilers only support cross-compilation.')
47
+
48
+ self.can_compile_suffixes.add('asm') # Assembly
49
+ self.can_compile_suffixes.add('cla') # Control Law Accelerator (CLA) used in C2000
50
+
51
+ default_warn_args: T.List[str] = []
52
+ self.warn_args: T.Dict[str, T.List[str]] = {
53
+ '0': [],
54
+ '1': default_warn_args,
55
+ '2': default_warn_args + [],
56
+ '3': default_warn_args + [],
57
+ 'everything': default_warn_args + []}
58
+
59
+ def get_pic_args(self) -> T.List[str]:
60
+ # PIC support is not enabled by default for TI compilers,
61
+ # if users want to use it, they need to add the required arguments explicitly
62
+ return []
63
+
64
+ def get_pch_suffix(self) -> str:
65
+ return 'pch'
66
+
67
+ def get_pch_use_args(self, pch_dir: str, header: str) -> T.List[str]:
68
+ return []
69
+
70
+ def thread_flags(self, env: 'Environment') -> T.List[str]:
71
+ return []
72
+
73
+ def get_coverage_args(self) -> T.List[str]:
74
+ return []
75
+
76
+ def get_no_stdinc_args(self) -> T.List[str]:
77
+ return []
78
+
79
+ def get_no_stdlib_link_args(self) -> T.List[str]:
80
+ return []
81
+
82
+ def get_optimization_args(self, optimization_level: str) -> T.List[str]:
83
+ return ti_optimization_args[optimization_level]
84
+
85
+ def get_debug_args(self, is_debug: bool) -> T.List[str]:
86
+ return ti_debug_args[is_debug]
87
+
88
+ def get_compile_only_args(self) -> T.List[str]:
89
+ return []
90
+
91
+ def get_no_optimization_args(self) -> T.List[str]:
92
+ return ['-Ooff']
93
+
94
+ def get_output_args(self, outputname: str) -> T.List[str]:
95
+ return [f'--output_file={outputname}']
96
+
97
+ def get_werror_args(self) -> T.List[str]:
98
+ return ['--emit_warnings_as_errors']
99
+
100
+ def get_include_args(self, path: str, is_system: bool) -> T.List[str]:
101
+ if path == '':
102
+ path = '.'
103
+ return ['-I=' + path]
104
+
105
+ @classmethod
106
+ def _unix_args_to_native(cls, args: T.List[str], info: MachineInfo) -> T.List[str]:
107
+ result: T.List[str] = []
108
+ for i in args:
109
+ if i.startswith('-D'):
110
+ i = '--define=' + i[2:]
111
+ if i.startswith('-Wl,-rpath='):
112
+ continue
113
+ elif i == '--print-search-dirs':
114
+ continue
115
+ elif i.startswith('-L'):
116
+ continue
117
+ result.append(i)
118
+ return result
119
+
120
+ def compute_parameters_with_absolute_paths(self, parameter_list: T.List[str], build_dir: str) -> T.List[str]:
121
+ for idx, i in enumerate(parameter_list):
122
+ if i[:15] == '--include_path=':
123
+ parameter_list[idx] = i[:15] + os.path.normpath(os.path.join(build_dir, i[15:]))
124
+ if i[:2] == '-I':
125
+ parameter_list[idx] = i[:2] + os.path.normpath(os.path.join(build_dir, i[2:]))
126
+
127
+ return parameter_list
128
+
129
+ def get_dependency_gen_args(self, outtarget: str, outfile: str) -> T.List[str]:
130
+ return ['--preproc_with_compile', f'--preproc_dependency={outfile}']
@@ -0,0 +1,458 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright 2019 The meson development team
3
+
4
+ from __future__ import annotations
5
+
6
+ """Abstractions to simplify compilers that implement an MSVC compatible
7
+ interface.
8
+ """
9
+
10
+ import abc
11
+ import os
12
+ import typing as T
13
+
14
+ from ... import arglist
15
+ from ... import mesonlib
16
+ from ... import mlog
17
+ from mesonbuild.compilers.compilers import CompileCheckMode
18
+
19
+ if T.TYPE_CHECKING:
20
+ from ...environment import Environment
21
+ from ...dependencies import Dependency
22
+ from .clike import CLikeCompiler as Compiler
23
+ else:
24
+ # This is a bit clever, for mypy we pretend that these mixins descend from
25
+ # Compiler, so we get all of the methods and attributes defined for us, but
26
+ # for runtime we make them descend from object (which all classes normally
27
+ # do). This gives up DRYer type checking, with no runtime impact
28
+ Compiler = object
29
+
30
+ vs32_instruction_set_args: T.Dict[str, T.Optional[T.List[str]]] = {
31
+ 'mmx': ['/arch:SSE'], # There does not seem to be a flag just for MMX
32
+ 'sse': ['/arch:SSE'],
33
+ 'sse2': ['/arch:SSE2'],
34
+ 'sse3': ['/arch:AVX'], # VS leaped from SSE2 directly to AVX.
35
+ 'sse41': ['/arch:AVX'],
36
+ 'sse42': ['/arch:AVX'],
37
+ 'avx': ['/arch:AVX'],
38
+ 'avx2': ['/arch:AVX2'],
39
+ 'neon': None,
40
+ }
41
+
42
+ # The 64 bit compiler defaults to /arch:avx.
43
+ vs64_instruction_set_args: T.Dict[str, T.Optional[T.List[str]]] = {
44
+ 'mmx': ['/arch:AVX'],
45
+ 'sse': ['/arch:AVX'],
46
+ 'sse2': ['/arch:AVX'],
47
+ 'sse3': ['/arch:AVX'],
48
+ 'ssse3': ['/arch:AVX'],
49
+ 'sse41': ['/arch:AVX'],
50
+ 'sse42': ['/arch:AVX'],
51
+ 'avx': ['/arch:AVX'],
52
+ 'avx2': ['/arch:AVX2'],
53
+ 'neon': None,
54
+ }
55
+
56
+ msvc_optimization_args: T.Dict[str, T.List[str]] = {
57
+ 'plain': [],
58
+ '0': ['/Od'],
59
+ 'g': [], # No specific flag to optimize debugging, /Zi or /ZI will create debug information
60
+ '1': ['/O1'],
61
+ '2': ['/O2'],
62
+ '3': ['/O2', '/Gw'],
63
+ 's': ['/O1', '/Gw'],
64
+ }
65
+
66
+ msvc_debug_args: T.Dict[bool, T.List[str]] = {
67
+ False: [],
68
+ True: ['/Z7']
69
+ }
70
+
71
+
72
+ class VisualStudioLikeCompiler(Compiler, metaclass=abc.ABCMeta):
73
+
74
+ """A common interface for all compilers implementing an MSVC-style
75
+ interface.
76
+
77
+ A number of compilers attempt to mimic MSVC, with varying levels of
78
+ success, such as Clang-CL and ICL (the Intel C/C++ Compiler for Windows).
79
+ This class implements as much common logic as possible.
80
+ """
81
+
82
+ std_warn_args = ['/W3']
83
+ std_opt_args = ['/O2']
84
+ ignore_libs = arglist.UNIXY_COMPILER_INTERNAL_LIBS + ['execinfo']
85
+ internal_libs: T.List[str] = []
86
+
87
+ crt_args: T.Dict[str, T.List[str]] = {
88
+ 'none': [],
89
+ 'md': ['/MD'],
90
+ 'mdd': ['/MDd'],
91
+ 'mt': ['/MT'],
92
+ 'mtd': ['/MTd'],
93
+ }
94
+
95
+ # /showIncludes is needed for build dependency tracking in Ninja
96
+ # See: https://ninja-build.org/manual.html#_deps
97
+ # Assume UTF-8 sources by default, but self.unix_args_to_native() removes it
98
+ # if `/source-charset` is set too.
99
+ # It is also dropped if Visual Studio 2013 or earlier is used, since it would
100
+ # not be supported in that case.
101
+ always_args = ['/nologo', '/showIncludes', '/utf-8']
102
+ warn_args: T.Dict[str, T.List[str]] = {
103
+ '0': [],
104
+ '1': ['/W2'],
105
+ '2': ['/W3'],
106
+ '3': ['/W4'],
107
+ 'everything': ['/Wall'],
108
+ }
109
+
110
+ INVOKES_LINKER = False
111
+
112
+ def __init__(self, target: str):
113
+ self.base_options = {mesonlib.OptionKey(o) for o in ['b_pch', 'b_ndebug', 'b_vscrt']} # FIXME add lto, pgo and the like
114
+ self.target = target
115
+ self.is_64 = ('x64' in target) or ('x86_64' in target)
116
+ # do some canonicalization of target machine
117
+ if 'x86_64' in target:
118
+ self.machine = 'x64'
119
+ elif '86' in target:
120
+ self.machine = 'x86'
121
+ elif 'aarch64' in target:
122
+ self.machine = 'arm64'
123
+ elif 'arm' in target:
124
+ self.machine = 'arm'
125
+ else:
126
+ self.machine = target
127
+ if mesonlib.version_compare(self.version, '>=19.28.29910'): # VS 16.9.0 includes cl 19.28.29910
128
+ self.base_options.add(mesonlib.OptionKey('b_sanitize'))
129
+ assert self.linker is not None
130
+ self.linker.machine = self.machine
131
+
132
+ # Override CCompiler.get_always_args
133
+ def get_always_args(self) -> T.List[str]:
134
+ # TODO: use ImmutableListProtocol[str] here instead
135
+ return self.always_args.copy()
136
+
137
+ def get_pch_suffix(self) -> str:
138
+ return 'pch'
139
+
140
+ def get_pch_name(self, name: str) -> str:
141
+ chopped = os.path.basename(name).split('.')[:-1]
142
+ chopped.append(self.get_pch_suffix())
143
+ pchname = '.'.join(chopped)
144
+ return pchname
145
+
146
+ def get_pch_base_name(self, header: str) -> str:
147
+ # This needs to be implemented by inheriting classes
148
+ raise NotImplementedError
149
+
150
+ def get_pch_use_args(self, pch_dir: str, header: str) -> T.List[str]:
151
+ base = self.get_pch_base_name(header)
152
+ pchname = self.get_pch_name(header)
153
+ return ['/FI' + base, '/Yu' + base, '/Fp' + os.path.join(pch_dir, pchname)]
154
+
155
+ def get_preprocess_only_args(self) -> T.List[str]:
156
+ return ['/EP']
157
+
158
+ def get_preprocess_to_file_args(self) -> T.List[str]:
159
+ return ['/EP', '/P']
160
+
161
+ def get_compile_only_args(self) -> T.List[str]:
162
+ return ['/c']
163
+
164
+ def get_no_optimization_args(self) -> T.List[str]:
165
+ return ['/Od', '/Oi-']
166
+
167
+ def sanitizer_compile_args(self, value: str) -> T.List[str]:
168
+ if value == 'none':
169
+ return []
170
+ if value != 'address':
171
+ raise mesonlib.MesonException('VS only supports address sanitizer at the moment.')
172
+ return ['/fsanitize=address']
173
+
174
+ def get_output_args(self, outputname: str) -> T.List[str]:
175
+ if self.mode == 'PREPROCESSOR':
176
+ return ['/Fi' + outputname]
177
+ if outputname.endswith('.exe'):
178
+ return ['/Fe' + outputname]
179
+ return ['/Fo' + outputname]
180
+
181
+ def get_debug_args(self, is_debug: bool) -> T.List[str]:
182
+ return msvc_debug_args[is_debug]
183
+
184
+ def get_optimization_args(self, optimization_level: str) -> T.List[str]:
185
+ args = msvc_optimization_args[optimization_level]
186
+ if mesonlib.version_compare(self.version, '<18.0'):
187
+ args = [arg for arg in args if arg != '/Gw']
188
+ return args
189
+
190
+ def linker_to_compiler_args(self, args: T.List[str]) -> T.List[str]:
191
+ return ['/link'] + args
192
+
193
+ def get_pic_args(self) -> T.List[str]:
194
+ return [] # PIC is handled by the loader on Windows
195
+
196
+ def gen_vs_module_defs_args(self, defsfile: str) -> T.List[str]:
197
+ if not isinstance(defsfile, str):
198
+ raise RuntimeError('Module definitions file should be str')
199
+ # With MSVC, DLLs only export symbols that are explicitly exported,
200
+ # so if a module defs file is specified, we use that to export symbols
201
+ return ['/DEF:' + defsfile]
202
+
203
+ def gen_pch_args(self, header: str, source: str, pchname: str) -> T.Tuple[str, T.List[str]]:
204
+ objname = os.path.splitext(source)[0] + '.obj'
205
+ return objname, ['/Yc' + header, '/Fp' + pchname, '/Fo' + objname]
206
+
207
+ def openmp_flags(self) -> T.List[str]:
208
+ return ['/openmp']
209
+
210
+ def openmp_link_flags(self) -> T.List[str]:
211
+ return []
212
+
213
+ # FIXME, no idea what these should be.
214
+ def thread_flags(self, env: 'Environment') -> T.List[str]:
215
+ return []
216
+
217
+ @classmethod
218
+ def unix_args_to_native(cls, args: T.List[str]) -> T.List[str]:
219
+ result: T.List[str] = []
220
+ for i in args:
221
+ # -mms-bitfields is specific to MinGW-GCC
222
+ # -pthread is only valid for GCC
223
+ if i in {'-mms-bitfields', '-pthread'}:
224
+ continue
225
+ if i.startswith('-LIBPATH:'):
226
+ i = '/LIBPATH:' + i[9:]
227
+ elif i.startswith('-L'):
228
+ i = '/LIBPATH:' + i[2:]
229
+ # Translate GNU-style -lfoo library name to the import library
230
+ elif i.startswith('-l'):
231
+ name = i[2:]
232
+ if name in cls.ignore_libs:
233
+ # With MSVC, these are provided by the C runtime which is
234
+ # linked in by default
235
+ continue
236
+ else:
237
+ i = name + '.lib'
238
+ elif i.startswith('-isystem'):
239
+ # just use /I for -isystem system include path s
240
+ if i.startswith('-isystem='):
241
+ i = '/I' + i[9:]
242
+ else:
243
+ i = '/I' + i[8:]
244
+ elif i.startswith('-idirafter'):
245
+ # same as -isystem, but appends the path instead
246
+ if i.startswith('-idirafter='):
247
+ i = '/I' + i[11:]
248
+ else:
249
+ i = '/I' + i[10:]
250
+ # -pthread in link flags is only used on Linux
251
+ elif i == '-pthread':
252
+ continue
253
+ # cl.exe does not allow specifying both, so remove /utf-8 that we
254
+ # added automatically in the case the user overrides it manually.
255
+ elif (i.startswith('/source-charset:')
256
+ or i.startswith('/execution-charset:')
257
+ or i == '/validate-charset-'):
258
+ try:
259
+ result.remove('/utf-8')
260
+ except ValueError:
261
+ pass
262
+ result.append(i)
263
+ return result
264
+
265
+ @classmethod
266
+ def native_args_to_unix(cls, args: T.List[str]) -> T.List[str]:
267
+ result: T.List[str] = []
268
+ for arg in args:
269
+ if arg.startswith(('/LIBPATH:', '-LIBPATH:')):
270
+ result.append('-L' + arg[9:])
271
+ elif arg.endswith(('.a', '.lib')) and not os.path.isabs(arg):
272
+ result.append('-l' + arg)
273
+ else:
274
+ result.append(arg)
275
+ return result
276
+
277
+ def get_werror_args(self) -> T.List[str]:
278
+ return ['/WX']
279
+
280
+ def get_include_args(self, path: str, is_system: bool) -> T.List[str]:
281
+ if path == '':
282
+ path = '.'
283
+ # msvc does not have a concept of system header dirs.
284
+ return ['-I' + path]
285
+
286
+ def compute_parameters_with_absolute_paths(self, parameter_list: T.List[str], build_dir: str) -> T.List[str]:
287
+ for idx, i in enumerate(parameter_list):
288
+ if i[:2] == '-I' or i[:2] == '/I':
289
+ parameter_list[idx] = i[:2] + os.path.normpath(os.path.join(build_dir, i[2:]))
290
+ elif i[:9] == '/LIBPATH:':
291
+ parameter_list[idx] = i[:9] + os.path.normpath(os.path.join(build_dir, i[9:]))
292
+
293
+ return parameter_list
294
+
295
+ # Visual Studio is special. It ignores some arguments it does not
296
+ # understand and you can't tell it to error out on those.
297
+ # http://stackoverflow.com/questions/15259720/how-can-i-make-the-microsoft-c-compiler-treat-unknown-flags-as-errors-rather-t
298
+ def has_arguments(self, args: T.List[str], env: 'Environment', code: str, mode: CompileCheckMode) -> T.Tuple[bool, bool]:
299
+ warning_text = '4044' if mode == CompileCheckMode.LINK else '9002'
300
+ with self._build_wrapper(code, env, extra_args=args, mode=mode) as p:
301
+ if p.returncode != 0:
302
+ return False, p.cached
303
+ return not (warning_text in p.stderr or warning_text in p.stdout), p.cached
304
+
305
+ def get_compile_debugfile_args(self, rel_obj: str, pch: bool = False) -> T.List[str]:
306
+ return []
307
+
308
+ def get_instruction_set_args(self, instruction_set: str) -> T.Optional[T.List[str]]:
309
+ if self.is_64:
310
+ return vs64_instruction_set_args.get(instruction_set, None)
311
+ return vs32_instruction_set_args.get(instruction_set, None)
312
+
313
+ def _calculate_toolset_version(self, version: int) -> T.Optional[str]:
314
+ if version < 1310:
315
+ return '7.0'
316
+ elif version < 1400:
317
+ return '7.1' # (Visual Studio 2003)
318
+ elif version < 1500:
319
+ return '8.0' # (Visual Studio 2005)
320
+ elif version < 1600:
321
+ return '9.0' # (Visual Studio 2008)
322
+ elif version < 1700:
323
+ return '10.0' # (Visual Studio 2010)
324
+ elif version < 1800:
325
+ return '11.0' # (Visual Studio 2012)
326
+ elif version < 1900:
327
+ return '12.0' # (Visual Studio 2013)
328
+ elif version < 1910:
329
+ return '14.0' # (Visual Studio 2015)
330
+ elif version < 1920:
331
+ return '14.1' # (Visual Studio 2017)
332
+ elif version < 1930:
333
+ return '14.2' # (Visual Studio 2019)
334
+ elif version < 1940:
335
+ return '14.3' # (Visual Studio 2022)
336
+ mlog.warning(f'Could not find toolset for version {self.version!r}')
337
+ return None
338
+
339
+ def get_toolset_version(self) -> T.Optional[str]:
340
+ # See boost/config/compiler/visualc.cpp for up to date mapping
341
+ try:
342
+ version = int(''.join(self.version.split('.')[0:2]))
343
+ except ValueError:
344
+ return None
345
+ return self._calculate_toolset_version(version)
346
+
347
+ def get_default_include_dirs(self) -> T.List[str]:
348
+ if 'INCLUDE' not in os.environ:
349
+ return []
350
+ return os.environ['INCLUDE'].split(os.pathsep)
351
+
352
+ def get_crt_compile_args(self, crt_val: str, buildtype: str) -> T.List[str]:
353
+ crt_val = self.get_crt_val(crt_val, buildtype)
354
+ return self.crt_args[crt_val]
355
+
356
+ def has_func_attribute(self, name: str, env: 'Environment') -> T.Tuple[bool, bool]:
357
+ # MSVC doesn't have __attribute__ like Clang and GCC do, so just return
358
+ # false without compiling anything
359
+ return name in {'dllimport', 'dllexport'}, False
360
+
361
+ def get_argument_syntax(self) -> str:
362
+ return 'msvc'
363
+
364
+ def symbols_have_underscore_prefix(self, env: 'Environment') -> bool:
365
+ '''
366
+ Check if the compiler prefixes an underscore to global C symbols.
367
+
368
+ This overrides the Clike method, as for MSVC checking the
369
+ underscore prefix based on the compiler define never works,
370
+ so do not even try.
371
+ '''
372
+ # Try to consult a hardcoded list of cases we know
373
+ # absolutely have an underscore prefix
374
+ result = self._symbols_have_underscore_prefix_list(env)
375
+ if result is not None:
376
+ return result
377
+
378
+ # As a last resort, try search in a compiled binary
379
+ return self._symbols_have_underscore_prefix_searchbin(env)
380
+
381
+
382
+ class MSVCCompiler(VisualStudioLikeCompiler):
383
+
384
+ """Specific to the Microsoft Compilers."""
385
+
386
+ id = 'msvc'
387
+
388
+ def __init__(self, target: str):
389
+ super().__init__(target)
390
+
391
+ # Visual Studio 2013 and earlier don't support the /utf-8 argument.
392
+ # We want to remove it. We also want to make an explicit copy so we
393
+ # don't mutate class constant state
394
+ if mesonlib.version_compare(self.version, '<19.00') and '/utf-8' in self.always_args:
395
+ self.always_args = [r for r in self.always_args if r != '/utf-8']
396
+
397
+ # Override CCompiler.get_always_args
398
+ # We want to drop '/utf-8' for Visual Studio 2013 and earlier
399
+ def get_always_args(self) -> T.List[str]:
400
+ return self.always_args
401
+
402
+ def get_instruction_set_args(self, instruction_set: str) -> T.Optional[T.List[str]]:
403
+ if self.version.split('.')[0] == '16' and instruction_set == 'avx':
404
+ # VS documentation says that this exists and should work, but
405
+ # it does not. The headers do not contain AVX intrinsics
406
+ # and they cannot be called.
407
+ return None
408
+ return super().get_instruction_set_args(instruction_set)
409
+
410
+ def get_pch_base_name(self, header: str) -> str:
411
+ return os.path.basename(header)
412
+
413
+ # MSVC requires linking to the generated object file when linking a build target
414
+ # that uses a precompiled header
415
+ def should_link_pch_object(self) -> bool:
416
+ return True
417
+
418
+ class ClangClCompiler(VisualStudioLikeCompiler):
419
+
420
+ """Specific to Clang-CL."""
421
+
422
+ id = 'clang-cl'
423
+
424
+ def __init__(self, target: str):
425
+ super().__init__(target)
426
+
427
+ # Assembly
428
+ self.can_compile_suffixes.add('s')
429
+ self.can_compile_suffixes.add('sx')
430
+
431
+ def has_arguments(self, args: T.List[str], env: 'Environment', code: str, mode: CompileCheckMode) -> T.Tuple[bool, bool]:
432
+ if mode != CompileCheckMode.LINK:
433
+ args = args + ['-Werror=unknown-argument', '-Werror=unknown-warning-option']
434
+ return super().has_arguments(args, env, code, mode)
435
+
436
+ def get_toolset_version(self) -> T.Optional[str]:
437
+ # XXX: what is the right thing to do here?
438
+ return '14.1'
439
+
440
+ def get_pch_base_name(self, header: str) -> str:
441
+ return header
442
+
443
+ def get_include_args(self, path: str, is_system: bool) -> T.List[str]:
444
+ if path == '':
445
+ path = '.'
446
+ return ['/clang:-isystem' + path] if is_system else ['-I' + path]
447
+
448
+ def get_dependency_compile_args(self, dep: 'Dependency') -> T.List[str]:
449
+ if dep.get_include_type() == 'system':
450
+ converted: T.List[str] = []
451
+ for i in dep.get_compile_args():
452
+ if i.startswith('-isystem'):
453
+ converted += ['/clang:' + i]
454
+ else:
455
+ converted += [i]
456
+ return converted
457
+ else:
458
+ return dep.get_compile_args()
@@ -0,0 +1,111 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright 2012-2019 The Meson development team
3
+
4
+ from __future__ import annotations
5
+
6
+ """Representations specific to the Microchip XC16 C compiler family."""
7
+
8
+ import os
9
+ import typing as T
10
+
11
+ from ...mesonlib import EnvironmentException
12
+
13
+ if T.TYPE_CHECKING:
14
+ from ...envconfig import MachineInfo
15
+ from ...environment import Environment
16
+ from ...compilers.compilers import Compiler
17
+ else:
18
+ # This is a bit clever, for mypy we pretend that these mixins descend from
19
+ # Compiler, so we get all of the methods and attributes defined for us, but
20
+ # for runtime we make them descend from object (which all classes normally
21
+ # do). This gives up DRYer type checking, with no runtime impact
22
+ Compiler = object
23
+
24
+ xc16_optimization_args: T.Dict[str, T.List[str]] = {
25
+ 'plain': [],
26
+ '0': ['-O0'],
27
+ 'g': ['-O0'],
28
+ '1': ['-O1'],
29
+ '2': ['-O2'],
30
+ '3': ['-O3'],
31
+ 's': ['-Os']
32
+ }
33
+
34
+ xc16_debug_args: T.Dict[bool, T.List[str]] = {
35
+ False: [],
36
+ True: []
37
+ }
38
+
39
+
40
+ class Xc16Compiler(Compiler):
41
+
42
+ id = 'xc16'
43
+
44
+ def __init__(self) -> None:
45
+ if not self.is_cross:
46
+ raise EnvironmentException('xc16 supports only cross-compilation.')
47
+ # Assembly
48
+ self.can_compile_suffixes.add('s')
49
+ self.can_compile_suffixes.add('sx')
50
+ default_warn_args: T.List[str] = []
51
+ self.warn_args = {'0': [],
52
+ '1': default_warn_args,
53
+ '2': default_warn_args + [],
54
+ '3': default_warn_args + [],
55
+ 'everything': default_warn_args + []}
56
+
57
+ def get_always_args(self) -> T.List[str]:
58
+ return []
59
+
60
+ def get_pic_args(self) -> T.List[str]:
61
+ # PIC support is not enabled by default for xc16,
62
+ # if users want to use it, they need to add the required arguments explicitly
63
+ return []
64
+
65
+ def get_pch_suffix(self) -> str:
66
+ return 'pch'
67
+
68
+ def get_pch_use_args(self, pch_dir: str, header: str) -> T.List[str]:
69
+ return []
70
+
71
+ def thread_flags(self, env: 'Environment') -> T.List[str]:
72
+ return []
73
+
74
+ def get_coverage_args(self) -> T.List[str]:
75
+ return []
76
+
77
+ def get_no_stdinc_args(self) -> T.List[str]:
78
+ return ['-nostdinc']
79
+
80
+ def get_no_stdlib_link_args(self) -> T.List[str]:
81
+ return ['--nostdlib']
82
+
83
+ def get_optimization_args(self, optimization_level: str) -> T.List[str]:
84
+ return xc16_optimization_args[optimization_level]
85
+
86
+ def get_debug_args(self, is_debug: bool) -> T.List[str]:
87
+ return xc16_debug_args[is_debug]
88
+
89
+ @classmethod
90
+ def _unix_args_to_native(cls, args: T.List[str], info: MachineInfo) -> T.List[str]:
91
+ result = []
92
+ for i in args:
93
+ if i.startswith('-D'):
94
+ i = '-D' + i[2:]
95
+ if i.startswith('-I'):
96
+ i = '-I' + i[2:]
97
+ if i.startswith('-Wl,-rpath='):
98
+ continue
99
+ elif i == '--print-search-dirs':
100
+ continue
101
+ elif i.startswith('-L'):
102
+ continue
103
+ result.append(i)
104
+ return result
105
+
106
+ def compute_parameters_with_absolute_paths(self, parameter_list: T.List[str], build_dir: str) -> T.List[str]:
107
+ for idx, i in enumerate(parameter_list):
108
+ if i[:9] == '-I':
109
+ parameter_list[idx] = i[:9] + os.path.normpath(os.path.join(build_dir, i[9:]))
110
+
111
+ return parameter_list