mirror of
https://github.com/g-truc/glm.git
synced 2024-11-16 14:54:35 +00:00
92d0d4e77e
This makes it safer to include GLM as sources instead of install. By not having the repository root as the header search path, but a dedicated subfolder instead, chances of name clashes are reduced and the amount of options displayed in IDEs is vastly reduced and disambiguated. This change should not affect anyone relying on CMake's automatic header search path setting of target dependencies. A re-run of cmake may be necessary if it doesn't automatically pickup the changes. Already installed/exported packages should not be affected. Those already building from sources and managing search paths manually need to switch from "path/to/glm" to "path/to/glm/include".
235 lines
7.0 KiB
CMake
235 lines
7.0 KiB
CMake
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
|
|
cmake_policy(VERSION 2.6)
|
|
if (NOT CMAKE_VERSION VERSION_LESS "3.1")
|
|
cmake_policy(SET CMP0054 NEW)
|
|
endif()
|
|
|
|
project(glm)
|
|
set(GLM_VERSION "0.9.8")
|
|
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
|
|
|
include(GNUInstallDirs)
|
|
include(CMakePackageConfigHelpers)
|
|
|
|
enable_testing()
|
|
|
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
|
|
|
option(GLM_STATIC_LIBRARY_ENABLE "GLM static library" OFF)
|
|
if(GLM_STATIC_LIBRARY_ENABLE)
|
|
message(STATUS "GLM is a header only library, no need to build it. Set the option GLM_STATIC_LIBRARY_ENABLE with ON to build an optional static library")
|
|
endif()
|
|
|
|
option(GLM_DYNAMIC_LIBRARY_ENABLE "GLM static library" OFF)
|
|
if(GLM_DYNAMIC_LIBRARY_ENABLE)
|
|
message(STATUS "GLM is a header only library, no need to build it. Set the option GLM_DYNAMIC_LIBRARY_ENABLE with ON to build an optional dynamic library")
|
|
endif()
|
|
|
|
option(GLM_TEST_ENABLE "GLM test" OFF)
|
|
if(NOT GLM_TEST_ENABLE)
|
|
message(STATUS "GLM is a header only library, no need to build it. Set the option GLM_TEST_ENABLE with ON to build and run the test bench")
|
|
endif()
|
|
|
|
if(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") OR (("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") AND UNIX))
|
|
option(GLM_TEST_ENABLE_CXX_98 "Enable C++ 98" OFF)
|
|
option(GLM_TEST_ENABLE_CXX_0X "Enable C++ 0x" OFF)
|
|
option(GLM_TEST_ENABLE_CXX_11 "Enable C++ 11" OFF)
|
|
option(GLM_TEST_ENABLE_CXX_1Y "Enable C++ 1y" OFF)
|
|
option(GLM_TEST_ENABLE_CXX_14 "Enable C++ 14" OFF)
|
|
option(GLM_TEST_ENABLE_CXX_1Z "Enable C++ 1z" OFF)
|
|
|
|
if(GLM_TEST_ENABLE_CXX_1Z)
|
|
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++1z")
|
|
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
|
|
set(CMAKE_CXX_FLAGS "-std=c++1Z")
|
|
elseif(GLM_TEST_ENABLE_CXX_14)
|
|
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++14")
|
|
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
|
|
set(CMAKE_CXX_FLAGS "-std=c++14")
|
|
elseif(GLM_TEST_ENABLE_CXX_1Y)
|
|
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++1y")
|
|
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
|
|
set(CMAKE_CXX_FLAGS "-std=c++1y")
|
|
elseif(GLM_TEST_ENABLE_CXX_11)
|
|
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11")
|
|
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
|
|
set(CMAKE_CXX_FLAGS "-std=c++11")
|
|
elseif(GLM_TEST_ENABLE_CXX_0X)
|
|
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++0x")
|
|
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
|
|
set(CMAKE_CXX_FLAGS "-std=c++0x")
|
|
elseif(GLM_TEST_ENABLE_CXX_98)
|
|
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++98")
|
|
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
|
|
set(CMAKE_CXX_FLAGS "-std=c++98")
|
|
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
|
# GLM is using GCC 64 bits integer extension
|
|
add_definitions(-Wno-long-long)
|
|
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
|
add_definitions(-Wno-c++11-long-long)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
option(GLM_TEST_ENABLE_MS_EXTENSIONS "Enable MS extensions" OFF)
|
|
|
|
if(GLM_TEST_ENABLE_MS_EXTENSIONS)
|
|
if(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU"))
|
|
add_definitions(-Wgnu-anonymous-struct)
|
|
add_definitions(-Wnested-anon-types)
|
|
endif()
|
|
else()
|
|
if(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") OR (("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") AND WIN32))
|
|
add_definitions(/Za)
|
|
# elseif(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU"))
|
|
# add_definitions(-pedantic)
|
|
endif()
|
|
endif()
|
|
|
|
option(GLM_TEST_ENABLE_SIMD_SSE2 "Enable SSE2 optimizations" OFF)
|
|
option(GLM_TEST_ENABLE_SIMD_SSE3 "Enable SSE3 optimizations" OFF)
|
|
option(GLM_TEST_ENABLE_SIMD_AVX "Enable AVX optimizations" OFF)
|
|
option(GLM_TEST_ENABLE_SIMD_AVX2 "Enable AVX2 optimizations" OFF)
|
|
option(GLM_TEST_FORCE_PURE "Force 'pure' instructions" OFF)
|
|
|
|
if(GLM_TEST_FORCE_PURE)
|
|
add_definitions(-DGLM_FORCE_PURE)
|
|
|
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
|
add_definitions(-mfpmath=387)
|
|
endif()
|
|
elseif(GLM_TEST_ENABLE_SIMD_AVX2)
|
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
|
add_definitions(-mavx2)
|
|
elseif(GLM_USE_INTEL)
|
|
add_definitions(/QxAVX2)
|
|
elseif(MSVC)
|
|
add_definitions(/arch:AVX2)
|
|
endif()
|
|
elseif(GLM_TEST_ENABLE_SIMD_AVX)
|
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
|
add_definitions(-mavx)
|
|
elseif(GLM_USE_INTEL)
|
|
add_definitions(/QxAVX)
|
|
elseif(MSVC)
|
|
add_definitions(/arch:AVX)
|
|
endif()
|
|
elseif(GLM_TEST_ENABLE_SIMD_SSE3)
|
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
|
add_definitions(-msse3)
|
|
elseif(GLM_USE_INTEL)
|
|
add_definitions(/QxSSE3)
|
|
elseif(MSVC AND NOT CMAKE_CL_64)
|
|
add_definitions(/arch:SSE2) # VC doesn't support /arch:SSE3
|
|
endif()
|
|
elseif(GLM_TEST_ENABLE_SIMD_SSE2)
|
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
|
add_definitions(-msse2)
|
|
elseif(GLM_USE_INTEL)
|
|
add_definitions(/QxSSE2)
|
|
elseif(MSVC AND NOT CMAKE_CL_64)
|
|
add_definitions(/arch:SSE2)
|
|
endif()
|
|
endif()
|
|
|
|
option(GLM_TEST_ENABLE_FAST_MATH "Enable fast math optimizations" OFF)
|
|
if(GLM_TEST_ENABLE_FAST_MATH)
|
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
|
add_definitions(-ffast-math)
|
|
endif()
|
|
|
|
if(MSVC)
|
|
add_definitions(/fp:fast)
|
|
endif()
|
|
elseif(NOT GLM_TEST_ENABLE_FAST_MATH)
|
|
if(MSVC)
|
|
add_definitions(/fp:precise)
|
|
endif()
|
|
endif()
|
|
|
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
|
#add_definitions(-S)
|
|
#add_definitions(-s)
|
|
add_definitions(-O2)
|
|
|
|
#add_definitions(-fprofile-arcs -ftest-coverage) gcov
|
|
#ctest_enable_coverage()
|
|
endif()
|
|
|
|
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
|
add_definitions(/FAs)
|
|
endif()
|
|
|
|
include_directories("${PROJECT_SOURCE_DIR}/include")
|
|
include_directories("${PROJECT_SOURCE_DIR}/test/external")
|
|
|
|
add_subdirectory(include/glm)
|
|
add_subdirectory(test)
|
|
|
|
set(GLM_INSTALL_CONFIGDIR "${CMAKE_INSTALL_LIBDIR}/cmake/glm")
|
|
install(DIRECTORY include/glm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
|
|
|
write_basic_package_version_file(
|
|
"${CMAKE_CURRENT_BINARY_DIR}/glmVersion.cmake"
|
|
VERSION ${GLM_VERSION}
|
|
COMPATIBILITY AnyNewerVersion
|
|
)
|
|
|
|
# build tree package config
|
|
configure_file(
|
|
cmake/glmBuildConfig.cmake.in
|
|
glmConfig.cmake
|
|
@ONLY
|
|
)
|
|
|
|
# install tree package config
|
|
configure_package_config_file(
|
|
cmake/glmConfig.cmake.in
|
|
${GLM_INSTALL_CONFIGDIR}/glmConfig.cmake
|
|
INSTALL_DESTINATION ${GLM_INSTALL_CONFIGDIR}
|
|
PATH_VARS CMAKE_INSTALL_INCLUDEDIR
|
|
NO_CHECK_REQUIRED_COMPONENTS_MACRO
|
|
)
|
|
|
|
install(
|
|
FILES
|
|
"${CMAKE_CURRENT_BINARY_DIR}/${GLM_INSTALL_CONFIGDIR}/glmConfig.cmake"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/glmVersion.cmake"
|
|
DESTINATION ${GLM_INSTALL_CONFIGDIR}
|
|
)
|
|
|
|
if (NOT CMAKE_VERSION VERSION_LESS "3.0")
|
|
add_library(glm INTERFACE)
|
|
target_include_directories(glm INTERFACE
|
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
)
|
|
install(TARGETS glm EXPORT glmTargets)
|
|
|
|
export(
|
|
EXPORT glmTargets
|
|
FILE "${CMAKE_CURRENT_BINARY_DIR}/glmTargets.cmake"
|
|
)
|
|
|
|
install(
|
|
EXPORT glmTargets FILE glmTargets.cmake
|
|
DESTINATION ${GLM_INSTALL_CONFIGDIR}
|
|
)
|
|
endif()
|
|
|
|
# build pkg-config file
|
|
configure_file(
|
|
"./cmake/glm.pc.in"
|
|
"glm.pc"
|
|
@ONLY
|
|
)
|
|
|
|
# install pkg-config file
|
|
install(
|
|
FILES "${CMAKE_CURRENT_BINARY_DIR}/glm.pc"
|
|
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
|
|
)
|
|
|
|
export(PACKAGE glm)
|