X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fcmake%2Flibrary.cmake;h=fdd34691a1215197c6c63e3d4b282e1713258637;hb=7d527a2292bdabc84ff070f5b27f35c0e858cddd;hp=6aa0ae848f912d0210fc170880e4f2e8674d603f;hpb=c261760d907a67ba9548104140785771668d8e83;p=vpp.git diff --git a/src/cmake/library.cmake b/src/cmake/library.cmake index 6aa0ae848f9..fdd34691a12 100644 --- a/src/cmake/library.cmake +++ b/src/cmake/library.cmake @@ -13,33 +13,62 @@ macro(add_vpp_library lib) cmake_parse_arguments(ARG - "" - "" + "LTO" + "COMPONENT" "SOURCES;MULTIARCH_SOURCES;API_FILES;LINK_LIBRARIES;INSTALL_HEADERS;DEPENDS" ${ARGN} ) add_library(${lib} SHARED ${ARG_SOURCES}) + if(VPP_LIB_VERSION) + set_target_properties(${lib} PROPERTIES SOVERSION ${VPP_LIB_VERSION}) + endif() # library deps if(ARG_LINK_LIBRARIES) target_link_libraries(${lib} ${ARG_LINK_LIBRARIES}) endif() # install .so - install(TARGETS ${lib} DESTINATION ${VPP_LIB_DIR_NAME}) + if(NOT ARG_COMPONENT) + set(ARG_COMPONENT vpp) + endif() + install( + TARGETS ${lib} + DESTINATION ${VPP_LIBRARY_DIR} + COMPONENT ${ARG_COMPONENT} + ) + + if (ARG_LTO AND VPP_USE_LTO) + set_property(TARGET ${lib} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE) + target_compile_options (${lib} PRIVATE "-ffunction-sections") + target_compile_options (${lib} PRIVATE "-fdata-sections") + target_link_libraries (${lib} "-Wl,--gc-sections") + endif() if(ARG_MULTIARCH_SOURCES) - vpp_library_set_multiarch_sources(${lib} ${ARG_MULTIARCH_SOURCES}) + vpp_library_set_multiarch_sources(${lib} DEPENDS ${ARG_DEPENDS} SOURCES ${ARG_MULTIARCH_SOURCES}) endif() if(ARG_API_FILES) - vpp_add_api_files(${lib}_api_headers ${ARG_API_FILES}) + vpp_add_api_files(${lib} core vpp ${ARG_API_FILES}) foreach(file ${ARG_API_FILES}) get_filename_component(dir ${file} DIRECTORY) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${file}.h DESTINATION include/${lib}/${dir}) + install( + FILES ${file} ${CMAKE_CURRENT_BINARY_DIR}/${file}.h + ${CMAKE_CURRENT_BINARY_DIR}/${file}_enum.h + ${CMAKE_CURRENT_BINARY_DIR}/${file}_types.h + ${CMAKE_CURRENT_BINARY_DIR}/${file}_tojson.h + ${CMAKE_CURRENT_BINARY_DIR}/${file}_fromjson.h + DESTINATION include/${lib}/${dir} + COMPONENT vpp-dev + ) endforeach() endif() + if(NOT VPP_EXTERNAL_PROJECT) + add_dependencies(${lib} api_headers) + endif() + if(ARG_DEPENDS) add_dependencies(${lib} ${ARG_DEPENDS}) endif() @@ -48,7 +77,11 @@ macro(add_vpp_library lib) if(ARG_INSTALL_HEADERS) foreach(file ${ARG_INSTALL_HEADERS}) get_filename_component(dir ${file} DIRECTORY) - install(FILES ${file} DESTINATION include/${lib}/${dir}) + install( + FILES ${file} + DESTINATION include/${lib}/${dir} + COMPONENT ${ARG_COMPONENT}-dev + ) endforeach() endif() endmacro() @@ -59,6 +92,40 @@ endmacro() function (add_vpp_headers path) foreach(file ${ARGN}) get_filename_component(dir ${file} DIRECTORY) - install(FILES ${file} DESTINATION include/${path}/${dir}) + install( + FILES ${file} + DESTINATION include/${path}/${dir} + COMPONENT vpp-dev + ) endforeach() endfunction() + +macro(add_vpp_test_library lib) + cmake_parse_arguments(TEST + "" + "" + ${ARGN} + ) + + foreach(file ${ARGN}) + get_filename_component(name ${file} NAME_WE) + set(test_lib ${lib}_${name}_plugin) + add_library(${test_lib} SHARED ${file}_test2.c) + if(NOT VPP_EXTERNAL_PROJECT) + add_dependencies(${test_lib} api_headers) + endif() + include_directories(${CMAKE_CURRENT_BINARY_DIR}) + set_target_properties(${test_lib} PROPERTIES NO_SONAME 1) + set_target_properties(${test_lib} PROPERTIES + PREFIX "" + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/vat2_plugins) + + # Later: Install and package + # install .so + #install( + # TARGETS ${test_lib} + # DESTINATION ${VPP_LIBRARY_DIR}/vat2_plugins + # #COMPONENT ${ARG_COMPONENT} + # ) + endforeach() +endmacro()