Skip to content

Instantly share code, notes, and snippets.

@hovatterz
Created May 26, 2012 00:22
Show Gist options
  • Save hovatterz/2791391 to your computer and use it in GitHub Desktop.
Save hovatterz/2791391 to your computer and use it in GitHub Desktop.
cmake_minimum_required( VERSION 2.8 )
if( NOT CMAKE_BUILD_TYPE )
set( CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build (Debug or Release)" FORCE )
endif()
project( SFGUI )
### USER INPUT ###
set( BUILD_SHARED_LIBS true CACHE BOOL "Build dynamic library." )
set( BUILD_EXAMPLES true CACHE BOOL "Build SFGUI examples." )
set( SFML_STATIC_LIBRARIES false CACHE BOOL "Was SFML built as a static library?" )
if( SFML_STATIC_LIBRARIES AND BUILD_SHARED_LIBS )
message( FATAL_ERROR "If you link to SFML statically you MUST link to SFGUI statically too." )
endif()
if( MSVC )
set( STATIC_STD_LIBS false CACHE BOOL "True to link the runtime library statically, false to link them dynamically." )
endif()
# Add SFML's CMake Modules directory from extlibs to module search path for
# finding FindSFML.cmake more easily.
set( CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/extlibs/SFML/cmake/Modules/;${CMAKE_MODULE_PATH}" )
find_package( OpenGL REQUIRED )
find_package( SFML 2.0 QUIET COMPONENTS GRAPHICS WINDOW SYSTEM )
# FindSFML was not run.
if( NOT DEFINED FIND_SFML_LIB_SUFFIX )
set( CMAKE_MODULE_PATH "" CACHE PATH "SFML root directory" )
message( FATAL_ERROR "CMake couldn't find FindSFML.cmake. Did you remember to install SFML?\nOptionally, you can set the CMAKE_MODULE_PATH entry to the directory containing FindSFML.cmake.\nFindSFML.cmake will be searched for in there." )
endif()
# FindSFML couldn't find SFML.
if( NOT SFML_FOUND )
set( SFML_ROOT "" CACHE PATH "SFML root directory" )
message( FATAL_ERROR "CMake couldn't find SFML. Set the SFML_ROOT entry to SFML's root directory (containing \"include\" and \"lib\" directories)." )
endif()
if( SFML_STATIC_LIBRARIES )
# Even though FindSFML sets -DSFML_STATIC itself, better safe than sorry.
add_definitions( -DSFML_STATIC )
endif()
# Set some useful compile flags.
if( CMAKE_COMPILER_IS_GNUCXX )
if( NOT CMAKE_CXX_FLAGS )
set( CMAKE_CXX_FLAGS "-Wall -Wextra -Wshadow -Wconversion -Wno-long-long -pedantic" CACHE STRING "C++ compiler flags" FORCE )
set( CMAKE_C_FLAGS "-Wall -Wextra -Wshadow -Wconversion -Wno-long-long -pedantic" CACHE STRING "C compiler flags" FORCE )
endif()
if( NOT CMAKE_CXX_FLAGS_DEBUG )
set( CMAKE_CXX_FLAGS_DEBUG "-g -O0" CACHE STRING "C++ compiler flags (debug)" FORCE )
set( CMAKE_C_FLAGS_DEBUG "-g -O0" CACHE STRING "C++ compiler flags (debug)" FORCE )
endif()
endif()
# Make windows happy.
if( WIN32 )
set( BIN_EXTENSION ".exe" )
set( SHARE_TARGET_DIR . )
add_definitions( -DWIN32 )
else()
set( SHARE_TARGET_DIR share/SFGUI )
endif()
# Make OS X happy.
if ( APPLE )
include_directories( /System/Library/Frameworks/CoreFoundation.framework/Headers )
find_library( COREFOUNDATION_LIBRARY CoreFoundation )
mark_as_advanced( COREFOUNDATION_LIBRARY )
endif()
set( LIBRARY_OUTPUT_PATH "${PROJECT_BINARY_DIR}/lib" )
set( SRC_DIR "${PROJECT_SOURCE_DIR}/src/" )
set( INC_DIR "${PROJECT_SOURCE_DIR}/include/" )
set(
SOURCES
${INC_DIR}/SFGUI/Adjustment.hpp
${INC_DIR}/SFGUI/Alignment.hpp
${INC_DIR}/SFGUI/Bin.hpp
${INC_DIR}/SFGUI/Box.hpp
${INC_DIR}/SFGUI/Button.hpp
${INC_DIR}/SFGUI/CheckButton.hpp
${INC_DIR}/SFGUI/ComboBox.hpp
${INC_DIR}/SFGUI/Config.hpp
${INC_DIR}/SFGUI/Container.hpp
${INC_DIR}/SFGUI/Context.hpp
${INC_DIR}/SFGUI/Desktop.hpp
${INC_DIR}/SFGUI/Desktop.inl
${INC_DIR}/SFGUI/Engine.hpp
${INC_DIR}/SFGUI/Engine.inl
${INC_DIR}/SFGUI/Engines/BREW.hpp
${INC_DIR}/SFGUI/Entry.hpp
${INC_DIR}/SFGUI/FastDelegate.hpp
${INC_DIR}/SFGUI/FileResourceLoader.hpp
${INC_DIR}/SFGUI/Fixed.hpp
${INC_DIR}/SFGUI/Frame.hpp
${INC_DIR}/SFGUI/Image.hpp
${INC_DIR}/SFGUI/Label.hpp
${INC_DIR}/SFGUI/Misc.hpp
${INC_DIR}/SFGUI/NonCopyable.hpp
${INC_DIR}/SFGUI/Notebook.hpp
${INC_DIR}/SFGUI/Object.hpp
${INC_DIR}/SFGUI/Parsers/ThemeParser/Grammar.hpp
${INC_DIR}/SFGUI/Parsers/ThemeParser/Parse.hpp
${INC_DIR}/SFGUI/Primitive.hpp
${INC_DIR}/SFGUI/ProgressBar.hpp
${INC_DIR}/SFGUI/Range.hpp
${INC_DIR}/SFGUI/Renderer.hpp
${INC_DIR}/SFGUI/RendererViewport.hpp
${INC_DIR}/SFGUI/RenderQueue.hpp
${INC_DIR}/SFGUI/ResourceLoader.hpp
${INC_DIR}/SFGUI/ResourceManager.hpp
${INC_DIR}/SFGUI/ResourceManager.inl
${INC_DIR}/SFGUI/Scale.hpp
${INC_DIR}/SFGUI/Scrollbar.hpp
${INC_DIR}/SFGUI/ScrolledWindow.hpp
${INC_DIR}/SFGUI/Selector.hpp
${INC_DIR}/SFGUI/Separator.hpp
${INC_DIR}/SFGUI/SFGUI.hpp
${INC_DIR}/SFGUI/SharedPtr.hpp
${INC_DIR}/SFGUI/SharedPtr.inl
${INC_DIR}/SFGUI/Signal.hpp
${INC_DIR}/SFGUI/Signal.inl
${INC_DIR}/SFGUI/Spinner.hpp
${INC_DIR}/SFGUI/Table.hpp
${INC_DIR}/SFGUI/TableCell.hpp
${INC_DIR}/SFGUI/TableOptions.hpp
${INC_DIR}/SFGUI/ToggleButton.hpp
${INC_DIR}/SFGUI/Viewport.hpp
${INC_DIR}/SFGUI/Widget.hpp
${INC_DIR}/SFGUI/Window.hpp
${SRC_DIR}/SFGUI/Adjustment.cpp
${SRC_DIR}/SFGUI/Alignment.cpp
${SRC_DIR}/SFGUI/Bin.cpp
${SRC_DIR}/SFGUI/Box.cpp
${SRC_DIR}/SFGUI/Button.cpp
${SRC_DIR}/SFGUI/CheckButton.cpp
${SRC_DIR}/SFGUI/ComboBox.cpp
${SRC_DIR}/SFGUI/Container.cpp
${SRC_DIR}/SFGUI/Context.cpp
${SRC_DIR}/SFGUI/Desktop.cpp
${SRC_DIR}/SFGUI/Engine.cpp
${SRC_DIR}/SFGUI/Engines/BREW.cpp
${SRC_DIR}/SFGUI/Engines/BREW/Button.cpp
${SRC_DIR}/SFGUI/Engines/BREW/CheckButton.cpp
${SRC_DIR}/SFGUI/Engines/BREW/ComboBox.cpp
${SRC_DIR}/SFGUI/Engines/BREW/Entry.cpp
${SRC_DIR}/SFGUI/Engines/BREW/Frame.cpp
${SRC_DIR}/SFGUI/Engines/BREW/Image.cpp
${SRC_DIR}/SFGUI/Engines/BREW/Label.cpp
${SRC_DIR}/SFGUI/Engines/BREW/Notebook.cpp
${SRC_DIR}/SFGUI/Engines/BREW/ProgressBar.cpp
${SRC_DIR}/SFGUI/Engines/BREW/Scale.cpp
${SRC_DIR}/SFGUI/Engines/BREW/Scrollbar.cpp
${SRC_DIR}/SFGUI/Engines/BREW/ScrolledWindow.cpp
${SRC_DIR}/SFGUI/Engines/BREW/Separator.cpp
${SRC_DIR}/SFGUI/Engines/BREW/Spinner.cpp
${SRC_DIR}/SFGUI/Engines/BREW/ToggleButton.cpp
${SRC_DIR}/SFGUI/Engines/BREW/Window.cpp
${SRC_DIR}/SFGUI/Entry.cpp
${SRC_DIR}/SFGUI/FileResourceLoader.cpp
${SRC_DIR}/SFGUI/Fixed.cpp
${SRC_DIR}/SFGUI/Frame.cpp
${SRC_DIR}/SFGUI/Image.cpp
${SRC_DIR}/SFGUI/Label.cpp
${SRC_DIR}/SFGUI/Misc.cpp
${SRC_DIR}/SFGUI/NonCopyable.cpp
${SRC_DIR}/SFGUI/Notebook.cpp
${SRC_DIR}/SFGUI/Object.cpp
${SRC_DIR}/SFGUI/Parsers/ThemeParser/Grammar.cpp
${SRC_DIR}/SFGUI/Parsers/ThemeParser/GrammarPredicates.cpp
${SRC_DIR}/SFGUI/Parsers/ThemeParser/GrammarSelector.cpp
${SRC_DIR}/SFGUI/Parsers/ThemeParser/GrammarSimpleSelector.cpp
${SRC_DIR}/SFGUI/Parsers/ThemeParser/GrammarStatement.cpp
${SRC_DIR}/SFGUI/Parsers/ThemeParser/GrammarToken.cpp
${SRC_DIR}/SFGUI/Parsers/ThemeParser/Parse.cpp
${SRC_DIR}/SFGUI/Primitive.cpp
${SRC_DIR}/SFGUI/ProgressBar.cpp
${SRC_DIR}/SFGUI/Range.cpp
${SRC_DIR}/SFGUI/Renderer.cpp
${SRC_DIR}/SFGUI/RendererViewport.cpp
${SRC_DIR}/SFGUI/RenderQueue.cpp
${SRC_DIR}/SFGUI/ResourceLoader.cpp
${SRC_DIR}/SFGUI/ResourceManager.cpp
${SRC_DIR}/SFGUI/Scale.cpp
${SRC_DIR}/SFGUI/Scrollbar.cpp
${SRC_DIR}/SFGUI/ScrolledWindow.cpp
${SRC_DIR}/SFGUI/Selector.cpp
${SRC_DIR}/SFGUI/Separator.cpp
${SRC_DIR}/SFGUI/SFGUI.cpp
${SRC_DIR}/SFGUI/Signal.cpp
${SRC_DIR}/SFGUI/Spinner.cpp
${SRC_DIR}/SFGUI/Table.cpp
${SRC_DIR}/SFGUI/TableCell.cpp
${SRC_DIR}/SFGUI/TableOptions.cpp
${SRC_DIR}/SFGUI/ToggleButton.cpp
${SRC_DIR}/SFGUI/Viewport.cpp
${SRC_DIR}/SFGUI/Widget.cpp
${SRC_DIR}/SFGUI/Window.cpp
)
include_directories( ${INC_DIR} )
include_directories( ${SFML_INCLUDE_DIR} )
include_directories( ${OPENGL_INCLUDE_DIR} )
include_directories( "${PROJECT_SOURCE_DIR}/extlibs/libELL/include" )
include_directories( "${PROJECT_SOURCE_DIR}/extlibs/GLee/include" )
### GLee ###
set(
SOURCES
${SOURCES}
${PROJECT_SOURCE_DIR}/extlibs/GLee/src/GLee.c
)
set_source_files_properties( ${PROJECT_SOURCE_DIR}/extlibs/GLee/src/GLee.c PROPERTIES COMPILE_FLAGS "-w" )
# Static runtime linkage for our favorite compiler.
if( MSVC AND STATIC_STD_LIBS )
foreach( flag CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO )
if( ${flag} MATCHES "/MD" )
string( REGEX REPLACE "/MD" "/MT" ${flag} "${${flag}}" )
endif()
endforeach()
endif()
# Add the library.
if( BUILD_SHARED_LIBS )
add_library( sfgui SHARED ${SOURCES} )
set_target_properties( sfgui PROPERTIES DEBUG_POSTFIX -d )
if ( WIN32 AND CMAKE_COMPILER_IS_GNUCXX )
set_target_properties( sfgui PROPERTIES PREFIX "" )
set_target_properties( sfgui PROPERTIES IMPORT_SUFFIX ".a" )
endif()
else()
add_definitions( -DSFGUI_STATIC )
add_library( sfgui ${SOURCES} )
set_target_properties( sfgui PROPERTIES DEBUG_POSTFIX -s-d )
set_target_properties( sfgui PROPERTIES RELEASE_POSTFIX -s )
set_target_properties( sfgui PROPERTIES MINSIZEREL_POSTFIX -s )
endif()
# Tell the compiler to export when necessary.
set_target_properties( sfgui PROPERTIES DEFINE_SYMBOL SFGUI_EXPORTS )
target_link_libraries( sfgui ${SFML_GRAPHICS_LIBRARY} ${SFML_WINDOW_LIBRARY} ${SFML_SYSTEM_LIBRARY} ${OPENGL_gl_LIBRARY} )
if ( APPLE )
target_link_libraries( sfgui ${COREFOUNDATION_LIBRARY} )
endif()
### EXAMPLES ###
if( BUILD_EXAMPLES )
add_subdirectory( "examples" )
endif()
### INSTALL TARGETS ###
install(
TARGETS sfgui
RUNTIME DESTINATION bin COMPONENT bin
LIBRARY DESTINATION lib COMPONENT bin
ARCHIVE DESTINATION lib COMPONENT dev
)
install(
DIRECTORY include
DESTINATION .
)
install(
FILES README AUTHORS LICENSE
DESTINATION ${SHARE_TARGET_DIR}
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment