123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- set(LLVM_LINK_COMPONENTS
- Core
- ExecutionEngine
- MC
- MCJIT
- Object
- OrcJit
- Option
- RuntimeDyld
- Support
- native
- )
- add_clang_executable(clang-interpreter
- main.cpp
- )
- add_dependencies(clang-interpreter
- clang-resource-headers
- )
- clang_target_link_libraries(clang-interpreter
- PRIVATE
- clangBasic
- clangCodeGen
- clangDriver
- clangFrontend
- clangSerialization
- )
- export_executable_symbols(clang-interpreter)
- if (MSVC)
- # Is this a CMake bug that even with export_executable_symbols, Windows
- # needs to explictly export the type_info vtable
- set_property(TARGET clang-interpreter
- APPEND_STRING PROPERTY LINK_FLAGS " /EXPORT:??_7type_info@@6B@")
- endif()
- function(clang_enable_exceptions TARGET)
- # Really have to jump through hoops to enable exception handling independent
- # of how LLVM is being built.
- if (NOT LLVM_REQUIRES_EH AND NOT LLVM_REQUIRES_RTTI)
- if (MSVC)
- # /EHs to allow throwing from extern "C"
- set(excptnExceptions_ON "/D _HAS_EXCEPTIONS=1 /EHs /wd4714")
- set(excptnExceptions_OFF "/D _HAS_EXCEPTIONS=0 /EHs-c-")
- set(excptnRTTI_ON "/GR")
- set(excptnRTTI_OFF "/GR-")
- set(excptnEHRTTIRegEx "(/EHs(-c-?)|_HAS_EXCEPTIONS=(0|1))")
- else()
- set(excptnExceptions_ON "-fexceptions")
- set(excptnExceptions_OFF "-fno-exceptions")
- set(excptnRTTI_ON "-frtti")
- set(excptnRTTI_OFF "-fno-rtti")
- set(excptnEHRTTIRegEx "-f(exceptions|no-exceptions)")
- endif()
- if (LLVM_REQUIRES_EH)
- set(excptnExceptions_DFLT ${excptnExceptions_ON})
- else()
- set(excptnExceptions_DFLT ${excptnExceptions_OFF})
- endif()
- if (LLVM_REQUIRES_RTTI)
- set(excptnRTTI_DFLT ${excptnRTTI_ON})
- else()
- set(excptnRTTI_DFLT ${excptnRTTI_OFF})
- endif()
- # Strip the exception & rtti flags from the target
- get_property(addedFlags TARGET ${TARGET} PROPERTY COMPILE_FLAGS)
- string(REGEX REPLACE ${excptnEHRTTIRegEx} "" editedFlags "${addedFlags}")
- string(REPLACE ${excptnRTTI_OFF} "" editedFlags "${editedFlags}")
- set_property(TARGET ${TARGET} PROPERTY COMPILE_FLAGS "${editedFlags}")
- get_property(addedFlags TARGET ${TARGET} PROPERTY COMPILE_DEFINITIONS)
- string(REGEX REPLACE ${excptnEHRTTIRegEx} "" editedFlags "${addedFlags}")
- string(REPLACE ${excptnRTTI_OFF} "" editedFlags "${editedFlags}")
- set_property(TARGET ${TARGET} PROPERTY COMPILE_DEFINITIONS "${editedFlags}")
- # Re-add the exception & rtti flags from LLVM
- set_property(SOURCE main.cpp APPEND_STRING PROPERTY COMPILE_FLAGS
- " ${excptnExceptions_DFLT} ${excptnRTTI_DFLT} ")
- set_property(SOURCE Manager.cpp APPEND_STRING PROPERTY COMPILE_FLAGS
- " ${excptnExceptions_DFLT} ${excptnRTTI_DFLT} ")
- # Invoke with exceptions & rtti
- set_property(SOURCE Invoke.cpp APPEND_STRING PROPERTY COMPILE_FLAGS
- " ${excptnExceptions_ON} ${excptnRTTI_ON} ")
- endif()
- endfunction(clang_enable_exceptions)
- clang_enable_exceptions(clang-interpreter)
|