@ -1,11 +1,10 @@
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 ( )
cmake_minimum_required ( VERSION 3.2 FATAL_ERROR )
cmake_policy ( VERSION 3.2 )
project ( glm )
set ( GLM_VERSION "0.9.9" )
project ( glm VERSION ${ GLM_VERSION } LANGUAGES CXX )
message ( "Compiler: ${CMAKE_CXX_COMPILER_ID}" )
list ( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" )
@ -14,8 +13,6 @@ 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" )
@ -26,99 +23,59 @@ 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_INSTALL_ENABLE "GLM install" ON )
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 ( )
option ( GLM_TEST_ENABLE_FAST_MATH "Enable fast math optimizations" OFF )
option ( GLM_TEST_ENABLE_CXX_98 "Enable C++ 98" OFF )
option ( GLM_TEST_ENABLE_CXX_11 "Enable C++ 11" OFF )
option ( GLM_TEST_ENABLE_CXX_14 "Enable C++ 14" OFF )
option ( GLM_TEST_ENABLE_CXX_17 "Enable C++ 17" OFF )
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 )
option ( GLM_TEST_ENABLE_CXX_17 "Enable C++ 17" OFF )
if ( GLM_TEST_ENABLE_CXX_17 )
set ( CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++17" )
set ( CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++" )
set ( CMAKE_CXX_FLAGS "-std=c++17" )
message ( STATUS "Build with C++17 features" )
elseif ( 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" )
message ( STATUS "Build with C++1z features" )
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" )
message ( STATUS "Build with C++14 features" )
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" )
message ( STATUS "Build with C++1y features" )
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" )
message ( STATUS "Build with C++11 features" )
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" )
message ( STATUS "Build with C++0x features" )
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" )
message ( STATUS "Build with C++98 features" )
if ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" )
add_definitions ( -Wno-long-long )
endif ( )
if ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
add_definitions ( -Wno-c++11-long-long )
endif ( )
endif ( )
endif ( )
set ( CMAKE_CXX_STANDARD_REQUIRED ON )
if ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
add_definitions ( -Werror -Weverything -Wpedantic -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-c++11-long-long -Wno-padded -Wno-documentation -Wno-gnu-anonymous-struct -Wno-nested-anon-types )
add_definitions ( -Wno-undefined-reinterpret-cast -Wno-sign-conversion -Wno-unused-variable -Wno-missing-prototypes -Wno-unreachable-code -Wno-missing-variable-declarations -Wno-sign-compare -Wno-global-constructors -Wno-unused-macros -Wno-format-nonliteral )
if ( GLM_TEST_ENABLE_CXX_17 )
set ( CMAKE_CXX_STANDARD 17 )
message ( STATUS "GLM: Build with C++17 features" )
elseif ( GLM_TEST_ENABLE_CXX_14 )
set ( CMAKE_CXX_STANDARD 14 )
message ( STATUS "GLM: Build with C++14 features" )
elseif ( GLM_TEST_ENABLE_CXX_11 )
set ( CMAKE_CXX_STANDARD 11 )
message ( STATUS "GLM: Build with C++11 features" )
elseif ( GLM_TEST_ENABLE_CXX_98 )
set ( CMAKE_CXX_STANDARD 98 )
message ( STATUS "GLM: Build with C++98 features" )
endif ( )
option ( GLM_TEST_ENABLE_LANG_EXTENSIONS "Enable language extensions" OFF )
if ( GLM_TEST_ENABLE_LANG_EXTENSIONS )
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 ( )
set ( CMAKE_CXX_EXTENSIONS ON )
message ( STATUS "GLM: Build with C++ language extensions" )
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 ( )
set ( CMAKE_CXX_EXTENSIONS OFF )
endif ( )
if ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" )
add_definitions ( /FAs )
option ( GLM_TEST_ENABLE_FAST_MATH "Enable fast math optimizations" OFF )
if ( GLM_TEST_ENABLE_FAST_MATH )
message ( STATUS "GLM: Build with fast math optimizations" )
if ( ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" ) OR ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" ) )
add_compiler_options ( -ffast-math )
elseif ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" )
add_compiler_options ( /fp:fast )
endif ( )
else ( )
if ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" )
add_compiler_options ( /fp:precise )
endif ( )
endif ( )
option ( GLM_TEST_ENABLE_SIMD_SSE2 "Enable SSE2 optimizations" OFF )
@ -130,67 +87,76 @@ 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_defini tions ( -mfpmath=387 )
if ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" )
add_compiler_op tions ( -mfpmath=387 )
endif ( )
message ( STATUS "GLM: No SIMD instruction set" )
elseif ( GLM_TEST_ENABLE_SIMD_AVX2 )
if ( CMAKE_COMPILER_IS_GNUCXX OR ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" ) )
add_defini tions ( -mavx2 )
elseif ( GLM_USE_INTEL )
add_defini tions ( /QxAVX2 )
if ( ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" ) OR ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" ) )
add_compiler_op tions ( -mavx2 )
elseif ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" )
add_compiler_op tions ( /QxAVX2 )
elseif ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" )
add_defini tions ( /arch:AVX2 )
add_compiler_op tions ( /arch:AVX2 )
endif ( )
message ( STATUS "GLM: AVX2 instruction set" )
elseif ( GLM_TEST_ENABLE_SIMD_AVX )
if ( CMAKE_COMPILER_IS_GNUCXX OR ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" ) )
add_defini tions ( -mavx )
elseif ( GLM_USE_INTEL )
add_defini tions ( /QxAVX )
if ( ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" ) OR ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" ) )
add_compiler_op tions ( -mavx )
elseif ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" )
add_compiler_op tions ( /QxAVX )
elseif ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" )
add_defini tions ( /arch:AVX )
add_compiler_op tions ( /arch:AVX )
endif ( )
message ( STATUS "GLM: AVX instruction set" )
elseif ( GLM_TEST_ENABLE_SIMD_SSE3 )
if ( CMAKE_COMPILER_IS_GNUCXX OR ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" ) )
add_defini tions ( -msse3 )
elseif ( GLM_USE_INTEL )
add_defini tions ( /QxSSE3 )
if ( ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" ) OR ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" ) )
add_compiler_op tions ( -msse3 )
elseif ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" )
add_compiler_op tions ( /QxSSE3 )
elseif ( ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" ) AND NOT CMAKE_CL_64 )
add_defini tions ( /arch:SSE2 ) # V C d o e s n ' t s u p p o r t / a r c h : S S E 3
add_compiler_op tions ( /arch:SSE2 ) # V C d o e s n ' t s u p p o r t / a r c h : S S E 3
endif ( )
message ( STATUS "GLM: SSE3 instruction set" )
elseif ( GLM_TEST_ENABLE_SIMD_SSE2 )
if ( CMAKE_COMPILER_IS_GNUCXX OR ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" ) )
add_defini tions ( -msse2 )
elseif ( GLM_USE_INTEL )
add_defini tions ( /QxSSE2 )
if ( ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" ) OR ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" ) )
add_compiler_op tions ( -msse2 )
elseif ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" )
add_compiler_op tions ( /QxSSE2 )
elseif ( ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" ) AND NOT CMAKE_CL_64 )
add_defini tions ( /arch:SSE2 )
add_compiler_op tions ( /arch:SSE2 )
endif ( )
message ( STATUS "GLM: SSE2 instruction set" )
endif ( )
if ( CMAKE_COMPILER_IS_GNUCXX )
# add_definitions ( -S )
# add_definitions ( -s )
add_definitions ( -O2 )
# A d d i t i o n a l c o m p i l e r o p t i o n s
# add_definitions ( -fprofile-arcs -ftest-coverage ) g c o v
# ctest_enable_coverage ( )
endif ( )
if ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
add_compiler_options ( -Werror -Weverything )
add_compiler_options ( -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-c++11-long-long -Wno-padded -Wno-documentation -Wno-gnu-anonymous-struct -Wno-nested-anon-types )
add_compiler_options ( -Wno-undefined-reinterpret-cast -Wno-sign-conversion -Wno-unused-variable -Wno-missing-prototypes -Wno-unreachable-code -Wno-missing-variable-declarations -Wno-sign-compare -Wno-global-constructors -Wno-unused-macros -Wno-format-nonliteral )
elseif ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" )
add_compiler_options ( -O2 )
add_compiler_options ( -Wno-long-long )
if ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" )
add_definitions ( /FAs )
elseif ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" )
add_compiler_options ( /FAs )
add_definitions ( -D_CRT_SECURE_NO_WARNINGS )
endif ( )
include_directories ( "${PROJECT_SOURCE_DIR}" )
include_directories ( "${PROJECT_SOURCE_DIR}/test/external" )
add_subdirectory ( glm )
add_subdirectory ( test )
option ( GLM_INSTALL_ENABLE "GLM install" ON )
set ( GLM_INSTALL_CONFIGDIR "${CMAKE_INSTALL_LIBDIR}/cmake/glm" )
if ( GLM_INSTALL_ENABLE )
install ( DIRECTORY glm DESTINATION ${ CMAKE_INSTALL_INCLUDEDIR } )
@ -209,25 +175,23 @@ configure_package_config_file(
P A T H _ V A R S C M A K E _ I N S T A L L _ I N C L U D E D I R
N O _ C H E C K _ R E Q U I R E D _ C O M P O N E N T S _ M A C R O )
if ( GLM_INSTALL_ENABLE )
if ( GLM_INSTALL_ENABLE )
install ( FILES
" $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / $ { G L M _ I N S T A L L _ C O N F I G D I R } / g l m C o n f i g . c m a k e "
" $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / g l m C o n f i g V e r s i o n . c m a k e "
D E S T I N A T I O N $ { G L M _ I N S T A L L _ C O N F I G D I R } )
endif ( )
if ( NOT CMAKE_VERSION VERSION_LESS "3.0" )
add_library ( glm INTERFACE )
target_include_directories ( glm INTERFACE
$ < I N S T A L L _ I N T E R F A C E : $ { C M A K E _ I N S T A L L _ I N C L U D E D I R } >
$ < B U I L D _ I N T E R F A C E : $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } > )
install ( TARGETS glm EXPORT glmTargets )
add_library ( glm INTERFACE )
target_include_directories ( glm INTERFACE
$ < I N S T A L L _ I N T E R F A C E : $ { C M A K E _ I N S T A L L _ I N C L U D E D I R } >
$ < B U I L D _ I N T E R F A C E : $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } > )
install ( TARGETS glm EXPORT glmTargets )
export ( EXPORT glmTargets FILE "${CMAKE_CURRENT_BINARY_DIR}/glmTargets.cmake" )
export ( EXPORT glmTargets FILE "${CMAKE_CURRENT_BINARY_DIR}/glmTargets.cmake" )
if ( GLM_INSTALL_ENABLE )
install ( EXPORT glmTargets FILE glmTargets.cmake DESTINATION ${ GLM_INSTALL_CONFIGDIR } )
endif ( )
if ( GLM_INSTALL_ENABLE )
install ( EXPORT glmTargets FILE glmTargets.cmake DESTINATION ${ GLM_INSTALL_CONFIGDIR } )
endif ( )
# b u i l d p k g - c o n f i g f i l e