[cmake] NFC: Perform early exit where possible
This reduces the level of nesting and should make the code more
readable.
Closes https://github.com/google/iree/pull/2088
COPYBARA_INTEGRATE_REVIEW=https://github.com/google/iree/pull/2088 from antiagainst:cmake-early-exit f13aa5a3375da741d83a2b78d36f205b22b27c27
PiperOrigin-RevId: 314373942
diff --git a/build_tools/cmake/external_cc_library.cmake b/build_tools/cmake/external_cc_library.cmake
index 65c03de..94f56dc 100644
--- a/build_tools/cmake/external_cc_library.cmake
+++ b/build_tools/cmake/external_cc_library.cmake
@@ -85,106 +85,108 @@
${ARGN}
)
- if(NOT _RULE_TESTONLY OR IREE_BUILD_TESTS)
- # Prefix the library with the package name.
- string(REPLACE "::" "_" _PACKAGE_NAME ${_RULE_PACKAGE})
- set(_NAME "${_PACKAGE_NAME}_${_RULE_NAME}")
+ if(_RULE_TESTONLY AND NOT IREE_BUILD_TESTS)
+ return()
+ endif()
- # Prefix paths with the root.
- list(TRANSFORM _RULE_HDRS PREPEND ${_RULE_ROOT})
- list(TRANSFORM _RULE_SRCS PREPEND ${_RULE_ROOT})
+ # Prefix the library with the package name.
+ string(REPLACE "::" "_" _PACKAGE_NAME ${_RULE_PACKAGE})
+ set(_NAME "${_PACKAGE_NAME}_${_RULE_NAME}")
- # Check if this is a header-only library.
- # Note that as of February 2019, many popular OS's (for example, Ubuntu
- # 16.04 LTS) only come with cmake 3.5 by default. For this reason, we can't
- # use list(FILTER...)
- set(_CC_SRCS "${_RULE_SRCS}")
- foreach(src_file IN LISTS _CC_SRCS)
- if(${src_file} MATCHES ".*\\.(h|inc)")
- list(REMOVE_ITEM _CC_SRCS "${src_file}")
- endif()
- endforeach()
- if("${_CC_SRCS}" STREQUAL "")
- set(_RULE_IS_INTERFACE 1)
+ # Prefix paths with the root.
+ list(TRANSFORM _RULE_HDRS PREPEND ${_RULE_ROOT})
+ list(TRANSFORM _RULE_SRCS PREPEND ${_RULE_ROOT})
+
+ # Check if this is a header-only library.
+ # Note that as of February 2019, many popular OS's (for example, Ubuntu
+ # 16.04 LTS) only come with cmake 3.5 by default. For this reason, we can't
+ # use list(FILTER...)
+ set(_CC_SRCS "${_RULE_SRCS}")
+ foreach(src_file IN LISTS _CC_SRCS)
+ if(${src_file} MATCHES ".*\\.(h|inc)")
+ list(REMOVE_ITEM _CC_SRCS "${src_file}")
+ endif()
+ endforeach()
+ if("${_CC_SRCS}" STREQUAL "")
+ set(_RULE_IS_INTERFACE 1)
+ else()
+ set(_RULE_IS_INTERFACE 0)
+ endif()
+
+ if(NOT _RULE_IS_INTERFACE)
+ add_library(${_NAME} STATIC "")
+ target_sources(${_NAME}
+ PRIVATE
+ ${_RULE_SRCS}
+ ${_RULE_HDRS}
+ )
+ target_include_directories(${_NAME}
+ PUBLIC
+ "$<BUILD_INTERFACE:${IREE_COMMON_INCLUDE_DIRS}>"
+ "$<BUILD_INTERFACE:${_RULE_INCLUDES}>"
+ )
+ target_compile_options(${_NAME}
+ PRIVATE
+ ${_RULE_COPTS}
+ ${IREE_DEFAULT_COPTS}
+ )
+ target_link_libraries(${_NAME}
+ PUBLIC
+ ${_RULE_DEPS}
+ PRIVATE
+ ${_RULE_LINKOPTS}
+ ${IREE_DEFAULT_LINKOPTS}
+ )
+ target_compile_definitions(${_NAME}
+ PUBLIC
+ ${_RULE_DEFINES}
+ )
+ iree_add_data_dependencies(NAME ${_NAME} DATA ${_RULE_DATA})
+
+ if(DEFINED _RULE_ALWAYSLINK)
+ set_property(TARGET ${_NAME} PROPERTY ALWAYSLINK 1)
+ endif()
+
+ # Add all external targets to a a folder in the IDE for organization.
+ if(_RULE_PUBLIC)
+ set_property(TARGET ${_NAME} PROPERTY FOLDER third_party)
+ elseif(_RULE_TESTONLY)
+ set_property(TARGET ${_NAME} PROPERTY FOLDER third_party/test)
else()
- set(_RULE_IS_INTERFACE 0)
+ set_property(TARGET ${_NAME} PROPERTY FOLDER third_party/internal)
endif()
- if(NOT _RULE_IS_INTERFACE)
- add_library(${_NAME} STATIC "")
- target_sources(${_NAME}
- PRIVATE
- ${_RULE_SRCS}
- ${_RULE_HDRS}
- )
- target_include_directories(${_NAME}
- PUBLIC
- "$<BUILD_INTERFACE:${IREE_COMMON_INCLUDE_DIRS}>"
- "$<BUILD_INTERFACE:${_RULE_INCLUDES}>"
- )
- target_compile_options(${_NAME}
- PRIVATE
- ${_RULE_COPTS}
- ${IREE_DEFAULT_COPTS}
- )
- target_link_libraries(${_NAME}
- PUBLIC
- ${_RULE_DEPS}
- PRIVATE
- ${_RULE_LINKOPTS}
- ${IREE_DEFAULT_LINKOPTS}
- )
- target_compile_definitions(${_NAME}
- PUBLIC
- ${_RULE_DEFINES}
- )
- iree_add_data_dependencies(NAME ${_NAME} DATA ${_RULE_DATA})
+ # INTERFACE libraries can't have the CXX_STANDARD property set
+ set_property(TARGET ${_NAME} PROPERTY CXX_STANDARD ${IREE_CXX_STANDARD})
+ set_property(TARGET ${_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
+ else()
+ # Generating header-only library
+ add_library(${_NAME} INTERFACE)
+ target_include_directories(${_NAME}
+ INTERFACE
+ "$<BUILD_INTERFACE:${IREE_COMMON_INCLUDE_DIRS}>"
+ "$<BUILD_INTERFACE:${_RULE_INCLUDES}>"
+ )
+ target_compile_options(${_NAME}
+ INTERFACE
+ ${_RULE_COPTS}
+ ${IREE_DEFAULT_COPTS}
+ )
+ target_link_libraries(${_NAME}
+ INTERFACE
+ ${_RULE_DEPS}
+ ${_RULE_LINKOPTS}
+ ${IREE_DEFAULT_LINKOPTS}
+ )
+ iree_add_data_dependencies(NAME ${_NAME} DATA ${_RULE_DATA})
+ target_compile_definitions(${_NAME}
+ INTERFACE
+ ${_RULE_DEFINES}
+ )
+ endif()
- if(DEFINED _RULE_ALWAYSLINK)
- set_property(TARGET ${_NAME} PROPERTY ALWAYSLINK 1)
- endif()
-
- # Add all external targets to a a folder in the IDE for organization.
- if(_RULE_PUBLIC)
- set_property(TARGET ${_NAME} PROPERTY FOLDER third_party)
- elseif(_RULE_TESTONLY)
- set_property(TARGET ${_NAME} PROPERTY FOLDER third_party/test)
- else()
- set_property(TARGET ${_NAME} PROPERTY FOLDER third_party/internal)
- endif()
-
- # INTERFACE libraries can't have the CXX_STANDARD property set
- set_property(TARGET ${_NAME} PROPERTY CXX_STANDARD ${IREE_CXX_STANDARD})
- set_property(TARGET ${_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
- else()
- # Generating header-only library
- add_library(${_NAME} INTERFACE)
- target_include_directories(${_NAME}
- INTERFACE
- "$<BUILD_INTERFACE:${IREE_COMMON_INCLUDE_DIRS}>"
- "$<BUILD_INTERFACE:${_RULE_INCLUDES}>"
- )
- target_compile_options(${_NAME}
- INTERFACE
- ${_RULE_COPTS}
- ${IREE_DEFAULT_COPTS}
- )
- target_link_libraries(${_NAME}
- INTERFACE
- ${_RULE_DEPS}
- ${_RULE_LINKOPTS}
- ${IREE_DEFAULT_LINKOPTS}
- )
- iree_add_data_dependencies(NAME ${_NAME} DATA ${_RULE_DATA})
- target_compile_definitions(${_NAME}
- INTERFACE
- ${_RULE_DEFINES}
- )
- endif()
-
- add_library(${_RULE_PACKAGE}::${_RULE_NAME} ALIAS ${_NAME})
- if(${_RULE_PACKAGE} STREQUAL ${_RULE_NAME})
- add_library(${_RULE_PACKAGE} ALIAS ${_NAME})
- endif()
+ add_library(${_RULE_PACKAGE}::${_RULE_NAME} ALIAS ${_NAME})
+ if(${_RULE_PACKAGE} STREQUAL ${_RULE_NAME})
+ add_library(${_RULE_PACKAGE} ALIAS ${_NAME})
endif()
endfunction()