1load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "use_cpp_toolchain")
2
3def _generated_pico_flash_region_impl(ctx):
4    flash_region_linker_fragment = ctx.actions.declare_file(ctx.label.name + "/ldinclude/pico_flash_region.ld")
5    link_include_dir = flash_region_linker_fragment.dirname
6
7    file_contents = "\n".join((
8        "FLASH(rx) : ORIGIN = 0x10000000, LENGTH = " + str(ctx.attr.flash_region_size),
9    ))
10    ctx.actions.write(flash_region_linker_fragment, file_contents)
11    linking_inputs = cc_common.create_linker_input(
12        owner = ctx.label,
13        user_link_flags = depset(
14            direct = ["-L" + str(link_include_dir)],
15        ),
16        additional_inputs = depset(
17            direct = [flash_region_linker_fragment],
18        ),
19    )
20    return [
21        DefaultInfo(files = depset([flash_region_linker_fragment])),
22        CcInfo(linking_context = cc_common.create_linking_context(linker_inputs = depset(direct = [linking_inputs]))),
23    ]
24
25generated_pico_flash_region = rule(
26    implementation = _generated_pico_flash_region_impl,
27    attrs = {
28        "flash_region_size": attr.int(mandatory = True),
29    },
30    toolchains = use_cpp_toolchain(),
31    fragments = ["cpp"],
32)
33