LLVM out of source pass build: Loadable modules not supported

I am [also] having problems when trying to build an out-of-source loadable module on Fedora 21:

– LLVMHoistGlobals ignored – Loadable modules not supported on this platform.

Thinking it was a packaging issue, I tried downloading/building/installing both 3.5.0 and 3.5.1 from source, but to no avail. (Using 3.5.0 from the package archives on an Ubuntu 11.10 VM also had problems.)

The 3.4 packages in Fedora 20 work great. What changed between 3.4 and 3.5 that would have caused loadable modules to fail?

There is a similar problem posted on stackoverflow:
http://stackoverflow.com/questions/27863706/llvm-out-of-source-pass-build-loadable-modules-not-supported-on-linux

-Rob

OK, some progress with LLVM/Clang 3.5.1 built from source, as well as LLVM/Clang 3.5.0 installed from the Fedora 21 repositories.

So to get around the “Modules not supported” error, I believe one must now use the following before including the AddLLVM.cmake file:
set(LLVM_ENABLE_PLUGINS ON)
include(AddLLVM)

Enabling the plugins like this revealed some fragile code (i.e. bugs) inside of share/llvm/cmake/AddLLVM.cmake. The first error was:

CMake Error at /home/rob/.shadow/share/llvm/cmake/AddLLVM.cmake:282 (set_output_directory):
set_output_directory Function invoked with incorrect arguments for function
named: set_output_directory
Call Stack (most recent call first):
/home/rob/.shadow/share/llvm/cmake/AddLLVM.cmake:400 (llvm_add_library)
src/hoist/CMakeLists.txt:30 (add_llvm_loadable_module)

Which I worked around by setting this in my CMakeLists.txt file:
set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin)
set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib)

The second error was:

CMake Error at /home/rob/.shadow/share/llvm/cmake/AddLLVM.cmake:294 (set_target_properties):
set_target_properties called with incorrect number of arguments.
Call Stack (most recent call first):
/home/rob/.shadow/share/llvm/cmake/AddLLVM.cmake:402 (llvm_add_library)
src/hoist/CMakeLists.txt:32 (add_llvm_loadable_module)

The problem is in this function call:
set_target_properties(${name}
PROPERTIES
PREFIX “”
SUFFIX ${LLVM_PLUGIN_EXT}
)
because when ${LLVM_PLUGIN_EXT} is empty, the SUFFIX property has no associated value. I worked around it by setting some arbitrary value:
set(LLVM_PLUGIN_EXT “so”)

Are these considered bugs? I hope this helps someone else.
Rob