forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			94 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			CMake
		
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			CMake
		
	
	
	
| 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-headers
 | |
|   )
 | |
| 
 | |
| 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)
 |