Skip to content

Commit

Permalink
fix: Force sun.jnu.encoding to be UTF-8 in images (#514)
Browse files Browse the repository at this point in the history
Images pick up `sun.jnu.encoding` from the host build environment, which thus needs to be UTF-8 to be able to access paths with non-ASCII characters in them on Linux. Since Bazel does not inherit `LC_CTYPE` from the host, the JVM would otherwise default to an ASCII locale.

Signed-off-by: Fabian Meumertzheim <[email protected]>
  • Loading branch information
fmeum authored Dec 4, 2024
1 parent 977aa70 commit 5c67c84
Showing 1 changed file with 14 additions and 1 deletion.
15 changes: 14 additions & 1 deletion internal/native_image/rules.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ def _graal_binary_implementation(ctx):
or install a GraalVM `native-image` toolchain.
""")

is_linux = ctx.target_platform_has_constraint(
ctx.attr._linux_constraint[platform_common.ConstraintValueInfo],
)
is_macos = ctx.target_platform_has_constraint(
ctx.attr._macos_constraint[platform_common.ConstraintValueInfo],
)
Expand Down Expand Up @@ -103,6 +106,16 @@ def _graal_binary_implementation(ctx):
if ctx.files.data:
direct_inputs.extend(ctx.files.data)

env = native_toolchain.env

# The native image will use the same native encoding (as determined by "sun.jnu.encoding")
# as the build environment, so we need to force a UTF-8 locale. On other platforms, the
# encoding is always UTF-8 (on macOS since JEP 400) or determined by the active code page
# on Windows.
# TODO: Match on the exec platform instead once Graal supports cross-compilation.
if is_linux:
env["LC_CTYPE"] = "C.UTF-8"

# assemble final inputs
inputs = depset(
direct_inputs,
Expand All @@ -113,7 +126,7 @@ def _graal_binary_implementation(ctx):
"executable": graal,
"inputs": inputs,
"mnemonic": "NativeImage",
"env": native_toolchain.env,
"env": env,
"execution_requirements": {k: "" for k in native_toolchain.execution_requirements},
"progress_message": "Native Image __target__ (__mode__) %{label}"
.replace("__mode__", _build_action_message(ctx))
Expand Down

0 comments on commit 5c67c84

Please sign in to comment.