aboutsummaryrefslogtreecommitdiffstats
path: root/tools/dissectors/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'tools/dissectors/CMakeLists.txt')
-rw-r--r--tools/dissectors/CMakeLists.txt191
1 files changed, 109 insertions, 82 deletions
diff --git a/tools/dissectors/CMakeLists.txt b/tools/dissectors/CMakeLists.txt
index 9f63a356a..6d835aa48 100644
--- a/tools/dissectors/CMakeLists.txt
+++ b/tools/dissectors/CMakeLists.txt
@@ -1,106 +1,133 @@
# Copyright 2010-2013 Ettus Research LLC
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
+# Copyright 2019 Ettus Research, a National Instruments brand
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+cmake_minimum_required(VERSION 3.1)
+cmake_policy(SET CMP0048 NEW)
+project(EttusDissectors VERSION 4.0.0 DESCRIPTION "Dissector Plugins" LANGUAGES C CXX)
+
+list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
+set(UHD_HOST_ROOT ${CMAKE_SOURCE_DIR}/../../host)
########################################################################
-# Project setup
+# useful macros
########################################################################
-cmake_minimum_required(VERSION 2.8)
-project(ettus-dissector C)
-enable_testing()
+include(WSComponent)
-#select the release build type by default to get optimization flags
-if(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE "Release")
- message(STATUS "Build type not specified: defaulting to release.")
-endif(NOT CMAKE_BUILD_TYPE)
-set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
+set(PLUGIN_C_GENERATOR ${CMAKE_SOURCE_DIR}/make-plugin-reg.py)
+macro(register_plugin_files _outputfile _registertype)
-list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
+ add_custom_command(
+ OUTPUT ${_outputfile}
+ DEPENDS ${ARGN} ${PLUGIN_C_GENERATOR}
+ COMMAND ${PYTHON_EXECUTABLE}
+ ${PLUGIN_C_GENERATOR}
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${_registertype}
+ ${ARGN}
+ COMMENT "Generating ${_outputfile}"
+ )
+
+endmacro(register_plugin_files)
+
+# Plugin name and version info (major minor micro extra)
+macro(SET_MODULE_INFO _plugin _ver_major _ver_minor _ver_micro _ver_extra)
+ if(WIN32)
+ # Create the Windows .rc file for the plugin.
+ set(MODULE_NAME ${_plugin})
+ set(MODULE_VERSION_MAJOR ${_ver_major})
+ set(MODULE_VERSION_MINOR ${_ver_minor})
+ set(MODULE_VERSION_MICRO ${_ver_micro})
+ set(MODULE_VERSION_EXTRA ${_ver_extra})
+ set(MODULE_VERSION "${MODULE_VERSION_MAJOR}.${MODULE_VERSION_MINOR}.${MODULE_VERSION_MICRO}.${MODULE_VERSION_EXTRA}")
+ set(RC_MODULE_VERSION "${MODULE_VERSION_MAJOR},${MODULE_VERSION_MINOR},${MODULE_VERSION_MICRO},${MODULE_VERSION_EXTRA}")
+
+ set(MSVC_VARIANT "${CMAKE_GENERATOR}")
+
+ # Create the plugin.rc file from the template
+ set(_plugin_rc_in ${CMAKE_CURRENT_SOURCE_DIR}/plugin.rc.in)
+ configure_file(${_plugin_rc_in} plugin.rc @ONLY)
+ set(PLUGIN_RC_FILE ${CMAKE_CURRENT_BINARY_DIR}/plugin.rc)
+ endif()
+
+ set(PLUGIN_VERSION "${_ver_major}.${_ver_minor}.${_ver_micro}")
+ add_definitions(-DPLUGIN_VERSION=\"${PLUGIN_VERSION}\")
+ add_definitions(-DVERSION_MAJOR=${Wireshark_VERSION_MAJOR})
+ add_definitions(-DVERSION_MINOR=${Wireshark_VERSION_MINOR})
+endmacro()
+
+macro(ADD_PLUGIN_LIBRARY _plugin _subfolder)
+ add_library(${_plugin} MODULE
+ ${PLUGIN_FILES}
+ ${PLUGIN_RC_FILE}
+ )
+
+ set_target_properties(${_plugin} PROPERTIES
+ PREFIX ""
+ LINK_FLAGS "${WS_LINK_FLAGS}"
+ FOLDER "Plugins"
+ )
+
+ set_target_properties(${_plugin} PROPERTIES
+ LIBRARY_OUTPUT_DIRECTORY ${_subfolder}
+ INSTALL_RPATH ""
+ )
+endmacro()
+
+macro(INSTALL_PLUGIN _plugin _subfolder)
+ install(TARGETS ${_plugin}
+ LIBRARY DESTINATION ${_subfolder} NAMELINK_SKIP
+ )
+ #LIBRARY DESTINATION ${Wireshark_PLUGIN_INSTALL_DIR}/${_subfolder} NAMELINK_SKIP
+ #RUNTIME DESTINATION ${Wireshark_PLUGIN_INSTALL_DIR}
+ #ARCHIVE DESTINATION ${Wireshark_PLUGIN_INSTALL_DIR}
+endmacro()
-########################################################################
-# Compiler specific setup
-########################################################################
-#if(CMAKE_COMPILER_IS_GNUC AND NOT WIN32)
-# #http://gcc.gnu.org/wiki/Visibility
-# add_definitions(-fvisibility=visible)
-#endif()
+find_package(Wireshark CONFIG REQUIRED)
find_package(GLIB2)
-if(NOT GLIB2_FOUND)
- message(FATAL_ERROR "Glib not found")
-endif()
-find_package(Wireshark)
-if(NOT WIRESHARK_FOUND)
- message(FATAL_ERROR "Wireshark dev package not found")
+if(NOT Wireshark_PLUGINS_ENABLED)
+ message(FATAL_ERROR "Wireshark was compiled without support for plugins")
endif()
+if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+ set(CMAKE_INSTALL_PREFIX ${Wireshark_PLUGIN_INSTALL_DIR}
+ CACHE
+ PATH
+ "Default installation path for plugins"
+ FORCE
+ )
+endif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+
+set(UHD_INCLUDE_DIR "${UHD_HOST_ROOT}/include")
+set(UHDLIB_INCLUDE_DIR "${UHD_HOST_ROOT}/lib/include")
-########################################################################
-# Setup the include and linker paths
-########################################################################
include_directories(
- ${CMAKE_BINARY_DIR}
- ${CMAKE_SOURCE_DIR}
+ ${UHD_INCLUDE_DIR}
+ ${UHDLIB_INCLUDE_DIR}
${GLIB2_INCLUDE_DIRS}
- ${WIRESHARK_INCLUDE_DIRS}
+ ${Wireshark_INCLUDE_DIR}
)
-set(CMAKE_INSTALL_LIBDIR ~/.wireshark)
-
-# Set component parameters
-set(ETTUS_DISSECTOR_INCLUDE_DIRS ${CMAKE_SOURCE_DIR} CACHE INTERNAL "" FORCE)
-set(ETTUS_DISSECTOR_NAME "chdr" CACHE STRING "Select a dissector to build")
+WS_REGISTER_COMPONENT("RFNoC" ENABLE_RFNOC ON "" OFF ON)
+WS_REGISTER_COMPONENT("Octoclock" ENABLE_OCTOCLOCK ON "" OFF OFF)
+WS_REGISTER_COMPONENT("ZPU" ENABLE_ZPU ON "" OFF OFF)
-function(generate_ettus_dissector DISSECTOR_NAME)
-
- set(ETTUS_PLUGIN_SRC ${CMAKE_SOURCE_DIR}/packet-${DISSECTOR_NAME}.c)
-
- configure_file(
- ${CMAKE_CURRENT_SOURCE_DIR}/moduleinfo.h.in
- ${CMAKE_BINARY_DIR}/moduleinfo.h
- )
+if(ENABLE_RFNOC)
+ add_subdirectory(epan/rfnoc)
+endif(ENABLE_RFNOC)
- set(PLUGIN_C_GENERATOR ${CMAKE_SOURCE_DIR}/make-dissector-reg.py)
- set(PLUGIN_C plugin.c)
-
- add_custom_command(
- OUTPUT ${PLUGIN_C}
- DEPENDS ${ETTUS_PLUGIN_SRC}
- COMMAND ${PLUGIN_C_GENERATOR} ${CMAKE_SOURCE_DIR} plugin ${ETTUS_PLUGIN_SRC}
- COMMENT "Generating ${PLUGIN_C}"
- )
-
- set(ETTUS_TARGET_NAME "${DISSECTOR_NAME}-plugin")
- add_library(${ETTUS_TARGET_NAME} MODULE
- ${PLUGIN_C}
- moduleinfo.h
- ${ETTUS_PLUGIN_SRC}
- )
- set_target_properties(${ETTUS_TARGET_NAME} PROPERTIES PREFIX "")
- set_target_properties(${ETTUS_TARGET_NAME} PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
- target_link_libraries(${ETTUS_TARGET_NAME} wireshark)
+if(ENABLE_OCTOCLOCK)
+ add_subdirectory(epan/octoclock)
+endif(ENABLE_OCTOCLOCK)
- install(TARGETS ${ETTUS_TARGET_NAME}
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/plugins NAMELINK_SKIP
- )
+if(ENABLE_ZPU)
+ add_subdirectory(epan/zpu)
+endif(ENABLE_ZPU)
-endfunction(generate_ettus_dissector)
+WS_PRINT_COMPONENT_SUMMARY()
-generate_ettus_dissector("${ETTUS_DISSECTOR_NAME}")