1# 2# Copyright (c) 2016-2017 Vinnie Falco (vinnie dot falco at gmail dot com) 3# 4# Distributed under the Boost Software License, Version 1.0. (See accompanying 5# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6# 7# Official repository: https://github.com/boostorg/static_string 8# 9 10cmake_minimum_required (VERSION 3.5.1) 11 12if (POLICY CMP0074) 13 cmake_policy (SET CMP0074 NEW) 14endif() 15 16#------------------------------------------------------------------------------- 17 18function (DoGroupSources curdir rootdir folder) 19 file (GLOB children RELATIVE ${PROJECT_SOURCE_DIR}/${curdir} ${PROJECT_SOURCE_DIR}/${curdir}/*) 20 foreach (child ${children}) 21 if (IS_DIRECTORY ${PROJECT_SOURCE_DIR}/${curdir}/${child}) 22 DoGroupSources (${curdir}/${child} ${rootdir} ${folder}) 23 elseif (${child} STREQUAL "CMakeLists.txt") 24 source_group("" FILES ${PROJECT_SOURCE_DIR}/${curdir}/${child}) 25 else() 26 string (REGEX REPLACE ^${rootdir} ${folder} groupname ${curdir}) 27 string (REPLACE "/" "\\" groupname ${groupname}) 28 source_group (${groupname} FILES ${PROJECT_SOURCE_DIR}/${curdir}/${child}) 29 endif() 30 endforeach() 31endfunction() 32 33function (GroupSources curdir folder) 34 DoGroupSources (${curdir} ${curdir} ${folder}) 35endfunction() 36 37#------------------------------------------------------------------------------- 38# 39# StaticString 40# 41#------------------------------------------------------------------------------- 42 43project (StaticString VERSION 1) 44 45set_property (GLOBAL PROPERTY USE_FOLDERS ON) 46 47if (MSVC) 48 set (CMAKE_VERBOSE_MAKEFILE FALSE) 49 50 add_definitions ( 51 -D_WIN32_WINNT=0x0601 52 ) 53 54 add_compile_options( 55 /permissive- # strict C++ 56 /W4 # enable all warnings 57 /MP # Multi-processor compilation 58 ) 59 60 set (Boost_USE_STATIC_LIBS ON) 61 set (Boost_USE_STATIC_RUNTIME ON) 62 63 set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") 64 set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Ob2 /Oi /Ot /GL /MT") 65 set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Oi /Ot /MT") 66 67 set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO") 68 set (CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG") 69 70 # for RelWithDebInfo builds, disable incremental linking 71 # since CMake sets it ON by default for that build type and it 72 # causes warnings 73 # 74 string (REPLACE "/INCREMENTAL" "/INCREMENTAL:NO" replacement_flags 75 ${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO}) 76 set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO ${replacement_flags}) 77 78else() 79 set (THREADS_PREFER_PTHREAD_FLAG ON) 80 find_package (Threads) 81 82 set( CMAKE_CXX_FLAGS 83 "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -Wpedantic -Wno-unused-parameter") 84 85 if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") 86 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wrange-loop-analysis") 87 endif () 88endif() 89 90# Must come before Boost includes, otherwise the 91# IDE sees the wrong file due to boost/ symlinks. 92include_directories (include) 93 94#------------------------------------------------------------------------------- 95# 96# Boost 97# 98#------------------------------------------------------------------------------- 99 100get_filename_component (BOOST_ROOT ../../ ABSOLUTE) 101 102# VFALCO I want static but "b2 stage" builds a minimal set which excludes static 103add_definitions (-DBOOST_ALL_STATIC_LINK=1) 104 105include_directories (${BOOST_ROOT}) 106 107link_directories(${BOOST_ROOT}/stage/lib) 108 109#------------------------------------------------------------------------------- 110 111if ("${VARIANT}" STREQUAL "coverage") 112 if (MSVC) 113 else() 114 set (CMAKE_BUILD_TYPE DEBUG) 115 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2 --coverage") 116 set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") 117 endif() 118 119elseif ("${VARIANT}" STREQUAL "ubasan") 120 if (MSVC) 121 else() 122 set (CMAKE_BUILD_TYPE RELWITHDEBINFO) 123 set (CMAKE_CXX_FLAGS 124 "${CMAKE_CXX_FLAGS} -msse4.2 -funsigned-char -fno-omit-frame-pointer -fsanitize=address,undefined -fno-sanitize-recover=address,undefined -fsanitize-blacklist=${PROJECT_SOURCE_DIR}/tools/blacklist.supp") 125 set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address,undefined -fno-sanitize-recover=address,undefined") 126 endif() 127 128elseif ("${VARIANT}" STREQUAL "debug") 129 set (CMAKE_BUILD_TYPE DEBUG) 130 131elseif ("${VARIANT}" STREQUAL "release") 132 set (CMAKE_BUILD_TYPE RELEASE) 133 134endif() 135 136#------------------------------------------------------------------------------- 137 138#GroupSources (test "/") 139 140#------------------------------------------------------------------------------- 141# 142# Tests and examples 143# 144 145#include_directories (.) 146 147file (GLOB_RECURSE PROJECT_FILES 148 ${PROJECT_SOURCE_DIR}/include/boost/static_string/*.hpp 149 ${PROJECT_SOURCE_DIR}/include/boost/static_string/*.ipp 150) 151 152add_subdirectory (test) 153