+FILE(GLOB SUPERTUX_SOURCES RELATIVE ${SUPERTUX_SOURCE_DIR} src/*.cpp src/*/*.cpp src/obstack/*.c)
+
+## Precompile "a few" headers in GCC
+OPTION(PRECOMPILE_HEADERS "Precompile headers (experimental)" OFF)
+IF(PRECOMPILE_HEADERS)
+ FILE(GLOB PRECOMPILED_HEADERS RELATIVE ${SUPERTUX_SOURCE_DIR} src/badguy/badguy.hpp
+ src/scripting/wrapper.hpp src/video/*.hpp src/math/*.hpp)
+ FILE(WRITE ${SUPERTUX_BINARY_DIR}/precompile.hh "// Precompiled headers\n")
+ FILE(APPEND ${SUPERTUX_BINARY_DIR}/precompile.hh "#ifndef __SUPERTUX_PRECOMPILED_HEADER\n")
+ FILE(APPEND ${SUPERTUX_BINARY_DIR}/precompile.hh "#define __SUPERTUX_PRECOMPILED_HEADER\n")
+ FOREACH(PRECOMPILED_HEADER ${PRECOMPILED_HEADERS})
+ FILE(RELATIVE_PATH PRECOMPILED_HEADER ${SUPERTUX_SOURCE_DIR}/src "${SUPERTUX_SOURCE_DIR}/${PRECOMPILED_HEADER}")
+ FILE(APPEND ${SUPERTUX_BINARY_DIR}/precompile.hh "#include \"${PRECOMPILED_HEADER}\"\n")
+ ENDFOREACH(PRECOMPILED_HEADER)
+ FILE(APPEND ${SUPERTUX_BINARY_DIR}/precompile.hh "#endif /*__SUPERTUX_PRECOMPILED_HEADER*/\n")
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${SUPERTUX_BINARY_DIR}/precompile.hh.gch
+ COMMAND ${CMAKE_CXX_COMPILER} -x "c++-header" $(CXX_FLAGS) ${SUPERTUX_BINARY_DIR}/precompile.hh
+ DEPENDS ${PRECOMPILED_HEADERS}
+ COMMENT "Building precompiled header..."
+ )
+ ## Make certain it is built
+ SET(SUPERTUX_SOURCES ${SUPERTUX_BINARY_DIR}/precompile.hh.gch ${SUPERTUX_SOURCES})
+ SET(CMAKE_CXX_FLAGS "-include ${SUPERTUX_BINARY_DIR}/precompile.hh" ${CMAKE_CXX_FLAGS})
+ELSE(PRECOMPILE_HEADERS)
+ IF(EXISTS ${SUPERTUX_BINARY_DIR}/precompile.hh)
+ FILE(REMOVE ${SUPERTUX_BINARY_DIR}/precompile.hh)
+ ENDIF(EXISTS ${SUPERTUX_BINARY_DIR}/precompile.hh)
+ IF(EXISTS ${SUPERTUX_BINARY_DIR}/precompile.hh.gch)
+ FILE(REMOVE ${SUPERTUX_BINARY_DIR}/precompile.hh.gch)
+ ENDIF(EXISTS ${SUPERTUX_BINARY_DIR}/precompile.hh.gch)
+ENDIF(PRECOMPILE_HEADERS)
+