1# Top Level CMake file for libcody. 2 3cmake_minimum_required(VERSION 3.4.3) 4 5if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) 6 message(STATUS "No build type selected, default to MinSizeRel") 7 set(CMAKE_BUILD_TYPE MinSizeRel) 8 set(LIBCODY_ENABLE_ASSERTIONS 1) 9endif() 10string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE) 11 12set(cmake_3_2_USES_TERMINAL USES_TERMINAL) 13 14if( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT MSVC_IDE) 15 message(FATAL_ERROR "In-source builds are not allowed. ") 16endif() 17 18# message(STATUS "SRC ${CMAKE_SOURCE_DIR} CSRC : ${CMAKE_CURRENT_SOURCE_DIR} ") 19 20# Add path for custom modules 21set(CMAKE_MODULE_PATH 22 ${CMAKE_MODULE_PATH} 23 "${CMAKE_CURRENT_SOURCE_DIR}/cmake" 24 "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules") 25 26# If we are building stand-alone, set up the names and versions. 27if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR 28 OR LIBCODY_STANDALONE_BUILD) 29 30 project(libcody CXX) 31 32 set(PACKAGE_NAME codylib) 33 set(LIBCODY_VERSION_MAJOR 0) 34 set(LIBCODY_VERSION_MINOR 0) 35 set(LIBCODY_VERSION_PATCH 1) 36 set(LIBCODY_VERSION_SUFFIX git) 37 set(LIBCODY_VERSION "${LIBCODY_VERSION_MAJOR}.${LIBCODY_VERSION_MINOR}.${LIBCODY_VERSION_PATCH}") 38 set(PACKAGE_VERSION "${LIBCODY_VERSION}-${LIBCODY_VERSION_SUFFIX}") 39 set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}") 40 set(PACKAGE_URL "https://github.com/urnathan/libcody") 41 set(PACKAGE_BUGREPORT "https://github.com/urnathan/libcody/issues") 42 43 set (GIT_REV "git" "-C" "${CMAKE_CURRENT_SOURCE_DIR}" "rev-parse" "--short=12" "HEAD") 44 execute_process( 45 COMMAND ${GIT_REV} 46 RESULT_VARIABLE HAD_ERROR 47 OUTPUT_VARIABLE CODY_REVISION 48 ) 49 if (NOT HAD_ERROR) 50 string(REGEX REPLACE "\n$" "" CODY_REVISION "${CODY_REVISION}") 51 set (GIT_CHANGES "git" "-C" "${CMAKE_CURRENT_SOURCE_DIR}" "diff-index" "--quiet" "HEAD" "--") 52 execute_process( 53 COMMAND ${GIT_CHANGES} 54 RESULT_VARIABLE MOD_ERROR 55 OUTPUT_VARIABLE MOD_OUTPUT 56 ) 57 if (MOD_ERROR) 58 set (CODY_REVISION "${CODY_REVISION}-modified") 59 endif () 60 else() 61 set(CODY_REVISION, "unknown") 62 endif () 63 set(LIBCODY_STANDALONE YES) 64else() 65 set(LIBCODY_STANDALONE NO) 66endif() 67 68# We are using C++11 69set (CMAKE_CXX_STANDARD 11) 70 71message(STATUS "git revision ${CODY_REVISION} ") 72option(CODY_CHECKING "Enable checking" ON) 73# Address github issue #10 74option(CODY_WITHEXCEPTIONS "Enable exceptions" OFF) 75 76if (LIBCODY_STANDALONE) 77 include(CTest) 78endif() 79 80include(libcody-config-ix) 81 82add_definitions( 83 -DPACKAGE_URL="${PACKAGE_URL}" 84 -DBUGURL="${PACKAGE_BUGREPORT}" 85 -DSRCDIR="${CMAKE_CURRENT_SOURCE_DIR}" 86 -DPACKAGE_NAME="${PACKAGE_NAME}" 87 -DPACKAGE_STRING="${PACKAGE_STRING}" 88 -DPACKAGE_VERSION="${LIBCODY_VERSION}" 89 -DREVISION="${CODY_REVISION}" 90 ) 91if (CODY_CHECKING) 92 add_definitions(-DNMS_CHECKING=1) 93else() 94 add_definitions(-DNMS_CHECKING=0) 95endif() 96 97set(LIBCODY_SOURCES 98 buffer.cc 99 client.cc 100 fatal.cc 101 netclient.cc 102 netserver.cc 103 resolver.cc 104 packet.cc 105 server.cc) 106 107if(LIBCODY_STANDALONE) 108 add_library(cody STATIC ${LIBCODY_SOURCES}) 109else() 110 message(STATUS "Configured for in-tree build of libcody as LLVMcody") 111 add_llvm_component_library(LLVMcody ${LIBCODY_SOURCES}) 112endif() 113 114if (LIBCODY_STANDALONE) 115 116 set_target_properties(cody PROPERTIES PUBLIC_HEADER "cody.hh") 117 install(TARGETS cody 118 LIBRARY DESTINATION lib 119 PUBLIC_HEADER DESTINATION include 120 ) 121endif() 122