PageRenderTime 20ms CodeModel.GetById 12ms app.highlight 5ms RepoModel.GetById 1ms app.codeStats 0ms

/3rd_party/llvm/cmake/modules/TableGen.cmake

https://code.google.com/p/softart/
CMake | 143 lines | 106 code | 21 blank | 16 comment | 13 complexity | 09fab8bd086d077b960243e62e7bc1fc MD5 | raw file
Possible License(s): LGPL-2.1, BSD-3-Clause, JSON, MPL-2.0-no-copyleft-exception, GPL-2.0, GPL-3.0, LGPL-3.0, BSD-2-Clause
  1# LLVM_TARGET_DEFINITIONS must contain the name of the .td file to process.
  2# Extra parameters for `tblgen' may come after `ofn' parameter.
  3# Adds the name of the generated file to TABLEGEN_OUTPUT.
  4
  5macro(tablegen project ofn)
  6  file(GLOB local_tds "*.td")
  7  file(GLOB_RECURSE global_tds "${LLVM_MAIN_SRC_DIR}/include/llvm/*.td")
  8
  9  if (IS_ABSOLUTE ${LLVM_TARGET_DEFINITIONS})
 10    set(LLVM_TARGET_DEFINITIONS_ABSOLUTE ${LLVM_TARGET_DEFINITIONS})
 11  else()
 12    set(LLVM_TARGET_DEFINITIONS_ABSOLUTE 
 13      ${CMAKE_CURRENT_SOURCE_DIR}/${LLVM_TARGET_DEFINITIONS})
 14  endif()
 15  add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.tmp
 16    # Generate tablegen output in a temporary file.
 17    COMMAND ${${project}_TABLEGEN_EXE} ${ARGN} -I ${CMAKE_CURRENT_SOURCE_DIR}
 18    -I ${LLVM_MAIN_SRC_DIR}/lib/Target -I ${LLVM_MAIN_INCLUDE_DIR}
 19    ${LLVM_TARGET_DEFINITIONS_ABSOLUTE} 
 20    -o ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.tmp
 21    # The file in LLVM_TARGET_DEFINITIONS may be not in the current
 22    # directory and local_tds may not contain it, so we must
 23    # explicitly list it here:
 24    DEPENDS ${${project}_TABLEGEN_EXE} ${local_tds} ${global_tds}
 25    ${LLVM_TARGET_DEFINITIONS_ABSOLUTE}
 26    COMMENT "Building ${ofn}..."
 27    )
 28  add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${ofn}
 29    # Only update the real output file if there are any differences.
 30    # This prevents recompilation of all the files depending on it if there
 31    # aren't any.
 32    COMMAND ${CMAKE_COMMAND} -E copy_if_different
 33        ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.tmp
 34        ${CMAKE_CURRENT_BINARY_DIR}/${ofn}
 35    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.tmp
 36    COMMENT ""
 37    )
 38
 39  # `make clean' must remove all those generated files:
 40  set_property(DIRECTORY APPEND
 41    PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${ofn}.tmp ${ofn})
 42
 43  set(TABLEGEN_OUTPUT ${TABLEGEN_OUTPUT} ${CMAKE_CURRENT_BINARY_DIR}/${ofn})
 44  set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${ofn} 
 45    PROPERTIES GENERATED 1)
 46endmacro(tablegen)
 47
 48function(add_public_tablegen_target target)
 49  # Creates a target for publicly exporting tablegen dependencies.
 50  if( TABLEGEN_OUTPUT )
 51    add_custom_target(${target}
 52      DEPENDS ${TABLEGEN_OUTPUT})
 53    if (LLVM_COMMON_DEPENDS)
 54      add_dependencies(${target} ${LLVM_COMMON_DEPENDS})
 55    endif ()
 56    set_target_properties(${target} PROPERTIES FOLDER "Tablegenning")
 57  endif( TABLEGEN_OUTPUT )
 58endfunction()
 59
 60if(CMAKE_CROSSCOMPILING)
 61  set(CX_NATIVE_TG_DIR "${CMAKE_BINARY_DIR}/native")
 62
 63  add_custom_command(OUTPUT ${CX_NATIVE_TG_DIR}
 64    COMMAND ${CMAKE_COMMAND} -E make_directory ${CX_NATIVE_TG_DIR}
 65    COMMENT "Creating ${CX_NATIVE_TG_DIR}...")
 66
 67  add_custom_command(OUTPUT ${CX_NATIVE_TG_DIR}/CMakeCache.txt
 68    COMMAND ${CMAKE_COMMAND} -UMAKE_TOOLCHAIN_FILE -DCMAKE_BUILD_TYPE=Release
 69                             -DLLVM_BUILD_POLLY=OFF
 70                             -G "${CMAKE_GENERATOR}" ${CMAKE_SOURCE_DIR}
 71    WORKING_DIRECTORY ${CX_NATIVE_TG_DIR}
 72    DEPENDS ${CX_NATIVE_TG_DIR}
 73    COMMENT "Configuring native TableGen...")
 74
 75  add_custom_target(ConfigureNativeTableGen DEPENDS ${CX_NATIVE_TG_DIR}/CMakeCache.txt)
 76
 77  set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${CX_NATIVE_TG_DIR})
 78endif()
 79
 80macro(add_tablegen target project)
 81  set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LLVM_TOOLS_BINARY_DIR})
 82
 83  set(${target}_OLD_LLVM_LINK_COMPONENTS ${LLVM_LINK_COMPONENTS})
 84  set(LLVM_LINK_COMPONENTS ${LLVM_LINK_COMPONENTS} TableGen)
 85  add_llvm_utility(${target} ${ARGN})
 86  set(LLVM_LINK_COMPONENTS ${${target}_OLD_LLVM_LINK_COMPONENTS})
 87
 88  # For Xcode builds, symlink bin/<target> to bin/<Config>/<target> so that
 89  # a separately-configured Clang project can still find llvm-tblgen.
 90  if (XCODE)
 91    add_custom_target(${target}-top ALL
 92      ${CMAKE_COMMAND} -E create_symlink 
 93        ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/${target}${CMAKE_EXECUTABLE_SUFFIX}
 94        ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${target}${CMAKE_EXECUTABLE_SUFFIX}
 95      DEPENDS ${target})
 96  endif ()
 97
 98  set(${project}_TABLEGEN "${target}" CACHE
 99      STRING "Native TableGen executable. Saves building one when cross-compiling.")
