CMAKE_MINIMUM_REQUIRED(VERSION 2.6) PROJECT(dali-demo C CXX) SET(dali-demo_VERSION_MAJOR 1) SET(dali-demo_VERSION_MINOR 0) SET(GCC_COMPILER_VERSION_REQUIRED "6") if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS GCC_COMPILER_VERSION_REQUIRED) message(FATAL_ERROR "The GCC required compiler version is " ${GCC_COMPILER_VERSION_REQUIRED}) endif() endif() # Define options to CMake OPTION(ENABLE_EXPORTALL "Enable Export all symbols" OFF) OPTION(ENABLE_DEBUG "Enable Debug" OFF) OPTION(ENABLE_PKG_CONFIGURE "Use pkgconfig" ON) OPTION(INTERNATIONALIZATION "Internationalization demo string names" ON) SET(ROOT_SRC_DIR ${CMAKE_SOURCE_DIR}/../..) SET(DEMO_SHARED ${CMAKE_SOURCE_DIR}/../../shared) SET(PREFIX ${CMAKE_INSTALL_PREFIX}) IF(DEFINED DALI_APP_DIR) SET(BINDIR ${DALI_APP_DIR}) ELSE() SET(BINDIR ${PREFIX}/bin) ENDIF() IF(DEFINED DALI_APP_RES_DIR) SET(APP_DATA_RES_DIR ${DALI_APP_RES_DIR}) ELSE() SET(APP_DATA_RES_DIR ${PREFIX}/share/com.samsung.dali-demo/res) ENDIF() MESSAGE( STATUS "CMAKE_BUILD_TYPE: " ${CMAKE_BUILD_TYPE} ) IF(CMAKE_BUILD_TYPE MATCHES Debug) SET( ENABLE_DEBUG ON ) ENDIF() IF( ENABLE_DEBUG ) MESSAGE( STATUS "CMAKE_BUILD_TYPE: " Debug ) SET( ENABLE_EXPORTALL ON ) ELSE() MESSAGE( STATUS "CMAKE_BUILD_TYPE: " Release ) ENDIF() SET(RESOURCE_DIR ${ROOT_SRC_DIR}/resources) SET(LOCAL_IMAGES_DIR ${RESOURCE_DIR}/images) SET(LOCAL_GAME_DIR ${RESOURCE_DIR}/game) SET(LOCAL_VIDEOS_DIR ${RESOURCE_DIR}/videos) SET(LOCAL_MODELS_DIR ${RESOURCE_DIR}/models) SET(LOCAL_SCRIPTS_DIR ${RESOURCE_DIR}/scripts) SET(LOCAL_SHADERS_DIR ${RESOURCE_DIR}/shaders) IF(NOT DEFINED LOCAL_STYLE_DIR) SET(LOCAL_STYLE_DIR ${RESOURCE_DIR}/style) ENDIF() IF(ANDROID) SET(LOCAL_STYLE_ANDROID_DIR ${RESOURCE_DIR}/style/android) ENDIF() SET(IMAGES_DIR ${APP_DATA_RES_DIR}/images/) SET(GAME_DIR ${APP_DATA_RES_DIR}/game/) SET(VIDEOS_DIR ${APP_DATA_RES_DIR}/videos/) SET(MODELS_DIR ${APP_DATA_RES_DIR}/models/) SET(SCRIPTS_DIR ${APP_DATA_RES_DIR}/scripts/) SET(SHADERS_DIR ${APP_DATA_RES_DIR}/shaders/) SET(STYLE_DIR ${APP_DATA_RES_DIR}/style/) IF(NOT DEFINED LOCALE_DIR) SET(LOCALE_DIR ${PREFIX}/share/locale) ENDIF() IF(DEFINED DALI_DEMO_RES_DIR) SET(DEMO_IMAGE_DIR \\"${DALI_DEMO_RES_DIR}/images/\\") SET(DEMO_GAME_DIR \\"${DALI_DEMO_RES_DIR}/game/\\") SET(DEMO_VIDEO_DIR \\"${DALI_DEMO_RES_DIR}/videos/\\") SET(DEMO_MODEL_DIR \\"${DALI_DEMO_RES_DIR}/models/\\") SET(DEMO_SCRIPT_DIR \\"${DALI_DEMO_RES_DIR}/scripts/\\") SET(DEMO_SHADER_DIR \\"${DALI_DEMO_RES_DIR}/shaders/\\") SET(DEMO_STYLE_DIR \\"${DALI_DEMO_RES_DIR}/style/\\") SET(DEMO_THEME_PATH \\"${DALI_DEMO_RES_DIR}/style/demo-theme.json\\") SET(DEMO_LOCALE_DIR \\"${DALI_DEMO_RES_DIR}/locale/\\") SET(DEMO_STYLE_IMAGE_DIR \\"${DALI_DEMO_RES_DIR}/style/images\\") ELSE() SET(DEMO_GAME_DIR \\"${GAME_DIR}\\") SET(DEMO_IMAGE_DIR \\"${IMAGES_DIR}\\") SET(DEMO_VIDEO_DIR \\"${VIDEOS_DIR}\\") SET(DEMO_MODEL_DIR \\"${MODELS_DIR}\\") SET(DEMO_SCRIPT_DIR \\"${SCRIPTS_DIR}\\") SET(DEMO_SHADER_DIR \\"${SHADERS_DIR}\\") SET(DEMO_STYLE_DIR \\"${STYLE_DIR}\\") SET(DEMO_THEME_PATH \\"${STYLE_DIR}demo-theme.json\\") SET(DEMO_LOCALE_DIR \\"${LOCALE_DIR}\\") SET(DEMO_STYLE_IMAGE_DIR ${STYLE_DIR}/images) ENDIF() SET(DEMO_EXAMPLE_BIN \\"${BINDIR}/\\") SET(DEMO_LANG \\"${LANG}\\") FILE(GLOB LOCAL_IMAGES_PNG RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.png") FILE(GLOB LOCAL_IMAGES_JPG RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.jpg") FILE(GLOB LOCAL_IMAGES_GIF RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.gif") FILE(GLOB LOCAL_IMAGES_BMP RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.bmp") FILE(GLOB LOCAL_IMAGES_ICO RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.ico") FILE(GLOB LOCAL_IMAGES_WBMP RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.wbmp") FILE(GLOB LOCAL_IMAGES_KTX RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.ktx") FILE(GLOB LOCAL_IMAGES_ASTC RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.astc") FILE(GLOB LOCAL_IMAGES_SVG RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.svg") FILE(GLOB LOCAL_IMAGES_JSON RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.json") SET(LOCAL_IMAGES_LIST ${LOCAL_IMAGES_PNG};${LOCAL_IMAGES_JPG};${LOCAL_IMAGES_GIF};${LOCAL_IMAGES_BMP};${LOCAL_IMAGES_ICO};${LOCAL_IMAGES_WBMP};${LOCAL_IMAGES_KTX};${LOCAL_IMAGES_ASTC};${LOCAL_IMAGES_SVG};${LOCAL_IMAGES_JSON}) FOREACH(flag ${LOCAL_IMAGES_LIST}) INSTALL(FILES ${LOCAL_IMAGES_DIR}/${flag} DESTINATION ${IMAGES_DIR}) ENDFOREACH(flag) FILE(GLOB LOCAL_VIDEOS_LIST RELATIVE "${LOCAL_VIDEOS_DIR}" "${LOCAL_VIDEOS_DIR}/*") FOREACH(flag ${LOCAL_VIDEOS_LIST}) INSTALL(FILES ${LOCAL_VIDEOS_DIR}/${flag} DESTINATION ${VIDEOS_DIR}) ENDFOREACH(flag) FILE(GLOB LOCAL_MODELS_LIST RELATIVE "${LOCAL_MODELS_DIR}" "${LOCAL_MODELS_DIR}/*") FOREACH(flag ${LOCAL_MODELS_LIST}) INSTALL(FILES ${LOCAL_MODELS_DIR}/${flag} DESTINATION ${MODELS_DIR}) ENDFOREACH(flag) FILE(GLOB LOCAL_SCRIPTS_LIST RELATIVE "${LOCAL_SCRIPTS_DIR}" "${LOCAL_SCRIPTS_DIR}/*.json") FOREACH(flag ${LOCAL_SCRIPTS_LIST}) INSTALL(FILES ${LOCAL_SCRIPTS_DIR}/${flag} DESTINATION ${SCRIPTS_DIR}) ENDFOREACH(flag) FILE(GLOB LOCAL_SHADERS_LIST RELATIVE "${LOCAL_SHADERS_DIR}" "${LOCAL_SHADERS_DIR}/*") FOREACH(flag ${LOCAL_SHADERS_LIST}) INSTALL(FILES ${LOCAL_SHADERS_DIR}/${flag} DESTINATION ${SHADERS_DIR}) ENDFOREACH(flag) FILE(GLOB LOCAL_GAME_LIST RELATIVE "${LOCAL_GAME_DIR}" "${LOCAL_GAME_DIR}/*.*") FOREACH(flag ${LOCAL_GAME_LIST}) INSTALL(FILES ${LOCAL_GAME_DIR}/${flag} DESTINATION ${GAME_DIR}) ENDFOREACH(flag) #Create resources location file CONFIGURE_FILE( resources-location.in ${DEMO_SHARED}/resources-location.cpp ) FILE(GLOB LOCAL_STYLES_LIST "${LOCAL_STYLE_DIR}/*.json") FOREACH(flag ${LOCAL_STYLES_LIST}) INSTALL(FILES ${flag} DESTINATION ${STYLE_DIR}) ENDFOREACH(flag) MESSAGE("Installed ${LOCAL_STYLES_LIST} to ${STYLE_DIR}") IF(ANDROID) FILE(GLOB LOCAL_STYLES_ANDROID_LIST "${LOCAL_STYLE_ANDROID_DIR}/*.json") FOREACH(flag ${LOCAL_STYLES_ANDROID_LIST}) INSTALL(FILES ${flag} DESTINATION ${STYLE_DIR}) ENDFOREACH(flag) MESSAGE("Installed ${LOCAL_STYLES_ANDROID_LIST} to ${STYLE_DIR}") ENDIF() FILE(GLOB LOCAL_STYLE_IMAGES_LIST "${LOCAL_STYLE_DIR}/images/*.png") FOREACH(flag ${LOCAL_STYLE_IMAGES_LIST}) INSTALL(FILES ${flag} DESTINATION ${STYLE_DIR}/images) ENDFOREACH(flag) MESSAGE("Installed style resources ${LOCAL_STYLE_IMAGES_LIST} to ${STYLE_DIR}/images") IF( ENABLE_PKG_CONFIGURE ) SET(PKG_LIST dali2-core dali2-adaptor dali2-toolkit) INCLUDE(FindPkgConfig) pkg_check_modules(REQUIRED_PKGS REQUIRED ${PKG_LIST}) FOREACH(flag ${REQUIRED_PKGS_CFLAGS}) SET(REQUIRED_CFLAGS "${REQUIRED_CFLAGS} ${flag}") ENDFOREACH(flag) ENDIF() SET( VCPKG_INCLUDE_DIR "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include") IF( WIN32 ) # WIN32 includes x64 as well according to the cmake doc. FIND_PACKAGE( pthreads REQUIRED ) FIND_PACKAGE( curl REQUIRED ) FIND_LIBRARY( GETOPT_LIBRARY NAMES getopt ) FIND_LIBRARY( EXIF_LIBRARY NAMES libexif ) FIND_PACKAGE( png REQUIRED ) FIND_PACKAGE( gif REQUIRED ) FIND_PACKAGE( jpeg REQUIRED ) FIND_LIBRARY( TURBO_JPEG_LIBRARY NAMES turbojpeg ) FIND_PACKAGE( unofficial-fontconfig REQUIRED ) FIND_PACKAGE( freetype REQUIRED ) FIND_PACKAGE( harfbuzz REQUIRED ) FIND_LIBRARY( FRIBIDI_LIBRARY NAMES fribidi ) FIND_PACKAGE( unofficial-angle REQUIRED ) FIND_PACKAGE( unofficial-cairo REQUIRED ) FIND_PACKAGE( dali-windows-dependencies REQUIRED ) FIND_PACKAGE( dali2-core REQUIRED ) FIND_PACKAGE( dali2-adaptor REQUIRED ) FIND_PACKAGE( dali2-toolkit REQUIRED ) # Set up the include dir SET( INCLUDE_DIR $ENV{includedir} ) IF( NOT INCLUDE_DIR ) SET( INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR} ) ENDIF() IF( NOT INCLUDE_DIR ) SET( INCLUDE_DIR ${PREFIX}/include ) ENDIF() SET( LIB_DIR $ENV{libdir} ) IF( NOT LIB_DIR ) SET( LIB_DIR ${CMAKE_INSTALL_LIBDIR} ) ENDIF() IF( NOT LIB_DIR ) SET( LIB_DIR ${PREFIX}/lib ) ENDIF() SET( REQUIRED_LIBS PThreads4W::PThreads4W CURL::libcurl ${GETOPT_LIBRARY} ${EXIF_LIBRARY} ${PNG_LIBRARIES} ${GIF_LIBRARIES} JPEG::JPEG ${TURBO_JPEG_LIBRARY} unofficial::fontconfig::fontconfig Freetype::Freetype harfbuzz::harfbuzz ${FRIBIDI_LIBRARY} unofficial::angle::libEGL unofficial::angle::libGLESv2 unofficial::cairo::cairo dali-windows-dependencies::dali-windows-dependencies dali2-core::dali2-core dali2-adaptor::dali2-adaptor dali2-toolkit::dali2-toolkit ) ELSEIF( UNIX ) SET( REQUIRED_LIBS ${REQUIRED_PKGS_LDFLAGS} -pie ) ENDIF() SET(DALI_DEMO_CFLAGS "-DDEMO_GAME_DIR=${DEMO_GAME_DIR} -DDEMO_IMAGE_DIR=${DEMO_IMAGE_DIR} -DDEMO_VIDEO_DIR=${DEMO_VIDEO_DIR} -DDEMO_MODEL_DIR=${DEMO_MODEL_DIR} -DDEMO_SCRIPT_DIR=${DEMO_SCRIPT_DIR} -DDEMO_SHADER_DIR=${DEMO_SHADER_DIR} -DDEMO_STYLE_DIR=${DEMO_STYLE_DIR} -DDEMO_THEME_PATH=${DEMO_THEME_PATH} -DDEMO_EXAMPLE_BIN=${DEMO_EXAMPLE_BIN} -DDEMO_LOCALE_DIR=${DEMO_LOCALE_DIR} -DDEMO_LANG=${DEMO_LANG}") IF( ENABLE_DEBUG ) SET(DALI_DEMO_CFLAGS "${DALI_DEMO_CFLAGS} -DDEBUG_ENABLED") ENDIF() IF( UNIX ) IF( NOT ${ENABLE_EXPORTALL} ) ADD_DEFINITIONS( "-DHIDE_DALI_INTERNALS" ) ENDIF() ENDIF() ########################################################################### # Internationalization IF (UNIX) SET(PO_DIR ${RESOURCE_DIR}/po) FILE(GLOB PO_FILES RELATIVE "${PO_DIR}" "${PO_DIR}/*.po") SET(MSGFMT "/usr/bin/msgfmt") SET(MO_FILES_DIR ${CMAKE_BINARY_DIR}/mo) FILE(MAKE_DIRECTORY ${MO_FILES_DIR}) FOREACH(PO_FILE ${PO_FILES}) SET(PO_FILE ${PO_DIR}/${PO_FILE}) MESSAGE("PO: ${PO_FILE}") GET_FILENAME_COMPONENT(ABS_PO_FILE ${PO_FILE} ABSOLUTE) GET_FILENAME_COMPONENT(lang ${ABS_PO_FILE} NAME_WE) SET(MO_FILE ${MO_FILES_DIR}/${lang}.mo) ADD_CUSTOM_COMMAND(OUTPUT ${MO_FILE} COMMAND ${MSGFMT} -o ${MO_FILE} ${ABS_PO_FILE} DEPENDS ${ABS_PO_FILE}) INSTALL(FILES ${MO_FILE} DESTINATION ${LOCALE_DIR}/${lang}/LC_MESSAGES RENAME ${PROJECT_NAME}.mo) SET(MO_FILES ${MO_FILES} ${MO_FILE}) ENDFOREACH(PO_FILE) MESSAGE(".mo files: ${MO_FILES}") ADD_CUSTOM_TARGET(po ALL DEPENDS ${MO_FILES}) ENDIF() IF (INTERNATIONALIZATION) SET(DALI_DEMO_CFLAGS "${DALI_DEMO_CFLAGS} -DINTERNATIONALIZATION_ENABLED") ENDIF(INTERNATIONALIZATION) ########################################################################### IF( WIN32 ) ADD_COMPILE_OPTIONS( /FIdali-windows-dependencies.h ) # Adds missing definitions. ADD_COMPILE_OPTIONS( /vmg ) # Avoids a 'reinterpret_cast' compile error while compiling signals and callbacks. ADD_COMPILE_OPTIONS( /wd4251 ) # Ignores warning C4251: "'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2'" ELSE() SET(DALI_DEMO_CFLAGS "${DALI_DEMO_CFLAGS} -Werror -Wall -fPIE") IF( NOT ${ENABLE_EXPORTALL} ) SET(DALI_DEMO_CFLAGS "${DALI_DEMO_CFLAGS} -fvisibility=hidden") ENDIF() ENDIF() SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${REQUIRED_CFLAGS} ${DALI_DEMO_CFLAGS}") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_FLAGS}") INCLUDE_DIRECTORIES( ${SYSTEM_INCLUDE_DIR} ${ROOT_SRC_DIR} ${VCPKG_INCLUDE_DIR} ${INCLUDE_DIR} ) IF(ANDROID) INCLUDE_DIRECTORIES( ${ANDROID_NDK}/sources/android/native_app_glue ) INCLUDE_DIRECTORIES( ${ANDROID_NDK}/sysroot/usr ) INCLUDE_DIRECTORIES( ${ANDROID_NDK}/sysroot/usr/include/android ) INCLUDE_DIRECTORIES( ${ROOT_SRC_DIR}/build/android/app/src/main/cpp ) ENDIF() LINK_DIRECTORIES(${LIB_DIR}) ADD_SUBDIRECTORY(demo) ADD_SUBDIRECTORY(examples) ADD_SUBDIRECTORY(examples-reel) ADD_SUBDIRECTORY(tests-reel) ADD_SUBDIRECTORY(builder) MESSAGE( " Folder DEMO_IMAGE_DIR : [" ${DEMO_IMAGE_DIR} "]" ) MESSAGE( " Folder DEMO_STYLE_DIR : [" ${DEMO_STYLE_DIR} "]" ) MESSAGE( " Folder DEMO_SHADER_DIR : [" ${DEMO_SHADER_DIR} "]" ) MESSAGE( " Folder DEMO_THEME_PATH : [" ${DEMO_THEME_PATH} "]" ) MESSAGE( " Folder DEMO_GAME_DIR : [" ${DEMO_GAME_DIR} "]" ) MESSAGE( " Folder DEMO_VIDEO_DIR : [" ${DEMO_VIDEO_DIR} "]" ) MESSAGE( " Folder DEMO_MODEL_DIR : [" ${DEMO_MODEL_DIR} "]" ) MESSAGE( " Folder DEMO_SCRIPT_DIR : [" ${DEMO_SCRIPT_DIR} "]" ) MESSAGE( " Folder DEMO_LOCALE_DIR : [" ${DEMO_LOCALE_DIR} "]" ) MESSAGE( " Folder DEMO_EXAMPLE_BIN : [" ${DEMO_EXAMPLE_BIN} "]" ) MESSAGE( " Folder DEMO_LANG : [" ${DEMO_LANG} "]" )