macro(set_flang_windows_version_resource_properties name) if (DEFINED windows_resource_file) set_windows_version_resource_properties(${name} ${windows_resource_file} VERSION_MAJOR ${FLANG_VERSION_MAJOR} VERSION_MINOR ${FLANG_VERSION_MINOR} VERSION_PATCHLEVEL ${FLANG_VERSION_PATCHLEVEL} VERSION_STRING "${FLANG_VERSION} (${BACKEND_PACKAGE_STRING})" PRODUCT_NAME "flang") endif() endmacro() macro(add_flang_subdirectory name) add_llvm_subdirectory(FLANG TOOL ${name}) endmacro() macro(add_flang_library name) cmake_parse_arguments(ARG "SHARED" "" "ADDITIONAL_HEADERS" ${ARGN}) set(srcs) if (MSVC_IDE OR XCODE) # Add public headers file(RELATIVE_PATH lib_path ${FLANG_SOURCE_DIR}/lib/ ${CMAKE_CURRENT_SOURCE_DIR}) if(NOT lib_path MATCHES "^[.][.]") file( GLOB_RECURSE headers ${FLANG_SOURCE_DIR}/include/flang/${lib_path}/*.h ${FLANG_SOURCE_DIR}/include/flang/${lib_path}/*.def) set_source_files_properties(${headers} PROPERTIES HEADER_FILE_ONLY ON) if (headers) set(srcs ${headers}) endif() endif() endif(MSVC_IDE OR XCODE) if (srcs OR ARG_ADDITIONAL_HEADERS) set(srcs ADDITIONAL_HEADERS ${srcs} ${ARG_ADDITIONAL_HEADERS}) # It may contain unparsed unknown args. endif() if (ARG_SHARED) set(LIBTYPE SHARED) else() # llvm_add_library ignores BUILD_SHARED_LIBS if STATIC is explicitly set, # so we need to handle it here. if (BUILD_SHARED_LIBS) set(LIBTYPE SHARED OBJECT) else() set(LIBTYPE STATIC OBJECT) endif() set_property(GLOBAL APPEND PROPERTY FLANG_STATIC_LIBS ${name}) endif() llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs}) if (TARGET ${name}) if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "libflang") set(export_to_flangtargets) if (${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR "flang-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR NOT LLVM_DISTRIBUTION_COMPONENTS) set(export_to_flangtargets EXPORT FlangTargets) set_property(GLOBAL PROPERTY FLANG_HAS_EXPORTS True) endif() install(TARGETS ${name} COMPONENT ${name} ${export_to_flangtargets} LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX} RUNTIME DESTINATION bin) if (NOT LLVM_ENABLE_IDE) add_llvm_install_targets(install-${name} DEPENDS ${name} COMPONENT ${name}) endif() set_property(GLOBAL APPEND PROPERTY FLANG_LIBS ${name}) endif() set_property(GLOBAL APPEND PROPERTY FLANG_EXPORTS ${name}) else() # Add empty "phony" target add_custom_target(${name}) endif() set_target_properties(${name} PROPERTIES FOLDER "Flang libraries") set_flang_windows_version_resource_properties(${name}) endmacro(add_flang_library) macro(add_flang_executable name) add_llvm_executable(${name} ${ARGN}) set_target_properties(${name} PROPERTIES FOLDER "Flang executables") set_flang_windows_version_resource_properties(${name}) endmacro(add_flang_executable) macro(add_flang_tool name) if (NOT FLANG_BUILD_TOOLS) set(EXCLUDE_FROM_ALL ON) endif() add_flang_executable(${name} ${ARGN}) if (FLANG_BUILD_TOOLS) set(export_to_flangtargets) if (${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR NOT LLVM_DISTRIBUTION_COMPONENTS) set(export_to_flangtargets EXPORT FlangTargets) set_property(GLOBAL PROPERTY FLANG_HAS_EXPORTS True) endif() install(TARGETS ${name} ${export_to_flangtargets} RUNTIME DESTINATION bin COMPONENT ${name}) if(NOT LLVM_ENABLE_IDE) add_llvm_install_targets(install-${name} DEPENDS ${name} COMPONENT ${name}) endif() set_property(GLOBAL APPEND PROPERTY FLANG_EXPORTS ${name}) endif() endmacro() macro(add_flang_symlink name dest) add_llvm_tool_symlink(${name} ${dest} ALWAYS_GENERATE) # Always generate install targets llvm_install_symlink(${name} ${dest} ALWAYS_GENERATE) endmacro()