From b1af35d6c0cc4efd2fbb2585921407d247f6aff2 Mon Sep 17 00:00:00 2001 From: Dmitri Tikhonov Date: Fri, 1 Feb 2019 02:12:06 -0500 Subject: [PATCH] Simplify configuration -- use more cmake functions (#62) --- .cirrus.yml | 4 +- .travis.yml | 4 +- CMakeLists.txt | 111 ++++++++++++++++++++++++---------- test/unittests/CMakeLists.txt | 12 ++-- 4 files changed, 85 insertions(+), 46 deletions(-) diff --git a/.cirrus.yml b/.cirrus.yml index f5c6c73..dfc4f69 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -11,10 +11,8 @@ task: - git checkout 32e59d2d3264e4e104b355ef73663b8b79ac4093 - cmake . - make - - ln -s ssl/libssl.a - - ln -s crypto/libcrypto.a - cd - script: - - cmake -DBORINGSSL_INCLUDE=$PWD/boringssl/include -DBORINGSSL_LIB=$PWD/boringssl . + - cmake -DBORINGSSL_DIR=$PWD/boringssl . - make - make test diff --git a/.travis.yml b/.travis.yml index da3aee2..da7b00b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,10 +26,8 @@ before_script: - git checkout 32e59d2d3264e4e104b355ef73663b8b79ac4093 - cmake . - make - - ln -s ssl/libssl.a - - ln -s crypto/libcrypto.a - cd - - - cmake -DBORINGSSL_INCLUDE=$PWD/boringssl/include -DBORINGSSL_LIB=$PWD/boringssl . + - cmake -DBORINGSSL_DIR=$PWD/boringssl . script: # Now build lsquic-client - make diff --git a/CMakeLists.txt b/CMakeLists.txt index 2808a40..e512f6e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,20 +2,7 @@ cmake_minimum_required(VERSION 2.8) -project(lsquic) - -IF (NOT MSVC) -# We prefer clang -IF(NOT ("${CMAKE_C_COMPILER}" MATCHES "ccc-analyzer" OR - "${CMAKE_C_COMPILER}" MATCHES "gcc" OR - "${CMAKE_C_COMPILER}" MATCHES "afl-gcc")) - FIND_PROGRAM(CLANG "clang") - IF(CLANG) - SET(CMAKE_C_COMPILER "${CLANG}") - ENDIF() -ENDIF() - -ENDIF() +PROJECT(lsquic C) IF (CMAKE_SYSTEM_NAME STREQUAL "Linux") # If using older glibc, need to link with -lrt. See clock_getres(2). @@ -94,25 +81,84 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MY_CMAKE_FLAGS} $ENV{EXTRA_CFLAGS}") MESSAGE(STATUS "Compiler flags: ${CMAKE_C_FLAGS}") -IF(NOT DEFINED BORINGSSL_INCLUDE) - SET(BORINGSSL_INCLUDE /usr/local/include) -ENDIF() -IF(NOT DEFINED BORINGSSL_LIB) - SET(BORINGSSL_LIB /usr/local/lib) +# This must be done before adding other include directories to take +# precedence over header files from other SSL installs. +FIND_PATH(BORINGSSL_INCLUDE_DIR NAMES openssl/ssl.h + PATHS ${BORINGSSL_DIR}/include + NO_DEFAULT_PATH) +IF (BORINGSSL_INCLUDE_DIR) + MESSAGE(STATUS "BoringSSL include directory ${BORINGSSL_INCLUDE_DIR}") + INCLUDE_DIRECTORIES(${BORINGSSL_INCLUDE_DIR}) +ELSE() + MESSAGE(FATAL_ERROR "BoringSSL headers not found") ENDIF() +FOREACH(BORINGSSL_LIB ssl crypto decrepit) + IF (CMAKE_SYSTEM_NAME STREQUAL Windows) + FIND_LIBRARY(BORINGSSL_LIB_${BORINGSSL_LIB} + NAMES ${BORINGSSL_LIB} + PATHS ${BORINGSSL_DIR}/${BORINGSSL_LIB} + PATH_SUFFIXES Debug Release MinSizeRel RelWithDebInfo + NO_DEFAULT_PATH) + ELSE() + FIND_LIBRARY(BORINGSSL_LIB_${BORINGSSL_LIB} + NAMES lib${BORINGSSL_LIB}.a + PATHS ${BORINGSSL_DIR}/${BORINGSSL_LIB} + NO_DEFAULT_PATH) + ENDIF() + IF(BORINGSSL_LIB_${BORINGSSL_LIB}) + MESSAGE(STATUS "Found ${BORINGSSL_LIB} library: ${BORINGSSL_LIB_${BORINGSSL_LIB}}") + ELSE() + MESSAGE(STATUS "${BORINGSSL_LIB} library not found") + ENDIF() +ENDFOREACH() -include_directories(${BORINGSSL_INCLUDE} ${VCPKG_INCLUDE}) -link_directories( ${BORINGSSL_LIB} ) +IF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR CMAKE_SYSTEM_NAME STREQUAL "Darwin") + # Find libevent on FreeBSD: + INCLUDE_DIRECTORIES( /usr/local/include ) + LINK_DIRECTORIES( /usr/local/lib ) +ENDIF() + +# Find zlib and libevent header files and library files +# TODO: libevent is not strictly necessary to build the library. +FIND_PATH(ZLIB_INCLUDE_DIR NAMES zlib.h) +IF (ZLIB_INCLUDE_DIR) + INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR}) +ELSE() + MESSAGE(FATAL_ERROR "zlib.h was not found") +ENDIF() +IF (CMAKE_SYSTEM_NAME STREQUAL Windows) + FIND_LIBRARY(ZLIB_LIB zlib) +ELSEIF(CMAKE_SYSTEM_NAME STREQUAL Darwin) + # XXX somehow FIND_LIBRARY() does not find zlib on Travis? + SET(ZLIB_LIB z) +ELSE() + FIND_LIBRARY(ZLIB_LIB libz.a) +ENDIF() +IF(ZLIB_LIB) + MESSAGE(STATUS "Found zlib: ${ZLIB_LIB}") +ELSE() + MESSAGE(STATUS "zlib not found") +ENDIF() +FIND_PATH(EVENT_INCLUDE_DIR NAMES event2/event.h) +IF (EVENT_INCLUDE_DIR) + INCLUDE_DIRECTORIES(${EVENT_INCLUDE_DIR}) +ELSE() + MESSAGE(FATAL_ERROR "event2/event.h was not found") +ENDIF() +IF (CMAKE_SYSTEM_NAME STREQUAL Windows) + FIND_LIBRARY(EVENT_LIB event) +ELSE() + FIND_LIBRARY(EVENT_LIB libevent.a) +ENDIF() +IF(EVENT_LIB) + MESSAGE(STATUS "Found event: ${EVENT_LIB}") +ELSE() + MESSAGE(STATUS "libevent not found") +ENDIF() SET(CMAKE_INCLUDE_CURRENT_DIR ON) include_directories( include src/lshpack) -IF(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" OR ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - # Find libevent on FreeBSD: - include_directories( /usr/local/include ) - link_directories( /usr/local/lib ) -ENDIF() - IF (NOT MSVC) add_executable(http_client @@ -120,7 +166,8 @@ add_executable(http_client test/prog.c test/test_common.c ) -target_link_libraries(http_client lsquic event pthread libssl.a libcrypto.a ${LIBS} z m) +TARGET_LINK_LIBRARIES(http_client lsquic ${EVENT_LIB} pthread + ${BORINGSSL_LIB_ssl} ${BORINGSSL_LIB_crypto} ${LIBS} ${ZLIB_LIB} m) #MSVC ELSE() @@ -134,10 +181,10 @@ add_executable(http_client target_link_libraries(http_client lsquic - ${VCPKG_LIB}/event.lib - ${VCPKG_LIB}/zlib.lib - ${BORINGSSL_LIB}/ssl.lib - ${BORINGSSL_LIB}/crypto.lib + ${EVENT_LIB} + ${ZLIB_LIB} + ${BORINGSSL_LIB_ssl} + ${BORINGSSL_LIB_crypto} ws2_32 ${LIBS} ) diff --git a/test/unittests/CMakeLists.txt b/test/unittests/CMakeLists.txt index a94f866..30e0e22 100644 --- a/test/unittests/CMakeLists.txt +++ b/test/unittests/CMakeLists.txt @@ -4,19 +4,15 @@ INCLUDE_DIRECTORIES(../../src/liblsquic) ENABLE_TESTING() +SET(LIBS lsquic ${BORINGSSL_LIB_crypto} ${BORINGSSL_LIB_ssl} ${ZLIB_LIB}) + IF (MSVC) - SET(LIBS - lsquic - ${VCPKG_LIB}/event.lib - ${VCPKG_LIB}/zlib.lib - ${BORINGSSL_LIB}/ssl.lib - ${BORINGSSL_LIB}/crypto.lib - ws2_32) + LIST(APPEND LIBS ws2_32) SET(ADDL_SOURCES ../../wincompat/getopt.c ../../wincompat/getopt1.c) SET(LIB_FLAGS "-FORCE:MULTIPLE") ELSE() SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-value") - SET(LIBS lsquic libcrypto.a libssl.a z m pthread) + LIST(APPEND LIBS m pthread) ENDIF() SET(TESTS