CMakeLists.txt 2.69 KB
SET(EXAMPLES_SRC_DIR ${ROOT_SRC_DIR}/examples)

MESSAGE(STATUS "Building examples.")
MESSAGE(STATUS "ENABLE_VULKAN: ${ENABLE_VULKAN}")
MESSAGE(STATUS "ENABLE_PHYSICS_2D: ${ENABLE_PHYSICS_2D}")
MESSAGE(STATUS "ENABLE_PHYSICS_3D: ${ENABLE_PHYSICS_3D}")
MESSAGE(STATUS "ENABLE_SCENE3D: ${ENABLE_SCENE3D}")

# Get all subdirectory names from EXAMPLES_SRC_DIR
MACRO(SUBDIRLIST result curdir)
  FILE(GLOB children RELATIVE ${curdir} ${curdir}/*)
  SET(dirlist "")
  FOREACH(child ${children})
    IF(IS_DIRECTORY ${curdir}/${child})
        LIST(APPEND dirlist ${child})
    ENDIF()
  ENDFOREACH()
  SET(${result} ${dirlist})
ENDMACRO()
SUBDIRLIST(SUBDIRS ${EXAMPLES_SRC_DIR})

MESSAGE(STATUS "Subdirs: ${SUBDIRS}")

SET(SCENE3D_DIR "scene3d")
IF (NOT "${ENABLE_SCENE3D}" )
  IF ( ${SCENE3D_DIR} IN_LIST SUBDIRS )
    LIST( REMOVE_ITEM SUBDIRS ${SCENE3D_DIR} )
  ENDIF()
ENDIF()

SET(PHYSICS_2D_DIR "chipmunk-physics")
IF (NOT "${ENABLE_PHYSICS_2D}" )
  IF ( ${PHYSICS_2D_DIR} IN_LIST SUBDIRS )
    LIST( REMOVE_ITEM SUBDIRS ${PHYSICS_2D_DIR} )
  ENDIF()
ENDIF()

IF(ENABLE_VULKAN)
  # Don't build GL examples
  SET(GLES_EXAMPLES "direct-rendering")
  IF( ${GLES_EXAMPLES} IN_LIST SUBDIRS)
    LIST(REMOVE_ITEM SUBDIRS ${GLES_EXAMPLES})
  ENDIF()
ENDIF()

FIND_PROGRAM( SHADER_GENERATOR "dali-shader-generator" )
IF( NOT SHADER_GENERATOR )
  MESSAGE( FATAL_ERROR "dali-shader-generator not found!" )
ENDIF()

FUNCTION(INSTALL_EXAMPLES EXAMPLE)
  SET(PARENT_CMAKE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../")

  FILE(GLOB_RECURSE SRCS "${EXAMPLES_SRC_DIR}/${EXAMPLE}/*.cpp")
  SET(SRCS ${SRCS} "${ROOT_SRC_DIR}/shared/resources-location.cpp")

  IF(SHARED)
    ADD_LIBRARY(${EXAMPLE}.example SHARED ${SRCS})
  ELSE()
    ADD_EXECUTABLE(${EXAMPLE}.example ${SRCS})
  ENDIF()

  IF(EXISTS ${EXAMPLES_SRC_DIR}/${EXAMPLE}/dependencies.cmake)
    INCLUDE( ${EXAMPLES_SRC_DIR}/${EXAMPLE}/dependencies.cmake OPTIONAL)
  ENDIF()

  # Generate source files for shaders
  SET(SHADER_SOURCE_DIR "${EXAMPLES_SRC_DIR}/${EXAMPLE}/shaders/")
  IF (EXISTS ${SHADER_SOURCE_DIR})
    SET(SHADER_GENERATED_DIR "${EXAMPLES_SRC_DIR}/${EXAMPLE}/generated/")
    ADD_CUSTOM_TARGET(${EXAMPLE}-generate-shaders
      COMMAND ${SHADER_GENERATOR} --skip ${SHADER_SOURCE_DIR} ${SHADER_GENERATED_DIR})
    SET_PROPERTY(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
      "${SHADER_GENERATED_DIR}")
    ADD_DEPENDENCIES(${EXAMPLE}.example ${EXAMPLE}-generate-shaders)
  ENDIF()

  TARGET_LINK_LIBRARIES(${EXAMPLE}.example ${REQUIRED_LIBS})
  INSTALL(TARGETS ${EXAMPLE}.example DESTINATION ${BINDIR})

ENDFUNCTION()

IF( NOT BUILD_EXAMPLE_NAME )
  FOREACH(EXAMPLE ${SUBDIRS})
    INSTALL_EXAMPLES(${EXAMPLE})
  ENDFOREACH(EXAMPLE)
ELSE()
  INSTALL_EXAMPLES(${BUILD_EXAMPLE_NAME})
ENDIF()