git.delta.rocks / jrsonnet / refs/commits / 4824700b357f

difftreelog

chore re-run benchmarks

Lach2026-04-01parent: #4808431.patch.diff
in: master

9 files changed

modifiedREADME.adocdiffbeforeafterboth
69* https://github.com/google/jsonnet[C++];69* https://github.com/google/jsonnet[C++];
70* https://github.com/google/go-jsonnet/[Go];70* https://github.com/google/go-jsonnet/[Go];
71* https://github.com/databricks/sjsonnet[Scala].71* https://github.com/databricks/sjsonnet[Scala].
72* [NEW] https://github.com/eduardosm/rsjsonnet[Another Rust impl appears].72* https://github.com/eduardosm/rsjsonnet[Another Rust impl appears].
7373
74This implementation shows performance better than all existing implementations.74This implementation shows performance better than all existing implementations.
75For more information see link:./docs/benchmarks.md[benchmarks]75For more information see link:./docs/benchmarks.adoc[benchmarks]
7676
77Also, I wanted to experiment on new syntax features, and jrsonnet implements some of them.77Also, I wanted to experiment on new syntax features, and jrsonnet implements some of them.
78For more information see link:./docs/features.adoc[features]78For more information see link:./docs/features.adoc[features]
addeddocs/benchmarks.adocdiffbeforeafterboth

no changes

deleteddocs/benchmarks.mddiffbeforeafterboth

no changes

addednix/benchmarks.adocdiffbeforeafterboth

no changes

deletednix/benchmarks.mddiffbeforeafterboth

no changes

