rubycc 1.0.0

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 (159) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +56 -0
  3. data/LICENSE.txt +21 -0
  4. data/NOTICE +52 -0
  5. data/README.md +208 -0
  6. data/data/README.md +117 -0
  7. data/data/r10_corpus_scan.json +4082 -0
  8. data/data/r10_manual_classification.json +5342 -0
  9. data/data/r10_verification_m4a.json +1531 -0
  10. data/data/r10_verification_m4b.json +1818 -0
  11. data/data/r10_verification_m4c.json +1489 -0
  12. data/data/r10_verification_m4d.json +318 -0
  13. data/data/r10_verification_rbs.json +192 -0
  14. data/data/verified_gems.json +397 -0
  15. data/exe/rmake +16 -0
  16. data/exe/rubycc +9 -0
  17. data/exe/rubycc-ar +114 -0
  18. data/exe/rubycc-doctor +14 -0
  19. data/exe/rubycc-pkgconf +8 -0
  20. data/include/float.h +87 -0
  21. data/include/iso646.h +18 -0
  22. data/include/libc/alloca.h +18 -0
  23. data/include/libc/arpa/inet.h +61 -0
  24. data/include/libc/assert.h +43 -0
  25. data/include/libc/dirent.h +72 -0
  26. data/include/libc/dlfcn.h +58 -0
  27. data/include/libc/features.h +205 -0
  28. data/include/libc/glibc/aarch64/ctype.h +108 -0
  29. data/include/libc/glibc/aarch64/endian.h +54 -0
  30. data/include/libc/glibc/aarch64/errno.h +154 -0
  31. data/include/libc/glibc/aarch64/fcntl.h +144 -0
  32. data/include/libc/glibc/aarch64/inttypes.h +182 -0
  33. data/include/libc/glibc/aarch64/limits.h +63 -0
  34. data/include/libc/glibc/aarch64/pthread.h +131 -0
  35. data/include/libc/glibc/aarch64/setjmp.h +84 -0
  36. data/include/libc/glibc/aarch64/stdint.h +174 -0
  37. data/include/libc/glibc/aarch64/sys/epoll.h +88 -0
  38. data/include/libc/glibc/aarch64/sys/fcntl.h +19 -0
  39. data/include/libc/glibc/aarch64/sys/select.h +75 -0
  40. data/include/libc/glibc/aarch64/sys/stat.h +136 -0
  41. data/include/libc/glibc/aarch64/sys/syscall.h +167 -0
  42. data/include/libc/glibc/aarch64/sys/time.h +74 -0
  43. data/include/libc/glibc/aarch64/sys/types.h +127 -0
  44. data/include/libc/glibc/aarch64/time.h +113 -0
  45. data/include/libc/glibc/x86_64/ctype.h +108 -0
  46. data/include/libc/glibc/x86_64/endian.h +54 -0
  47. data/include/libc/glibc/x86_64/errno.h +154 -0
  48. data/include/libc/glibc/x86_64/fcntl.h +134 -0
  49. data/include/libc/glibc/x86_64/inttypes.h +182 -0
  50. data/include/libc/glibc/x86_64/limits.h +61 -0
  51. data/include/libc/glibc/x86_64/pthread.h +111 -0
  52. data/include/libc/glibc/x86_64/setjmp.h +82 -0
  53. data/include/libc/glibc/x86_64/stdint.h +163 -0
  54. data/include/libc/glibc/x86_64/sys/epoll.h +91 -0
  55. data/include/libc/glibc/x86_64/sys/fcntl.h +19 -0
  56. data/include/libc/glibc/x86_64/sys/select.h +75 -0
  57. data/include/libc/glibc/x86_64/sys/stat.h +130 -0
  58. data/include/libc/glibc/x86_64/sys/syscall.h +188 -0
  59. data/include/libc/glibc/x86_64/sys/time.h +74 -0
  60. data/include/libc/glibc/x86_64/sys/types.h +123 -0
  61. data/include/libc/glibc/x86_64/time.h +113 -0
  62. data/include/libc/grp.h +50 -0
  63. data/include/libc/langinfo.h +126 -0
  64. data/include/libc/link.h +18 -0
  65. data/include/libc/locale.h +83 -0
  66. data/include/libc/math.h +191 -0
  67. data/include/libc/netinet/in.h +126 -0
  68. data/include/libc/netinet/tcp.h +44 -0
  69. data/include/libc/poll.h +46 -0
  70. data/include/libc/pwd.h +58 -0
  71. data/include/libc/regex.h +53 -0
  72. data/include/libc/sched.h +35 -0
  73. data/include/libc/signal.h +204 -0
  74. data/include/libc/stdio.h +157 -0
  75. data/include/libc/stdlib.h +92 -0
  76. data/include/libc/string.h +74 -0
  77. data/include/libc/strings.h +25 -0
  78. data/include/libc/sys/cdefs.h +126 -0
  79. data/include/libc/sys/inotify.h +111 -0
  80. data/include/libc/sys/ioctl.h +36 -0
  81. data/include/libc/sys/mman.h +65 -0
  82. data/include/libc/sys/param.h +41 -0
  83. data/include/libc/sys/resource.h +109 -0
  84. data/include/libc/sys/socket.h +167 -0
  85. data/include/libc/sys/statfs.h +82 -0
  86. data/include/libc/sys/timerfd.h +55 -0
  87. data/include/libc/sys/uio.h +40 -0
  88. data/include/libc/sys/un.h +25 -0
  89. data/include/libc/sys/utsname.h +35 -0
  90. data/include/libc/sys/wait.h +135 -0
  91. data/include/libc/termios.h +179 -0
  92. data/include/libc/unistd.h +194 -0
  93. data/include/stdalign.h +16 -0
  94. data/include/stdarg.h +31 -0
  95. data/include/stdatomic.h +158 -0
  96. data/include/stdbool.h +15 -0
  97. data/include/stdckdint.h +28 -0
  98. data/include/stddef.h +60 -0
  99. data/include/stdnoreturn.h +18 -0
  100. data/include/x86intrin.h +16 -0
  101. data/lib/rubycc/backend/aarch64.rb +1724 -0
  102. data/lib/rubycc/backend/x86_64.rb +1369 -0
  103. data/lib/rubycc/compile_error.rb +36 -0
  104. data/lib/rubycc/compiler.rb +305 -0
  105. data/lib/rubycc/doctor/builder.rb +151 -0
  106. data/lib/rubycc/doctor/cli.rb +190 -0
  107. data/lib/rubycc/doctor/fetcher.rb +84 -0
  108. data/lib/rubycc/doctor/gemfile.rb +115 -0
  109. data/lib/rubycc/doctor/verified_gems.rb +114 -0
  110. data/lib/rubycc/doctor.rb +16 -0
  111. data/lib/rubycc/driver.rb +463 -0
  112. data/lib/rubycc/front/ast.rb +528 -0
  113. data/lib/rubycc/front/constant_evaluator.rb +631 -0
  114. data/lib/rubycc/front/initializer_resolver.rb +592 -0
  115. data/lib/rubycc/front/lexeme_reader.rb +460 -0
  116. data/lib/rubycc/front/lexer.rb +232 -0
  117. data/lib/rubycc/front/parser.rb +4122 -0
  118. data/lib/rubycc/front/token.rb +49 -0
  119. data/lib/rubycc/ir/call_convention.rb +486 -0
  120. data/lib/rubycc/ir/generator.rb +6036 -0
  121. data/lib/rubycc/ir/ir.rb +417 -0
  122. data/lib/rubycc/link/compat_runtime.rb +89 -0
  123. data/lib/rubycc/link/errors.rb +13 -0
  124. data/lib/rubycc/link/executable_linker.rb +405 -0
  125. data/lib/rubycc/link/library_resolver.rb +437 -0
  126. data/lib/rubycc/link/partial_linker.rb +546 -0
  127. data/lib/rubycc/link/shared_linker.rb +1732 -0
  128. data/lib/rubycc/mkmf_shim.rb +83 -0
  129. data/lib/rubycc/objfile/ar_archive.rb +437 -0
  130. data/lib/rubycc/objfile/elf_reader.rb +646 -0
  131. data/lib/rubycc/objfile/elf_writer.rb +891 -0
  132. data/lib/rubycc/objfile/relocatable_writer.rb +376 -0
  133. data/lib/rubycc/pkgconf/cli.rb +139 -0
  134. data/lib/rubycc/pkgconf/errors.rb +39 -0
  135. data/lib/rubycc/pkgconf/model.rb +28 -0
  136. data/lib/rubycc/pkgconf/parser.rb +109 -0
  137. data/lib/rubycc/pkgconf/pkgconf.rb +15 -0
  138. data/lib/rubycc/pkgconf/resolver.rb +70 -0
  139. data/lib/rubycc/pkgconf/search_path.rb +38 -0
  140. data/lib/rubycc/pkgconf/system_path_filter.rb +131 -0
  141. data/lib/rubycc/preprocess/constant_expression.rb +219 -0
  142. data/lib/rubycc/preprocess/glibc_version.rb +124 -0
  143. data/lib/rubycc/preprocess/pp_token.rb +62 -0
  144. data/lib/rubycc/preprocess/preprocessor.rb +2020 -0
  145. data/lib/rubycc/preprocess/scanner.rb +290 -0
  146. data/lib/rubycc/preprocess/token_converter.rb +157 -0
  147. data/lib/rubycc/rmake/cli.rb +143 -0
  148. data/lib/rubycc/rmake/errors.rb +71 -0
  149. data/lib/rubycc/rmake/executor.rb +818 -0
  150. data/lib/rubycc/rmake/expander.rb +251 -0
  151. data/lib/rubycc/rmake/makefile.rb +352 -0
  152. data/lib/rubycc/rmake/model.rb +137 -0
  153. data/lib/rubycc/rmake/parser.rb +226 -0
  154. data/lib/rubycc/rmake/rmake.rb +15 -0
  155. data/lib/rubycc/type.rb +1236 -0
  156. data/lib/rubycc/version.rb +5 -0
  157. data/lib/rubycc.rb +36 -0
  158. data/lib/rubygems_plugin.rb +102 -0
  159. metadata +219 -0
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rubycc
4
+ VERSION = "1.0.0"
5
+ end
data/lib/rubycc.rb ADDED
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "rubycc/version"
4
+
5
+ module Rubycc
6
+ class Error < StandardError; end
7
+ end
8
+
9
+ require_relative "rubycc/compile_error"
10
+ require_relative "rubycc/type"
11
+ require_relative "rubycc/front/token"
12
+ require_relative "rubycc/front/lexeme_reader"
13
+ require_relative "rubycc/front/lexer"
14
+ require_relative "rubycc/preprocess/pp_token"
15
+ require_relative "rubycc/preprocess/scanner"
16
+ require_relative "rubycc/preprocess/token_converter"
17
+ require_relative "rubycc/front/ast"
18
+ require_relative "rubycc/front/constant_evaluator"
19
+ require_relative "rubycc/preprocess/constant_expression"
20
+ require_relative "rubycc/preprocess/preprocessor"
21
+ require_relative "rubycc/front/parser"
22
+ require_relative "rubycc/ir/ir"
23
+ require_relative "rubycc/ir/generator"
24
+ require_relative "rubycc/backend/x86_64"
25
+ require_relative "rubycc/backend/aarch64"
26
+ require_relative "rubycc/objfile/elf_writer"
27
+ require_relative "rubycc/objfile/elf_reader"
28
+ require_relative "rubycc/objfile/relocatable_writer"
29
+ require_relative "rubycc/objfile/ar_archive"
30
+ require_relative "rubycc/link/errors"
31
+ require_relative "rubycc/link/partial_linker"
32
+ require_relative "rubycc/link/shared_linker"
33
+ require_relative "rubycc/link/executable_linker"
34
+ require_relative "rubycc/link/library_resolver"
35
+ require_relative "rubycc/compiler"
36
+ require_relative "rubycc/driver"
@@ -0,0 +1,102 @@
1
+ # frozen_string_literal: true
2
+
3
+ # RubyGems auto-loads every installed gem's `rubygems_plugin.rb` at startup
4
+ # (Gem.load_plugins), so this file runs in the `gem install <native-ext-gem>`
5
+ # process before any extension is built. Its whole job is to decide whether the
6
+ # build should go through rubycc and, if so, to inject the environment that makes
7
+ # RubyGems' extension build route to rubycc's toolchain instead of gcc/make —
8
+ # without the user passing any flags (DESIGN 5.4, ROADMAP §6 B6).
9
+ #
10
+ # The decision:
11
+ # * ENV["RUBYCC"] == "1" -> force on;
12
+ # * ENV["RUBYCC"] == "0" -> force off;
13
+ # * unset -> on only when neither `cc`, `gcc` nor `make` is on
14
+ # PATH (a toolchain-less host that needs rubycc).
15
+ #
16
+ # When off, the plugin must be inert — it is loaded on *every* `gem` command, so
17
+ # the disabled path does no work and touches no state. When on it rewrites four
18
+ # environment variables the RubyGems build inherits:
19
+ # * MAKE -> exe/rmake, which RubyGems runs as `$(MAKE)`; rmake builds the
20
+ # generated Makefile with rubycc always substituted for $(CC);
21
+ # * PKG_CONFIG -> exe/rubycc-pkgconf, the pkg-config shim;
22
+ # * RUBYLIB <- gains this gem's lib/ so the extconf child can require rubycc;
23
+ # * RUBYOPT <- gains `-rrubycc/mkmf_shim` so the extconf child's mkmf issues
24
+ # its conftests through rubycc and writes a `CC = <rubycc>`
25
+ # Makefile.
26
+ # Every rewrite is idempotent: re-running install! adds no duplicate PATH/RUBYOPT
27
+ # entries and re-assigns the same MAKE/PKG_CONFIG values.
28
+ module Rubycc
29
+ module GemPlugin
30
+ # This file lives at lib/rubygems_plugin.rb, so __dir__ is the gem's lib/ and
31
+ # the executables sit at ../exe relative to it.
32
+ LIB_DIR = __dir__
33
+ RMAKE_EXE = File.expand_path("../exe/rmake", __dir__)
34
+ PKGCONF_EXE = File.expand_path("../exe/rubycc-pkgconf", __dir__)
35
+
36
+ # The require the extconf child needs so mkmf's conftests route to rubycc.
37
+ MKMF_SHIM_FEATURE = "rubycc/mkmf_shim"
38
+
39
+ # The external programs whose absence (all three) turns rubycc on by default:
40
+ # a host with no C compiler and no make is one that cannot build extensions
41
+ # the conventional way, which is exactly where rubycc takes over.
42
+ AUTO_ENABLE_ABSENT_TOOLS = %w[cc gcc make].freeze
43
+
44
+ module_function
45
+
46
+ # Whether the rubycc build path should be active for this process.
47
+ def enabled?
48
+ case ENV["RUBYCC"]
49
+ when "1" then true
50
+ when "0" then false
51
+ else auto_enable?
52
+ end
53
+ end
54
+
55
+ # The unset-RUBYCC default: on only when none of the conventional tools is
56
+ # available, so a host that already has gcc/make is left completely alone.
57
+ def auto_enable?
58
+ AUTO_ENABLE_ABSENT_TOOLS.none? { |tool| on_path?(tool) }
59
+ end
60
+
61
+ # Inject the environment that makes the RubyGems extension build use rubycc.
62
+ def install!
63
+ ENV["MAKE"] = RMAKE_EXE
64
+ ENV["PKG_CONFIG"] = PKGCONF_EXE
65
+ prepend_path_entry("RUBYLIB", LIB_DIR)
66
+ prepend_ruby_require(MKMF_SHIM_FEATURE)
67
+ end
68
+
69
+ # A PATH lookup that spawns nothing: scan the PATH directories for an
70
+ # executable file of that name (the same resolution `command -v` performs).
71
+ def on_path?(name)
72
+ ENV["PATH"].to_s.split(File::PATH_SEPARATOR).any? do |dir|
73
+ next false if dir.empty?
74
+
75
+ candidate = File.join(dir, name)
76
+ File.file?(candidate) && File.executable?(candidate)
77
+ end
78
+ end
79
+
80
+ # Prepend +dir+ to a PATH-style environment variable (RUBYLIB) unless it is
81
+ # already the leading entry — so the extconf child can require rubycc from
82
+ # this gem's lib/.
83
+ def prepend_path_entry(var, dir)
84
+ entries = ENV[var].to_s.split(File::PATH_SEPARATOR)
85
+ return if entries.first == dir
86
+
87
+ ENV[var] = [dir, *entries].join(File::PATH_SEPARATOR)
88
+ end
89
+
90
+ # Add `-r<feature>` to RUBYOPT (at the front, so the shim loads before the
91
+ # extconf script's own requires) unless it is already present.
92
+ def prepend_ruby_require(feature)
93
+ flag = "-r#{feature}"
94
+ current = ENV["RUBYOPT"].to_s
95
+ return if current.split(/\s+/).include?(flag)
96
+
97
+ ENV["RUBYOPT"] = current.empty? ? flag : "#{flag} #{current}"
98
+ end
99
+ end
100
+ end
101
+
102
+ Rubycc::GemPlugin.install! if Rubycc::GemPlugin.enabled?
metadata ADDED
@@ -0,0 +1,219 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubycc
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - DATE Ken
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies: []
12
+ description: |
13
+ rubycc builds Ruby C extensions on a machine that has no gcc, no binutils, no make
14
+ and no shell. It is a C11-subset compiler, an assembler-free ELF writer, a linker,
15
+ an ar, a make, a pkg-config shim and a preprocessor, written in Ruby, plus the libc
16
+ headers a build needs -- so a distroless image with no libc development package
17
+ still compiles ruby.h.
18
+
19
+ Targets x86-64 and AArch64 Linux (ELF64) against glibc and musl. Generated code is
20
+ unoptimized: the point is that the extension builds and its own test suite passes,
21
+ which is the level at which every gem recorded in data/verified_gems.json was
22
+ verified. See the README for the verified gems, the measured limits, and what is
23
+ out of scope.
24
+ email:
25
+ - itacchi@gmail.com
26
+ executables:
27
+ - rmake
28
+ - rubycc
29
+ - rubycc-ar
30
+ - rubycc-doctor
31
+ - rubycc-pkgconf
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - CHANGELOG.md
36
+ - LICENSE.txt
37
+ - NOTICE
38
+ - README.md
39
+ - data/README.md
40
+ - data/r10_corpus_scan.json
41
+ - data/r10_manual_classification.json
42
+ - data/r10_verification_m4a.json
43
+ - data/r10_verification_m4b.json
44
+ - data/r10_verification_m4c.json
45
+ - data/r10_verification_m4d.json
46
+ - data/r10_verification_rbs.json
47
+ - data/verified_gems.json
48
+ - exe/rmake
49
+ - exe/rubycc
50
+ - exe/rubycc-ar
51
+ - exe/rubycc-doctor
52
+ - exe/rubycc-pkgconf
53
+ - include/float.h
54
+ - include/iso646.h
55
+ - include/libc/alloca.h
56
+ - include/libc/arpa/inet.h
57
+ - include/libc/assert.h
58
+ - include/libc/dirent.h
59
+ - include/libc/dlfcn.h
60
+ - include/libc/features.h
61
+ - include/libc/glibc/aarch64/ctype.h
62
+ - include/libc/glibc/aarch64/endian.h
63
+ - include/libc/glibc/aarch64/errno.h
64
+ - include/libc/glibc/aarch64/fcntl.h
65
+ - include/libc/glibc/aarch64/inttypes.h
66
+ - include/libc/glibc/aarch64/limits.h
67
+ - include/libc/glibc/aarch64/pthread.h
68
+ - include/libc/glibc/aarch64/setjmp.h
69
+ - include/libc/glibc/aarch64/stdint.h
70
+ - include/libc/glibc/aarch64/sys/epoll.h
71
+ - include/libc/glibc/aarch64/sys/fcntl.h
72
+ - include/libc/glibc/aarch64/sys/select.h
73
+ - include/libc/glibc/aarch64/sys/stat.h
74
+ - include/libc/glibc/aarch64/sys/syscall.h
75
+ - include/libc/glibc/aarch64/sys/time.h
76
+ - include/libc/glibc/aarch64/sys/types.h
77
+ - include/libc/glibc/aarch64/time.h
78
+ - include/libc/glibc/x86_64/ctype.h
79
+ - include/libc/glibc/x86_64/endian.h
80
+ - include/libc/glibc/x86_64/errno.h
81
+ - include/libc/glibc/x86_64/fcntl.h
82
+ - include/libc/glibc/x86_64/inttypes.h
83
+ - include/libc/glibc/x86_64/limits.h
84
+ - include/libc/glibc/x86_64/pthread.h
85
+ - include/libc/glibc/x86_64/setjmp.h
86
+ - include/libc/glibc/x86_64/stdint.h
87
+ - include/libc/glibc/x86_64/sys/epoll.h
88
+ - include/libc/glibc/x86_64/sys/fcntl.h
89
+ - include/libc/glibc/x86_64/sys/select.h
90
+ - include/libc/glibc/x86_64/sys/stat.h
91
+ - include/libc/glibc/x86_64/sys/syscall.h
92
+ - include/libc/glibc/x86_64/sys/time.h
93
+ - include/libc/glibc/x86_64/sys/types.h
94
+ - include/libc/glibc/x86_64/time.h
95
+ - include/libc/grp.h
96
+ - include/libc/langinfo.h
97
+ - include/libc/link.h
98
+ - include/libc/locale.h
99
+ - include/libc/math.h
100
+ - include/libc/netinet/in.h
101
+ - include/libc/netinet/tcp.h
102
+ - include/libc/poll.h
103
+ - include/libc/pwd.h
104
+ - include/libc/regex.h
105
+ - include/libc/sched.h
106
+ - include/libc/signal.h
107
+ - include/libc/stdio.h
108
+ - include/libc/stdlib.h
109
+ - include/libc/string.h
110
+ - include/libc/strings.h
111
+ - include/libc/sys/cdefs.h
112
+ - include/libc/sys/inotify.h
113
+ - include/libc/sys/ioctl.h
114
+ - include/libc/sys/mman.h
115
+ - include/libc/sys/param.h
116
+ - include/libc/sys/resource.h
117
+ - include/libc/sys/socket.h
118
+ - include/libc/sys/statfs.h
119
+ - include/libc/sys/timerfd.h
120
+ - include/libc/sys/uio.h
121
+ - include/libc/sys/un.h
122
+ - include/libc/sys/utsname.h
123
+ - include/libc/sys/wait.h
124
+ - include/libc/termios.h
125
+ - include/libc/unistd.h
126
+ - include/stdalign.h
127
+ - include/stdarg.h
128
+ - include/stdatomic.h
129
+ - include/stdbool.h
130
+ - include/stdckdint.h
131
+ - include/stddef.h
132
+ - include/stdnoreturn.h
133
+ - include/x86intrin.h
134
+ - lib/rubycc.rb
135
+ - lib/rubycc/backend/aarch64.rb
136
+ - lib/rubycc/backend/x86_64.rb
137
+ - lib/rubycc/compile_error.rb
138
+ - lib/rubycc/compiler.rb
139
+ - lib/rubycc/doctor.rb
140
+ - lib/rubycc/doctor/builder.rb
141
+ - lib/rubycc/doctor/cli.rb
142
+ - lib/rubycc/doctor/fetcher.rb
143
+ - lib/rubycc/doctor/gemfile.rb
144
+ - lib/rubycc/doctor/verified_gems.rb
145
+ - lib/rubycc/driver.rb
146
+ - lib/rubycc/front/ast.rb
147
+ - lib/rubycc/front/constant_evaluator.rb
148
+ - lib/rubycc/front/initializer_resolver.rb
149
+ - lib/rubycc/front/lexeme_reader.rb
150
+ - lib/rubycc/front/lexer.rb
151
+ - lib/rubycc/front/parser.rb
152
+ - lib/rubycc/front/token.rb
153
+ - lib/rubycc/ir/call_convention.rb
154
+ - lib/rubycc/ir/generator.rb
155
+ - lib/rubycc/ir/ir.rb
156
+ - lib/rubycc/link/compat_runtime.rb
157
+ - lib/rubycc/link/errors.rb
158
+ - lib/rubycc/link/executable_linker.rb
159
+ - lib/rubycc/link/library_resolver.rb
160
+ - lib/rubycc/link/partial_linker.rb
161
+ - lib/rubycc/link/shared_linker.rb
162
+ - lib/rubycc/mkmf_shim.rb
163
+ - lib/rubycc/objfile/ar_archive.rb
164
+ - lib/rubycc/objfile/elf_reader.rb
165
+ - lib/rubycc/objfile/elf_writer.rb
166
+ - lib/rubycc/objfile/relocatable_writer.rb
167
+ - lib/rubycc/pkgconf/cli.rb
168
+ - lib/rubycc/pkgconf/errors.rb
169
+ - lib/rubycc/pkgconf/model.rb
170
+ - lib/rubycc/pkgconf/parser.rb
171
+ - lib/rubycc/pkgconf/pkgconf.rb
172
+ - lib/rubycc/pkgconf/resolver.rb
173
+ - lib/rubycc/pkgconf/search_path.rb
174
+ - lib/rubycc/pkgconf/system_path_filter.rb
175
+ - lib/rubycc/preprocess/constant_expression.rb
176
+ - lib/rubycc/preprocess/glibc_version.rb
177
+ - lib/rubycc/preprocess/pp_token.rb
178
+ - lib/rubycc/preprocess/preprocessor.rb
179
+ - lib/rubycc/preprocess/scanner.rb
180
+ - lib/rubycc/preprocess/token_converter.rb
181
+ - lib/rubycc/rmake/cli.rb
182
+ - lib/rubycc/rmake/errors.rb
183
+ - lib/rubycc/rmake/executor.rb
184
+ - lib/rubycc/rmake/expander.rb
185
+ - lib/rubycc/rmake/makefile.rb
186
+ - lib/rubycc/rmake/model.rb
187
+ - lib/rubycc/rmake/parser.rb
188
+ - lib/rubycc/rmake/rmake.rb
189
+ - lib/rubycc/type.rb
190
+ - lib/rubycc/version.rb
191
+ - lib/rubygems_plugin.rb
192
+ homepage: https://github.com/nuna/rubycc
193
+ licenses:
194
+ - MIT
195
+ metadata:
196
+ source_code_uri: https://github.com/nuna/rubycc
197
+ changelog_uri: https://github.com/nuna/rubycc/blob/master/CHANGELOG.md
198
+ bug_tracker_uri: https://github.com/nuna/rubycc/issues
199
+ documentation_uri: https://github.com/nuna/rubycc/blob/master/README.md
200
+ rubygems_mfa_required: 'true'
201
+ rdoc_options: []
202
+ require_paths:
203
+ - lib
204
+ required_ruby_version: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '3.3'
209
+ required_rubygems_version: !ruby/object:Gem::Requirement
210
+ requirements:
211
+ - - ">="
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ requirements: []
215
+ rubygems_version: 3.6.9
216
+ specification_version: 4
217
+ summary: Almost Pure Ruby C toolchain for building Ruby native extensions without
218
+ gcc/binutils
219
+ test_files: []