15c3347aaSJohn Ericsoninclude(GNUInstallDirs) 256f7e5a8SShoaib Meenaiinclude(LLVMDistributionSupport) 356f7e5a8SShoaib Meenai 46c16aa4fSPatrick McCormickmacro(set_flang_windows_version_resource_properties name) 56c16aa4fSPatrick McCormick if (DEFINED windows_resource_file) 66c16aa4fSPatrick McCormick set_windows_version_resource_properties(${name} ${windows_resource_file} 76c16aa4fSPatrick McCormick VERSION_MAJOR ${FLANG_VERSION_MAJOR} 86c16aa4fSPatrick McCormick VERSION_MINOR ${FLANG_VERSION_MINOR} 96c16aa4fSPatrick McCormick VERSION_PATCHLEVEL ${FLANG_VERSION_PATCHLEVEL} 103a0b6101SFangrui Song VERSION_STRING "${FLANG_VERSION}" 116c16aa4fSPatrick McCormick PRODUCT_NAME "flang") 126c16aa4fSPatrick McCormick endif() 136c16aa4fSPatrick McCormickendmacro() 146c16aa4fSPatrick McCormick 156c16aa4fSPatrick McCormickmacro(add_flang_subdirectory name) 166c16aa4fSPatrick McCormick add_llvm_subdirectory(FLANG TOOL ${name}) 176c16aa4fSPatrick McCormickendmacro() 186c16aa4fSPatrick McCormick 19cbfa4aa7SEzike Ebukafunction(add_flang_library name) 20ffc67bb3SDavid Spickett set(options SHARED STATIC INSTALL_WITH_TOOLCHAIN) 216a2cc122SMichał Górny set(multiValueArgs ADDITIONAL_HEADERS CLANG_LIBS MLIR_LIBS) 226c16aa4fSPatrick McCormick cmake_parse_arguments(ARG 23cbfa4aa7SEzike Ebuka "${options}" 246c16aa4fSPatrick McCormick "" 25cbfa4aa7SEzike Ebuka "${multiValueArgs}" 266c16aa4fSPatrick McCormick ${ARGN}) 27cbfa4aa7SEzike Ebuka 286c16aa4fSPatrick McCormick set(srcs) 296c16aa4fSPatrick McCormick if (MSVC_IDE OR XCODE) 306c16aa4fSPatrick McCormick # Add public headers 316c16aa4fSPatrick McCormick file(RELATIVE_PATH lib_path 326c16aa4fSPatrick McCormick ${FLANG_SOURCE_DIR}/lib/ 336c16aa4fSPatrick McCormick ${CMAKE_CURRENT_SOURCE_DIR}) 346c16aa4fSPatrick McCormick if(NOT lib_path MATCHES "^[.][.]") 356c16aa4fSPatrick McCormick file( GLOB_RECURSE headers 366c16aa4fSPatrick McCormick ${FLANG_SOURCE_DIR}/include/flang/${lib_path}/*.h 376c16aa4fSPatrick McCormick ${FLANG_SOURCE_DIR}/include/flang/${lib_path}/*.def) 386c16aa4fSPatrick McCormick set_source_files_properties(${headers} PROPERTIES HEADER_FILE_ONLY ON) 396c16aa4fSPatrick McCormick 406c16aa4fSPatrick McCormick if (headers) 416c16aa4fSPatrick McCormick set(srcs ${headers}) 426c16aa4fSPatrick McCormick endif() 436c16aa4fSPatrick McCormick endif() 446c16aa4fSPatrick McCormick endif(MSVC_IDE OR XCODE) 456c16aa4fSPatrick McCormick 466c16aa4fSPatrick McCormick if (srcs OR ARG_ADDITIONAL_HEADERS) 476c16aa4fSPatrick McCormick set(srcs 486c16aa4fSPatrick McCormick ADDITIONAL_HEADERS 496c16aa4fSPatrick McCormick ${srcs} 506c16aa4fSPatrick McCormick ${ARG_ADDITIONAL_HEADERS}) # It may contain unparsed unknown args. 516c16aa4fSPatrick McCormick 526c16aa4fSPatrick McCormick endif() 536c16aa4fSPatrick McCormick 546244d87fSMichael Kruse if(ARG_SHARED AND ARG_STATIC) 556244d87fSMichael Kruse set(LIBTYPE SHARED STATIC) 566244d87fSMichael Kruse elseif(ARG_SHARED) 576c16aa4fSPatrick McCormick set(LIBTYPE SHARED) 58424ad163SMichael Kruse elseif(ARG_STATIC) 59424ad163SMichael Kruse # If BUILD_SHARED_LIBS and ARG_STATIC are both set, llvm_add_library prioritizes STATIC. 60424ad163SMichael Kruse # This is required behavior for libFortranFloat128Math. 616244d87fSMichael Kruse set(LIBTYPE STATIC) 62424ad163SMichael Kruse else() 63424ad163SMichael Kruse # Let llvm_add_library decide, taking BUILD_SHARED_LIBS into account. 64424ad163SMichael Kruse set(LIBTYPE) 656244d87fSMichael Kruse endif() 666c16aa4fSPatrick McCormick llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs}) 676c16aa4fSPatrick McCormick 68cbfa4aa7SEzike Ebuka clang_target_link_libraries(${name} PRIVATE ${ARG_CLANG_LIBS}) 69*532e639eSMichał Górny if (ARG_MLIR_LIBS) 706a2cc122SMichał Górny mlir_target_link_libraries(${name} PRIVATE ${ARG_MLIR_LIBS}) 71*532e639eSMichał Górny endif() 72cbfa4aa7SEzike Ebuka 736c16aa4fSPatrick McCormick if (TARGET ${name}) 746c16aa4fSPatrick McCormick 75467abac2SDiana Picus if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "libflang" 76467abac2SDiana Picus OR ARG_INSTALL_WITH_TOOLCHAIN) 7756f7e5a8SShoaib Meenai get_target_export_arg(${name} Flang export_to_flangtargets UMBRELLA flang-libraries) 786c16aa4fSPatrick McCormick install(TARGETS ${name} 796c16aa4fSPatrick McCormick COMPONENT ${name} 806c16aa4fSPatrick McCormick ${export_to_flangtargets} 81e941b031SJohn Ericson LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} 82e941b031SJohn Ericson ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX} 835c3347aaSJohn Ericson RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") 846c16aa4fSPatrick McCormick 856c16aa4fSPatrick McCormick if (NOT LLVM_ENABLE_IDE) 866c16aa4fSPatrick McCormick add_llvm_install_targets(install-${name} 876c16aa4fSPatrick McCormick DEPENDS ${name} 886c16aa4fSPatrick McCormick COMPONENT ${name}) 896c16aa4fSPatrick McCormick endif() 906c16aa4fSPatrick McCormick 916c16aa4fSPatrick McCormick set_property(GLOBAL APPEND PROPERTY FLANG_LIBS ${name}) 926c16aa4fSPatrick McCormick endif() 936c16aa4fSPatrick McCormick set_property(GLOBAL APPEND PROPERTY FLANG_EXPORTS ${name}) 946c16aa4fSPatrick McCormick else() 956c16aa4fSPatrick McCormick # Add empty "phony" target 966c16aa4fSPatrick McCormick add_custom_target(${name}) 976c16aa4fSPatrick McCormick endif() 986c16aa4fSPatrick McCormick 9976e7c8f4SMichael Kruse set_target_properties(${name} PROPERTIES FOLDER "Flang/Libraries") 1006c16aa4fSPatrick McCormick set_flang_windows_version_resource_properties(${name}) 101cbfa4aa7SEzike Ebukaendfunction(add_flang_library) 1026c16aa4fSPatrick McCormick 1036c16aa4fSPatrick McCormickmacro(add_flang_executable name) 1046c16aa4fSPatrick McCormick add_llvm_executable(${name} ${ARGN}) 1056c16aa4fSPatrick McCormick set_flang_windows_version_resource_properties(${name}) 1066c16aa4fSPatrick McCormickendmacro(add_flang_executable) 1076c16aa4fSPatrick McCormick 1086c16aa4fSPatrick McCormickmacro(add_flang_tool name) 1096c16aa4fSPatrick McCormick if (NOT FLANG_BUILD_TOOLS) 1106c16aa4fSPatrick McCormick set(EXCLUDE_FROM_ALL ON) 1116c16aa4fSPatrick McCormick endif() 1126c16aa4fSPatrick McCormick 1136c16aa4fSPatrick McCormick add_flang_executable(${name} ${ARGN}) 1146c16aa4fSPatrick McCormick 1156c16aa4fSPatrick McCormick if (FLANG_BUILD_TOOLS) 11656f7e5a8SShoaib Meenai get_target_export_arg(${name} Flang export_to_flangtargets) 1176c16aa4fSPatrick McCormick install(TARGETS ${name} 1186c16aa4fSPatrick McCormick ${export_to_flangtargets} 1195c3347aaSJohn Ericson RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" 1206c16aa4fSPatrick McCormick COMPONENT ${name}) 1216c16aa4fSPatrick McCormick 1226c16aa4fSPatrick McCormick if(NOT LLVM_ENABLE_IDE) 1236c16aa4fSPatrick McCormick add_llvm_install_targets(install-${name} 1246c16aa4fSPatrick McCormick DEPENDS ${name} 1256c16aa4fSPatrick McCormick COMPONENT ${name}) 1266c16aa4fSPatrick McCormick endif() 1276c16aa4fSPatrick McCormick set_property(GLOBAL APPEND PROPERTY FLANG_EXPORTS ${name}) 1286c16aa4fSPatrick McCormick endif() 1296c16aa4fSPatrick McCormickendmacro() 1306c16aa4fSPatrick McCormick 1316c16aa4fSPatrick McCormickmacro(add_flang_symlink name dest) 13207b74980SJohn Ericson llvm_add_tool_symlink(FLANG ${name} ${dest} ALWAYS_GENERATE) 1336c16aa4fSPatrick McCormick # Always generate install targets 13407b74980SJohn Ericson llvm_install_symlink(FLANG ${name} ${dest} ALWAYS_GENERATE) 1356c16aa4fSPatrick McCormickendmacro() 136