¿Cómo instruiría a ExtConf.RB para que use banderas de optimización G ++ adicionales y cuáles son aconsejables?

StackOverflow https://stackoverflow.com/questions/2962287

Pregunta

Estoy usando Arroz para escribir una extensión C ++ para una gema Ruby. La extensión está en forma de un archivo de objeto compartido (.so).

Esto requiere 'MKMF-Rice' en lugar de 'MKMF', pero los dos (AFAIK) son bastante similares.

Por defecto, el compilador usa las banderas -g -O2. Personalmente, encuentro este tipo de tonto, ya que es difícil depurar con cualquier optimización habilitada. He recurrido a editar el makefile para sacar las banderas que no me gustan (por ejemplo, eliminar -fPIC -shared Cuando necesito depurar usando main() en lugar de los ganchos de Ruby).

Pero creo que tiene que haber una mejor manera. Sé que puedo hacer

$CPPFLAGS += " -DRICE"

Para agregar banderas adicionales. Pero, ¿cómo elimino las cosas sin editar el makfile directamente?

Una pregunta secundaria: ¿Qué optimizaciones son seguras para los objetos compartidos cargados por Ruby? ¿Puedo hacer cosas como -funroll-loops? ¿Qué recomiendan todos?

Es un proyecto de computación científica, por lo que cuanto más rápido mejor. La memoria no es un gran problema.

¡Muchas gracias!

¿Fue útil?

Solución

La forma rápida y sucia es agregar -O0 a CXXFLAGS, lo que apagará la optimización. Las opciones posteriores anularán las anteriores.

En cuanto a la seguridad de un complemento, debería poder hacer cualquier cosa que no afecte al ABI. Sin pruebas, no veo por qué -cunroll lo haría. Por supuesto, Safe no implica mejor. Como señaló la página del hombre, "-funroll-loops hace que el código sea más grande, y puede o no hacer que funcione más rápido".

Otros consejos

Para definir tu uso

-D name=definition

Como lo haces en tu ejemplo:

$CPPFLAGS += " -DRICE"

-Tu nombre
Cancele cualquier definición anterior de nombre, ya sea incorporada o proporcionada con una opción -d.

$CPPFLAGS += " -URICE"

Aunque no estoy seguro de si ayudará con el indefinido -o2 como lo quieres.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top