You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
234 lines
7.0 KiB
234 lines
7.0 KiB
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_directories("${PROJECT_SOURCE_DIR}/test/external") |
|
|
|
add_subdirectory(glm) |
|
add_subdirectory(test) |
|
|
|
set(GLM_INSTALL_CONFIGDIR "${CMAKE_INSTALL_LIBDIR}/cmake/glm") |
|
install(DIRECTORY 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}> |
|
) |
|
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)
|
|
|