204 lines
8.3 KiB
CMake
204 lines
8.3 KiB
CMake
set(CMAKE_LEGACY_CYGWIN_WIN32 0)
|
|
cmake_minimum_required(VERSION 2.6)
|
|
|
|
enable_testing()
|
|
|
|
set(WARNINGS)
|
|
set(ANDROID_STL_FLAGS)
|
|
|
|
# Platform (not compiler) specific settings
|
|
if(IOS)
|
|
set(IOS_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../Build_iOS")
|
|
set(Boost_FRAMEWORK "-F ${IOS_SOURCE_DIR} -framework boost")
|
|
set(Boost_INCLUDE_DIR "${IOS_SOURCE_DIR}/boost.framework/Headers")
|
|
|
|
set(OPENSSL_FOUND 1)
|
|
set(OPENSSL_INCLUDE_DIR "${IOS_SOURCE_DIR}/openssl/include")
|
|
set(OPENSSL_LIBRARIES
|
|
"${IOS_SOURCE_DIR}/openssl/lib/libcrypto.a"
|
|
"${IOS_SOURCE_DIR}/openssl/lib/libssl.a"
|
|
)
|
|
|
|
# The cxx_flags must be reset here, because the ios-cmake toolchain file unfortunately sets "-headerpad_max_install_names" which is not a valid clang flag.
|
|
set(CMAKE_CXX_FLAGS "-fvisibility=hidden -fvisibility-inlines-hidden")
|
|
|
|
set(BUILD_SHARED_LIBS OFF)
|
|
set(BUILD_SAMPLES OFF)
|
|
option(BUILD_TESTS "Build tests." ON)
|
|
elseif(ANDROID)
|
|
set(Boost_COMPILER "-clang")
|
|
set(Boost_USE_STATIC_LIBS ON)
|
|
if(ARM)
|
|
set(BOOST_ROOT "${CMAKE_BINARY_DIR}/../Boost-for-Android/build")
|
|
set(BOOST_LIBRARYDIR "${CMAKE_BINARY_DIR}/../Boost-for-Android/build/lib")
|
|
else()
|
|
set(BOOST_ROOT "${CMAKE_BINARY_DIR}/../Boost-for-Android-x86/build")
|
|
set(BOOST_LIBRARYDIR "${CMAKE_BINARY_DIR}/../Boost-for-Android-x86/build/lib")
|
|
endif()
|
|
find_host_package(Boost 1.55 EXACT REQUIRED COMPONENTS random system thread filesystem chrono atomic)
|
|
|
|
set(OPENSSL_FOUND 1)
|
|
if(ARM)
|
|
set(OPENSSL_INCLUDE_DIR "${CMAKE_BINARY_DIR}/../openssl/armeabi-v7a/include")
|
|
set(OPENSSL_LIBRARIES
|
|
"${CMAKE_BINARY_DIR}/../openssl/armeabi-v7a/lib/libssl.a"
|
|
"${CMAKE_BINARY_DIR}/../openssl/armeabi-v7a/lib/libcrypto.a"
|
|
)
|
|
else()
|
|
set(OPENSSL_INCLUDE_DIR "${CMAKE_BINARY_DIR}/../openssl/x86/include")
|
|
set(OPENSSL_LIBRARIES
|
|
"${CMAKE_BINARY_DIR}/../openssl/x86/lib/libssl.a"
|
|
"${CMAKE_BINARY_DIR}/../openssl/x86/lib/libcrypto.a"
|
|
)
|
|
endif()
|
|
|
|
if(ARM)
|
|
set(LIBCXX_STL "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/thumb/libgnustl_static.a")
|
|
else()
|
|
set(LIBCXX_STL "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/4.8/libs/x86/libgnustl_static.a")
|
|
endif()
|
|
# These are used in the shared library case
|
|
set(ANDROID_STL_FLAGS
|
|
${LIBCXX_STL}
|
|
atomic
|
|
dl
|
|
gcc
|
|
c
|
|
m
|
|
-nodefaultlibs
|
|
)
|
|
|
|
option(BUILD_SHARED_LIBS "Build shared Libraries." OFF)
|
|
set(BUILD_SAMPLES OFF)
|
|
option(BUILD_TESTS "Build tests." ON)
|
|
elseif(UNIX) # This includes OSX
|
|
find_package(Boost REQUIRED COMPONENTS random chrono system thread regex filesystem)
|
|
find_package(Threads REQUIRED)
|
|
if(APPLE AND NOT OPENSSL_ROOT_DIR)
|
|
# Prefer a homebrew version of OpenSSL over the one in /usr/lib
|
|
file(GLOB OPENSSL_ROOT_DIR /usr/local/Cellar/openssl/*)
|
|
# Prefer the latest (make the latest one first)
|
|
list(REVERSE OPENSSL_ROOT_DIR)
|
|
endif()
|
|
# This should prevent linking against the system provided 0.9.8y
|
|
set(_OPENSSL_VERSION "")
|
|
find_package(OpenSSL 1.0.0 REQUIRED)
|
|
|
|
option(BUILD_SHARED_LIBS "Build shared Libraries." ON)
|
|
option(BUILD_TESTS "Build tests." OFF)
|
|
option(BUILD_SAMPLES "Build samples." OFF)
|
|
option(CASA_INSTALL_HEADERS "Install header files." ON)
|
|
if(CASA_INSTALL_HEADERS)
|
|
file(GLOB CASA_HEADERS_CPPREST include/cpprest/*.hpp include/cpprest/*.h include/cpprest/*.dat)
|
|
install(FILES ${CASA_HEADERS_CPPREST} DESTINATION include/cpprest)
|
|
file(GLOB CASA_HEADERS_PPLX include/pplx/*.hpp include/pplx/*.h)
|
|
install(FILES ${CASA_HEADERS_PPLX} DESTINATION include/pplx)
|
|
file(GLOB CASA_HEADERS_DETAILS include/cpprest/details/*.hpp include/cpprest/details/*.h include/cpprest/details/*.dat)
|
|
install(FILES ${CASA_HEADERS_DETAILS} DESTINATION include/cpprest/details)
|
|
endif()
|
|
elseif(WIN32)
|
|
option(BUILD_SHARED_LIBS "Build shared Libraries." ON)
|
|
option(BUILD_TESTS "Build tests." ON)
|
|
option(BUILD_SAMPLES "Build samples." ON)
|
|
option(Boost_USE_STATIC_LIBS ON)
|
|
|
|
add_definitions(-DUNICODE -D_UNICODE)
|
|
|
|
if(NOT BUILD_SHARED_LIBS)
|
|
# This causes cmake to not link the test libraries separately, but instead hold onto their object files.
|
|
set(TEST_LIBRARY_TARGET_TYPE OBJECT)
|
|
set(Casablanca_DEFINITIONS -D_NO_ASYNCRTIMP -D_NO_PPLXIMP CACHE INTERNAL "Definitions for consume casablanca library")
|
|
else()
|
|
set(Casablanca_DEFINITIONS "" CACHE INTERNAL "Definitions for consume casablanca library")
|
|
endif()
|
|
add_definitions(${Casablanca_DEFINITIONS} -D_WINSOCK_DEPRECATED_NO_WARNINGS -DWIN32)
|
|
|
|
find_package(Boost 1.55 REQUIRED COMPONENTS random system thread filesystem chrono atomic)
|
|
find_package(OpenSSL 1.0 REQUIRED)
|
|
else()
|
|
message(FATAL_ERROR "-- Unsupported Build Platform.")
|
|
endif()
|
|
|
|
# Compiler (not platform) specific settings
|
|
if(ANDROID)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fno-strict-aliasing")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-pedantic")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-attributes -Wno-pointer-arith")
|
|
include_directories(
|
|
"${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/4.8/include"
|
|
"${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/include"
|
|
"${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/4.8/include/backward"
|
|
)
|
|
elseif((CMAKE_CXX_COMPILER_ID MATCHES "Clang") OR IOS)
|
|
message("-- Setting clang options")
|
|
|
|
set(WARNINGS "-Wall -Wextra -Wcast-qual -Wconversion -Wformat=2 -Winit-self -Winvalid-pch -Wmissing-format-attribute -Wmissing-include-dirs -Wpacked -Wredundant-decls")
|
|
set(OSX_SUPPRESSIONS "-Wno-overloaded-virtual -Wno-sign-conversion -Wno-deprecated -Wno-unknown-pragmas -Wno-reorder -Wno-char-subscripts -Wno-switch -Wno-unused-parameter -Wno-unused-variable -Wno-deprecated -Wno-unused-value -Wno-unknown-warning-option -Wno-return-type-c-linkage -Wno-unused-function -Wno-sign-compare -Wno-shorten-64-to-32 -Wno-reorder")
|
|
set(WARNINGS "${WARNINGS} ${OSX_SUPPRESSIONS}")
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -Wno-return-type-c-linkage -Wno-unneeded-internal-declaration")
|
|
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
|
|
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11")
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fno-strict-aliasing")
|
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
|
message("-- Setting gcc options")
|
|
|
|
set(WARNINGS "-Wall -Wextra -Wunused-parameter -Wcast-align -Wcast-qual -Wconversion -Wformat=2 -Winit-self -Winvalid-pch -Wmissing-format-attribute -Wmissing-include-dirs -Wpacked -Wredundant-decls -Wunreachable-code")
|
|
|
|
set(LD_FLAGS "${LD_FLAGS} -Wl,-z,defs")
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fno-strict-aliasing")
|
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
|
message("-- Setting msvc options")
|
|
set(WARNINGS)
|
|
else()
|
|
message("-- Unknown compiler, success is doubtful.")
|
|
message("CMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID}")
|
|
endif()
|
|
|
|
# Reconfigure final output directory
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/Binaries)
|
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/Binaries)
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/Binaries)
|
|
|
|
# These settings can be used by the test targets
|
|
set(Casablanca_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
|
set(Casablanca_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include ${Boost_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/libs/websocketpp)
|
|
|
|
set(Casablanca_LIBRARY ${LIB}cpprest)
|
|
set(Casablanca_LIBRARIES ${Casablanca_LIBRARY} ${Boost_LIBRARIES} ${Boost_FRAMEWORK})
|
|
|
|
# Everything in the project needs access to the casablanca include directories
|
|
include_directories(${Casablanca_INCLUDE_DIRS})
|
|
|
|
# Finally, the tests all use the same style declaration to build themselves, so we use a function
|
|
function(add_casablanca_test NAME SOURCES_VAR)
|
|
add_library(${NAME} ${TEST_LIBRARY_TARGET_TYPE} ${${SOURCES_VAR}})
|
|
message("-- Added test library ${NAME}")
|
|
if (NOT TEST_LIBRARY_TARGET_TYPE STREQUAL "OBJECT")
|
|
target_link_libraries(${NAME}
|
|
${LIB}httptest_utilities
|
|
${LIB}common_utilities
|
|
${LIB}unittestpp
|
|
${Casablanca_LIBRARIES}
|
|
${ANDROID_STL_FLAGS}
|
|
)
|
|
if (BUILD_SHARED_LIBS)
|
|
add_test(NAME ${NAME}
|
|
WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
|
|
COMMAND test_runner lib${NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}
|
|
)
|
|
endif()
|
|
endif()
|
|
endfunction()
|
|
|
|
add_subdirectory(src)
|
|
|
|
if(BUILD_TESTS)
|
|
add_subdirectory(tests)
|
|
endif()
|
|
|
|
if(BUILD_SAMPLES)
|
|
add_subdirectory(samples)
|
|
endif()
|