From 07c505142889ea889583d917df88eb63bec47b6e Mon Sep 17 00:00:00 2001 From: Wu Zhao Date: Thu, 9 Nov 2023 15:24:58 +0800 Subject: [PATCH] [!] fix compile error on macos (#357) * [!] fix compile error on macos as macOS update to openssl v3, of which the header files are conflict with boringssl and babassl used by XQUIC --- CMakeLists.txt | 46 +++++++++++++++++++++++----------------- cmake/FindLibEvent.cmake | 45 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 20 deletions(-) create mode 100644 cmake/FindLibEvent.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 304b635d3..ee56ef36f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,10 +65,10 @@ if(NOT SSL_INC_PATH) ) endif() -MESSAGE("SSL_TYPE= ${SSL_TYPE}") -MESSAGE("SSL_PATH= ${SSL_PATH}") -MESSAGE("SSL_LIB_PATH= ${SSL_LIB_PATH}") -MESSAGE("SSL_INC_PATH= ${SSL_INC_PATH}") +MESSAGE("-- SSL_TYPE: ${SSL_TYPE}") +MESSAGE("-- SSL_PATH: ${SSL_PATH}") +MESSAGE("-- SSL_LIB_PATH: ${SSL_LIB_PATH}") +MESSAGE("-- SSL_INC_PATH: ${SSL_INC_PATH}") # print tls traffic secret in keylog if(XQC_PRINT_SECRET) @@ -130,7 +130,6 @@ configure_file ( include_directories( include - /usr/local/include "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/include" ) @@ -334,7 +333,6 @@ else() endif() - # Strip binary for release builds if(CMAKE_BUILD_TYPE STREQUAL MinSizeRel) add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD @@ -348,6 +346,7 @@ include_directories(${CMAKE_SOURCE_DIR}/) ##### build unittest, test client/server, demo client/server ##### if (XQC_ENABLE_TESTING) + # CUnit TODO: fix test unit on windows find_package(CUnit 2.1) enable_testing() @@ -356,6 +355,14 @@ if (XQC_ENABLE_TESTING) add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) endif() + # find LibEvent include and library path + find_package(LibEvent 2.0.21) + if(NOT LIBEVENT_FOUND) + message(FATAL_ERROR "libevent with required version not found") + endif() + include_directories(${LIBEVENT_INCLUDE_DIR}) + + # add tests add_subdirectory(tests) include_directories(${CMAKE_CURRENT_BINARY_DIR}/test) @@ -398,6 +405,7 @@ if (XQC_ENABLE_TESTING) add_executable(demo_server ${DEMO_SERVER_SOURCES} ${GETOPT_SOURCES}) add_executable(demo_client ${DEMO_CLIENT_SOURCES} ${GETOPT_SOURCES}) + if(CMAKE_SYSTEM_NAME MATCHES "Windows") if (NOT EVENT_LIB_DIR) message("YOU NEED SET -DEVENT_LIB_DIR=your_event_path, eg:-DEVENT_LIB_DIR=D:/project/vcpkg/packages/libevent_x64-windows-static") @@ -411,30 +419,28 @@ if (XQC_ENABLE_TESTING) ${EVENT_LIB_DIR}/lib/event_core.lib ${EVENT_LIB_DIR}/lib/event_extra.lib ) - else() - link_directories( /usr/local/lib ) endif() if(PLATFORM STREQUAL "mac32") - target_link_libraries(test_server xquic-static ${SSL_LIB_PATH} -ldl -lpthread -lm ${CMAKE_CURRENT_SOURCE_DIR}/../libevent32/lib/libevent.dylib) - target_link_libraries(test_client xquic-static ${SSL_LIB_PATH} -ldl -lpthread -lm ${CMAKE_CURRENT_SOURCE_DIR}/../libevent32/lib/libevent.dylib) - target_link_libraries(demo_server xquic -lm ${CMAKE_CURRENT_SOURCE_DIR}/../libevent32/lib/libevent.dylib) - target_link_libraries(demo_client xquic -lm ${CMAKE_CURRENT_SOURCE_DIR}/../libevent32/lib/libevent.dylib) + target_link_libraries(test_server xquic-static ${SSL_LIB_PATH} -ldl -lpthread -lm ${LIBEVENT_LIBRARY}) + target_link_libraries(test_client xquic-static ${SSL_LIB_PATH} -ldl -lpthread -lm ${LIBEVENT_LIBRARY}) + target_link_libraries(demo_server xquic -lm ${LIBEVENT_LIBRARY}) + target_link_libraries(demo_client xquic -lm ${LIBEVENT_LIBRARY}) elseif(PLATFORM STREQUAL "mac") - target_link_libraries(test_server xquic-static ${SSL_LIB_PATH} -ldl -lpthread -lm -L/usr/local/lib -levent) - target_link_libraries(test_client xquic-static ${SSL_LIB_PATH} -ldl -lpthread -lm -L/usr/local/lib -levent) - target_link_libraries(demo_server xquic -lm -L/usr/local/lib -levent) - target_link_libraries(demo_client xquic -lm -L/usr/local/lib -levent) + target_link_libraries(test_server xquic-static ${SSL_LIB_PATH} -ldl -lpthread -lm ${LIBEVENT_LIBRARY}) + target_link_libraries(test_client xquic-static ${SSL_LIB_PATH} -ldl -lpthread -lm ${LIBEVENT_LIBRARY}) + target_link_libraries(demo_server xquic -lm ${LIBEVENT_LIBRARY}) + target_link_libraries(demo_client xquic -lm ${LIBEVENT_LIBRARY}) elseif(CMAKE_SYSTEM_NAME MATCHES "Windows") target_link_libraries(test_server xquic ${EVENT_LIB_PATH} -lm) target_link_libraries(test_client xquic ${EVENT_LIB_PATH} -lm) target_link_libraries(demo_server xquic ${EVENT_LIB_PATH} -lm) target_link_libraries(demo_client xquic ${EVENT_LIB_PATH} -lm) else() - target_link_libraries(test_server xquic-static ${SSL_LIB_PATH} -ldl -lpthread -levent -lm) - target_link_libraries(test_client xquic-static ${SSL_LIB_PATH} -ldl -lpthread -levent -lm) - target_link_libraries(demo_server xquic -levent -lm) - target_link_libraries(demo_client xquic -levent -lm) + target_link_libraries(test_server xquic-static ${SSL_LIB_PATH} -ldl -lpthread -lm ${LIBEVENT_LIBRARY}) + target_link_libraries(test_client xquic-static ${SSL_LIB_PATH} -ldl -lpthread -lm ${LIBEVENT_LIBRARY}) + target_link_libraries(demo_server xquic ${LIBEVENT_LIBRARY} -lm) + target_link_libraries(demo_client xquic ${LIBEVENT_LIBRARY} -lm) endif() endif() diff --git a/cmake/FindLibEvent.cmake b/cmake/FindLibEvent.cmake new file mode 100644 index 000000000..fb859db81 --- /dev/null +++ b/cmake/FindLibEvent.cmake @@ -0,0 +1,45 @@ +# find the LibEvent library + +# find include dir +find_path (LIBEVENT_INCLUDE_DIR NAMES event.h) + +# find dynamic library +find_library (LIBEVENT_LIBRARY NAMES event) +find_library (LIBEVENT_SSL NAMES event_openssl) +find_library (LIBEVENT_CORE NAMES event_core) +find_library (LIBEVENT_EXTRA NAMES event_extra) +find_library (LIBEVENT_THREAD NAMES event_pthreads) + +# find version +if(LIBEVENT_INCLUDE_DIR) + set(_version_regex + "^#define[ ]+[EVENT__VERSION|_EVENT_VERSION]+[ ]+\"([^\"]+)\"") + file(STRINGS "${LIBEVENT_INCLUDE_DIR}/event2/event-config.h" + LIBEVENT_VERSION REGEX "${_version_regex}") + string(REGEX REPLACE "${_version_regex}" "\\1" + LIBEVENT_VERSION "${LIBEVENT_VERSION}") + unset(_version_regex) +endif() + + +include (FindPackageHandleStandardArgs) +set (LIBEVENT_INCLUDE_DIRS ${LIBEVENT_INCLUDE_DIR}) +set (LIBEVENT_LIBRARIES + ${LIBEVENT_LIBRARY} + ${LIBEVENT_SSL} + ${LIBEVENT_CORE} + ${LIBEVENT_EXTRA} + ${LIBEVENT_THREAD}) + +find_package_handle_standard_args(LibEvent + REQUIRED_VARS + LIBEVENT_INCLUDE_DIR + LIBEVENT_LIBRARY + LIBEVENT_LIBRARIES + VERSION_VAR LIBEVENT_VERSION +) + +mark_as_advanced( + LIBEVENT_INCLUDE_DIRS + LIBEVENT_LIBRARIES +)