brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.3 KiB · ca23310 Raw
142 lines · plain
1include(GNUInstallDirs)2include(LLVMDistributionSupport)3 4macro(set_flang_windows_version_resource_properties name)5  if (DEFINED windows_resource_file)6    set_windows_version_resource_properties(${name} ${windows_resource_file}7      VERSION_MAJOR ${FLANG_VERSION_MAJOR}8      VERSION_MINOR ${FLANG_VERSION_MINOR}9      VERSION_PATCHLEVEL ${FLANG_VERSION_PATCHLEVEL}10      VERSION_STRING "${FLANG_VERSION}"11      PRODUCT_NAME "flang")12  endif()13endmacro()14 15macro(add_flang_subdirectory name)16  add_llvm_subdirectory(FLANG TOOL ${name})17endmacro()18 19function(add_flang_library name)20  set(options SHARED STATIC INSTALL_WITH_TOOLCHAIN)21  set(multiValueArgs ADDITIONAL_HEADERS CLANG_LIBS MLIR_LIBS MLIR_DEPS)22  cmake_parse_arguments(ARG23    "${options}"24    ""25    "${multiValueArgs}"26    ${ARGN})27 28  set(srcs)29  if (MSVC_IDE OR XCODE)30    # Add public headers31    file(RELATIVE_PATH lib_path32      ${FLANG_SOURCE_DIR}/lib/33      ${CMAKE_CURRENT_SOURCE_DIR})34    if(NOT lib_path MATCHES "^[.][.]")35      file( GLOB_RECURSE headers36        ${FLANG_SOURCE_DIR}/include/flang/${lib_path}/*.h37        ${FLANG_SOURCE_DIR}/include/flang/${lib_path}/*.def)38      set_source_files_properties(${headers} PROPERTIES HEADER_FILE_ONLY ON)39 40      if (headers)41        set(srcs ${headers})42      endif()43    endif()44  endif(MSVC_IDE OR XCODE)45 46  if (srcs OR ARG_ADDITIONAL_HEADERS)47    set(srcs48      ADDITIONAL_HEADERS49      ${srcs}50      ${ARG_ADDITIONAL_HEADERS}) # It may contain unparsed unknown args.51      52  endif()53 54  if(ARG_SHARED AND ARG_STATIC)55    set(LIBTYPE SHARED STATIC)56  elseif(ARG_SHARED)57    set(LIBTYPE SHARED)58  elseif(ARG_STATIC)59    # If BUILD_SHARED_LIBS and ARG_STATIC are both set, llvm_add_library prioritizes STATIC.60    # This is required behavior for libflang_rt.quadmath.61    set(LIBTYPE STATIC)62  else()63    # Let llvm_add_library decide, taking BUILD_SHARED_LIBS into account.64    set(LIBTYPE)65  endif()66  llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs})67 68  clang_target_link_libraries(${name} PRIVATE ${ARG_CLANG_LIBS})69  if (ARG_MLIR_LIBS)70    mlir_target_link_libraries(${name} PRIVATE ${ARG_MLIR_LIBS})71  endif()72  if (ARG_MLIR_DEPS AND NOT FLANG_STANDALONE_BUILD)73    add_dependencies(${name} ${ARG_MLIR_DEPS})74  endif()75 76  if (TARGET ${name})77 78    if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "libflang"79        OR ARG_INSTALL_WITH_TOOLCHAIN)80      get_target_export_arg(${name} Flang export_to_flangtargets UMBRELLA flang-libraries)81      install(TARGETS ${name}82        COMPONENT ${name}83        ${export_to_flangtargets}84        LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}85        ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}86        RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")87 88      if (NOT LLVM_ENABLE_IDE)89        add_llvm_install_targets(install-${name}90                                 DEPENDS ${name}91                                 COMPONENT ${name})92      endif()93 94      set_property(GLOBAL APPEND PROPERTY FLANG_LIBS ${name})95    endif()96    set_property(GLOBAL APPEND PROPERTY FLANG_EXPORTS ${name})97    if (FLANG_PARALLEL_COMPILE_JOBS)98      set_property(TARGET ${name} PROPERTY JOB_POOL_COMPILE flang_compile_job_pool)99    endif()100  else()101    # Add empty "phony" target102    add_custom_target(${name})103  endif()104 105  set_target_properties(${name} PROPERTIES FOLDER "Flang/Libraries")106  set_flang_windows_version_resource_properties(${name})107endfunction(add_flang_library)108 109macro(add_flang_executable name)110  add_llvm_executable(${name} ${ARGN})111  set_flang_windows_version_resource_properties(${name})112endmacro(add_flang_executable)113 114macro(add_flang_tool name)115  if (NOT FLANG_BUILD_TOOLS)116    set(EXCLUDE_FROM_ALL ON)117  endif()118 119  add_flang_executable(${name} ${ARGN})120 121  if (FLANG_BUILD_TOOLS)122    get_target_export_arg(${name} Flang export_to_flangtargets)123    install(TARGETS ${name}124      ${export_to_flangtargets}125      RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"126      COMPONENT ${name})127 128    if(NOT LLVM_ENABLE_IDE)129      add_llvm_install_targets(install-${name}130                               DEPENDS ${name}131                               COMPONENT ${name})132    endif()133    set_property(GLOBAL APPEND PROPERTY FLANG_EXPORTS ${name})134  endif()135endmacro()136 137macro(add_flang_symlink name dest)138  llvm_add_tool_symlink(FLANG ${name} ${dest} ALWAYS_GENERATE)139  # Always generate install targets140  llvm_install_symlink(FLANG ${name} ${dest} ALWAYS_GENERATE)141endmacro()142