[llvm-dev] LLVM + MASM (llvm-ml)
Martin Storsjö via llvm-dev
llvm-dev at lists.llvm.org
Fri Oct 23 12:24:02 PDT 2020
Hi,
On Fri, 23 Oct 2020, Eric Astor via llvm-dev wrote:
> Just a quick update on the llvm-ml project. As a refresher, this was a
> proposal to add native [MASM][1] support to LLVM's assembly capabilities, as
> part of supporting cross-platform Windows compilation.
>
> [1]: https://docs.microsoft.com/en-us/cpp/assembler/masm/microsoft-macro-as
> sembler-reference?view=vs-2019
>
> A large set of directives are now supported, with a growing suite of tests.
> After the next outstanding chain of commits ([tip][2]) adds macro procedures
> and macro functions (including local symbols), this will include most of the
> headline features for the language. (STRUCTs have been in place for some
> time now, including type inference for size-checking.) Features not yet in
> place include:
> * RECORDs,
> * ASSUME,
> * the ALIGN/ORG/EVEN directives,
> * the GOTO directive (within macros),
> * anonymous labels, and
> * built-in macros (and the string-manipulation directives).
> [2]: https://reviews.llvm.org/D89741
>
> Anyone else interested in reviewing some of the commits around this project?
I just recently got an interest in this project, when I tried building the
OpenMP runtimes for windows - and they contain one source file in MASM
format.
>From very brief attempts at assembling the source file [1] with llvm-ml
noticed that it lacked some sort of preprocessing that the source used,
among a few other issues.
CMake also ends up adding a few parameters using forward slashes, while it
seems like llvm-ml currently only accepts parameters with dashes. Handling
both (like clang-cl and lld/COFF do, among others) probably would require
rewriting the option handling using the llvm/Option framework, like those
tools do.
An example command for building it looks like this (in
llvm-project/openmp/build):
<tool> -Domp_EXPORTS -Iruntime/src -I../runtime/src -I../runtime/src/i18n
-I../runtime/src/include -I../runtime/src/thirdparty/ittnotify -D
_CRT_SECURE_NO_WARNINGS -D _CRT_SECURE_NO_DEPRECATE -D _WINDOWS -D _WINNT
-D _WIN32_WINNT=0x0501 -D _USRDLL -win64 -D_M_AMD64 -DOMPT_SUPPORT=0 /c
/Fo runtime/src/CMakeFiles/omp.dir/z_Windows_NT-586_asm.asm.obj
../runtime/src/z_Windows_NT-586_asm.asm
When building for i386, you'd also see the parameters "/coff" and
"/safeseh" added on the command line [2].
[1] https://github.com/llvm/llvm-project/blob/master/openmp/runtime/src/z_Windows_NT-586_asm.asm
[2] https://github.com/llvm/llvm-project/blob/master/openmp/runtime/cmake/LibompHandleFlags.cmake#L74-L82
// Martin
More information about the llvm-dev
mailing list