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