CMakeLists.txt revision 1e75f938
1# Copyright (c) 2017 - 2018 LiteSpeed Technologies Inc. See LICENSE. 2cmake_minimum_required(VERSION 2.8) 3 4 5project(lsquic) 6 7IF (NOT MSVC) 8# We prefer clang 9IF(NOT ("${CMAKE_C_COMPILER}" MATCHES "ccc-analyzer" OR 10 "${CMAKE_C_COMPILER}" MATCHES "gcc" OR 11 "${CMAKE_C_COMPILER}" MATCHES "afl-gcc")) 12 FIND_PROGRAM(CLANG "clang") 13 IF(CLANG) 14 SET(CMAKE_C_COMPILER "${CLANG}") 15 ENDIF() 16ENDIF() 17 18ENDIF() 19 20# If using older glibc, need to link with -lrt. See clock_getres(2). 21EXECUTE_PROCESS( 22 COMMAND ${PROJECT_SOURCE_DIR}/print-glibc-version.sh ${CMAKE_C_COMPILER} 23 OUTPUT_VARIABLE GLIBC_VERSION) 24IF(NOT GLIBC_VERSION EQUAL "" AND GLIBC_VERSION VERSION_LESS 2.17) 25 SET(LIBS ${LIBS} rt) 26ENDIF() 27 28IF("${CMAKE_BUILD_TYPE}" STREQUAL "") 29 SET(CMAKE_BUILD_TYPE Debug) 30ENDIF() 31 32 33MESSAGE(STATUS "Build type: ${CMAKE_BUILD_TYPE}") 34 35 36IF (NOT MSVC) 37 38SET(MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -Wall -Wextra -Wno-unused-parameter") 39SET(MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -fno-omit-frame-pointer") 40 41IF(CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9.3) 42 SET(MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -Wno-missing-field-initializers") 43ENDIF() 44IF(CMAKE_BUILD_TYPE STREQUAL "Debug") 45 SET(MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -O0 -g3") 46 IF(CMAKE_C_COMPILER MATCHES "clang" AND 47 NOT "$ENV{TRAVIS}" MATCHES "^true$") 48 SET(MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -fsanitize=address") 49 ENDIF() 50 # Uncomment to enable fault injection testing via libfiu: 51 #SET (MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -DFIU_ENABLE=1") 52 #SET(LIBS ${LIBS} fiu) 53ELSE() 54 SET(MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -O3 -g0") 55 SET(MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -DNDEBUG") 56 # Comment out the following line to compile out debug messages: 57 #SET(MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -DLSQUIC_LOWEST_LOG_LEVEL=LSQ_LOG_INFO") 58ENDIF() 59 60IF(LSQUIC_PROFILE EQUAL 1) 61 SET(MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -g -pg") 62ENDIF() 63 64IF(LSQUIC_COVERAGE EQUAL 1) 65 SET(MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -fprofile-arcs -ftest-coverage") 66ENDIF() 67 68IF(MY_CMAKE_FLAGS MATCHES "fsanitize=address") 69 MESSAGE(STATUS "AddressSanitizer is ON") 70ELSE() 71 MESSAGE(STATUS "AddressSanitizer is OFF") 72ENDIF() 73 74#MSVC 75ELSE() 76SET(MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -W4 -WX -Zi -DWIN32_LEAN_AND_MEAN -DNOMINMAX -D_CRT_SECURE_NO_WARNINGS -I${CMAKE_CURRENT_SOURCE_DIR}/wincompat") 77IF(CMAKE_BUILD_TYPE STREQUAL "Debug") 78 SET(MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -Od") 79 #SET (MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -DFIU_ENABLE=1") 80 #SET(LIBS ${LIBS} fiu) 81ELSE() 82 SET(MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -Ox") 83 SET(MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -DNDEBUG") 84 # Comment out the following line to compile out debug messages: 85 #SET(MY_CMAKE_FLAGS "${MY_CMAKE_FLAGS} -DLSQUIC_LOWEST_LOG_LEVEL=LSQ_LOG_INFO") 86ENDIF() 87 88SET (BORINGSSL_INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/../boringssl/include) 89SET (VCPKG_INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/../vcpkg/installed/x64-windows-static/include ) 90set (BORINGSSL_BASE_LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../boringssl) 91 92SET (VCPKG_BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../vcpkg/installed/x64-windows-static) 93 94ENDIF() #MSVC 95 96set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MY_CMAKE_FLAGS} $ENV{EXTRA_CFLAGS}") 97 98MESSAGE(STATUS "Compiler flags: ${CMAKE_C_FLAGS}") 99 100IF(NOT DEFINED BORINGSSL_INCLUDE) 101 SET(BORINGSSL_INCLUDE /usr/local/include) 102ENDIF() 103IF(NOT DEFINED BORINGSSL_LIB) 104 SET(BORINGSSL_LIB /usr/local/lib) 105ENDIF() 106 107 108include_directories(${BORINGSSL_INCLUDE} ${VCPKG_INCLUDE} ) 109link_directories( ${BORINGSSL_LIB} ) 110 111SET(CMAKE_INCLUDE_CURRENT_DIR ON) 112include_directories( include src/lshpack) 113IF(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" OR ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") 114 # Find libevent on FreeBSD: 115 include_directories( /usr/local/include ) 116 link_directories( /usr/local/lib ) 117ENDIF() 118 119 120IF (NOT MSVC) 121add_executable(http_client 122 test/http_client.c 123 test/prog.c 124 test/test_common.c 125) 126target_link_libraries(http_client lsquic event pthread libssl.a libcrypto.a ${LIBS} z m) 127 128#MSVC 129ELSE() 130add_executable(http_client 131 test/http_client.c 132 test/prog.c 133 test/test_common.c 134 wincompat/getopt.c 135 wincompat/getopt1.c 136) 137 138target_link_libraries(http_client 139 debug $(SolutionDir)src/liblsquic/debug/lsquic.lib 140 debug ${VCPKG_BASE_DIR}/debug/lib/event.lib 141 debug ${VCPKG_BASE_DIR}/debug/lib/zlibd.lib 142 debug ${BORINGSSL_BASE_LIB_DIR}/ssl/debug/ssl.lib 143 debug ${BORINGSSL_BASE_LIB_DIR}/crypto/debug/crypto.lib 144 ws2_32 145 optimized $(SolutionDir)src/liblsquic/release/lsquic.lib 146 optimized ${VCPKG_BASE_DIR}/lib/event.lib 147 optimized ${VCPKG_BASE_DIR}/lib/zlib.lib 148 optimized ${BORINGSSL_BASE_LIB_DIR}/ssl/release/ssl.lib 149 optimized ${BORINGSSL_BASE_LIB_DIR}/crypto/release/crypto.lib 150 ${LIBS} ) 151 152ENDIF() 153 154#target_link_libraries(http_client lsquic event pthread libssl.a libcrypto.a ${LIBS} z m) 155 156add_subdirectory(src) 157 158add_subdirectory(test) 159 160IF(NOT (CMAKE_C_FLAGS MATCHES "-DNDEBUG")) 161 # Our test framework relies on assertions, only compile if assertions are 162 # enabled. 163 # 164 enable_testing() 165ENDIF() 166 167 168ADD_CUSTOM_TARGET(docs doxygen dox.cfg) 169