Unfortunately, when using the Unicode engines (XeLaTeX,
LuaLaTeX), neither \boldmath nor bm usually work
well, because the OpenType math fonts normally used with those engines
rarely come with a bold companion, and both \boldmath and
bm require this. (The implementation of bm relies
on \boldmath, so the requirements are the same.) If you do have
a bold math font, though, then \boldmath and bm work
fine.
If no such font is available, one alternative is to construct fake
bold fonts with the fontspec package’s FakeBold=1
parameter (see its documentation,
https://ctan.org/pkg/fontspec). This may be acceptable for
drafting or informal distribution, but the results are far from a true
bold font.
Another alternative to handling bold for OpenType math fonts is to use
the \symbf (bold), \symbfit (bold italic), and related
commands from the unicode-math package. These do not change
the current font, but rather change the (Unicode) “alphabet” used,
which in practice is more widely supported than a separate bold font.
Many variations are possible, and so there are subtleties to getting the
desired output. As usual, see the package documentation
(https://ctan.org/pkg/unicode-math).