Merge branch 'devel/master' into tizen
[platform/core/uifw/dali-demo.git] / build / tizen / CMakeLists.txt
1 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
2
3 SET(CMAKE_C_STANDARD 99)
4 PROJECT(dali-demo C CXX)
5
6 SET(dali-demo_VERSION_MAJOR 1)
7 SET(dali-demo_VERSION_MINOR 0)
8
9 SET(GCC_COMPILER_VERSION_REQUIRED "6")
10 if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
11   if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS GCC_COMPILER_VERSION_REQUIRED)
12     message(FATAL_ERROR "The GCC required compiler version is " ${GCC_COMPILER_VERSION_REQUIRED})
13   endif()
14 endif()
15
16 # Define options to CMake
17 OPTION(ENABLE_EXPORTALL          "Enable Export all symbols" OFF)
18 OPTION(ENABLE_DEBUG              "Enable Debug" OFF)
19 OPTION(ENABLE_PKG_CONFIGURE      "Use pkgconfig" ON)
20 OPTION(INTERNATIONALIZATION      "Internationalization demo string names" ON)
21
22 SET(ROOT_SRC_DIR ${CMAKE_SOURCE_DIR}/../..)
23 SET(DEMO_SHARED ${CMAKE_SOURCE_DIR}/../../shared)
24
25 SET(PREFIX ${CMAKE_INSTALL_PREFIX})
26
27 IF(DEFINED DALI_APP_DIR)
28   SET(BINDIR ${DALI_APP_DIR})
29 ELSE()
30   SET(BINDIR ${PREFIX}/bin)
31 ENDIF()
32
33 IF(DEFINED DALI_APP_RES_DIR)
34   SET(APP_DATA_RES_DIR ${DALI_APP_RES_DIR})
35 ELSE()
36   SET(APP_DATA_RES_DIR ${PREFIX}/share/com.samsung.dali-demo/res)
37 ENDIF()
38
39 MESSAGE( STATUS "CMAKE_BUILD_TYPE: " ${CMAKE_BUILD_TYPE} )
40
41 IF(CMAKE_BUILD_TYPE MATCHES Debug)
42   SET( ENABLE_DEBUG ON )
43 ENDIF()
44
45 IF( ENABLE_DEBUG )
46   MESSAGE( STATUS "CMAKE_BUILD_TYPE: " Debug )
47   SET( ENABLE_EXPORTALL ON )
48 ELSE()
49   MESSAGE( STATUS "CMAKE_BUILD_TYPE: " Release )
50 ENDIF()
51
52 SET(RESOURCE_DIR ${ROOT_SRC_DIR}/resources)
53 SET(LOCAL_IMAGES_DIR ${RESOURCE_DIR}/images)
54 SET(LOCAL_GAME_DIR ${RESOURCE_DIR}/game)
55 SET(LOCAL_VIDEOS_DIR ${RESOURCE_DIR}/videos)
56 SET(LOCAL_MODELS_DIR ${RESOURCE_DIR}/models)
57 SET(LOCAL_SCRIPTS_DIR ${RESOURCE_DIR}/scripts)
58 SET(LOCAL_SHADERS_DIR ${RESOURCE_DIR}/shaders)
59 IF(NOT DEFINED LOCAL_STYLE_DIR)
60   SET(LOCAL_STYLE_DIR ${RESOURCE_DIR}/style)
61 ENDIF()
62
63 IF(ANDROID)
64   SET(LOCAL_STYLE_ANDROID_DIR ${RESOURCE_DIR}/style/android)
65 ENDIF()
66
67 SET(IMAGES_DIR ${APP_DATA_RES_DIR}/images/)
68 SET(GAME_DIR ${APP_DATA_RES_DIR}/game/)
69 SET(VIDEOS_DIR ${APP_DATA_RES_DIR}/videos/)
70 SET(MODELS_DIR ${APP_DATA_RES_DIR}/models/)
71 SET(SCRIPTS_DIR ${APP_DATA_RES_DIR}/scripts/)
72 SET(SHADERS_DIR ${APP_DATA_RES_DIR}/shaders/)
73 SET(STYLE_DIR ${APP_DATA_RES_DIR}/style/)
74
75 IF(NOT DEFINED LOCALE_DIR)
76    SET(LOCALE_DIR ${PREFIX}/share/locale)
77 ENDIF()
78
79 IF(DEFINED DALI_DEMO_RES_DIR)
80   SET(DEMO_IMAGE_DIR \\"${DALI_DEMO_RES_DIR}/images/\\")
81   SET(DEMO_GAME_DIR \\"${DALI_DEMO_RES_DIR}/game/\\")
82   SET(DEMO_VIDEO_DIR \\"${DALI_DEMO_RES_DIR}/videos/\\")
83   SET(DEMO_MODEL_DIR \\"${DALI_DEMO_RES_DIR}/models/\\")
84   SET(DEMO_SCRIPT_DIR \\"${DALI_DEMO_RES_DIR}/scripts/\\")
85   SET(DEMO_SHADER_DIR \\"${DALI_DEMO_RES_DIR}/shaders/\\")
86   SET(DEMO_STYLE_DIR \\"${DALI_DEMO_RES_DIR}/style/\\")
87   SET(DEMO_THEME_PATH \\"${DALI_DEMO_RES_DIR}/style/demo-theme.json\\")
88   SET(DEMO_LOCALE_DIR \\"${DALI_DEMO_RES_DIR}/locale/\\")
89   SET(DEMO_STYLE_IMAGE_DIR \\"${DALI_DEMO_RES_DIR}/style/images\\")
90 ELSE()
91   SET(DEMO_GAME_DIR \\"${GAME_DIR}\\")
92   SET(DEMO_IMAGE_DIR \\"${IMAGES_DIR}\\")
93   SET(DEMO_VIDEO_DIR \\"${VIDEOS_DIR}\\")
94   SET(DEMO_MODEL_DIR \\"${MODELS_DIR}\\")
95   SET(DEMO_SCRIPT_DIR \\"${SCRIPTS_DIR}\\")
96   SET(DEMO_SHADER_DIR \\"${SHADERS_DIR}\\")
97   SET(DEMO_STYLE_DIR \\"${STYLE_DIR}\\")
98   SET(DEMO_THEME_PATH \\"${STYLE_DIR}demo-theme.json\\")
99   SET(DEMO_LOCALE_DIR \\"${LOCALE_DIR}\\")
100   SET(DEMO_STYLE_IMAGE_DIR ${STYLE_DIR}/images)
101 ENDIF()
102
103 SET(DEMO_EXAMPLE_BIN \\"${BINDIR}/\\")
104 SET(DEMO_LANG \\"${LANG}\\")
105
106 FILE(GLOB LOCAL_IMAGES_PNG RELATIVE   "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.png")
107 FILE(GLOB LOCAL_IMAGES_JPG RELATIVE   "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.jpg")
108 FILE(GLOB LOCAL_IMAGES_GIF RELATIVE   "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.gif")
109 FILE(GLOB LOCAL_IMAGES_WEBP RELATIVE  "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.webp")
110 FILE(GLOB LOCAL_IMAGES_BMP RELATIVE   "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.bmp")
111 FILE(GLOB LOCAL_IMAGES_ICO RELATIVE   "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.ico")
112 FILE(GLOB LOCAL_IMAGES_WBMP RELATIVE  "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.wbmp")
113 FILE(GLOB LOCAL_IMAGES_KTX RELATIVE   "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.ktx")
114 FILE(GLOB LOCAL_IMAGES_ASTC RELATIVE  "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.astc")
115 FILE(GLOB LOCAL_IMAGES_SVG RELATIVE   "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.svg")
116 FILE(GLOB LOCAL_IMAGES_JSON RELATIVE  "${LOCAL_IMAGES_DIR}" "${LOCAL_IMAGES_DIR}/*.json")
117
118 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})
119 FOREACH(flag ${LOCAL_IMAGES_LIST})
120         INSTALL(FILES ${LOCAL_IMAGES_DIR}/${flag} DESTINATION ${IMAGES_DIR})
121 ENDFOREACH(flag)
122
123 FILE(GLOB LOCAL_VIDEOS_LIST RELATIVE "${LOCAL_VIDEOS_DIR}" "${LOCAL_VIDEOS_DIR}/*")
124 FOREACH(flag ${LOCAL_VIDEOS_LIST})
125         INSTALL(FILES ${LOCAL_VIDEOS_DIR}/${flag} DESTINATION ${VIDEOS_DIR})
126 ENDFOREACH(flag)
127
128 FILE(GLOB LOCAL_MODELS_LIST RELATIVE "${LOCAL_MODELS_DIR}" "${LOCAL_MODELS_DIR}/*")
129 FOREACH(flag ${LOCAL_MODELS_LIST})
130         INSTALL(FILES ${LOCAL_MODELS_DIR}/${flag} DESTINATION ${MODELS_DIR})
131 ENDFOREACH(flag)
132
133 FILE(GLOB LOCAL_SCRIPTS_LIST RELATIVE "${LOCAL_SCRIPTS_DIR}" "${LOCAL_SCRIPTS_DIR}/*.json")
134 FOREACH(flag ${LOCAL_SCRIPTS_LIST})
135         INSTALL(FILES ${LOCAL_SCRIPTS_DIR}/${flag} DESTINATION ${SCRIPTS_DIR})
136 ENDFOREACH(flag)
137
138 FILE(GLOB LOCAL_SHADERS_LIST RELATIVE "${LOCAL_SHADERS_DIR}" "${LOCAL_SHADERS_DIR}/*")
139 FOREACH(flag ${LOCAL_SHADERS_LIST})
140         INSTALL(FILES ${LOCAL_SHADERS_DIR}/${flag} DESTINATION ${SHADERS_DIR})
141 ENDFOREACH(flag)
142
143 FILE(GLOB LOCAL_GAME_LIST RELATIVE "${LOCAL_GAME_DIR}" "${LOCAL_GAME_DIR}/*.*")
144 FOREACH(flag ${LOCAL_GAME_LIST})
145         INSTALL(FILES ${LOCAL_GAME_DIR}/${flag} DESTINATION ${GAME_DIR})
146 ENDFOREACH(flag)
147
148 #Create resources location file
149 CONFIGURE_FILE( resources-location.in ${DEMO_SHARED}/resources-location.cpp )
150
151 FILE(GLOB LOCAL_STYLES_LIST "${LOCAL_STYLE_DIR}/*.json")
152 FOREACH(flag ${LOCAL_STYLES_LIST})
153   INSTALL(FILES ${flag} DESTINATION ${STYLE_DIR})
154 ENDFOREACH(flag)
155 MESSAGE("Installed ${LOCAL_STYLES_LIST} to ${STYLE_DIR}")
156
157 IF(ANDROID)
158 FILE(GLOB LOCAL_STYLES_ANDROID_LIST "${LOCAL_STYLE_ANDROID_DIR}/*.json")
159 FOREACH(flag ${LOCAL_STYLES_ANDROID_LIST})
160   INSTALL(FILES ${flag} DESTINATION ${STYLE_DIR})
161 ENDFOREACH(flag)
162 MESSAGE("Installed ${LOCAL_STYLES_ANDROID_LIST} to ${STYLE_DIR}")
163 ENDIF()
164
165 FILE(GLOB LOCAL_STYLE_IMAGES_LIST "${LOCAL_STYLE_DIR}/images/*.png")
166 FOREACH(flag ${LOCAL_STYLE_IMAGES_LIST})
167   INSTALL(FILES ${flag} DESTINATION ${STYLE_DIR}/images)
168 ENDFOREACH(flag)
169 MESSAGE("Installed style resources ${LOCAL_STYLE_IMAGES_LIST} to ${STYLE_DIR}/images")
170
171 IF( ENABLE_PKG_CONFIGURE )
172   SET(PKG_LIST dali2-core
173                dali2-adaptor
174                dali2-toolkit)
175
176   INCLUDE(FindPkgConfig)
177   pkg_check_modules(REQUIRED_PKGS REQUIRED ${PKG_LIST})
178
179   FOREACH(flag ${REQUIRED_PKGS_CFLAGS})
180         SET(REQUIRED_CFLAGS "${REQUIRED_CFLAGS} ${flag}")
181   ENDFOREACH(flag)
182 ENDIF()
183
184 SET( VCPKG_INCLUDE_DIR "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include")
185
186 IF( WIN32 ) # WIN32 includes x64 as well according to the cmake doc.
187   FIND_PACKAGE( pthreads REQUIRED )
188   FIND_PACKAGE( curl REQUIRED )
189   FIND_LIBRARY( GETOPT_LIBRARY NAMES getopt )
190   FIND_LIBRARY( EXIF_LIBRARY NAMES libexif )
191
192   FIND_PACKAGE( png REQUIRED )
193   FIND_PACKAGE( gif REQUIRED )
194   FIND_PACKAGE( jpeg REQUIRED )
195   FIND_LIBRARY( TURBO_JPEG_LIBRARY NAMES turbojpeg )
196
197   FIND_PACKAGE( unofficial-fontconfig REQUIRED )
198   FIND_PACKAGE( freetype REQUIRED )
199   FIND_PACKAGE( harfbuzz REQUIRED )
200   FIND_LIBRARY( FRIBIDI_LIBRARY NAMES fribidi )
201
202   FIND_PACKAGE( unofficial-angle REQUIRED )
203   FIND_PACKAGE( unofficial-cairo REQUIRED )
204
205   FIND_PACKAGE( WebP REQUIRED )
206
207   FIND_PACKAGE( dali-windows-dependencies REQUIRED )
208   FIND_PACKAGE( dali2-core REQUIRED )
209   FIND_PACKAGE( dali2-adaptor REQUIRED )
210   FIND_PACKAGE( dali2-toolkit REQUIRED )
211
212   # Set up the include dir
213   SET( INCLUDE_DIR $ENV{includedir} )
214   IF( NOT INCLUDE_DIR )
215     SET( INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR} )
216   ENDIF()
217   IF( NOT INCLUDE_DIR )
218     SET( INCLUDE_DIR ${PREFIX}/include )
219   ENDIF()
220
221   SET( LIB_DIR $ENV{libdir} )
222   IF( NOT LIB_DIR )
223     SET( LIB_DIR ${CMAKE_INSTALL_LIBDIR} )
224   ENDIF()
225   IF( NOT LIB_DIR )
226     SET( LIB_DIR ${PREFIX}/lib )
227   ENDIF()
228
229   SET( REQUIRED_LIBS
230     PThreads4W::PThreads4W
231     CURL::libcurl
232     ${GETOPT_LIBRARY}
233     ${EXIF_LIBRARY}
234     ${PNG_LIBRARIES}
235     ${GIF_LIBRARIES}
236     JPEG::JPEG
237     ${TURBO_JPEG_LIBRARY}
238     unofficial::fontconfig::fontconfig
239     Freetype::Freetype
240     harfbuzz::harfbuzz
241     ${FRIBIDI_LIBRARY}
242     unofficial::angle::libEGL
243     unofficial::angle::libGLESv2
244     unofficial::cairo::cairo
245     WebP::webp
246     WebP::webpdemux
247     dali-windows-dependencies::dali-windows-dependencies
248     dali2-core::dali2-core
249     dali2-adaptor::dali2-adaptor
250     dali2-toolkit::dali2-toolkit
251   )
252 ELSEIF( UNIX )
253   SET( REQUIRED_LIBS
254     ${REQUIRED_PKGS_LDFLAGS}
255     -pie
256   )
257 ENDIF()
258
259 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
261 IF( ENABLE_DEBUG )
262   SET(DALI_DEMO_CFLAGS "${DALI_DEMO_CFLAGS} -DDEBUG_ENABLED")
263 ENDIF()
264
265 IF( UNIX )
266   IF( NOT ${ENABLE_EXPORTALL} )
267     ADD_DEFINITIONS( "-DHIDE_DALI_INTERNALS" )
268   ENDIF()
269 ENDIF()
270
271 ###########################################################################
272 # Internationalization
273
274 IF (UNIX)
275   SET(PO_DIR ${RESOURCE_DIR}/po)
276
277   FILE(GLOB PO_FILES RELATIVE "${PO_DIR}" "${PO_DIR}/*.po")
278
279   SET(MSGFMT "/usr/bin/msgfmt")
280   SET(MO_FILES_DIR ${CMAKE_BINARY_DIR}/mo)
281   FILE(MAKE_DIRECTORY ${MO_FILES_DIR})
282
283   FOREACH(PO_FILE ${PO_FILES})
284         SET(PO_FILE ${PO_DIR}/${PO_FILE})
285         MESSAGE("PO: ${PO_FILE}")
286         GET_FILENAME_COMPONENT(ABS_PO_FILE ${PO_FILE} ABSOLUTE)
287         GET_FILENAME_COMPONENT(lang ${ABS_PO_FILE} NAME_WE)
288         SET(MO_FILE ${MO_FILES_DIR}/${lang}.mo)
289         ADD_CUSTOM_COMMAND(OUTPUT ${MO_FILE}
290                            COMMAND ${MSGFMT} -o ${MO_FILE} ${ABS_PO_FILE}
291                            DEPENDS ${ABS_PO_FILE})
292         INSTALL(FILES ${MO_FILE} DESTINATION ${LOCALE_DIR}/${lang}/LC_MESSAGES RENAME ${PROJECT_NAME}.mo)
293         SET(MO_FILES ${MO_FILES} ${MO_FILE})
294   ENDFOREACH(PO_FILE)
295
296   MESSAGE(".mo files: ${MO_FILES}")
297   ADD_CUSTOM_TARGET(po ALL DEPENDS ${MO_FILES})
298 ENDIF()
299
300 IF (INTERNATIONALIZATION)
301   SET(DALI_DEMO_CFLAGS "${DALI_DEMO_CFLAGS} -DINTERNATIONALIZATION_ENABLED")
302 ENDIF(INTERNATIONALIZATION)
303
304 ###########################################################################
305
306 IF( WIN32 )
307   ADD_COMPILE_OPTIONS( /FIdali-windows-dependencies.h ) # Adds missing definitions.
308   ADD_COMPILE_OPTIONS( /vmg )                           # Avoids a 'reinterpret_cast' compile error while compiling signals and callbacks.
309   ADD_COMPILE_OPTIONS( /std:c++17 )                     # c++17 support
310   ADD_COMPILE_OPTIONS( /wd4251 )                        # Ignores warning C4251: "'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2'"
311 ELSE()
312   ADD_COMPILE_OPTIONS( -std=c++17 )                     # c++17 support
313   SET(DALI_DEMO_CFLAGS "${DALI_DEMO_CFLAGS} -Werror -Wall -fPIE")
314
315   IF( NOT ${ENABLE_EXPORTALL} )
316     SET(DALI_DEMO_CFLAGS "${DALI_DEMO_CFLAGS} -fvisibility=hidden")
317   ENDIF()
318 ENDIF()
319
320 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${REQUIRED_CFLAGS} ${DALI_DEMO_CFLAGS}")
321 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_FLAGS}")
322
323 INCLUDE_DIRECTORIES(
324   ${SYSTEM_INCLUDE_DIR}
325   ${ROOT_SRC_DIR}
326   ${VCPKG_INCLUDE_DIR}
327   ${INCLUDE_DIR}
328 )
329
330 IF(ANDROID)
331   INCLUDE_DIRECTORIES( ${ANDROID_NDK}/sources/android/native_app_glue )
332   INCLUDE_DIRECTORIES( ${ANDROID_NDK}/sysroot/usr )
333   INCLUDE_DIRECTORIES( ${ANDROID_NDK}/sysroot/usr/include/android )
334   INCLUDE_DIRECTORIES( ${ROOT_SRC_DIR}/build/android/app/src/main/cpp )
335 ENDIF()
336
337 LINK_DIRECTORIES(${LIB_DIR})
338
339 ADD_SUBDIRECTORY(demo)
340 ADD_SUBDIRECTORY(examples)
341 ADD_SUBDIRECTORY(examples-reel)
342 ADD_SUBDIRECTORY(tests-reel)
343 ADD_SUBDIRECTORY(builder)
344
345
346 MESSAGE( " Folder   DEMO_IMAGE_DIR : [" ${DEMO_IMAGE_DIR} "]" )
347 MESSAGE( " Folder   DEMO_STYLE_DIR : [" ${DEMO_STYLE_DIR} "]" )
348 MESSAGE( " Folder  DEMO_SHADER_DIR : [" ${DEMO_SHADER_DIR} "]" )
349 MESSAGE( " Folder  DEMO_THEME_PATH : [" ${DEMO_THEME_PATH} "]" )
350 MESSAGE( " Folder    DEMO_GAME_DIR : [" ${DEMO_GAME_DIR} "]" )
351 MESSAGE( " Folder   DEMO_VIDEO_DIR : [" ${DEMO_VIDEO_DIR} "]" )
352 MESSAGE( " Folder   DEMO_MODEL_DIR : [" ${DEMO_MODEL_DIR} "]" )
353 MESSAGE( " Folder  DEMO_SCRIPT_DIR : [" ${DEMO_SCRIPT_DIR} "]" )
354 MESSAGE( " Folder  DEMO_LOCALE_DIR : [" ${DEMO_LOCALE_DIR} "]" )
355 MESSAGE( " Folder DEMO_EXAMPLE_BIN : [" ${DEMO_EXAMPLE_BIN} "]" )
356 MESSAGE( " Folder        DEMO_LANG : [" ${DEMO_LANG} "]" )