blob: 6e1adef74cfaec633c9c41e5bb0753d8dec0b941 [file] [log] [blame]
cmake_minimum_required(VERSION 3.10)
include(CheckCXXSourceCompiles)
include(CheckFunctionExists)
include(CheckIncludeFile)
include(CheckTypeSize)
include(TestCXXAcceptsFlag)
set(HASH_NAME hash)
set(SAVED_CMAKE_REQUIRED_QUIET ${CMAKE_REQUIRED_FLAGS_QUIET})
set(SAVED_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
set(CMAKE_REQUIRED_QUIET TRUE)
check_cxx_accepts_flag("-std=c++11" HAVE_CXX11)
if(HAVE_CXX11)
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -std=c++11")
endif()
foreach(LOCATION unordered_map;tr1/unordered_map)
if (HASH_NAMESPACE)
break()
endif()
foreach(NAMESPACE std;std::tr1)
unset(HAVE_UNORDERED_MAP CACHE)
check_cxx_source_compiles(
"
#include <${LOCATION}>
int main() {
${NAMESPACE}::unordered_map<int,int> m;
return m.find(42) == m.end();
}
"
HAVE_UNORDERED_MAP)
if(${HAVE_UNORDERED_MAP})
set(HASH_NAMESPACE ${NAMESPACE})
endif()
endforeach(NAMESPACE)
endforeach(LOCATION)
foreach(LOCATION hash_map;ext/hash_map)
if (HASH_NAMESPACE)
break()
endif()
foreach(NAMESPACE std;stdext)
if (HASH_NAMESPACE)
break()
endif()
unset(HAVE_HASH_MAP CACHE)
check_cxx_source_compiles(
"
#include <${LOCATION}>
int main() {
${NAMESPACE}::unordered_map<int,int> m;
return m.find(42) == m.end();
}
"
HAVE_HASH_MAP)
if(${HAVE_HASH_MAP})
set(HASH_NAMESPACE ${NAMESPACE})
endif()
endforeach(NAMESPACE)
endforeach(LOCATION)
if(NOT HASH_NAMESPACE)
message(FATAL_ERROR "Unable to determine the standard hash namespace")
endif()
foreach(LOCATION functional;tr1/functional;ext/hash_fun.h;ext/stl_hash_fun.h;hash_fun.h;stl_hash_fun.h;stl/_hash_fun.h)
if (HASH_FUN_H)
break()
endif()
unset(HAVE_HASH_FUNC_HEADER CACHE)
check_cxx_source_compiles(
"
#include <${LOCATION}>
int main() { int x = ${HASH_NAMESPACE}::hash<int>()(42); }
"
HAVE_HASH_FUNC_HEADER)
if (${HAVE_HASH_FUNC_HEADER})
set(HASH_FUN_H ${LOCATION})
endif()
endforeach(LOCATION)
if(NOT HASH_FUN_H)
message(FATAL_ERROR "Unable to find standard hash header file")
endif()
message(STATUS "Using hash header <${HASH_FUN_H}> and namespace \"${HASH_NAMESPACE}\"")
set(HASH_NAMESPACE ${HASH_NAMESPACE} PARENT_SCOPE)
set(HASH_FUN_H ${HASH_FUN_H} PARENT_SCOPE)
set(CMAKE_REQUIRED_QUIET ${SAVED_CMAKE_REQUIRED_QUIET})
set(CMAKE_REQUIRED_FLAGS ${SAVED_CMAKE_REQUIRED_FLAGS})
check_include_file(inttypes.h HAVE_INTTYPES_H)
check_include_file(stdint.h HAVE_STDINT_H)
check_include_file(sys/types.h HAVE_SYS_TYPES_H)
check_function_exists(memcpy HAVE_MEMCPY)
check_type_size("long long" LONG_LONG)
check_type_size("uint16_t" UINT16_T)
check_type_size("u_int16_t" U_INT16_T)
check_type_size("__uint16_t" __UINT16_T)
configure_file("config.h.cmake" "${CMAKE_CURRENT_SOURCE_DIR}/src/sparsehash/internal/sparseconfig.h")
file(GLOB SPARSEHASH_HEADER_FILES sparsehash)
file(GLOB SPARSEHASH_INTERNAL_HEADER_FILES sparsehash/*.h sparsehash/internal/*.h)
set(SOURCES
${SPARSEHASH_HEADER_FILES}
${SPARSEHASH_INTERNAL_HEADER_FILES})
source_group("Header Files\\" FILES ${SPARSEHASH_HEADER_FILES})
source_group("Header Files\\internal" FILES ${SPARSEHASH_INTERNAL_HEADER_FILES})
add_custom_target(sparsehash ${SOURCES})
set_target_properties(sparsehash PROPERTIES
FOLDER "Driver/Dependencies")