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} (${BACKEND_PACKAGE_STRING})" 11 PRODUCT_NAME "flang") 12 endif() 13endmacro() 14 15macro(add_flang_subdirectory name) 16 add_llvm_subdirectory(FLANG TOOL ${name}) 17endmacro() 18 19macro(add_flang_library name) 20 cmake_parse_arguments(ARG 21 "SHARED;STATIC" 22 "" 23 "ADDITIONAL_HEADERS" 24 ${ARGN}) 25 set(srcs) 26 if (MSVC_IDE OR XCODE) 27 # Add public headers 28 file(RELATIVE_PATH lib_path 29 ${FLANG_SOURCE_DIR}/lib/ 30 ${CMAKE_CURRENT_SOURCE_DIR}) 31 if(NOT lib_path MATCHES "^[.][.]") 32 file( GLOB_RECURSE headers 33 ${FLANG_SOURCE_DIR}/include/flang/${lib_path}/*.h 34 ${FLANG_SOURCE_DIR}/include/flang/${lib_path}/*.def) 35 set_source_files_properties(${headers} PROPERTIES HEADER_FILE_ONLY ON) 36 37 if (headers) 38 set(srcs ${headers}) 39 endif() 40 endif() 41 endif(MSVC_IDE OR XCODE) 42 43 if (srcs OR ARG_ADDITIONAL_HEADERS) 44 set(srcs 45 ADDITIONAL_HEADERS 46 ${srcs} 47 ${ARG_ADDITIONAL_HEADERS}) # It may contain unparsed unknown args. 48 49 endif() 50 51 if (ARG_SHARED) 52 set(LIBTYPE SHARED) 53 else() 54 # llvm_add_library ignores BUILD_SHARED_LIBS if STATIC is explicitly set, 55 # so we need to handle it here. 56 if (BUILD_SHARED_LIBS AND NOT ARG_STATIC) 57 set(LIBTYPE SHARED OBJECT) 58 else() 59 set(LIBTYPE STATIC OBJECT) 60 endif() 61 set_property(GLOBAL APPEND PROPERTY FLANG_STATIC_LIBS ${name}) 62 endif() 63 64 llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs}) 65 66 if (TARGET ${name}) 67 68 if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "libflang") 69 get_target_export_arg(${name} Flang export_to_flangtargets UMBRELLA flang-libraries) 70 install(TARGETS ${name} 71 COMPONENT ${name} 72 ${export_to_flangtargets} 73 LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} 74 ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX} 75 RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") 76 77 if (NOT LLVM_ENABLE_IDE) 78 add_llvm_install_targets(install-${name} 79 DEPENDS ${name} 80 COMPONENT ${name}) 81 endif() 82 83 set_property(GLOBAL APPEND PROPERTY FLANG_LIBS ${name}) 84 endif() 85 set_property(GLOBAL APPEND PROPERTY FLANG_EXPORTS ${name}) 86 else() 87 # Add empty "phony" target 88 add_custom_target(${name}) 89 endif() 90 91 set_target_properties(${name} PROPERTIES FOLDER "Flang libraries") 92 set_flang_windows_version_resource_properties(${name}) 93endmacro(add_flang_library) 94 95macro(add_flang_executable name) 96 add_llvm_executable(${name} ${ARGN}) 97 set_target_properties(${name} PROPERTIES FOLDER "Flang executables") 98 set_flang_windows_version_resource_properties(${name}) 99endmacro(add_flang_executable) 100 101macro(add_flang_tool name) 102 if (NOT FLANG_BUILD_TOOLS) 103 set(EXCLUDE_FROM_ALL ON) 104 endif() 105 106 add_flang_executable(${name} ${ARGN}) 107 108 if (FLANG_BUILD_TOOLS) 109 get_target_export_arg(${name} Flang export_to_flangtargets) 110 install(TARGETS ${name} 111 ${export_to_flangtargets} 112 RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" 113 COMPONENT ${name}) 114 115 if(NOT LLVM_ENABLE_IDE) 116 add_llvm_install_targets(install-${name} 117 DEPENDS ${name} 118 COMPONENT ${name}) 119 endif() 120 set_property(GLOBAL APPEND PROPERTY FLANG_EXPORTS ${name}) 121 endif() 122endmacro() 123 124macro(add_flang_symlink name dest) 125 add_llvm_tool_symlink(${name} ${dest} ALWAYS_GENERATE) 126 # Always generate install targets 127 llvm_install_symlink(${name} ${dest} ALWAYS_GENERATE) 128endmacro() 129 130