1 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
2 PROJECT(dali-demo C CXX)
4 SET(dali-demo_VERSION_MAJOR 1)
5 SET(dali-demo_VERSION_MINOR 0)
7 SET(GCC_COMPILER_VERSION_REQUIRED "6")
8 if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
9 if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS GCC_COMPILER_VERSION_REQUIRED)
10 message(FATAL_ERROR "The GCC required compiler version is " ${GCC_COMPILER_VERSION_REQUIRED})
14 # Define options to CMake
15 OPTION(ENABLE_EXPORTALL "Enable Export all symbols" OFF)
16 OPTION(ENABLE_DEBUG "Enable Debug" OFF)
17 OPTION(ENABLE_PKG_CONFIGURE "Use pkgconfig" ON)
18 OPTION(INTERNATIONALIZATION "Internationalization demo string names" ON)
20 SET(ROOT_SRC_DIR ${CMAKE_SOURCE_DIR}/../..)
21 SET(DEMO_SHARED ${CMAKE_SOURCE_DIR}/../../shared)
23 SET(PREFIX ${CMAKE_INSTALL_PREFIX})
25 IF(DEFINED DALI_APP_DIR)
26 SET(BINDIR ${DALI_APP_DIR})
28 SET(BINDIR ${PREFIX}/bin)
31 IF(DEFINED DALI_APP_RES_DIR)
32 SET(APP_DATA_RES_DIR ${DALI_APP_RES_DIR})
34 SET(APP_DATA_RES_DIR ${PREFIX}/share/com.samsung.dali-demo/res)
37 MESSAGE( STATUS "CMAKE_BUILD_TYPE: " ${CMAKE_BUILD_TYPE} )
39 IF(CMAKE_BUILD_TYPE MATCHES Debug)
40 SET( ENABLE_DEBUG ON )
44 MESSAGE( STATUS "CMAKE_BUILD_TYPE: " Debug )
45 SET( ENABLE_EXPORTALL ON )
47 MESSAGE( STATUS "CMAKE_BUILD_TYPE: " Release )
50 SET(RESOURCE_DIR ${ROOT_SRC_DIR}/resources)
51 SET(LOCAL_IMAGES_DIR ${RESOURCE_DIR}/images)
52 SET(LOCAL_GAME_DIR ${RESOURCE_DIR}/game)
53 SET(LOCAL_VIDEOS_DIR ${RESOURCE_DIR}/videos)
54 SET(LOCAL_MODELS_DIR ${RESOURCE_DIR}/models)
55 SET(LOCAL_SCRIPTS_DIR ${RESOURCE_DIR}/scripts)
56 SET(LOCAL_SHADERS_DIR ${RESOURCE_DIR}/shaders)
57 IF(NOT DEFINED LOCAL_STYLE_DIR)
58 SET(LOCAL_STYLE_DIR ${RESOURCE_DIR}/style)
62 SET(LOCAL_STYLE_ANDROID_DIR ${RESOURCE_DIR}/style/android)
65 SET(IMAGES_DIR ${APP_DATA_RES_DIR}/images/)
66 SET(GAME_DIR ${APP_DATA_RES_DIR}/game/)
67 SET(VIDEOS_DIR ${APP_DATA_RES_DIR}/videos/)
68 SET(MODELS_DIR ${APP_DATA_RES_DIR}/models/)
69 SET(SCRIPTS_DIR ${APP_DATA_RES_DIR}/scripts/)
70 SET(SHADERS_DIR ${APP_DATA_RES_DIR}/shaders/)
71 SET(STYLE_DIR ${APP_DATA_RES_DIR}/style/)
73 IF(NOT DEFINED LOCALE_DIR)
74 SET(LOCALE_DIR ${PREFIX}/share/locale)
77 IF(DEFINED DALI_DEMO_RES_DIR)
78 SET(DEMO_IMAGE_DIR \\"${DALI_DEMO_RES_DIR}/images/\\")
79 SET(DEMO_GAME_DIR \\"${DALI_DEMO_RES_DIR}/game/\\")
80 SET(DEMO_VIDEO_DIR \\"${DALI_DEMO_RES_DIR}/videos/\\")
81 SET(DEMO_MODEL_DIR \\"${DALI_DEMO_RES_DIR}/models/\\")
82 SET(DEMO_SCRIPT_DIR \\"${DALI_DEMO_RES_DIR}/scripts/\\")
83 SET(DEMO_SHADER_DIR \\"${DALI_DEMO_RES_DIR}/shaders/\\")
84 SET(DEMO_STYLE_DIR \\"${DALI_DEMO_RES_DIR}/style/\\")
85 SET(DEMO_THEME_PATH \\"${DALI_DEMO_RES_DIR}/style/demo-theme.json\\")
86 SET(DEMO_LOCALE_DIR \\"${DALI_DEMO_RES_DIR}/locale/\\")
87 SET(DEMO_STYLE_IMAGE_DIR \\"${DALI_DEMO_RES_DIR}/style/images\\")
89 SET(DEMO_GAME_DIR \\"${GAME_DIR}\\")
90 SET(DEMO_IMAGE_DIR \\"${IMAGES_DIR}\\")
91 SET(DEMO_VIDEO_DIR \\"${VIDEOS_DIR}\\")
92 SET(DEMO_MODEL_DIR \\"${MODELS_DIR}\\")
93 SET(DEMO_SCRIPT_DIR \\"${SCRIPTS_DIR}\\")
94 SET(DEMO_SHADER_DIR \\"${SHADERS_DIR}\\")
95 SET(DEMO_STYLE_DIR \\"${STYLE_DIR}\\")
96 SET(DEMO_THEME_PATH \\"${STYLE_DIR}demo-theme.json\\")
97 SET(DEMO_LOCALE_DIR \\"${LOCALE_DIR}\\")
98 SET(DEMO_STYLE_IMAGE_DIR ${STYLE_DIR}/images)
101 SET(DEMO_EXAMPLE_BIN \\"${BINDIR}/\\")
102 SET(DEMO_LANG \\"${LANG}\\")
104 FILE(GLOB LOCAL_IMAGES_PNG RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.png")
105 FILE(GLOB LOCAL_IMAGES_JPG RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.jpg")
106 FILE(GLOB LOCAL_IMAGES_GIF RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.gif")
107 FILE(GLOB LOCAL_IMAGES_WEBP RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.webp")
108 FILE(GLOB LOCAL_IMAGES_BMP RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.bmp")
109 FILE(GLOB LOCAL_IMAGES_ICO RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.ico")
110 FILE(GLOB LOCAL_IMAGES_WBMP RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.wbmp")
111 FILE(GLOB LOCAL_IMAGES_KTX RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.ktx")
112 FILE(GLOB LOCAL_IMAGES_ASTC RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.astc")
113 FILE(GLOB LOCAL_IMAGES_SVG RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.svg")
114 FILE(GLOB LOCAL_IMAGES_JSON RELATIVE "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.json")
116 SET(LOCAL_IMAGES_LIST ${LOCAL_IMAGES_PNG};${LOCAL_IMAGES_JPG};${LOCAL_IMAGES_GIF};${LOCAL_IMAGES_WEBP};${LOCAL_IMAGES_BMP};${LOCAL_IMAGES_ICO};${LOCAL_IMAGES_WBMP};${LOCAL_IMAGES_KTX};${LOCAL_IMAGES_ASTC};${LOCAL_IMAGES_SVG};${LOCAL_IMAGES_JSON})
117 FOREACH(flag ${LOCAL_IMAGES_LIST})
118 INSTALL(FILES ${LOCAL_IMAGES_DIR}/${flag} DESTINATION ${IMAGES_DIR})
121 FILE(GLOB LOCAL_VIDEOS_LIST RELATIVE "${LOCAL_VIDEOS_DIR}" "${LOCAL_VIDEOS_DIR}/*")
122 FOREACH(flag ${LOCAL_VIDEOS_LIST})
123 INSTALL(FILES ${LOCAL_VIDEOS_DIR}/${flag} DESTINATION ${VIDEOS_DIR})
126 FILE(GLOB LOCAL_MODELS_LIST RELATIVE "${LOCAL_MODELS_DIR}" "${LOCAL_MODELS_DIR}/*")
127 FOREACH(flag ${LOCAL_MODELS_LIST})
128 INSTALL(FILES ${LOCAL_MODELS_DIR}/${flag} DESTINATION ${MODELS_DIR})
131 FILE(GLOB LOCAL_SCRIPTS_LIST RELATIVE "${LOCAL_SCRIPTS_DIR}" "${LOCAL_SCRIPTS_DIR}/*.json")
132 FOREACH(flag ${LOCAL_SCRIPTS_LIST})
133 INSTALL(FILES ${LOCAL_SCRIPTS_DIR}/${flag} DESTINATION ${SCRIPTS_DIR})
136 FILE(GLOB LOCAL_SHADERS_LIST RELATIVE "${LOCAL_SHADERS_DIR}" "${LOCAL_SHADERS_DIR}/*")
137 FOREACH(flag ${LOCAL_SHADERS_LIST})
138 INSTALL(FILES ${LOCAL_SHADERS_DIR}/${flag} DESTINATION ${SHADERS_DIR})
141 FILE(GLOB LOCAL_GAME_LIST RELATIVE "${LOCAL_GAME_DIR}" "${LOCAL_GAME_DIR}/*.*")
142 FOREACH(flag ${LOCAL_GAME_LIST})
143 INSTALL(FILES ${LOCAL_GAME_DIR}/${flag} DESTINATION ${GAME_DIR})
146 #Create resources location file
147 CONFIGURE_FILE( resources-location.in ${DEMO_SHARED}/resources-location.cpp )
149 FILE(GLOB LOCAL_STYLES_LIST "${LOCAL_STYLE_DIR}/*.json")
150 FOREACH(flag ${LOCAL_STYLES_LIST})
151 INSTALL(FILES ${flag} DESTINATION ${STYLE_DIR})
153 MESSAGE("Installed ${LOCAL_STYLES_LIST} to ${STYLE_DIR}")
156 FILE(GLOB LOCAL_STYLES_ANDROID_LIST "${LOCAL_STYLE_ANDROID_DIR}/*.json")
157 FOREACH(flag ${LOCAL_STYLES_ANDROID_LIST})
158 INSTALL(FILES ${flag} DESTINATION ${STYLE_DIR})
160 MESSAGE("Installed ${LOCAL_STYLES_ANDROID_LIST} to ${STYLE_DIR}")
163 FILE(GLOB LOCAL_STYLE_IMAGES_LIST "${LOCAL_STYLE_DIR}/images/*.png")
164 FOREACH(flag ${LOCAL_STYLE_IMAGES_LIST})
165 INSTALL(FILES ${flag} DESTINATION ${STYLE_DIR}/images)
167 MESSAGE("Installed style resources ${LOCAL_STYLE_IMAGES_LIST} to ${STYLE_DIR}/images")
169 IF( ENABLE_PKG_CONFIGURE )
170 SET(PKG_LIST dali2-core
174 INCLUDE(FindPkgConfig)
175 pkg_check_modules(REQUIRED_PKGS REQUIRED ${PKG_LIST})
177 FOREACH(flag ${REQUIRED_PKGS_CFLAGS})
178 SET(REQUIRED_CFLAGS "${REQUIRED_CFLAGS} ${flag}")
182 SET( VCPKG_INCLUDE_DIR "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include")
184 IF( WIN32 ) # WIN32 includes x64 as well according to the cmake doc.
185 FIND_PACKAGE( pthreads REQUIRED )
186 FIND_PACKAGE( curl REQUIRED )
187 FIND_LIBRARY( GETOPT_LIBRARY NAMES getopt )
188 FIND_LIBRARY( EXIF_LIBRARY NAMES libexif )
190 FIND_PACKAGE( png REQUIRED )
191 FIND_PACKAGE( gif REQUIRED )
192 FIND_PACKAGE( jpeg REQUIRED )
193 FIND_LIBRARY( TURBO_JPEG_LIBRARY NAMES turbojpeg )
195 FIND_PACKAGE( unofficial-fontconfig REQUIRED )
196 FIND_PACKAGE( freetype REQUIRED )
197 FIND_PACKAGE( harfbuzz REQUIRED )
198 FIND_LIBRARY( FRIBIDI_LIBRARY NAMES fribidi )
200 FIND_PACKAGE( unofficial-angle REQUIRED )
201 FIND_PACKAGE( unofficial-cairo REQUIRED )
203 FIND_PACKAGE( WebP REQUIRED )
205 FIND_PACKAGE( dali-windows-dependencies REQUIRED )
206 FIND_PACKAGE( dali2-core REQUIRED )
207 FIND_PACKAGE( dali2-adaptor REQUIRED )
208 FIND_PACKAGE( dali2-toolkit REQUIRED )
210 # Set up the include dir
211 SET( INCLUDE_DIR $ENV{includedir} )
212 IF( NOT INCLUDE_DIR )
213 SET( INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR} )
215 IF( NOT INCLUDE_DIR )
216 SET( INCLUDE_DIR ${PREFIX}/include )
219 SET( LIB_DIR $ENV{libdir} )
221 SET( LIB_DIR ${CMAKE_INSTALL_LIBDIR} )
224 SET( LIB_DIR ${PREFIX}/lib )
228 PThreads4W::PThreads4W
235 ${TURBO_JPEG_LIBRARY}
236 unofficial::fontconfig::fontconfig
240 unofficial::angle::libEGL
241 unofficial::angle::libGLESv2
242 unofficial::cairo::cairo
245 dali-windows-dependencies::dali-windows-dependencies
246 dali2-core::dali2-core
247 dali2-adaptor::dali2-adaptor
248 dali2-toolkit::dali2-toolkit
252 ${REQUIRED_PKGS_LDFLAGS}
257 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}")
260 SET(DALI_DEMO_CFLAGS "${DALI_DEMO_CFLAGS} -DDEBUG_ENABLED")
264 IF( NOT ${ENABLE_EXPORTALL} )
265 ADD_DEFINITIONS( "-DHIDE_DALI_INTERNALS" )
269 ###########################################################################
270 # Internationalization
273 SET(PO_DIR ${RESOURCE_DIR}/po)
275 FILE(GLOB PO_FILES RELATIVE "${PO_DIR}" "${PO_DIR}/*.po")
277 SET(MSGFMT "/usr/bin/msgfmt")
278 SET(MO_FILES_DIR ${CMAKE_BINARY_DIR}/mo)
279 FILE(MAKE_DIRECTORY ${MO_FILES_DIR})
281 FOREACH(PO_FILE ${PO_FILES})
282 SET(PO_FILE ${PO_DIR}/${PO_FILE})
283 MESSAGE("PO: ${PO_FILE}")
284 GET_FILENAME_COMPONENT(ABS_PO_FILE ${PO_FILE} ABSOLUTE)
285 GET_FILENAME_COMPONENT(lang ${ABS_PO_FILE} NAME_WE)
286 SET(MO_FILE ${MO_FILES_DIR}/${lang}.mo)
287 ADD_CUSTOM_COMMAND(OUTPUT ${MO_FILE}
288 COMMAND ${MSGFMT} -o ${MO_FILE} ${ABS_PO_FILE}
289 DEPENDS ${ABS_PO_FILE})
290 INSTALL(FILES ${MO_FILE} DESTINATION ${LOCALE_DIR}/${lang}/LC_MESSAGES RENAME ${PROJECT_NAME}.mo)
291 SET(MO_FILES ${MO_FILES} ${MO_FILE})
294 MESSAGE(".mo files: ${MO_FILES}")
295 ADD_CUSTOM_TARGET(po ALL DEPENDS ${MO_FILES})
298 IF (INTERNATIONALIZATION)
299 SET(DALI_DEMO_CFLAGS "${DALI_DEMO_CFLAGS} -DINTERNATIONALIZATION_ENABLED")
300 ENDIF(INTERNATIONALIZATION)
302 ###########################################################################
305 ADD_COMPILE_OPTIONS( /FIdali-windows-dependencies.h ) # Adds missing definitions.
306 ADD_COMPILE_OPTIONS( /vmg ) # Avoids a 'reinterpret_cast' compile error while compiling signals and callbacks.
307 ADD_COMPILE_OPTIONS( /wd4251 ) # Ignores warning C4251: "'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2'"
309 SET(DALI_DEMO_CFLAGS "${DALI_DEMO_CFLAGS} -Werror -Wall -fPIE")
311 IF( NOT ${ENABLE_EXPORTALL} )
312 SET(DALI_DEMO_CFLAGS "${DALI_DEMO_CFLAGS} -fvisibility=hidden")
316 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${REQUIRED_CFLAGS} ${DALI_DEMO_CFLAGS}")
317 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_FLAGS}")
320 ${SYSTEM_INCLUDE_DIR}
327 INCLUDE_DIRECTORIES( ${ANDROID_NDK}/sources/android/native_app_glue )
328 INCLUDE_DIRECTORIES( ${ANDROID_NDK}/sysroot/usr )
329 INCLUDE_DIRECTORIES( ${ANDROID_NDK}/sysroot/usr/include/android )
330 INCLUDE_DIRECTORIES( ${ROOT_SRC_DIR}/build/android/app/src/main/cpp )
333 LINK_DIRECTORIES(${LIB_DIR})
335 ADD_SUBDIRECTORY(demo)
336 ADD_SUBDIRECTORY(examples)
337 ADD_SUBDIRECTORY(examples-reel)
338 ADD_SUBDIRECTORY(tests-reel)
339 ADD_SUBDIRECTORY(builder)
342 MESSAGE( " Folder DEMO_IMAGE_DIR : [" ${DEMO_IMAGE_DIR} "]" )
343 MESSAGE( " Folder DEMO_STYLE_DIR : [" ${DEMO_STYLE_DIR} "]" )
344 MESSAGE( " Folder DEMO_SHADER_DIR : [" ${DEMO_SHADER_DIR} "]" )
345 MESSAGE( " Folder DEMO_THEME_PATH : [" ${DEMO_THEME_PATH} "]" )
346 MESSAGE( " Folder DEMO_GAME_DIR : [" ${DEMO_GAME_DIR} "]" )
347 MESSAGE( " Folder DEMO_VIDEO_DIR : [" ${DEMO_VIDEO_DIR} "]" )
348 MESSAGE( " Folder DEMO_MODEL_DIR : [" ${DEMO_MODEL_DIR} "]" )
349 MESSAGE( " Folder DEMO_SCRIPT_DIR : [" ${DEMO_SCRIPT_DIR} "]" )
350 MESSAGE( " Folder DEMO_LOCALE_DIR : [" ${DEMO_LOCALE_DIR} "]" )
351 MESSAGE( " Folder DEMO_EXAMPLE_BIN : [" ${DEMO_EXAMPLE_BIN} "]" )
352 MESSAGE( " Folder DEMO_LANG : [" ${DEMO_LANG} "]" )