100
101  # Upgrade existing LLVM_TABLEGEN setting.
102  if(${project} STREQUAL LLVM)
103    if(${LLVM_TABLEGEN} STREQUAL tblgen)
104      set(LLVM_TABLEGEN "${target}" CACHE
105          STRING "Native TableGen executable. Saves building one when cross-compiling."
106          FORCE)
107    endif()
108  endif()
109      
110  # Effective tblgen executable to be used:
111  set(${project}_TABLEGEN_EXE ${${project}_TABLEGEN} PARENT_SCOPE)
112
113  if(CMAKE_CROSSCOMPILING)
114    if( ${${project}_TABLEGEN} STREQUAL "${target}" )
115      set(${project}_TABLEGEN_EXE "${CX_NATIVE_TG_DIR}/bin/${target}")
116      set(${project}_TABLEGEN_EXE ${${project}_TABLEGEN_EXE} PARENT_SCOPE)
117
118      add_custom_command(OUTPUT ${${project}_TABLEGEN_EXE}
119        COMMAND ${CMAKE_BUILD_TOOL} ${target}
120        DEPENDS ${CX_NATIVE_TG_DIR}/CMakeCache.txt
121        WORKING_DIRECTORY ${CX_NATIVE_TG_DIR}
122        COMMENT "Building native TableGen...")
123      add_custom_target(${project}NativeTableGen DEPENDS ${${project}_TABLEGEN_EXE})
124      add_dependencies(${project}NativeTableGen ConfigureNativeTableGen)
125
126      add_dependencies(${target} ${project}NativeTableGen)
127    endif()
128  endif()
129
130  if( MINGW )
131    target_link_libraries(${target} imagehlp psapi shell32)
132    if(CMAKE_SIZEOF_VOID_P MATCHES "8")
133      set_target_properties(${target} PROPERTIES LINK_FLAGS -Wl,--stack,16777216)
134    endif(CMAKE_SIZEOF_VOID_P MATCHES "8")
135  endif( MINGW )
136  if( LLVM_ENABLE_THREADS AND HAVE_LIBPTHREAD AND NOT BEOS )
137    target_link_libraries(${target} pthread)
138  endif()
139
140  if (${project} STREQUAL LLVM AND NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
141    install(TARGETS ${target} RUNTIME DESTINATION bin)
142  endif()
143endmacro()