2011-08-01 8 views
5

En un archivo CMakeLists.txt, ¿hay alguna manera de detectar el nivel más alto de SSE disponible y guardarlo en CMAKE_CXX_FLAGS? En otras palabras, me gustaría ser capaz de escribir algo como:Cómo detectar la disponibilidad de sse en CMake

FindSSE() # defines SSE_FLAGS 
set(CMAKE_CXX_FLAGS ${SSE_FLAGS}) 

Por ejemplo, si la plataforma soporta hasta nivel SSE 3, entonces FindSSE() establecería SSE_FLAGS a -msse3.

Respuesta

3

Esto podría ser una exageración, pero la OptimizeForArchitecture.cmake de VC en gitorious proporcionará una lista de optimizaciones basadas en la arquitectura.

Puede usar esa secuencia de comandos directamente o recortarla al código que necesita.

A mejor solución sería hacer un pequeño script de prueba cmake que utiliza instrucciones SSE y comprobar si cada variante se compila/ejecuta.

EDIT: Más específicamente, hay FindSSE.cmake de la misma fuente, aunque se sigue utilizando el método algo torpe de analizar /proc/cpuinfo

+0

La sugerencia anterior sólo funciona para Linux. Hay un "TODO" gigante para Windows. – legalize

+0

FWIW, los enlaces actualizados son [OptimizeForArchitecture.cmake] (https://github.com/VcDevel/Vc/blob/master/cmake/OptimizeForArchitecture.cmake) y [FindSSE.cmake] (https://github.com/ VcDevel/Vc/blob/master/cmake/FindSSE.cmake). – scribbleink

Cuestiones relacionadas