modifiednix/benchmarks.nixdiffbeforeafterboth
79 skipGo ? "",79 skipGo ? "",
80 vendor ? "",80 vendor ? "",
81 }:81 }:
82 ''82 ''
83 echo >> $out83 echo >> $out
84 echo "### ${name}" >> $out84 echo "=== ${name}" >> $out
85 echo >> $out85 echo >> $out
86 ${optionalString (skipRustAlternative != "") ''86 ${optionalString (skipRustAlternative != "") ''
87 echo "> Note: No results for Rust (alternative), ${skipRustAlternative}" >> $out87 echo "> Note: No results for Rust (alternative), ${skipRustAlternative}" >> $out
88 echo >> $out88 echo >> $out
89 ''}89 ''}
90 ${optionalString (skipGo != "") ''90 ${optionalString (skipGo != "") ''
91 echo "> Note: No results for Go, ${skipGo}" >> $out91 echo "> Note: No results for Go, ${skipGo}" >> $out
92 echo >> $out92 echo >> $out
93 ''}93 ''}
94 ${optionalString (skipScala != "") ''94 ${optionalString (skipScala != "") ''
95 echo "> Note: No results for Scala/Scala (native)/Scala (GraalVM), ${skipScala}" >> $out95 echo "> Note: No results for Scala (native)/Scala (GraalVM), ${skipScala}" >> $out
96 echo >> $out96 echo >> $out
97 ''}97 ''}
98 ${optionalString (skipCpp != "") ''98 ${optionalString (skipCpp != "") ''
99 echo "> Note: No results for C++, ${skipCpp}" >> $out99 echo "> Note: No results for C++, ${skipCpp}" >> $out
100 echo >> $out100 echo >> $out
101 ''}101 ''}
102 ${optionalString (!quick && !omitSource) ''102 ${optionalString (!quick && !omitSource) ''
103 echo "<details>" >> $out103 echo ".Source" >> $out
104 echo "<summary>Source</summary>" >> $out104 echo "[%collapsible]" >> $out
105 echo "====" >> $out
105 echo >> $out106 echo "[source,jsonnet]" >> $out
106 echo "\`\`\`jsonnet" >> $out107 echo "----" >> $out
107 ${optionalString pathIsGenerator "echo \"// Generator source\" >> $out"}108 ${optionalString pathIsGenerator "echo \"// Generator source\" >> $out"}
108 cat ${path} >> $out109 cat ${path} >> $out
109 echo >> $out110 echo >> $out
110 echo "\`\`\`" >> $out111 echo "----" >> $out
111 echo "</details>" >> $out112 echo "====" >> $out
112 echo >> $out113 echo >> $out
113 ''}114 ''}
114 path=${path}115 path=${path}
115 ${optionalString pathIsGenerator ''116 ${optionalString pathIsGenerator ''
116 go-jsonnet $path > generated.jsonnet117 go-jsonnet $path > generated.jsonnet
117 path=generated.jsonnet118 path=generated.jsonnet
118 ''}119 ''}
119 hyperfine -N -w4 -m20 --output=pipe --style=basic --export-asciidoc result.adoc \120 hyperfine -N -w4 -m20 --output=pipe --style=basic --export-asciidoc result.adoc \
120 ${121 ${
121 concatStringsSep " " (122 concatStringsSep " " (
122 forEach jrsonnetVariants (123 forEach jrsonnetVariants (
123 variant:124 variant:
124 "\"${variant.drv}/bin/jrsonnet $path${optionalString (vendor != "") " -J${vendor}"}\" -n \"Rust${125 "\"${variant.drv}/bin/jrsonnet $path${optionalString (vendor != "") " -J${vendor}"}\" -n \"Rust${
125 if variant.name != "" then " (${variant.name})" else ""126 if variant.name != "" then " (${variant.name})" else ""
126 }\""127 }\""
127 )128 )
128 )129 )
129 } \130 } \
130 ${131 ${
131 optionalString (skipRustAlternative == "")132 optionalString (skipRustAlternative == "")
132 "\"rsjsonnet $path${133 "\"rsjsonnet $path${
133 optionalString (vendor != "") " -J ${vendor}"134 optionalString (vendor != "") " -J ${vendor}"
134 }\" -n \"Rust (alternative, rsjsonnet)\""135 }\" -n \"Rust (alternative, rsjsonnet)\""
135 } \136 } \
136 ${137 ${
137 optionalString (skipGo == "")138 optionalString (skipGo == "")
138 "\"go-jsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Go\""139 "\"go-jsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Go\""
139 } \
140 ${
141 optionalString (skipScala == "")
142 "\"sjsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Scala\""140 } \
143 } \141 ${
144 ${142 optionalString (skipScala == "")
145 optionalString (skipScala == "")143 "\"sjsonnet-native $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Scala (native)\""
146 "\"sjsonnet-native $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Scala (native)\""144 } \
147 } \145 ${
148 ${146 optionalString (skipScala == "")
149 optionalString (skipScala == "")147 "\"sjsonnet-graalvm $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Scala (GraalVM)\""
150 "\"sjsonnet-graalvm $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Scala (GraalVM)\""148 } \
151 } \149 ${optionalString (skipCpp == "")
152 ${optionalString (skipCpp == "")150 "\"jsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"C++\""
153 "\"jsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"C++\""151 }
154 }152 cat result.adoc >> $out
155 cat result.adoc >> $out153 '';
156 '';
157 in154 in
158 ''155 ''
159 set -oux156 set -oux
160157 ulimit -s unlimited
158
161 temp=$(mktemp -d)159 temp=$(mktemp -d)
162 cd $temp160 cd $temp
163161
164 touch $out162 touch $out
165 ${optionalString (!quick) ''163 ${optionalString (!quick) ''
166 cat ${./benchmarks.md} >> $out164 cat ${./benchmarks.adoc} >> $out
167 echo >> $out165 echo >> $out
168166
169 echo "<details>" >> $out167 echo "CPU: $(grep 'model name' /proc/cpuinfo | head -1 | cut -d: -f2 | xargs), $(grep -c '^processor' /proc/cpuinfo) threads" >> $out
170 echo "<summary>Tested versions</summary>" >> $out
171 echo >> $out
172 echo Go: $(go-jsonnet --version) >> $out168 echo >> $out
173 echo >> $out169
174 echo "\`\`\`" >> $out170 echo ".Tested versions" >> $out
175 go-jsonnet --help >> $out171 echo "[%collapsible]" >> $out
176 echo "\`\`\`" >> $out172 echo "====" >> $out
177 echo >> $out173 echo "* Go: $(go-jsonnet --version)" >> $out
178 echo C++: $(jsonnet --version) >> $out174 echo "* C++: $(jsonnet --version)" >> $out
179 echo >> $out
180 echo "\`\`\`" >> $out
181 jsonnet --help >> $out175 echo "* Scala (native/GraalVM): $(sjsonnet-native 2>&1 | grep -oP 'Sjsonnet \S+')" >> $out
182 echo "\`\`\`" >> $out
183 echo >> $out
184 echo Scala: >> $out
185 echo >> $out
186 echo "\`\`\`" >> $out
187 sjsonnet 2>> $out || true
188 echo "\`\`\`" >> $out176 echo "* Rust (alternative): rsjsonnet ${rsjsonnet.version} (${rsjsonnet.src.rev})" >> $out
189 echo >> $out
190 echo "Scala (native):" >> $out
191 echo >> $out
192 echo "\`\`\`" >> $out177 ${concatStringsSep "\n" (forEach jrsonnetVariants (variant:
193 sjsonnet-native 2>> $out || true
194 echo "\`\`\`" >> $out
195 echo >> $out
196 echo "Scala (GraalVM):" >> $out178 "echo \"* Rust${if variant.name != "" then " (${variant.name})" else ""}: $(${variant.drv}/bin/jrsonnet --version 2>&1)\" >> $out"
197 echo >> $out
198 echo "\`\`\`" >> $out
199 sjsonnet-graalvm 2>> $out || true
200 echo "\`\`\`" >> $out
201 echo >> $out
202 echo "Rust (alternative):" >> $out
203 echo >> $out
204 echo "\`\`\`" >> $out
205 rsjsonnet --help 2>> $out || true
206 echo "\`\`\`" >> $out179 ))}
207 echo >> $out180 echo "====" >> $out
208 echo "</details>" >> $out181 echo >> $out
209 echo >> $out182 ''}
210
211 echo >> $out
212 ''}183 echo "== Real world" >> $out
213 echo "## Real world" >> $out184 ${mkBench {
214 ${mkBench {185 name = "Graalvm CI";
215 name = "Graalvm CI";186 path = "${graalvmBench}/ci.jsonnet";
216 path = "${graalvmBench}/ci.jsonnet";187 omitSource = true;
217 omitSource = true;188 skipCpp = "takes longer than a hour";
218 skipCpp = "takes longer than a hour";189 skipGo = skipSlow;
219 skipGo = skipSlow;190 skipScala = skipSlow;
220 skipScala = skipSlow;191 }}
221 }}192 ${mkBench {
222 ${mkBench {193 name = "Kube-prometheus manifests";
223 name = "Kube-prometheus manifests";194 vendor = "${kubePrometheusBench}/vendor";
224 vendor = "${kubePrometheusBench}/vendor";195 path = "${kubePrometheusBench}/example.jsonnet";
225 path = "${kubePrometheusBench}/example.jsonnet";196 omitSource = true;
226 omitSource = true;197 skipCpp = "too slow, takes hours, skews results";
227 skipCpp = "too slow, takes hours, skews results";198 skipGo = skipSlow;
228 skipGo = skipSlow;199 skipScala = skipSlow;
229 skipScala = skipSlow;200 }}
230 }}201
231202 echo >> $out
232 echo >> $out203 echo "== Benchmarks from C++ jsonnet (/perf_tests)" >> $out
233 echo "## Benchmarks from C++ jsonnet (/perf_tests)" >> $out204 ${mkBench {
234 ${mkBench {205 name = "Large string join";
235 name = "Large string join";206 path = "${jsonnetBench}/perf_tests/large_string_join.jsonnet";
236 path = "${jsonnetBench}/perf_tests/large_string_join.jsonnet";207 skipScala = skipSlow;
237 skipScala = skipSlow;208 }}
238 }}209 ${mkBench {
239 ${mkBench {210 name = "Large string template";
240 name = "Large string template";211 omitSource = true;
241 omitSource = true;212 path = "${jsonnetBench}/perf_tests/large_string_template.jsonnet";
242 path = "${jsonnetBench}/perf_tests/large_string_template.jsonnet";213 skipGo = "fails with os stack size exhausion";
243 skipGo = "fails with os stack size exhausion";214 skipCpp = "too slow, takes hours, skews results";
244 skipCpp = "too slow, takes hours, skews results";215 skipScala = skipSlow;
245 skipScala = skipSlow;216 }}
246 }}217 ${mkBench {
247 ${mkBench {218 name = "Realistic 1";
248 name = "Realistic 1";219 path = "${jsonnetBench}/perf_tests/realistic1.jsonnet";
249 path = "${jsonnetBench}/perf_tests/realistic1.jsonnet";220 skipGo = skipSlow;
250 skipGo = skipSlow;221 skipCpp = "too slow, takes hours, skews results";
251 skipCpp = "too slow, takes hours, skews results";222 skipScala = skipSlow;
252 skipScala = skipSlow;223 }}
253 }}224 ${mkBench {
254 ${mkBench {225 name = "Realistic 2";
255 name = "Realistic 2";226 path = "${jsonnetBench}/perf_tests/realistic2.jsonnet";
256 path = "${jsonnetBench}/perf_tests/realistic2.jsonnet";227 skipGo = skipSlow;
257 skipGo = skipSlow;228 skipCpp = "too slow, takes hours, skews results";
258 skipCpp = "too slow, takes hours, skews results";229 skipScala = skipSlow;
259 skipScala = skipSlow;230 }}
260 }}231
261232 echo >> $out
262 echo >> $out233 echo "== Benchmarks from C++ jsonnet (/benchmarks)" >> $out
263 echo "## Benchmarks from C++ jsonnet (/benchmarks)" >> $out234 ${mkBench {
264 ${mkBench {235 name = "Tail call";
265 name = "Tail call";236 path = "${jsonnetBench}/benchmarks/bench.01.jsonnet";
266 path = "${jsonnetBench}/benchmarks/bench.01.jsonnet";237 skipScala = skipSlow;
267 skipScala = skipSlow;238 }}
268 }}239 ${mkBench {
269 ${mkBench {240 name = "Inheritance recursion";
270 name = "Inheritance recursion";241 path = "${jsonnetBench}/benchmarks/bench.02.jsonnet";
271 path = "${jsonnetBench}/benchmarks/bench.02.jsonnet";242 skipCpp = skipSlow;
272 skipCpp = skipSlow;243 skipGo = skipSlow;
273 skipGo = skipSlow;244 }}
274 }}245 ${mkBench {
275 ${mkBench {246 name = "Simple recursive call";
276 name = "Simple recursive call";247 path = "${jsonnetBench}/benchmarks/bench.03.jsonnet";
277 path = "${jsonnetBench}/benchmarks/bench.03.jsonnet";248 skipScala = skipSlow;
278 skipScala = skipSlow;249 skipGo = skipSlow;
279 skipGo = skipSlow;250 }}
280 }}251 ${mkBench {
281 ${mkBench {252 name = "Foldl string concat";
282 name = "Foldl string concat";253 path = "${jsonnetBench}/benchmarks/bench.04.jsonnet";
283 path = "${jsonnetBench}/benchmarks/bench.04.jsonnet";254 skipCpp = skipSlow;
284 skipCpp = skipSlow;255 skipScala = skipSlow;
285 skipScala = skipSlow;256 }}
286 }}257 ${mkBench {
287 ${mkBench {258 name = "Array sorts";
288 name = "Array sorts";259 path = "${jsonnetBench}/benchmarks/bench.06.jsonnet";
289 path = "${jsonnetBench}/benchmarks/bench.06.jsonnet";260 skipCpp = skipSlow;
290 skipCpp = skipSlow;261 }}
291 }}262 ${mkBench {
292 ${mkBench {263 name = "Lazy array";
293 name = "Lazy array";264 path = "${jsonnetBench}/benchmarks/bench.07.jsonnet";
294 path = "${jsonnetBench}/benchmarks/bench.07.jsonnet";265 skipGo = skipSlow;
295 skipGo = skipSlow;266 }}
296 skipScala = skipSlow;
297 }}267 ${mkBench {
298 ${mkBench {268 name = "Inheritance function recursion";
299 name = "Inheritance function recursion";269 path = "${jsonnetBench}/benchmarks/bench.08.jsonnet";
300 path = "${jsonnetBench}/benchmarks/bench.08.jsonnet";270 skipCpp = skipSlow;
301 skipCpp = skipSlow;271 skipScala = skipSlow;
302 skipScala = skipSlow;272 }}
303 }}273 ${mkBench {
304 ${mkBench {274 name = "String strips";
305 name = "String strips";275 path = "${jsonnetBench}/benchmarks/bench.09.jsonnet";
306 path = "${jsonnetBench}/benchmarks/bench.09.jsonnet";276 skipCpp = "too slow, takes hours, skews results";
307 skipCpp = "too slow, takes hours, skews results";277 skipScala = skipSlow;
308 skipScala = skipSlow;278 }}
309 }}279 ${mkBench {
310 ${mkBench {280 name = "Big object";
311 name = "Big object";281 path = "${jsonnetBench}/benchmarks/gen_big_object.jsonnet";
312 path = "${jsonnetBench}/benchmarks/gen_big_object.jsonnet";282 pathIsGenerator = true;
313 pathIsGenerator = true;283 skipScala = skipSlow;
314 skipScala = skipSlow;284 }}
315 }}285
316286 echo >> $out
317 echo >> $out287 echo "== Benchmarks from Go jsonnet (builtins)" >> $out
318 echo "## Benchmarks from Go jsonnet (builtins)" >> $out288 ${mkBench {
319 ${mkBench {289 name = "std.base64";
320 name = "std.base64";290 path = "${goJsonnetBench}/base64.jsonnet";
321 path = "${goJsonnetBench}/base64.jsonnet";291 skipRustAlternative = skipSlow;
322 skipRustAlternative = skipSlow;292 skipCpp = "too slow, takes hours, skews results";
323 skipCpp = "too slow, takes hours, skews results";293 skipScala = skipSlow;
324 skipScala = skipSlow;294 }}
325 }}295 ${mkBench {
326 ${mkBench {296 name = "std.base64Decode";
327 name = "std.base64Decode";297 path = "${goJsonnetBench}/base64Decode.jsonnet";
328 path = "${goJsonnetBench}/base64Decode.jsonnet";298 skipRustAlternative = skipSlow;
329 skipRustAlternative = skipSlow;299 skipCpp = skipSlow;
330 skipCpp = skipSlow;300 skipScala = skipSlow;
331 skipScala = skipSlow;301 }}
332 }}302 ${mkBench {
333 ${mkBench {303 name = "std.base64DecodeBytes";
334 name = "std.base64DecodeBytes";304 path = "${goJsonnetBench}/base64DecodeBytes.jsonnet";
335 path = "${goJsonnetBench}/base64DecodeBytes.jsonnet";305 skipRustAlternative = skipSlow;
336 skipRustAlternative = skipSlow;306 skipCpp = skipSlow;
337 skipCpp = skipSlow;307 skipGo = skipSlow;
338 skipGo = skipSlow;308 skipScala = skipSlow;
339 skipScala = skipSlow;309 }}
340 }}310 ${mkBench {
341 ${mkBench {311 name = "std.base64 (byte array)";
342 name = "std.base64 (byte array)";312 path = "${goJsonnetBench}/base64_byte_array.jsonnet";
343 path = "${goJsonnetBench}/base64_byte_array.jsonnet";313 skipRustAlternative = skipSlow;
344 skipRustAlternative = skipSlow;314 skipCpp = skipSlow;
345 skipCpp = skipSlow;315 skipGo = skipSlow;
346 skipGo = skipSlow;316 skipScala = skipSlow;
347 skipScala = skipSlow;317 }}
348 }}318 ${mkBench {
349 ${mkBench {319 name = "std.foldl";
350 name = "std.foldl";320 path = "${goJsonnetBench}/foldl.jsonnet";
351 path = "${goJsonnetBench}/foldl.jsonnet";321 skipScala = skipSlow;
352 skipScala = skipSlow;322 }}
353 }}323 ${mkBench {
354 ${mkBench {324 name = "std.manifestJsonEx";
355 name = "std.manifestJsonEx";325 path = "${goJsonnetBench}/manifestJsonEx.jsonnet";
356 path = "${goJsonnetBench}/manifestJsonEx.jsonnet";326 skipScala = skipSlow;
357 skipScala = skipSlow;327 skipCpp = skipSlow;
358 skipCpp = skipSlow;328 }}
359 }}329 ${mkBench {
360 ${mkBench {330 name = "std.manifestTomlEx";
361 name = "std.manifestTomlEx";331 path = "${goJsonnetBench}/manifestTomlEx.jsonnet";
362 path = "${goJsonnetBench}/manifestTomlEx.jsonnet";332 skipCpp = skipSlow;
363 skipCpp = skipSlow;333 }}
364 }}334 ${mkBench {
365 ${mkBench {335 name = "std.parseInt";
366 name = "std.parseInt";336 path = "${goJsonnetBench}/parseInt.jsonnet";
367 path = "${goJsonnetBench}/parseInt.jsonnet";337 skipScala = skipSlow;
368 skipScala = skipSlow;338 skipCpp = skipSlow;
369 skipCpp = skipSlow;339 }}
370 }}340 ${mkBench {
371 ${mkBench {341 name = "std.reverse";
372 name = "std.reverse";342 path = "${goJsonnetBench}/reverse.jsonnet";
373 path = "${goJsonnetBench}/reverse.jsonnet";343 skipCpp = skipSlow;
374 skipCpp = skipSlow;344 skipGo = skipSlow;
375 skipGo = skipSlow;345 }}
376 }}346 ${mkBench {
377 ${mkBench {347 name = "std.substr";
378 name = "std.substr";348 path = "${goJsonnetBench}/substr.jsonnet";
379 path = "${goJsonnetBench}/substr.jsonnet";349 skipScala = skipSlow;
380 skipScala = skipSlow;350 }}
381 }}351 ${mkBench {
382 ${mkBench {352 name = "Comparsion for array";
383 name = "Comparsion for array";353 path = "${goJsonnetBench}/comparison.jsonnet";
384 path = "${goJsonnetBench}/comparison.jsonnet";354 skipCpp = "too slow, takes hours, skews results";
385 skipCpp = "too slow, takes hours, skews results";355 }}
386 }}356 ${mkBench {
387 ${mkBench {357 name = "Comparsion for primitives";
388 name = "Comparsion for primitives";358 path = "${goJsonnetBench}/comparison2.jsonnet";
389 path = "${goJsonnetBench}/comparison2.jsonnet";359 skipRustAlternative = skipSlow;
390 skipRustAlternative = skipSlow;360 skipCpp = "can't run: uses up to 192GB of RAM";
391 skipCpp = "can't run: uses up to 192GB of RAM";361 skipGo = skipSlow;
392 skipGo = skipSlow;362 skipScala = skipSlow;
393 skipScala = skipSlow;363 }}
394 }}364 '';
395 '';
396}365}
397366
modifiednix/jrsonnet-release.nixdiffbeforeafterboth
2323
24 buildInputs = [makeWrapper];24 buildInputs = [makeWrapper];
2525
26 postInstall = ''26 postInstall = ''
27 wrapProgram $out/bin/jrsonnet --add-flags "--max-stack=200000 --os-stack=200000"27 wrapProgram $out/bin/jrsonnet --add-flags "--max-stack=200000"
28 '';28 '';
29}29}
3030
modifiednix/jrsonnet.nixdiffbeforeafterboth
21 nativeBuildInputs = [makeWrapper];21 nativeBuildInputs = [makeWrapper];
2222
23 # To clean-up hyperfine output23 # To clean-up hyperfine output
24 postInstall = optionalString forBenchmarks ''24 postInstall = optionalString forBenchmarks ''
25 wrapProgram $out/bin/jrsonnet --add-flags "--max-stack=200000 --os-stack=200000"25 wrapProgram $out/bin/jrsonnet --add-flags "--max-stack=200000"
26 '';26 '';
27 }27 }
2828
modifiednix/sjsonnet.nixdiffbeforeafterboth
57 buildInputs = [ java ]57 buildInputs = [ java ]
58 ++ lib.optionals stdenv.hostPlatform.isLinux [ zlib openssl stdenv.cc.cc.lib ];58 ++ lib.optionals stdenv.hostPlatform.isLinux [ zlib openssl stdenv.cc.cc.lib ];
5959
60 installPhase = ''60 installPhase = ''
61 mkdir -p $out/bin $out/lib61 mkdir -p $out/bin $out/lib
62 cp $src $out/lib/sjsonnet.jar62 cp $src $out/lib/sjsonnet.jar
63 makeWrapper ${java}/bin/java $out/bin/sjsonnet --add-flags "-Xss100m -XX:+UseStringDeduplication -jar $out/lib/sjsonnet.jar"63 makeWrapper ${java}/bin/java $out/bin/sjsonnet --add-flags "-Xss100m -XX:+UseStringDeduplication -jar $out/lib/sjsonnet.jar --max-stack 200000"
6464
65 cp ${nativeSrc} $out/bin/sjsonnet-native65 cp ${nativeSrc} $out/bin/sjsonnet-native
66 chmod +x $out/bin/sjsonnet-native66 chmod +x $out/bin/sjsonnet-native
67 wrapProgram $out/bin/sjsonnet-native --add-flags "--max-stack 200000"67 wrapProgram $out/bin/sjsonnet-native --add-flags "--max-stack 200000"
6868
69 cp ${graalvmSrc} $out/bin/sjsonnet-graalvm69 cp ${graalvmSrc} $out/bin/sjsonnet-graalvm
70 chmod +x $out/bin/sjsonnet-graalvm70 chmod +x $out/bin/sjsonnet-graalvm
71 wrapProgram $out/bin/sjsonnet-graalvm --add-flags "--max-stack 200000"71 wrapProgram $out/bin/sjsonnet-graalvm --add-flags "--max-stack 200000"
72 '';72 '';
73 separateDebugInfo = false;73 separateDebugInfo = false;
74}74}
7575