From e201dc61aa7a25c71889d1c4cccdda8a4d96d5d6 Mon Sep 17 00:00:00 2001 From: loganasherjones Date: Mon, 19 Feb 2024 13:26:44 -0500 Subject: [PATCH] feat: Add resource_configuration to native_image Signed-off-by: loganasherjones --- graalvm/nativeimage/rules.bzl | 3 +++ internal/native_image/builder.bzl | 19 +++++++++++++++++-- internal/native_image/common.bzl | 4 ++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/graalvm/nativeimage/rules.bzl b/graalvm/nativeimage/rules.bzl index 45ba9a7a..57c528ca 100644 --- a/graalvm/nativeimage/rules.bzl +++ b/graalvm/nativeimage/rules.bzl @@ -82,6 +82,7 @@ def native_image( check_toolchains = _DEFAULT_CHECK_TOOLCHAINS_CONDITION, native_image_tool = None, # uses toolchains by default native_image_settings = [_DEFAULT_NATIVE_IMAGE_SETTINGS], + resource_configuration = None, profiles = [], **kwargs): """Generates and compiles a GraalVM native image from a Java library target. @@ -115,6 +116,7 @@ def native_image( native_image_tool: Specific `native-image` executable target to use. native_image_settings: Suite(s) of Native Image build settings to use. profiles: Profiles to use for profile-guided optimization (PGO) and obtained from a native image compiled with `--pgo-instrument`. + resource_configuration: Resource configuration file. No default; optional. **kwargs: Extra keyword arguments are passed to the underlying `native_image` rule. """ @@ -141,5 +143,6 @@ def native_image( native_image_tool = native_image_tool, native_image_settings = native_image_settings, profiles = profiles, + resource_configuration = resource_configuration, **kwargs ) diff --git a/internal/native_image/builder.bzl b/internal/native_image/builder.bzl index fc2a2068..4a0cdf5c 100644 --- a/internal/native_image/builder.bzl +++ b/internal/native_image/builder.bzl @@ -67,6 +67,22 @@ def _configure_optimization_mode(ctx, args): format = "-O%s", ) +def _configure_resources(ctx, args, direct_inputs): + """Configure resource settings for a Native Image build. + + Args: + ctx: Context of the Native Image rule implementation. + args: Args builder for the Native Image build. + direct_inputs: Direct Native Image build action inputs. + + """ + if ctx.attr.include_resources != None: + args.add(ctx.attr.include_resources, format = "-H:IncludeResources=%s") + + if ctx.attr.resource_configuration != None: + args.add(ctx.file.resource_configuration, format = "-H:ResourceConfigurationFiles=%s") + direct_inputs.append(ctx.file.resource_configuration) + def _configure_reflection(ctx, args, direct_inputs): """Configure reflection settings for a Native Image build. @@ -203,8 +219,7 @@ def assemble_native_build_options( _configure_reflection(ctx, args, direct_inputs) # configure resources - if ctx.attr.include_resources != None: - args.add(ctx.attr.include_resources, format = "-H:IncludeResources=%s") + _configure_resources(ctx, args, direct_inputs) # if a static build is being performed against hermetic zlib, configure it if ctx.attr.static_zlib != None: diff --git a/internal/native_image/common.bzl b/internal/native_image/common.bzl index f13132ea..67236fa0 100644 --- a/internal/native_image/common.bzl +++ b/internal/native_image/common.bzl @@ -113,6 +113,10 @@ _NATIVE_IMAGE_ATTRS = { allow_files = True, mandatory = False, ), + "resource_configuration": attr.label( + mandatory = False, + allow_single_file = True, + ), "_cc_toolchain": attr.label( default = Label(_BAZEL_CURRENT_CPP_TOOLCHAIN), ),