1*bb86c7edSAndroid Build Coastguard Worker# Copyright 2019 Google LLC 2*bb86c7edSAndroid Build Coastguard Worker# 3*bb86c7edSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*bb86c7edSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*bb86c7edSAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*bb86c7edSAndroid Build Coastguard Worker# 7*bb86c7edSAndroid Build Coastguard Worker# https://www.apache.org/licenses/LICENSE-2.0 8*bb86c7edSAndroid Build Coastguard Worker# 9*bb86c7edSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*bb86c7edSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*bb86c7edSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*bb86c7edSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*bb86c7edSAndroid Build Coastguard Worker# limitations under the License. 14*bb86c7edSAndroid Build Coastguard Worker 15*bb86c7edSAndroid Build Coastguard Worker# Forked from IREE's iree_cc_library.cmake. 16*bb86c7edSAndroid Build Coastguard Worker 17*bb86c7edSAndroid Build Coastguard Workerinclude(CMakeParseArguments) 18*bb86c7edSAndroid Build Coastguard Workerinclude(cmake/ruy_include_directories.cmake) 19*bb86c7edSAndroid Build Coastguard Worker 20*bb86c7edSAndroid Build Coastguard Worker# ruy_cc_library() 21*bb86c7edSAndroid Build Coastguard Worker# 22*bb86c7edSAndroid Build Coastguard Worker# CMake function to imitate Bazel's cc_library rule. 23*bb86c7edSAndroid Build Coastguard Workerfunction(ruy_cc_library) 24*bb86c7edSAndroid Build Coastguard Worker cmake_parse_arguments( 25*bb86c7edSAndroid Build Coastguard Worker _RULE 26*bb86c7edSAndroid Build Coastguard Worker "PUBLIC;TESTONLY" 27*bb86c7edSAndroid Build Coastguard Worker "NAME" 28*bb86c7edSAndroid Build Coastguard Worker "HDRS;SRCS;COPTS;DEFINES;LINKOPTS;DEPS" 29*bb86c7edSAndroid Build Coastguard Worker ${ARGN} 30*bb86c7edSAndroid Build Coastguard Worker ) 31*bb86c7edSAndroid Build Coastguard Worker 32*bb86c7edSAndroid Build Coastguard Worker if(_RULE_TESTONLY AND RUY_MINIMAL_BUILD) 33*bb86c7edSAndroid Build Coastguard Worker return() 34*bb86c7edSAndroid Build Coastguard Worker endif() 35*bb86c7edSAndroid Build Coastguard Worker 36*bb86c7edSAndroid Build Coastguard Worker set(_NAME "${_RULE_NAME}") 37*bb86c7edSAndroid Build Coastguard Worker 38*bb86c7edSAndroid Build Coastguard Worker # Check if this is a header-only library. 39*bb86c7edSAndroid Build Coastguard Worker if("${_RULE_SRCS}" STREQUAL "") 40*bb86c7edSAndroid Build Coastguard Worker set(_RULE_IS_INTERFACE 1) 41*bb86c7edSAndroid Build Coastguard Worker else() 42*bb86c7edSAndroid Build Coastguard Worker set(_RULE_IS_INTERFACE 0) 43*bb86c7edSAndroid Build Coastguard Worker endif() 44*bb86c7edSAndroid Build Coastguard Worker 45*bb86c7edSAndroid Build Coastguard Worker file(RELATIVE_PATH _SUBDIR ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_LIST_DIR}) 46*bb86c7edSAndroid Build Coastguard Worker 47*bb86c7edSAndroid Build Coastguard Worker if(_RULE_IS_INTERFACE) 48*bb86c7edSAndroid Build Coastguard Worker # Generating a header-only library. 49*bb86c7edSAndroid Build Coastguard Worker add_library(${_NAME} INTERFACE) 50*bb86c7edSAndroid Build Coastguard Worker set_target_properties(${_NAME} PROPERTIES PUBLIC_HEADER "${_RULE_HDRS}") 51*bb86c7edSAndroid Build Coastguard Worker target_include_directories(${_NAME} 52*bb86c7edSAndroid Build Coastguard Worker INTERFACE 53*bb86c7edSAndroid Build Coastguard Worker "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>" 54*bb86c7edSAndroid Build Coastguard Worker "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>" 55*bb86c7edSAndroid Build Coastguard Worker ) 56*bb86c7edSAndroid Build Coastguard Worker target_link_libraries(${_NAME} 57*bb86c7edSAndroid Build Coastguard Worker INTERFACE 58*bb86c7edSAndroid Build Coastguard Worker ${_RULE_DEPS} 59*bb86c7edSAndroid Build Coastguard Worker ${_RULE_LINKOPTS} 60*bb86c7edSAndroid Build Coastguard Worker ) 61*bb86c7edSAndroid Build Coastguard Worker target_compile_definitions(${_NAME} 62*bb86c7edSAndroid Build Coastguard Worker INTERFACE 63*bb86c7edSAndroid Build Coastguard Worker ${_RULE_DEFINES} 64*bb86c7edSAndroid Build Coastguard Worker ) 65*bb86c7edSAndroid Build Coastguard Worker else() 66*bb86c7edSAndroid Build Coastguard Worker # Generating a static binary library. 67*bb86c7edSAndroid Build Coastguard Worker add_library(${_NAME} STATIC ${_RULE_SRCS} ${_RULE_HDRS}) 68*bb86c7edSAndroid Build Coastguard Worker set_target_properties(${_NAME} PROPERTIES PUBLIC_HEADER "${_RULE_HDRS}") 69*bb86c7edSAndroid Build Coastguard Worker ruy_include_directories(${_NAME} "${_RULE_DEPS}") 70*bb86c7edSAndroid Build Coastguard Worker target_compile_options(${_NAME} 71*bb86c7edSAndroid Build Coastguard Worker PRIVATE 72*bb86c7edSAndroid Build Coastguard Worker ${_RULE_COPTS} 73*bb86c7edSAndroid Build Coastguard Worker ) 74*bb86c7edSAndroid Build Coastguard Worker target_link_libraries(${_NAME} 75*bb86c7edSAndroid Build Coastguard Worker PUBLIC 76*bb86c7edSAndroid Build Coastguard Worker ${_RULE_DEPS} 77*bb86c7edSAndroid Build Coastguard Worker PRIVATE 78*bb86c7edSAndroid Build Coastguard Worker ${_RULE_LINKOPTS} 79*bb86c7edSAndroid Build Coastguard Worker ) 80*bb86c7edSAndroid Build Coastguard Worker target_compile_definitions(${_NAME} 81*bb86c7edSAndroid Build Coastguard Worker PUBLIC 82*bb86c7edSAndroid Build Coastguard Worker ${_RULE_DEFINES} 83*bb86c7edSAndroid Build Coastguard Worker ) 84*bb86c7edSAndroid Build Coastguard Worker endif() 85*bb86c7edSAndroid Build Coastguard Worker 86*bb86c7edSAndroid Build Coastguard Worker add_library(${PROJECT_NAME}::${_NAME} ALIAS ${_NAME}) 87*bb86c7edSAndroid Build Coastguard Worker 88*bb86c7edSAndroid Build Coastguard Worker if(NOT _RULE_TESTONLY) 89*bb86c7edSAndroid Build Coastguard Worker install( 90*bb86c7edSAndroid Build Coastguard Worker TARGETS ${_NAME} 91*bb86c7edSAndroid Build Coastguard Worker EXPORT ruyTargets 92*bb86c7edSAndroid Build Coastguard Worker LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 93*bb86c7edSAndroid Build Coastguard Worker PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${_SUBDIR} 94*bb86c7edSAndroid Build Coastguard Worker ) 95*bb86c7edSAndroid Build Coastguard Worker endif() 96*bb86c7edSAndroid Build Coastguard Workerendfunction() 97