feat(mcpp.plugins): 0.2.3 — mcpp.rules.ascendc by Sunrisepeak · Pull Request #363 · mcpplibs/mcpp-index · GitHub
Skip to content

feat(mcpp.plugins): 0.2.3 — mcpp.rules.ascendc - #363

Merged
Sunrisepeak merged 1 commit into
mainfrom
feat/mcpp-plugins-0.2.3
Sep 7, 2026
Merged

feat(mcpp.plugins): 0.2.3 — mcpp.rules.ascendc#363
Sunrisepeak merged 1 commit into
mainfrom
feat/mcpp-plugins-0.2.3

Conversation

@Sunrisepeak

Copy link
Copy Markdown
Member

mcpp:plugins@0.2.3, and latest moves to it.

The fifth rule, and the first for a vendor this collection had not built for.

The floor moves to 2026.9.6.5

Two things in that release are load-bearing:

  • .asc in the device-source table, so the engine routes an Ascend C unit
    to the build program instead of the C++ compiler.
  • mcpp::link_flag, without which the rule cannot emit the
    -Wl,-rpath-link GNU ld needs to resolve the CANN libraries' own DT_NEEDED
    entries. -L does not serve that purpose, and the link fails on memset_s
    and CheckLogLevel — symbols of libraries nobody named.

Only the rules-ascendc feature's source is compiled when that feature is
active, so a consumer activating only rules-cuda is unaffected by the new
member.

Mixed mode is the design decision

With --cce-aicore-only BiSheng emits a Da Vinci object the host linker cannot
place. Without it, the same source yields a host object carrying the device
binary and a host-callable launcher — an object the ordinary link takes, with
no registration file and no device-link step.

Verification

On a machine with no Ascend hardware: the kernel compiles, the object
links, and only libascend_hal.so is missing — the driver, exactly what
should be absent there. mcpp-plugins CI green on main at the tagged commit.
Both mirrors downloaded and cmp-ed before this descriptor was written.

…floor moves to 2026.9.6.5

The fifth rule, and the first for a vendor this collection had not built for.

Two things in mcpp 2026.9.6.5 are load-bearing for it. `.asc` in the
device-source table, so the engine routes an Ascend C unit to the build program
instead of the C++ compiler. And `mcpp::link_flag`, without which the rule
cannot emit the `-Wl,-rpath-link` that GNU ld needs to resolve the CANN
libraries' own DT_NEEDED entries -- `-L` does not serve that purpose, and the
link fails on `memset_s` and `CheckLogLevel`, symbols of libraries nobody
named. That is why the floor moves rather than staying where 0.2.2 left it.

The rule compiles with BiSheng in MIXED mode rather than `--cce-aicore-only`.
With that flag the output is a Da Vinci object the host linker cannot place;
without it the same source yields a host object carrying the device binary and
a host-callable launcher, which the ordinary link takes -- no registration file
and no device-link step.

Verified on a machine with no Ascend hardware: the kernel compiles, the object
links, and only `libascend_hal.so` is missing, which belongs to the DRIVER and
is exactly what should be absent there.

Both mirrors were downloaded and compared byte for byte before this descriptor
was written; one sha256 names both.
@Sunrisepeak
Sunrisepeak merged commit 12b0d1d into main Sep 7, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant