1 CMAKE_MINIMUM_REQUIRED(VERSION 3.8.2)
3 SET(CMAKE_C_STANDARD 99)
4 SET(CMAKE_CXX_STANDARD 17)
5 PROJECT(dali-demo C CXX)
7 SET(dali-demo_VERSION_MAJOR 1)
8 SET(dali-demo_VERSION_MINOR 0)
10 SET(GCC_COMPILER_VERSION_REQUIRED "6")
11 if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
12 if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS GCC_COMPILER_VERSION_REQUIRED)
13 message(FATAL_ERROR "The GCC required compiler version is " ${GCC_COMPILER_VERSION_REQUIRED})
17 # Define options to CMake
18 OPTION(ENABLE_EXPORTALL "Enable Export all symbols" OFF)
19 OPTION(ENABLE_DEBUG "Enable Debug" OFF)
20 OPTION(ENABLE_PKG_CONFIGURE "Use pkgconfig" ON)
21 OPTION(INTERNATIONALIZATION "Internationalization demo string names" ON)
23 SET(ROOT_SRC_DIR ${CMAKE_SOURCE_DIR}/../..)
24 SET(DEMO_SHARED ${CMAKE_SOURCE_DIR}/../../shared)
26 SET(PREFIX ${CMAKE_INSTALL_PREFIX})
29 SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
32 IF(DEFINED DALI_APP_DIR)
33 SET(BINDIR ${DALI_APP_DIR})
35 SET(BINDIR ${PREFIX}/bin)
38 IF(DEFINED DALI_APP_RES_DIR)
39 SET(APP_DATA_RES_DIR ${DALI_APP_RES_DIR})
41 SET(APP_DATA_RES_DIR ${PREFIX}/share/com.samsung.dali-demo/res)
44 MESSAGE( STATUS "CMAKE_BUILD_TYPE: " ${CMAKE_BUILD_TYPE} )
46 IF(CMAKE_BUILD_TYPE MATCHES Debug)
47 SET( ENABLE_DEBUG ON )
51 MESSAGE( STATUS "CMAKE_BUILD_TYPE: " Debug )
52 SET( ENABLE_EXPORTALL ON )
54 MESSAGE( STATUS "CMAKE_BUILD_TYPE: " Release )
57 SET(RESOURCE_DIR ${ROOT_SRC_DIR}/resources)
58 SET(LOCAL_IMAGES_DIR ${RESOURCE_DIR}/images)
59 SET(LOCAL_GAME_DIR ${RESOURCE_DIR}/game)
60 SET(LOCAL_VIDEOS_DIR ${RESOURCE_DIR}/videos)
61 SET(LOCAL_MODELS_DIR ${RESOURCE_DIR}/models)
62 SET(LOCAL_SCRIPTS_DIR ${RESOURCE_DIR}/scripts)
63 SET(LOCAL_SHADERS_DIR ${RESOURCE_DIR}/shaders)
64 IF(NOT DEFINED LOCAL_STYLE_DIR)
65 SET(LOCAL_STYLE_DIR ${RESOURCE_DIR}/style)
69 SET(LOCAL_STYLE_ANDROID_DIR ${RESOURCE_DIR}/style/android)
72 SET(IMAGES_DIR ${APP_DATA_RES_DIR}/images/)
73 SET(GAME_DIR ${APP_DATA_RES_DIR}/game/)
74 SET(VIDEOS_DIR ${APP_DATA_RES_DIR}/videos/)
75 SET(MODELS_DIR ${APP_DATA_RES_DIR}/models/)
76 SET(SCRIPTS_DIR ${APP_DATA_RES_DIR}/scripts/)
77 SET(SHADERS_DIR ${APP_DATA_RES_DIR}/shaders/)
78 SET(STYLE_DIR ${APP_DATA_RES_DIR}/style/)
80 IF(NOT DEFINED LOCALE_DIR)
81 SET(LOCALE_DIR ${PREFIX}/share/locale)
84 IF(DEFINED DALI_DEMO_RES_DIR)
85 SET(DEMO_IMAGE_DIR \\"${DALI_DEMO_RES_DIR}/images/\\")
86 SET(DEMO_GAME_DIR \\"${DALI_DEMO_RES_DIR}/game/\\")
87 SET(DEMO_VIDEO_DIR \\"${DALI_DEMO_RES_DIR}/videos/\\")
88 SET(DEMO_MODEL_DIR \\"${DALI_DEMO_RES_DIR}/models/\\")
89 SET(DEMO_SCRIPT_DIR \\"${DALI_DEMO_RES_DIR}/scripts/\\")
90 SET(DEMO_SHADER_DIR \\"${DALI_DEMO_RES_DIR}/shaders/\\")
91 SET(DEMO_STYLE_DIR \\"${DALI_DEMO_RES_DIR}/style/\\")
92 SET(DEMO_THEME_PATH \\"${DALI_DEMO_RES_DIR}/style/demo-theme.json\\")
93 SET(DEMO_LOCALE_DIR \\"${DALI_DEMO_RES_DIR}/locale/\\")
94 SET(DEMO_STYLE_IMAGE_DIR \\"${DALI_DEMO_RES_DIR}/style/images\\")
96 SET(DEMO_GAME_DIR \\"${GAME_DIR}\\")
97 SET(DEMO_IMAGE_DIR \\"${IMAGES_DIR}\\")
98 SET(DEMO_VIDEO_DIR \\"${VIDEOS_DIR}\\")
99 SET(DEMO_MODEL_DIR \\"${MODELS_DIR}\\")
100 SET(DEMO_SCRIPT_DIR \\"${SCRIPTS_DIR}\\")
101 SET(DEMO_SHADER_DIR \\"${SHADERS_DIR}\\")
102 SET(DEMO_STYLE_DIR \\"${STYLE_DIR}\\")
103 SET(DEMO_THEME_PATH \\"${STYLE_DIR}demo-theme.json\\")
104 SET(DEMO_LOCALE_DIR \\"${LOCALE_DIR}\\")
105 SET(DEMO_STYLE_IMAGE_DIR ${STYLE_DIR}/images)
108 SET(DEMO_EXAMPLE_BIN \\"${BINDIR}/\\")
109 SET(DEMO_LANG \\"${LANG}\\")
111 #For run-time read/write directory
113 SET(DEMO_DATA_RW_DIR \\"/data/data/${DALI_DEMO_APP_ID}/\\")
114 SET(DEMO_DATA_PUBLIC_RW_DIR \\"/sdcard/\\")
116 SET(DEMO_DATA_RW_DIR \\"/tmp/\\")
117 SET(DEMO_DATA_PUBLIC_RW_DIR \\"/tmp/\\")
120 # Gets all sub-directories of SRC_DIR into the list RESULT, which will first be reset to empty.
121 MACRO(GET_TREE RESULT SRC_DIR)
122 FILE(GLOB_RECURSE LOCAL_LIST RELATIVE ${SRC_DIR} "${SRC_DIR}/*")
123 SET(${RESULT} "/") # N.B. we need the contents of the root directory as well, and we can't have an empty string in a list in CMake.
124 FOREACH(LOCAL_ENTRY ${LOCAL_LIST})
125 GET_FILENAME_COMPONENT(DIR ${LOCAL_ENTRY} DIRECTORY)
126 LIST(APPEND ${RESULT} ${DIR})
128 LIST(REMOVE_DUPLICATES ${RESULT})
131 # Installs files from each subdirectory of ROOT specified in TREE, matching FILTER, to DESTINATION,
132 # while keeping the structure, up to (excluding) ROOT.
133 MACRO(INSTALL_TREE_FILES ROOT TREE FILTER DESTINATION)
134 FOREACH(LOCAL_DIR ${TREE})
135 SET(SRC_DIR "${ROOT}/${LOCAL_DIR}")
137 LIST_DIRECTORIES false
138 RELATIVE ${SRC_DIR} "${SRC_DIR}/${FILTER}")
139 FOREACH(LOCAL_FILE ${FILES})
140 INSTALL(FILES "${SRC_DIR}/${LOCAL_FILE}" DESTINATION "${DESTINATION}/${LOCAL_DIR}")
145 GET_TREE(LOCAL_IMAGES_TREE "${LOCAL_IMAGES_DIR}")
146 INSTALL_TREE_FILES(${LOCAL_IMAGES_DIR} "${LOCAL_IMAGES_TREE}" "*.png" ${IMAGES_DIR})
147 INSTALL_TREE_FILES(${LOCAL_IMAGES_DIR} "${LOCAL_IMAGES_TREE}" "*.jpg" ${IMAGES_DIR})
148 INSTALL_TREE_FILES(${LOCAL_IMAGES_DIR} "${LOCAL_IMAGES_TREE}" "*.gif" ${IMAGES_DIR})
149 INSTALL_TREE_FILES(${LOCAL_IMAGES_DIR} "${LOCAL_IMAGES_TREE}" "*.webp" ${IMAGES_DIR})
150 INSTALL_TREE_FILES(${LOCAL_IMAGES_DIR} "${LOCAL_IMAGES_TREE}" "*.bmp" ${IMAGES_DIR})
151 INSTALL_TREE_FILES(${LOCAL_IMAGES_DIR} "${LOCAL_IMAGES_TREE}" "*.ico" ${IMAGES_DIR})
152 INSTALL_TREE_FILES(${LOCAL_IMAGES_DIR} "${LOCAL_IMAGES_TREE}" "*.wbmp" ${IMAGES_DIR})
153 INSTALL_TREE_FILES(${LOCAL_IMAGES_DIR} "${LOCAL_IMAGES_TREE}" "*.ktx" ${IMAGES_DIR})
154 INSTALL_TREE_FILES(${LOCAL_IMAGES_DIR} "${LOCAL_IMAGES_TREE}" "*.astc" ${IMAGES_DIR})
155 INSTALL_TREE_FILES(${LOCAL_IMAGES_DIR} "${LOCAL_IMAGES_TREE}" "*.svg" ${IMAGES_DIR})
156 INSTALL_TREE_FILES(${LOCAL_IMAGES_DIR} "${LOCAL_IMAGES_TREE}" "*.json" ${IMAGES_DIR})
157 INSTALL_TREE_FILES(${LOCAL_IMAGES_DIR} "${LOCAL_IMAGES_TREE}" "*.riv" ${IMAGES_DIR})
159 FILE(GLOB LOCAL_VIDEOS_LIST RELATIVE "${LOCAL_VIDEOS_DIR}" "${LOCAL_VIDEOS_DIR}/*")
160 FOREACH(flag ${LOCAL_VIDEOS_LIST})
161 INSTALL(FILES ${LOCAL_VIDEOS_DIR}/${flag} DESTINATION ${VIDEOS_DIR})
164 GET_TREE(LOCAL_MODELS_TREE "${LOCAL_MODELS_DIR}")
165 INSTALL_TREE_FILES(${LOCAL_MODELS_DIR} "${LOCAL_MODELS_TREE}" "*" ${MODELS_DIR})
167 FILE(GLOB LOCAL_SCRIPTS_LIST RELATIVE "${LOCAL_SCRIPTS_DIR}" "${LOCAL_SCRIPTS_DIR}/*.json")
168 FOREACH(flag ${LOCAL_SCRIPTS_LIST})
169 INSTALL(FILES ${LOCAL_SCRIPTS_DIR}/${flag} DESTINATION ${SCRIPTS_DIR})
172 FILE(GLOB LOCAL_SHADERS_LIST RELATIVE "${LOCAL_SHADERS_DIR}" "${LOCAL_SHADERS_DIR}/*")
173 FOREACH(flag ${LOCAL_SHADERS_LIST})
174 INSTALL(FILES ${LOCAL_SHADERS_DIR}/${flag} DESTINATION ${SHADERS_DIR})
177 FILE(GLOB LOCAL_GAME_LIST RELATIVE "${LOCAL_GAME_DIR}" "${LOCAL_GAME_DIR}/*.*")
178 FOREACH(flag ${LOCAL_GAME_LIST})
179 INSTALL(FILES ${LOCAL_GAME_DIR}/${flag} DESTINATION ${GAME_DIR})
182 #Create resources location file
183 CONFIGURE_FILE( resources-location.in ${DEMO_SHARED}/resources-location.cpp )
185 FILE(GLOB LOCAL_STYLES_LIST "${LOCAL_STYLE_DIR}/*.json")
186 FOREACH(flag ${LOCAL_STYLES_LIST})
187 INSTALL(FILES ${flag} DESTINATION ${STYLE_DIR})
189 MESSAGE("Installed ${LOCAL_STYLES_LIST} to ${STYLE_DIR}")
192 FILE(GLOB LOCAL_STYLES_ANDROID_LIST "${LOCAL_STYLE_ANDROID_DIR}/*.json")
193 FOREACH(flag ${LOCAL_STYLES_ANDROID_LIST})
194 INSTALL(FILES ${flag} DESTINATION ${STYLE_DIR})
196 MESSAGE("Installed ${LOCAL_STYLES_ANDROID_LIST} to ${STYLE_DIR}")
199 FILE(GLOB LOCAL_STYLE_IMAGES_LIST "${LOCAL_STYLE_DIR}/images/*.png")
200 FOREACH(flag ${LOCAL_STYLE_IMAGES_LIST})
201 INSTALL(FILES ${flag} DESTINATION ${STYLE_DIR}/images)
203 MESSAGE("Installed style resources ${LOCAL_STYLE_IMAGES_LIST} to ${STYLE_DIR}/images")
205 IF( ENABLE_PKG_CONFIGURE )
206 SET(PKG_LIST dali2-core
210 INCLUDE(FindPkgConfig)
211 pkg_check_modules(REQUIRED_PKGS REQUIRED ${PKG_LIST})
213 FOREACH(flag ${REQUIRED_PKGS_CFLAGS})
214 SET(REQUIRED_CFLAGS "${REQUIRED_CFLAGS} ${flag}")
217 pkg_check_modules(DALI_SCENE_LOADER dali2-scene-loader)
218 IF( DALI_SCENE_LOADER_FOUND )
219 FOREACH(flag ${DALI_SCENE_LOADER_CFLAGS})
220 SET(REQUIRED_CFLAGS "${REQUIRED_CFLAGS} ${flag}")
223 SET( REQUIRED_CFLAGS "${REQUIRED_CFLAGS} -DDALI_SCENE_LOADER_AVAILABLE" )
225 FOREACH(flag ${DALI_SCENE_LOADER_LDFLAGS})
226 SET(REQUIRED_PKGS_LDFLAGS "${REQUIRED_PKGS_LDFLAGS} ${flag}")
229 SET( ENABLE_SCENE_LOADER "ON" )
233 SET( VCPKG_INCLUDE_DIR "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include")
235 IF( WIN32 OR APPLE ) # WIN32 includes x64 as well according to the cmake doc.
237 FIND_PACKAGE( pthreads REQUIRED )
239 FIND_PACKAGE( curl REQUIRED )
240 FIND_LIBRARY( EXIF_LIBRARY NAMES libexif )
242 FIND_PACKAGE( png REQUIRED )
243 FIND_PACKAGE( gif REQUIRED )
244 FIND_PACKAGE( jpeg REQUIRED )
245 FIND_LIBRARY( TURBO_JPEG_LIBRARY NAMES turbojpeg )
247 FIND_PACKAGE( freetype REQUIRED )
248 FIND_PACKAGE( harfbuzz REQUIRED )
249 FIND_LIBRARY( FRIBIDI_LIBRARY NAMES fribidi )
251 FIND_PACKAGE( unofficial-angle REQUIRED )
252 FIND_PACKAGE( unofficial-cairo REQUIRED )
254 FIND_PACKAGE( WebP REQUIRED )
257 FIND_LIBRARY( GETOPT_LIBRARY NAMES getopt )
258 FIND_PACKAGE( dali-windows-dependencies REQUIRED )
259 FIND_PACKAGE( unofficial-fontconfig REQUIRED )
262 FIND_PACKAGE( dali2-core REQUIRED )
263 FIND_PACKAGE( dali2-adaptor REQUIRED )
264 FIND_PACKAGE( dali2-toolkit REQUIRED )
266 FIND_PACKAGE( dali2-scene-loader )
268 # Set up the include dir
269 SET( INCLUDE_DIR $ENV{includedir} )
270 IF( NOT INCLUDE_DIR )
271 SET( INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR} )
273 IF( NOT INCLUDE_DIR )
274 SET( INCLUDE_DIR ${PREFIX}/include )
277 SET( LIB_DIR $ENV{libdir} )
279 SET( LIB_DIR ${CMAKE_INSTALL_LIBDIR} )
282 SET( LIB_DIR ${PREFIX}/lib )
291 ${TURBO_JPEG_LIBRARY}
295 unofficial::angle::libEGL
296 unofficial::angle::libGLESv2
299 dali2-core::dali2-core
300 dali2-adaptor::dali2-adaptor
301 dali2-toolkit::dali2-toolkit
308 unofficial::fontconfig::fontconfig
309 unofficial::cairo::cairo
310 PThreads4W::PThreads4W
311 dali-windows-dependencies::dali-windows-dependencies
315 IF (dali2-scene-loader_FOUND)
318 dali2-scene-loader::dali2-scene-loader
320 SET( ENABLE_SCENE_LOADER "ON" )
324 ${REQUIRED_PKGS_LDFLAGS}
329 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} -DDEMO_DATA_RW_DIR=${DEMO_DATA_RW_DIR} -DDEMO_DATA_PUBLIC_RW_DIR=${DEMO_DATA_PUBLIC_RW_DIR} ")
332 SET(DALI_DEMO_CFLAGS "${DALI_DEMO_CFLAGS} -DDEBUG_ENABLED")
335 IF( ENABLE_SCENE_LOADER )
336 SET(DALI_DEMO_CFLAGS "${DALI_DEMO_CFLAGS} -DDALI_SCENE_LOADER_AVAILABLE")
340 IF( NOT ${ENABLE_EXPORTALL} )
341 ADD_DEFINITIONS( "-DHIDE_DALI_INTERNALS" )
345 ###########################################################################
346 # Internationalization
349 SET(PO_DIR ${RESOURCE_DIR}/po)
351 FILE(GLOB PO_FILES RELATIVE "${PO_DIR}" "${PO_DIR}/*.po")
354 SET(MO_FILES_DIR ${CMAKE_BINARY_DIR}/mo)
355 FILE(MAKE_DIRECTORY ${MO_FILES_DIR})
357 FOREACH(PO_FILE ${PO_FILES})
358 SET(PO_FILE ${PO_DIR}/${PO_FILE})
359 MESSAGE("PO: ${PO_FILE}")
360 GET_FILENAME_COMPONENT(ABS_PO_FILE ${PO_FILE} ABSOLUTE)
361 GET_FILENAME_COMPONENT(lang ${ABS_PO_FILE} NAME_WE)
362 SET(MO_FILE ${MO_FILES_DIR}/${lang}.mo)
363 ADD_CUSTOM_COMMAND(OUTPUT ${MO_FILE}
364 COMMAND ${MSGFMT} -o ${MO_FILE} ${ABS_PO_FILE}
365 DEPENDS ${ABS_PO_FILE})
366 INSTALL(FILES ${MO_FILE} DESTINATION ${LOCALE_DIR}/${lang}/LC_MESSAGES RENAME ${PROJECT_NAME}.mo)
367 SET(MO_FILES ${MO_FILES} ${MO_FILE})
370 MESSAGE(".mo files: ${MO_FILES}")
371 ADD_CUSTOM_TARGET(po ALL DEPENDS ${MO_FILES})
374 IF (INTERNATIONALIZATION)
375 SET(DALI_DEMO_CFLAGS "${DALI_DEMO_CFLAGS} -DINTERNATIONALIZATION_ENABLED")
376 ENDIF(INTERNATIONALIZATION)
378 ###########################################################################
381 ADD_COMPILE_OPTIONS( /FIdali-windows-dependencies.h ) # Adds missing definitions.
382 ADD_COMPILE_OPTIONS( /vmg ) # Avoids a 'reinterpret_cast' compile error while compiling signals and callbacks.
383 ADD_COMPILE_OPTIONS( /wd4251 ) # Ignores warning C4251: "'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2'"
385 SET(DALI_DEMO_CFLAGS "${DALI_DEMO_CFLAGS} -Wall -fPIE")
386 # -Werror is disable for clang in dali-adaptor
387 IF ( NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" )
388 SET(DALI_DEMO_CFLAGS "${DALI_DEMO_CFLAGS} -Werror")
391 IF( NOT ${ENABLE_EXPORTALL} )
392 SET(DALI_DEMO_CFLAGS "${DALI_DEMO_CFLAGS} -fvisibility=hidden")
396 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${REQUIRED_CFLAGS} ${DALI_DEMO_CFLAGS}")
397 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_FLAGS}")
400 ${SYSTEM_INCLUDE_DIR}
407 INCLUDE_DIRECTORIES( ${ANDROID_NDK}/sources/android/native_app_glue )
408 INCLUDE_DIRECTORIES( ${ANDROID_NDK}/sysroot/usr )
409 INCLUDE_DIRECTORIES( ${ANDROID_NDK}/sysroot/usr/include/android )
410 INCLUDE_DIRECTORIES( ${ROOT_SRC_DIR}/build/android/app/src/main/cpp )
413 LINK_DIRECTORIES(${LIB_DIR})
415 ADD_SUBDIRECTORY(demo)
416 ADD_SUBDIRECTORY(examples)
417 ADD_SUBDIRECTORY(examples-reel)
418 ADD_SUBDIRECTORY(tests-reel)
419 ADD_SUBDIRECTORY(builder)
422 MESSAGE( " Folder DEMO_IMAGE_DIR : [" ${DEMO_IMAGE_DIR} "]" )
423 MESSAGE( " Folder DEMO_STYLE_DIR : [" ${DEMO_STYLE_DIR} "]" )
424 MESSAGE( " Folder DEMO_SHADER_DIR : [" ${DEMO_SHADER_DIR} "]" )
425 MESSAGE( " Folder DEMO_THEME_PATH : [" ${DEMO_THEME_PATH} "]" )
426 MESSAGE( " Folder DEMO_GAME_DIR : [" ${DEMO_GAME_DIR} "]" )
427 MESSAGE( " Folder DEMO_VIDEO_DIR : [" ${DEMO_VIDEO_DIR} "]" )
428 MESSAGE( " Folder DEMO_MODEL_DIR : [" ${DEMO_MODEL_DIR} "]" )
429 MESSAGE( " Folder DEMO_SCRIPT_DIR : [" ${DEMO_SCRIPT_DIR} "]" )
430 MESSAGE( " Folder DEMO_LOCALE_DIR : [" ${DEMO_LOCALE_DIR} "]" )
431 MESSAGE( " Folder DEMO_EXAMPLE_BIN : [" ${DEMO_EXAMPLE_BIN} "]" )
432 MESSAGE( " Folder DEMO_LANG : [" ${DEMO_LANG} "]" )
433 MESSAGE( " Scene Loader Enabled : [" ${ENABLE_SCENE_LOADER} "]" )