diff options
Diffstat (limited to 'wsutil/CMakeLists.txt')
-rw-r--r-- | wsutil/CMakeLists.txt | 494 |
1 files changed, 494 insertions, 0 deletions
diff --git a/wsutil/CMakeLists.txt b/wsutil/CMakeLists.txt new file mode 100644 index 00000000..ba8633e1 --- /dev/null +++ b/wsutil/CMakeLists.txt @@ -0,0 +1,494 @@ +# CMakeLists.txt +# +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# SPDX-License-Identifier: GPL-2.0-or-later +# + +file(TO_NATIVE_PATH "${CMAKE_INSTALL_PREFIX}" PATH_INSTALL_PREFIX) +string(REPLACE "\\" "\\\\" PATH_INSTALL_PREFIX "${PATH_INSTALL_PREFIX}") +file(TO_NATIVE_PATH "${CMAKE_INSTALL_DATADIR}" PATH_DATA_DIR) +string(REPLACE "\\" "\\\\" PATH_DATA_DIR "${PATH_DATA_DIR}") +file(TO_NATIVE_PATH "${CMAKE_INSTALL_DOCDIR}" PATH_DOC_DIR) +string(REPLACE "\\" "\\\\" PATH_DOC_DIR "${PATH_DOC_DIR}") +file(TO_NATIVE_PATH "${PLUGIN_INSTALL_LIBDIR}" PATH_PLUGIN_DIR) +string(REPLACE "\\" "\\\\" PATH_PLUGIN_DIR "${PATH_PLUGIN_DIR}") +file(TO_NATIVE_PATH "${EXTCAP_INSTALL_LIBDIR}" PATH_EXTCAP_DIR) +string(REPLACE "\\" "\\\\" PATH_EXTCAP_DIR "${PATH_EXTCAP_DIR}") + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/path_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/path_config.h) + +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +set(WMEM_PUBLIC_HEADERS + wmem/wmem.h + wmem/wmem_array.h + wmem/wmem_core.h + wmem/wmem_list.h + wmem/wmem_map.h + wmem/wmem_miscutl.h + wmem/wmem_multimap.h + wmem/wmem_queue.h + wmem/wmem_stack.h + wmem/wmem_strbuf.h + wmem/wmem_strutl.h + wmem/wmem_tree.h + wmem/wmem_interval_tree.h + wmem/wmem_user_cb.h +) + +set(WMEM_HEADER_FILES + ${WMEM_PUBLIC_HEADERS} + wmem/wmem_allocator.h + wmem/wmem_allocator_block.h + wmem/wmem_allocator_block_fast.h + wmem/wmem_allocator_simple.h + wmem/wmem_allocator_strict.h + wmem/wmem_interval_tree.h + wmem/wmem_map_int.h + wmem/wmem_tree-int.h + wmem/wmem_user_cb_int.h +) + +set(WMEM_FILES + wmem/wmem_array.c + wmem/wmem_core.c + wmem/wmem_allocator_block.c + wmem/wmem_allocator_block_fast.c + wmem/wmem_allocator_simple.c + wmem/wmem_allocator_strict.c + wmem/wmem_interval_tree.c + wmem/wmem_list.c + wmem/wmem_map.c + wmem/wmem_miscutl.c + wmem/wmem_multimap.c + wmem/wmem_stack.c + wmem/wmem_strbuf.c + wmem/wmem_strutl.c + wmem/wmem_tree.c + wmem/wmem_user_cb.c +) + +set(WSUTIL_PUBLIC_HEADERS + 802_11-utils.h + adler32.h + base32.h + bits_count_ones.h + bits_ctz.h + bitswap.h + buffer.h + clopts_common.h + cmdarg_err.h + codecs.h + color.h + cpu_info.h + crash_info.h + crc5.h + crc6.h + crc7.h + crc8.h + crc10.h + crc11.h + crc16.h + crc16-plain.h + crc32.h + curve25519.h + eax.h + epochs.h + exported_pdu_tlvs.h + feature_list.h + filesystem.h + g711.h + inet_addr.h + inet_ipv4.h + inet_ipv6.h + interface.h + introspection.h + jsmn.h + json_dumper.h + mpeg-audio.h + nstime.h + os_version_info.h + pint.h + please_report_bug.h + pow2.h + privileges.h + processes.h + regex.h + report_message.h + sign_ext.h + sober128.h + socket.h + str_util.h + strnatcmp.h + strtoi.h + tempfile.h + time_util.h + to_str.h + type_util.h + unicode-utils.h + utf8_entities.h + version_info.h + ws_assert.h + ws_cpuid.h + glib-compat.h + ws_getopt.h + ws_mempbrk.h + ws_mempbrk_int.h + ws_pipe.h + ws_roundup.h + ws_strptime.h + wsgcrypt.h + wsjson.h + wslog.h + xtea.h +) + +set(WSUTIL_COMMON_FILES + 802_11-utils.c + adler32.c + base32.c + bitswap.c + buffer.c + clopts_common.c + cmdarg_err.c + codecs.c + crash_info.c + crc10.c + crc16.c + crc16-plain.c + crc32.c + crc5.c + crc6.c + crc7.c + crc8.c + crc11.c + curve25519.c + dot11decrypt_wep.c + eax.c + feature_list.c + filesystem.c + filter_files.c + g711.c + inet_addr.c + interface.c + introspection.c + jsmn.c + json_dumper.c + mpeg-audio.c + nstime.c + cpu_info.c + os_version_info.c + please_report_bug.c + privileges.c + regex.c + rsa.c + sober128.c + socket.c + strnatcmp.c + str_util.c + strtoi.c + report_message.c + tempfile.c + time_util.c + to_str.c + type_util.c + unicode-utils.c + version_info.c + ws_getopt.c + ws_mempbrk.c + ws_pipe.c + ws_strptime.c + wsgcrypt.c + wsjson.c + wslog.c + xtea.c +) + +if(WIN32) + list(APPEND WSUTIL_COMMON_FILES + console_win32.c + ) +endif() + +if(ENABLE_PLUGINS) + list(APPEND WSUTIL_COMMON_FILES + plugins.c + ) +endif() + +set(WSUTIL_FILES + ${WMEM_FILES} + ${WSUTIL_COMMON_FILES} +) + +if(WIN32) + list(APPEND WSUTIL_FILES + file_util.c + win32-utils.c + ) +endif(WIN32) + + +if(HAVE_MACOS_FRAMEWORKS) + list(APPEND WSUTIL_FILES cfutils.c) +endif() + +# +# XXX - we're assuming MSVC doesn't require a flag to enable SSE 4.2 +# support, and that, if the compiler supports a flag for SSE 4.2 +# support, the intrinsics are supported iff we can include the +# <nmmintrin.h> flag. +# +# We only check for the GCC-style -msse4.2 flag and the Sun C +# -xarch=sse4_2 flag. +# +if(CMAKE_C_COMPILER_ID MATCHES "MSVC") + set(COMPILER_CAN_HANDLE_SSE4_2 TRUE) + set(SSE4_2_FLAG "") +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686|x86|x86_64|AMD64") + check_c_compiler_flag(-msse4.2 COMPILER_CAN_HANDLE_SSE4_2) + if(COMPILER_CAN_HANDLE_SSE4_2) + set(SSE4_2_FLAG "-msse4.2") + else() + check_c_compiler_flag(-xarch=sse4_2 COMPILER_CAN_HANDLE_SSE4_2) + if(COMPILER_CAN_HANDLE_SSE4_2) + set(SSE4_2_FLAG "-xarch=sse4_2") + endif() + endif() +else() + set(COMPILE_CAN_HANDLE_SSE4_2 FALSE) + set(SSE4_2_FLAG "") +endif() + +if(SSE4_2_FLAG) + message(STATUS "SSE4.2 compiler flag: ${SSE4_2_FLAG}") +else() + message(STATUS "No SSE4.2 compiler flag enabled") +endif() +if(COMPILER_CAN_HANDLE_SSE4_2) + # + # Make sure we have the necessary headers for the SSE4.2 intrinsics + # and that we can use them. + # + # First, check whether we have emmintrin.h and can use it + # *without* the SSE 4.2 flag. + # + check_include_file("emmintrin.h" EMMINTRIN_H_WORKS) + + # + # OK, if that works, see whether we have nmmintrin.h and + # can use it *with* the SSE 4.2 flag. + # + if(EMMINTRIN_H_WORKS) + # + # Does this add the SSE4.2 flags to the beginning of + # CFLAGS? + # + # Note that if there's a mix of "enable SSE 4.2" and + # "disable SSE 4.2" flags, this may not indicate that + # we can use the header. That's not a bug, that's a + # feature; the other flags may have been forced by + # the build process, e.g. in Gentoo Linux, and we want + # to check this with whatever flags will actually be + # used when building (see bug 10792). + # + cmake_push_check_state() + set(CMAKE_REQUIRED_FLAGS "${SSE4_2_FLAG}") + check_include_file("nmmintrin.h" HAVE_SSE4_2) + cmake_pop_check_state() + endif() +endif() +if(HAVE_SSE4_2) + list(APPEND WSUTIL_FILES ws_mempbrk_sse42.c) +endif() + +if(APPLE) + # + # We assume that APPLE means macOS so that we have the macOS + # frameworks. + # + FIND_LIBRARY (APPLE_CORE_FOUNDATION_LIBRARY CoreFoundation) +endif() + +set_source_files_properties( + ${WSUTIL_FILES} + PROPERTIES + COMPILE_FLAGS "${WERROR_COMMON_FLAGS}" +) + +if (HAVE_SSE4_2) + # TODO with CMake 2.8.12, we could use COMPILE_OPTIONS and just append + # instead of this COMPILE_FLAGS duplication... + set_source_files_properties( + ws_mempbrk_sse42.c + PROPERTIES + COMPILE_FLAGS "${WERROR_COMMON_FLAGS} ${SSE4_2_FLAG}" + ) +endif() + +if (ENABLE_APPLICATION_BUNDLE) + set_source_files_properties( + filesystem.c + PROPERTIES + COMPILE_FLAGS "${WERROR_COMMON_FLAGS} -DENABLE_APPLICATION_BUNDLE" +) +endif() + +add_library(wsutil + ${WSUTIL_FILES} + ${CMAKE_BINARY_DIR}/resources/libwsutil.rc +) + +if(NOT VCSVERSION_OVERRIDE) + add_dependencies(wsutil vcs_version) +endif() + +target_compile_definitions(wsutil PRIVATE + WS_BUILD_DLL + BUILD_WSUTIL +) + +set_target_properties(wsutil PROPERTIES + PREFIX "lib" + LINK_FLAGS "${WS_LINK_FLAGS}" + VERSION "15.0.0" SOVERSION 15 + FOLDER "DLLs" + INSTALL_RPATH "${LIBRARY_INSTALL_RPATH}" +) +if(MSVC) + set_target_properties(wsutil PROPERTIES LINK_FLAGS_DEBUG "${WS_MSVC_DEBUG_LINK_FLAGS}") +endif() + +target_link_libraries(wsutil + PUBLIC + ${GLIB2_LIBRARIES} + PRIVATE + ${GMODULE2_LIBRARIES} + ${APPLE_CORE_FOUNDATION_LIBRARY} + ${CMAKE_DL_LIBS} + ${GCRYPT_LIBRARIES} + ${GNUTLS_LIBRARIES} + ${ZLIB_LIBRARIES} + $<IF:$<CONFIG:Debug>,${PCRE2_DEBUG_LIBRARIES},${PCRE2_LIBRARIES}> + ${WIN_IPHLPAPI_LIBRARY} + ${WIN_WS2_32_LIBRARY} +) + +target_include_directories(wsutil SYSTEM + PUBLIC + ${GLIB2_INCLUDE_DIRS} + ${GCRYPT_INCLUDE_DIRS} + ${GNUTLS_INCLUDE_DIRS} + PRIVATE + ${GMODULE2_INCLUDE_DIRS} + ${ZLIB_INCLUDE_DIRS} + ${PCRE2_INCLUDE_DIRS} +) + +install(TARGETS wsutil + EXPORT WiresharkTargets + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} +) + +install(FILES ${WMEM_PUBLIC_HEADERS} + DESTINATION "${PROJECT_INSTALL_INCLUDEDIR}/wsutil/wmem" + COMPONENT "Development" + EXCLUDE_FROM_ALL +) + +install(FILES ${WSUTIL_PUBLIC_HEADERS} + DESTINATION "${PROJECT_INSTALL_INCLUDEDIR}/wsutil" + COMPONENT "Development" + EXCLUDE_FROM_ALL +) + +add_library(wsutil_static STATIC + ${WSUTIL_FILES} +) + +target_compile_definitions(wsutil_static PRIVATE + ENABLE_STATIC + BUILD_WSUTIL +) + +target_link_libraries(wsutil_static + PUBLIC + ${GLIB2_LIBRARIES} + PRIVATE + ${GMODULE2_LIBRARIES} + ${APPLE_CORE_FOUNDATION_LIBRARY} + ${CMAKE_DL_LIBS} + ${GCRYPT_LIBRARIES} + ${GNUTLS_LIBRARIES} + ${ZLIB_LIBRARIES} + $<IF:$<CONFIG:Debug>,${PCRE2_DEBUG_LIBRARIES},${PCRE2_LIBRARIES}> + ${WIN_IPHLPAPI_LIBRARY} + ${WIN_WS2_32_LIBRARY} +) + +target_include_directories(wsutil_static SYSTEM + PUBLIC + ${GLIB2_INCLUDE_DIRS} + ${GCRYPT_INCLUDE_DIRS} + ${GNUTLS_INCLUDE_DIRS} + PRIVATE + ${GMODULE2_INCLUDE_DIRS} + ${ZLIB_INCLUDE_DIRS} + ${PCRE2_INCLUDE_DIRS} +) + +if(NOT VCSVERSION_OVERRIDE) + add_dependencies(wsutil_static vcs_version) +endif() + +add_executable(wmem_test EXCLUDE_FROM_ALL wmem/wmem_test.c ${WMEM_FILES}) + +target_link_libraries(wmem_test wsutil) + +set_target_properties(wmem_test PROPERTIES + FOLDER "Tests" + EXCLUDE_FROM_DEFAULT_BUILD True + COMPILE_DEFINITIONS "WS_BUILD_DLL" + COMPILE_FLAGS "${WERROR_COMMON_FLAGS}" +) + +add_executable(test_wsutil EXCLUDE_FROM_ALL + test_wsutil.c +) + +target_link_libraries(test_wsutil ${GLIB2_LIBRARIES} wsutil) + +set_target_properties(test_wsutil PROPERTIES + FOLDER "Tests" + EXCLUDE_FROM_DEFAULT_BUILD True + COMPILE_FLAGS "${WERROR_COMMON_FLAGS}" +) + +CHECKAPI( + NAME + wsutil + SWITCHES + SOURCES + ${WMEM_FILES} + ${WSUTIL_COMMON_FILES} +) + +set_source_files_properties(jsmn.c PROPERTIES COMPILE_DEFINITIONS "JSMN_STRICT") + +# +# Editor modelines - https://www.wireshark.org/tools/modelines.html +# +# Local variables: +# c-basic-offset: 8 +# tab-width: 8 +# indent-tabs-mode: t +# End: +# +# vi: set shiftwidth=8 tabstop=8 noexpandtab: +# :indentSize=8:tabSize=8:noTabs=false: +# |