blob: e0eb7af76fca0abfdaeff9314c335baef3f75ec3 [file] [log] [blame]
Damjan Marion4553c952018-08-26 11:04:40 +02001# Copyright (c) 2018 Cisco and/or its affiliates.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at:
5#
6# http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14macro(add_vpp_library lib)
15 cmake_parse_arguments(ARG
16 ""
Damjan Marion43b06062018-08-29 22:20:45 +020017 "COMPONENT"
Damjan Marion4553c952018-08-26 11:04:40 +020018 "SOURCES;MULTIARCH_SOURCES;API_FILES;LINK_LIBRARIES;INSTALL_HEADERS;DEPENDS"
19 ${ARGN}
20 )
21
22 add_library(${lib} SHARED ${ARG_SOURCES})
Damjan Marion64627422018-08-28 12:33:52 +020023 target_compile_options(${lib} PRIVATE -Wall)
Damjan Marionc6c02462018-08-31 17:38:57 +020024 set_target_properties(${lib} PROPERTIES SOVERSION ${VPP_LIB_VERSION})
Damjan Marion4553c952018-08-26 11:04:40 +020025
26 # library deps
27 if(ARG_LINK_LIBRARIES)
28 target_link_libraries(${lib} ${ARG_LINK_LIBRARIES})
29 endif()
30 # install .so
Damjan Marion43b06062018-08-29 22:20:45 +020031 if(NOT ARG_COMPONENT)
32 set(ARG_COMPONENT vpp)
33 endif()
34 install(
35 TARGETS ${lib}
Damjan Marion79dcbc72018-09-12 14:01:10 +020036 DESTINATION lib
Damjan Marion43b06062018-08-29 22:20:45 +020037 COMPONENT ${ARG_COMPONENT}
38 )
Damjan Marion4553c952018-08-26 11:04:40 +020039
40 if(ARG_MULTIARCH_SOURCES)
41 vpp_library_set_multiarch_sources(${lib} ${ARG_MULTIARCH_SOURCES})
42 endif()
43
44 if(ARG_API_FILES)
Damjan Marion4c64b6e2018-08-26 18:14:46 +020045 vpp_add_api_files(${lib} ${ARG_API_FILES})
Damjan Marion4553c952018-08-26 11:04:40 +020046 foreach(file ${ARG_API_FILES})
47 get_filename_component(dir ${file} DIRECTORY)
Damjan Marion43b06062018-08-29 22:20:45 +020048 install(
49 FILES ${CMAKE_CURRENT_BINARY_DIR}/${file}.h
50 DESTINATION include/${lib}/${dir}
51 COMPONENT vpp-dev
52 )
Damjan Marion4553c952018-08-26 11:04:40 +020053 endforeach()
54 endif()
55
56 if(ARG_DEPENDS)
57 add_dependencies(${lib} ${ARG_DEPENDS})
58 endif()
59
60 # install headers
61 if(ARG_INSTALL_HEADERS)
62 foreach(file ${ARG_INSTALL_HEADERS})
63 get_filename_component(dir ${file} DIRECTORY)
Damjan Marion43b06062018-08-29 22:20:45 +020064 install(
65 FILES ${file}
66 DESTINATION include/${lib}/${dir}
67 COMPONENT vpp-dev
68 )
Damjan Marion4553c952018-08-26 11:04:40 +020069 endforeach()
70 endif()
71endmacro()
72
73##############################################################################
74# header files
75##############################################################################
76function (add_vpp_headers path)
77 foreach(file ${ARGN})
78 get_filename_component(dir ${file} DIRECTORY)
Damjan Marion833de8c2018-09-07 12:39:02 +020079 install(
80 FILES ${file}
81 DESTINATION include/${path}/${dir}
82 COMPONENT vpp-dev
83 )
Damjan Marion4553c952018-08-26 11:04:40 +020084 endforeach()
85endfunction()