Mercurial > hg > CbC > CbC_llvm
view mlir/cmake/modules/AddMLIR.cmake @ 190:b1364f705114
relax tail call error on goto from normal function. args.c worked.
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 06 Jun 2020 13:15:35 +0900 |
parents | 0572611fdcc8 |
children | 2e18cbf3894f |
line wrap: on
line source
function(mlir_tablegen ofn) tablegen(MLIR ${ARGV}) set(TABLEGEN_OUTPUT ${TABLEGEN_OUTPUT} ${CMAKE_CURRENT_BINARY_DIR}/${ofn} PARENT_SCOPE) endfunction() # Declare a dialect in the include directory function(add_mlir_dialect dialect dialect_namespace) set(LLVM_TARGET_DEFINITIONS ${dialect}.td) mlir_tablegen(${dialect}.h.inc -gen-op-decls) mlir_tablegen(${dialect}.cpp.inc -gen-op-defs) mlir_tablegen(${dialect}Dialect.h.inc -gen-dialect-decls -dialect=${dialect_namespace}) add_public_tablegen_target(MLIR${dialect}IncGen) add_dependencies(mlir-headers MLIR${dialect}IncGen) endfunction() # Declare a dialect in the include directory function(add_mlir_interface interface) set(LLVM_TARGET_DEFINITIONS ${interface}.td) mlir_tablegen(${interface}.h.inc -gen-op-interface-decls) mlir_tablegen(${interface}.cpp.inc -gen-op-interface-defs) add_public_tablegen_target(MLIR${interface}IncGen) add_dependencies(mlir-generic-headers MLIR${interface}IncGen) endfunction() # Generate Documentation function(add_mlir_doc doc_filename command output_file output_directory) set(LLVM_TARGET_DEFINITIONS ${doc_filename}.td) tablegen(MLIR ${output_file}.md ${command} "-I${MLIR_MAIN_INCLUDE_DIR}" "-I${MLIR_INCLUDE_DIR}") set(GEN_DOC_FILE ${MLIR_BINARY_DIR}/docs/${output_directory}${output_file}.md) add_custom_command( OUTPUT ${GEN_DOC_FILE} COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${output_file}.md ${GEN_DOC_FILE} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${output_file}.md) add_custom_target(${output_file}DocGen DEPENDS ${GEN_DOC_FILE}) add_dependencies(mlir-doc ${output_file}DocGen) endfunction() # Declare an mlir library which can be compiled in libMLIR.so # In addition to everything that llvm_add_librar accepts, this # also has the following option: # EXCLUDE_FROM_LIBMLIR # Don't include this library in libMLIR.so. This option should be used # for test libraries, executable-specific libraries, or rarely used libraries # with large dependencies. function(add_mlir_library name) cmake_parse_arguments(ARG "SHARED;INSTALL_WITH_TOOLCHAIN;EXCLUDE_FROM_LIBMLIR" "" "ADDITIONAL_HEADERS;DEPENDS;LINK_COMPONENTS;LINK_LIBS" ${ARGN}) set(srcs) if(MSVC_IDE OR XCODE) # Add public headers file(RELATIVE_PATH lib_path ${MLIR_SOURCE_DIR}/lib/ ${CMAKE_CURRENT_SOURCE_DIR} ) if(NOT lib_path MATCHES "^[.][.]") file( GLOB_RECURSE headers ${MLIR_SOURCE_DIR}/include/mlir/${lib_path}/*.h ${MLIR_SOURCE_DIR}/include/mlir/${lib_path}/*.def ) set_source_files_properties(${headers} PROPERTIES HEADER_FILE_ONLY ON) file( GLOB_RECURSE tds ${MLIR_SOURCE_DIR}/include/mlir/${lib_path}/*.td ) source_group("TableGen descriptions" FILES ${tds}) set_source_files_properties(${tds}} PROPERTIES HEADER_FILE_ONLY ON) if(headers OR tds) set(srcs ${headers} ${tds}) endif() endif() endif(MSVC_IDE OR XCODE) if(srcs OR ARG_ADDITIONAL_HEADERS) set(srcs ADDITIONAL_HEADERS ${srcs} ${ARG_ADDITIONAL_HEADERS} # It may contain unparsed unknown args. ) endif() if(ARG_SHARED) set(LIBTYPE SHARED) else() # llvm_add_library ignores BUILD_SHARED_LIBS if STATIC is explicitly set, # so we need to handle it here. if(BUILD_SHARED_LIBS) set(LIBTYPE SHARED) else() set(LIBTYPE STATIC) endif() if(NOT XCODE) # The Xcode generator doesn't handle object libraries correctly. list(APPEND LIBTYPE OBJECT) endif() # Test libraries and such shouldn't be include in libMLIR.so if(NOT ARG_EXCLUDE_FROM_LIBMLIR) set_property(GLOBAL APPEND PROPERTY MLIR_STATIC_LIBS ${name}) set_property(GLOBAL APPEND PROPERTY MLIR_LLVM_LINK_COMPONENTS ${ARG_LINK_COMPONENTS}) set_property(GLOBAL APPEND PROPERTY MLIR_LLVM_LINK_COMPONENTS ${LLVM_LINK_COMPONENTS}) endif() endif() # MLIR libraries uniformly depend on LLVMSupport. Just specify it once here. list(APPEND ARG_LINK_COMPONENTS Support) # LINK_COMPONENTS is necessary to allow libLLVM.so to be properly # substituted for individual library dependencies if LLVM_LINK_LLVM_DYLIB # Perhaps this should be in llvm_add_library instead? However, it fails # on libclang-cpp.so get_property(llvm_component_libs GLOBAL PROPERTY LLVM_COMPONENT_LIBS) foreach(lib ${ARG_LINK_LIBS}) if(${lib} IN_LIST llvm_component_libs) message(SEND_ERROR "${name} specifies LINK_LIBS ${lib}, but LINK_LIBS cannot be used for LLVM libraries. Please use LINK_COMPONENTS instead.") endif() endforeach() list(APPEND ARG_DEPENDS mlir-generic-headers) llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs} DEPENDS ${ARG_DEPENDS} LINK_COMPONENTS ${ARG_LINK_COMPONENTS} LINK_LIBS ${ARG_LINK_LIBS}) if(TARGET ${name}) target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS}) if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) set(export_to_mlirtargets) if (${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR "mlir-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR NOT LLVM_DISTRIBUTION_COMPONENTS) set(export_to_mlirtargets EXPORT MLIRTargets) set_property(GLOBAL PROPERTY MLIR_HAS_EXPORTS True) endif() install(TARGETS ${name} COMPONENT ${name} ${export_to_mlirtargets} LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX} RUNTIME DESTINATION bin) if (NOT LLVM_ENABLE_IDE) add_llvm_install_targets(install-${name} DEPENDS ${name} COMPONENT ${name}) endif() set_property(GLOBAL APPEND PROPERTY MLIR_ALL_LIBS ${name}) endif() set_property(GLOBAL APPEND PROPERTY MLIR_EXPORTS ${name}) else() # Add empty "phony" target add_custom_target(${name}) endif() set_target_properties(${name} PROPERTIES FOLDER "MLIR libraries") endfunction(add_mlir_library) # Declare the library associated with a dialect. function(add_mlir_dialect_library name) set_property(GLOBAL APPEND PROPERTY MLIR_DIALECT_LIBS ${name}) add_mlir_library(${ARGV} DEPENDS mlir-headers) endfunction(add_mlir_dialect_library) # Declare the library associated with a conversion. function(add_mlir_conversion_library name) set_property(GLOBAL APPEND PROPERTY MLIR_CONVERSION_LIBS ${name}) add_mlir_library(${ARGV} DEPENDS mlir-headers) endfunction(add_mlir_conversion_library) # Declare the library associated with a translation. function(add_mlir_translation_library name) set_property(GLOBAL APPEND PROPERTY MLIR_TRANSLATION_LIBS ${name}) add_mlir_library(${ARGV} DEPENDS mlir-headers) endfunction(add_mlir_translation_library) # Verification tools to aid debugging. function(mlir_check_link_libraries name) if(TARGET ${name}) get_target_property(libs ${name} LINK_LIBRARIES) # message("${name} libs are: ${libs}") set(linking_llvm 0) foreach(lib ${libs}) if(lib) if(${lib} MATCHES "^LLVM$") set(linking_llvm 1) endif() if((${lib} MATCHES "^LLVM.+") AND ${linking_llvm}) # This will almost always cause execution problems, since the # same symbol might be loaded from 2 separate libraries. This # often comes from referring to an LLVM library target # explicitly in target_link_libraries() message("WARNING: ${name} links LLVM and ${lib}!") endif() endif() endforeach() endif() endfunction(mlir_check_link_libraries) function(mlir_check_all_link_libraries name) mlir_check_link_libraries(${name}) if(TARGET ${name}) get_target_property(libs ${name} LINK_LIBRARIES) # message("${name} libs are: ${libs}") foreach(lib ${libs}) mlir_check_link_libraries(${lib}) endforeach() endif() endfunction(mlir_check_all_link_libraries)