ip: set error number on failed intf addr
[vpp.git] / src / cmake / library.cmake
index fdd3469..d19eb3c 100644 (file)
@@ -19,7 +19,14 @@ macro(add_vpp_library lib)
     ${ARGN}
   )
 
-  add_library(${lib} SHARED ${ARG_SOURCES})
+  set (lo ${lib}_objs)
+  add_library(${lo} OBJECT ${ARG_SOURCES})
+  set_target_properties(${lo} PROPERTIES POSITION_INDEPENDENT_CODE ON)
+  target_compile_options(${lo} PUBLIC ${VPP_DEFAULT_MARCH_FLAGS})
+
+  add_library(${lib} SHARED)
+  target_sources(${lib} PRIVATE $<TARGET_OBJECTS:${lo}>)
+
   if(VPP_LIB_VERSION)
     set_target_properties(${lib} PROPERTIES SOVERSION ${VPP_LIB_VERSION})
   endif()
@@ -39,6 +46,7 @@ macro(add_vpp_library lib)
   )
 
   if (ARG_LTO AND VPP_USE_LTO)
+     set_property(TARGET ${lo} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
      set_property(TARGET ${lib} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
      target_compile_options (${lib} PRIVATE "-ffunction-sections")
      target_compile_options (${lib} PRIVATE "-fdata-sections")
@@ -66,11 +74,11 @@ macro(add_vpp_library lib)
   endif()
 
   if(NOT VPP_EXTERNAL_PROJECT)
-    add_dependencies(${lib} api_headers)
+    add_dependencies(${lo} api_headers)
   endif()
 
   if(ARG_DEPENDS)
-    add_dependencies(${lib} ${ARG_DEPENDS})
+    add_dependencies(${lo} ${ARG_DEPENDS})
   endif()
 
   # install headers
@@ -111,6 +119,7 @@ macro(add_vpp_test_library lib)
     get_filename_component(name ${file} NAME_WE)
     set(test_lib ${lib}_${name}_plugin)
     add_library(${test_lib} SHARED ${file}_test2.c)
+    target_compile_options(${test_lib} PUBLIC ${VPP_DEFAULT_MARCH_FLAGS})
     if(NOT VPP_EXTERNAL_PROJECT)
       add_dependencies(${test_lib} api_headers)
     endif()
@@ -120,12 +129,20 @@ macro(add_vpp_test_library lib)
       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}
-    #  )
+    install(
+      TARGETS ${test_lib}
+      DESTINATION ${VPP_LIBRARY_DIR}/vat2_plugins
+      COMPONENT ${ARG_COMPONENT}
+    )
   endforeach()
 endmacro()
+
+macro(vpp_find_library var)
+  find_library(${var} ${ARGN})
+  mark_as_advanced(${var})
+endmacro()
+macro(vpp_find_path var)
+  find_path(${var} ${ARGN})
+  mark_as_advanced(${var})
+endmacro()