PROJECT(freeglut)
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+# NOTE: On Windows and Cygwin, the dll's are placed in the
+# CMAKE_RUNTIME_OUTPUT_DIRECTORY, while their corresponding import
+# libraries end up in CMAKE_ARCHIVE_OUTPUT_DIRECTORY. On other
+# platforms, such as Linux, the shared libraries are put in
+# CMAKE_ARCHIVE_OUTPUT_DIRECTORY instead.
+# Static libraries end up in CMAKE_ARCHIVE_OUTPUT_DIRECTORY on all
+# platforms (unless
+SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
+SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
+
+
SET(FREEGLUT_HEADERS
include/GL/freeglut.h
include/GL/freeglut_ext.h
# Android port requires adding a version of these compatible with
# OpenGL ES (TODO):
IF(NOT ANDROID)
- LIST(APPEND FREEGLUT_SRCS
- src/fg_font.c
- src/fg_geometry.c
- src/fg_menu.c
- src/fg_teapot.c
-)
+ LIST(APPEND FREEGLUT_SRCS
+ src/fg_font.c
+ src/fg_geometry.c
+ src/fg_menu.c
+ src/fg_teapot.c
+ )
ENDIF()
-IF(WIN32) # TODO: is this true for 64 bit as well? Chaneg to WINDOWS?
+IF(WIN32)
LIST(APPEND FREEGLUT_SRCS
src/mswin/fg_cursor_mswin.c
src/mswin/fg_display_mswin.c
src/mswin/fg_state_mswin.c
src/mswin/fg_structure_mswin.c
src/mswin/fg_window_mswin.c
-)
+ freeglut.rc
+ )
+ IF (NOT CMAKE_CL_64)
+ # .def file only for 32bit Windows builds
+ LIST(APPEND FREEGLUT_SRCS
+ src/freeglutdll.def
+ )
+ ENDIF()
+
ELSEIF(ANDROID)
LIST(APPEND FREEGLUT_SRCS
src/egl/fg_internal_egl.h
src/android/fg_window_android.c
src/android/opengles_stubs.c
src/android/fg_internal_android.h
-)
+ )
ELSE()
LIST(APPEND FREEGLUT_SRCS
src/x11/fg_cursor_x11.c
src/x11/fg_structure_x11.c
src/x11/fg_window_x11.c
src/x11/fg_xinput_x11.c
-)
-
-
+ )
ENDIF()
-# Neatly organize all of the output files in the build directory
-SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
-SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
-
# BUILD_SHARED_LIBS is already a standard CMake variable, but we need to
# re-declare it here so it will show up in the GUI.
+# by default, we want to build both
OPTION(BUILD_SHARED_LIBS "Build FreeGLUT shared library." ON)
OPTION(BUILD_STATIC_LIBS "Build FreeGLUT static library." ON)
INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/src)
ADD_DEFINITIONS(-DHAVE_CONFIG_H)
-# by default, at least on UNIX, we want to build both
IF(BUILD_SHARED_LIBS)
ADD_LIBRARY(freeglut SHARED ${FREEGLUT_SRCS})
ENDIF()
IF(WIN32)
LIST(APPEND LIBS winmm)
IF(BUILD_SHARED_LIBS)
- LIST(APPEND FREEGLUT_SRCS src/Common/freeglutdll.def freeglut.rc)
- # XXX I assume that if we want both shared and static this one is appropriate
- ADD_DEFINITIONS(-DFREEGLUT_EXPORTS)
- ELSE()
- ADD_DEFINITIONS(-DFREEGLUT_STATIC)
+ SET_TARGET_PROPERTIES(freeglut PROPERTIES COMPILE_FLAGS -DFREEGLUT_EXPORTS)
+ ENDIF()
+ IF(BUILD_STATIC_LIBS)
+ SET_TARGET_PROPERTIES(freeglut_static PROPERTIES COMPILE_FLAGS -DFREEGLUT_STATIC)
+ # need to set machine:x64 for linker, at least for VC10, and
+ # doesn't hurt for older compilers:
+ # http://public.kitware.com/Bug/view.php?id=11240#c22768
+ IF (CMAKE_CL_64)
+ SET_TARGET_PROPERTIES(freeglut_static PROPERTIES STATIC_LIBRARY_FLAGS "/machine:x64")
+ ENDIF()
ENDIF()
ELSE()
# on UNIX we need to make sure:
IF(BUILD_STATIC_LIBS)
ADD_EXECUTABLE(${name}_static ${ARGN})
TARGET_LINK_LIBRARIES(${name}_static ${DEMO_LIBS} freeglut_static)
+ SET_TARGET_PROPERTIES(${name}_static PROPERTIES COMPILE_FLAGS -DFREEGLUT_STATIC)
ENDIF()
ENDIF()
ENDMACRO()
progs/demos/spaceball/vmath.h)
ADD_DEMO(subwin progs/demos/subwin/subwin.c)
ADD_DEMO(timer progs/demos/timer/timer.c)
+
+# finally, if any demos are built, copy needed files to output directory
+# (currently, thats just the input file for the Fractals demo)
+IF(FREEGLUT_BUILD_DEMOS)
+ # 1) copy fractals.dat from freeglut/progs/demos/Fractals
+ IF(BUILD_SHARED_LIBS)
+ SET(Frac_target Fractals)
+ ELSE()
+ SET(Frac_target Fractals_static)
+ ENDIF()
+ GET_TARGET_PROPERTY(DEMO_OUTPUT_DIRECTORY ${Frac_target} RUNTIME_OUTPUT_DIRECTORY)
+ ADD_CUSTOM_COMMAND(
+ TARGET ${Frac_target}
+ POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${PROJECT_SOURCE_DIR}/progs/demos/Fractals/fractals.dat
+ ${DEMO_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}
+ )
+ENDIF()