Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[cmake] Update usage of HandleLLVMOptions and LLVM_DEFINITIONS #2714

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

christopherbate
Copy link
Contributor

This change attempts to resolve issues with use of HandleLLVMOptions and LLVM_DEFINITIONS, see
llvm/llvm-project#125779.

Note that this is a breaking change because it could cause build breakage for downstream users. As noted in the comments added to the CMakeLists.txt file, there may not be one perfect CMake incantation for setting Stablehlo's options that works for all users.

Since it's easier to add compiler options at a specific scope than it is to alter/remove options that Stablehlo itself is setting, this change is hoisting responsibility to the user for setting any compiler options previously provided by the HandleLLVMOptions call when building in embedded mode.

This means that if user was using
FetchContent|add_subdirectory|CPMAddPackage to build Stablehlo in their project, they should invoke

find_package(LLVM CONFIG REQUIRED)
separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${LLVM_DEFINITIONS})
add_definitions(${LLVM_DEFINITIONS_LIST})
include(HandleLLVMOptions)

in their project at the appropriate scope, or set desired flags in some other manner.

This change attempts to resolve issues with use of `HandleLLVMOptions`
and `LLVM_DEFINITIONS`, see
llvm/llvm-project#125779.

Note that this is a breaking change because it could cause build
breakage for downstream users. As noted in the comments added to the
CMakeLists.txt file, there may not be one perfect CMake incantation
for setting Stablehlo's options that works for all users.

Since it's easier to *add* compiler options at a specific scope than it is
to alter/remove options that Stablehlo itself is setting, this change
is hoisting responsibility to the user for setting any compiler
options previously provided by the `HandleLLVMOptions` call when
building in embedded mode.

This means that if user was using
`FetchContent|add_subdirectory|CPMAddPackage` to build Stablehlo
in their project, they should invoke

```
find_package(LLVM CONFIG REQUIRED)
separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${LLVM_DEFINITIONS})
add_definitions(${LLVM_DEFINITIONS_LIST})
include(HandleLLVMOptions)
```

in their project at the appropriate scope, or set desired flags in some
other manner.
@GleasonK
Copy link
Member

This may break some downstream builds, I believe torch-mlir may use that embedded build?

#2572 had some discussion on this

@christopherbate
Copy link
Contributor Author

Right it hoists some responsibility to the parent project in embedded mode. I can test to see if they would need to make a change or not.

Perhaps I can factor out the part about LLVM_DEFINITION, which is correcting a bug, and retain existing behavior with regard to HandleLLVMOptions?

@GleasonK
Copy link
Member

GleasonK commented Feb 26, 2025

Right it hoists some responsibility to the parent project in embedded mode. I can test to see if they would need to make a change or not.

That would be great actually. All for hoisting that responsibility as long as its known to people building it that they'll need to hoist

Perhaps I can factor out the part about LLVM_DEFINITION, which is correcting a bug, and retain existing behavior with regard to HandleLLVMOptions?

Either works!

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.

2 participants