-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+CMAKE_MINIMUM_REQUIRED(VERSION 3.8.2)
CMAKE_POLICY(SET CMP0012 NEW) # Prevent dereferencing of OFF/ON as variables
-SET(name "dali-core")
+SET(name "dali2-core")
+SET(CMAKE_C_STANDARD 99)
+SET(CMAKE_CXX_STANDARD 17)
PROJECT(${name})
SET(PKG_NAME ${name})
+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()
+
# API VERSION (Not DALi release version)
-SET(${name}_VERSION_MAJOR 0)
+SET(${name}_VERSION_MAJOR 2)
SET(${name}_VERSION_MINOR 0)
SET(${name}_VERSION_PATCH 0)
SET(${name}_VERSION ${${name}_VERSION_MAJOR}.${${name}_VERSION_MINOR}.${${name}_VERSION_PATCH})
OPTION(ENABLE_LOCK_BACKTRACE "Enable" OFF)
OPTION(ENABLE_COVERAGE "Coverage" OFF)
OPTION(ENABLE_TRACE "Enable Trace" OFF)
+OPTION(ENABLE_PKG_CONFIGURE "Use pkgconfig" ON)
+OPTION(ENABLE_LINK_TEST "Enable the link test" ON)
+
+IF( WIN32 ) # WIN32 includes x64 as well according to the cmake doc.
+ FIND_PACKAGE( dali-windows-dependencies REQUIRED )
+ENDIF()
+
+SET( VCPKG_INCLUDE_DIR "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include")
# Set up compiler definitions
IF(CMAKE_BUILD_TYPE MATCHES Debug)
- MESSAGE( STATUS "CMAKE_BUILD_TYPE: " Debug )
SET( ENABLE_DEBUG ON )
+ENDIF()
+
+IF( ENABLE_DEBUG )
+ MESSAGE( STATUS "CMAKE_BUILD_TYPE: " Debug )
+ ADD_DEFINITIONS( "-DDEBUG_ENABLED" )
+ SET( ENABLE_EXPORTALL ON )
ELSE()
MESSAGE( STATUS "CMAKE_BUILD_TYPE: " Release )
ENDIF()
-ADD_DEFINITIONS(-DPLATFORM_TIZEN -DDALI_COMPILATION)
-ADD_DEFINITIONS(-DPIC -DSTDC_HEADERS)
+IF( WIN32 ) # WIN32 includes x64 as well according to the cmake doc.
-IF("${ARCH}" STREQUAL "arm")
- ADD_DEFINITIONS("-DTARGET")
-ENDIF("${ARCH}" STREQUAL "arm")
+ IF(NOT DEFINED STATIC)
+ ADD_DEFINITIONS( "-DBUILDING_DALI_CORE" )
+ ENDIF()
-IF( ENABLE_DEBUG )
- ADD_DEFINITIONS( "-DDEBUG_ENABLED" )
- SET( ENABLE_EXPORTALL ON )
-ENDIF( ENABLE_DEBUG )
+ELSEIF( UNIX )
+
+ IF( NOT ${ENABLE_EXPORTALL} )
+ ADD_DEFINITIONS( "-DHIDE_DALI_INTERNALS" )
+ ENDIF()
-IF( NOT ${ENABLE_EXPORTALL} )
- ADD_DEFINITIONS( "-fvisibility=hidden -DHIDE_DALI_INTERNALS" )
-ENDIF( NOT ${ENABLE_EXPORTALL} )
+ ADD_DEFINITIONS(-DPIC -DSTDC_HEADERS)
+
+ IF("${ARCH}" STREQUAL "arm")
+ ADD_DEFINITIONS("-DTARGET")
+ ENDIF()
+
+ENDIF()
IF( ENABLE_BACKTRACE OR ENABLE_LOCK_BACKTRACE )
ADD_DEFINITIONS( "-DBACKTRACE_ENABLED" )
-ENDIF( ENABLE_BACKTRACE OR ENABLE_LOCK_BACKTRACE )
+ENDIF()
IF( ENABLE_LOCK_BACKTRACE )
ADD_DEFINITIONS( "-DLOCK_BACKTRACE_ENABLED" )
-ENDIF( ENABLE_LOCK_BACKTRACE )
+ENDIF()
+
+IF( ENABLE_TRACE )
+ ADD_DEFINITIONS("-DTRACE_ENABLED")
+ENDIF()
# Deployment folder should come from spec file or command line:
SET( PREFIX ${CMAKE_INSTALL_PREFIX})
SET( LIB_DIR ${PREFIX}/lib )
ENDIF()
-# Configure the pkg-config file
-# Requires the following variables to be setup:
-# @PREFIX@ @EXEC_PREFIX@ @DALI_VERSION@ @LIB_DIR@ @DEV_INCLUDE_PATH@
-SET( DEV_INCLUDE_PATH ${INCLUDE_DIR} )
-SET( CORE_PKG_CFG_FILE ${CMAKE_CURRENT_SOURCE_DIR}/dali-core.pc )
-CONFIGURE_FILE( ${CORE_PKG_CFG_FILE}.in ${CORE_PKG_CFG_FILE} @ONLY )
-
-# Set up compiler flags and warnings
-ADD_COMPILE_OPTIONS( -std=c++11 )
-ADD_COMPILE_OPTIONS( -Wnon-virtual-dtor -Woverloaded-virtual -Wold-style-cast )
-
-# TODO: Clang is a lot more strict with warnings, we should address
-# those issues at some point.
-IF( NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
- ADD_COMPILE_OPTIONS( -Werror )
+# Set up the bin dir
+SET( BIN_DIR $ENV{bindir} )
+IF( NOT BIN_DIR )
+ SET( BIN_DIR ${CMAKE_INSTALL_BINDIR} )
ENDIF()
-
-ADD_COMPILE_OPTIONS( -Wall -Wextra -Wno-unused-parameter -Wfloat-equal )
-
-IF( ENABLE_COVERAGE OR "$ENV{CXXFLAGS}" MATCHES --coverage )
- ADD_COMPILE_OPTIONS( --coverage )
- SET(ENABLE_COVERAGE ON)
- SET(COVERAGE --coverage)
+IF( NOT BIN_DIR )
+ SET( BIN_DIR ${PREFIX}/bin )
ENDIF()
-IF( ENABLE_TRACE )
- ADD_DEFINITIONS("-DTRACE_ENABLED")
+IF( ENABLE_PKG_CONFIGURE )
+ # Configure the pkg-config file
+ # Requires the following variables to be setup:
+ # @PREFIX@ @EXEC_PREFIX@ @DALI_VERSION@ @LIB_DIR@ @DEV_INCLUDE_PATH@
+ SET( DEV_INCLUDE_PATH ${INCLUDE_DIR} )
+ SET( CORE_PKG_CFG_FILE ${CMAKE_CURRENT_SOURCE_DIR}/dali2-core.pc )
+ CONFIGURE_FILE( ${CORE_PKG_CFG_FILE}.in ${CORE_PKG_CFG_FILE} @ONLY )
ENDIF()
+IF( WIN32 ) # WIN32 includes x64 as well according to the cmake doc.
+
+ 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'"
+
+ELSEIF( UNIX )
+
+ INCLUDE(CheckCXXCompilerFlag)
+
+ # Set up compiler flags and warnings
+ ADD_COMPILE_OPTIONS( -Wnon-virtual-dtor -Woverloaded-virtual -Wold-style-cast )
+
+ # TODO: Clang is a lot more strict with warnings, we should address
+ # those issues at some point.
+ IF( NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" )
+ ADD_COMPILE_OPTIONS( -Werror )
+ ENDIF()
+
+ ADD_COMPILE_OPTIONS( -Wall -Wextra -Wno-unused-parameter -Wfloat-equal )
+ CHECK_CXX_COMPILER_FLAG(-Wno-class-memaccess HAVE_NO_CLASS_MEMACCESS)
+ IF (HAVE_NO_CLASS_MEMACCESS)
+ ADD_COMPILE_OPTIONS( -Wno-class-memaccess )
+ ENDIF()
+
+ CHECK_CXX_COMPILER_FLAG(-Wno-cast-function-type HAVE_NO_CAST_FUNCTION_TYPE)
+ IF (HAVE_NO_CAST_FUNCTION_TYPE)
+ ADD_COMPILE_OPTIONS( -Wno-cast-function-type )
+ ENDIF()
+
+ CHECK_CXX_COMPILER_FLAG(-Wno-string-plus-int HAVE_NO_STRING_PLUS_INT)
+ IF (HAVE_NO_STRING_PLUS_INT)
+ ADD_COMPILE_OPTIONS( -Wno-string-plus-int )
+ ENDIF()
+ IF( ENABLE_COVERAGE OR "$ENV{CXXFLAGS}" MATCHES --coverage )
+ ADD_COMPILE_OPTIONS( --coverage )
+ SET(ENABLE_COVERAGE ON)
+ SET(COVERAGE --coverage)
+ ENDIF()
+
+ IF( NOT ${ENABLE_EXPORTALL} )
+ ADD_COMPILE_OPTIONS( "-fvisibility=hidden" )
+ ENDIF()
+
+ENDIF()
INCLUDE_DIRECTORIES(
${ROOT_SRC_DIR}
+ ${VCPKG_INCLUDE_DIR}
+ ${INCLUDE_DIR}
)
SET(SOURCE_DIR "${ROOT_SRC_DIR}/dali")
INCLUDE( ${ROOT_SRC_DIR}/dali/integration-api/file.list )
INCLUDE( ${ROOT_SRC_DIR}/dali/public-api/file.list )
INCLUDE( ${ROOT_SRC_DIR}/dali/devel-api/file.list )
+INCLUDE( ${ROOT_SRC_DIR}/dali/graphics-api/file.list )
+IF( WIN32 )
+ INCLUDE( ${ROOT_SRC_DIR}/dali/internal/file-windows.list )
+ELSEIF( UNIX )
+ INCLUDE( ${ROOT_SRC_DIR}/dali/internal/file-unix.list )
+ENDIF()
INCLUDE( ${ROOT_SRC_DIR}/doc/file.list )
SET(LIBTYPE SHARED)
ADD_LIBRARY( ${name} ${LIBTYPE} ${SOURCES} )
# pthread required due to gcc issue
-FIND_LIBRARY(PTHREAD pthread)
-IF(PTHREAD)
- SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} -lpthread)
+IF( WIN32 )
+ SET( OPTIONAL_LIBS ${OPTIONAL_LIBS} dali-windows-dependencies::dali-windows-dependencies )
+ELSEIF( UNIX )
+ FIND_LIBRARY(PTHREAD pthread)
+ IF(PTHREAD)
+ SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} -lpthread)
+ ENDIF()
ENDIF()
TARGET_LINK_LIBRARIES( ${name}
CLEAN_DIRECT_OUPUT 1
)
-# Install the library so file and symlinks
-INSTALL( TARGETS ${name} DESTINATION ${LIB_DIR} )
+IF( INSTALL_CMAKE_MODULES )
+ IF( ENABLE_DEBUG )
+ SET( BIN_DIR "${BIN_DIR}/debug" )
+ SET( LIB_DIR "${LIB_DIR}/debug" )
+ ENDIF()
+
+ # Install the library files.
+ INSTALL( TARGETS ${name}
+ EXPORT ${name}-targets
+ LIBRARY DESTINATION ${LIB_DIR}
+ ARCHIVE DESTINATION ${LIB_DIR}
+ RUNTIME DESTINATION ${BIN_DIR}
+ )
+
+ # Install the cmake modules.
+ INSTALL(
+ EXPORT ${name}-targets
+ NAMESPACE ${name}::
+ FILE ${name}-targets.cmake
+ DESTINATION share/${name}
+ )
+
+ FILE( WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}-config.cmake "
+ include(CMakeFindDependencyMacro)
+ include(\${CMAKE_CURRENT_LIST_DIR}/${name}-targets.cmake)
+ ")
+ INSTALL( FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}-config.cmake DESTINATION share/${name} )
+
+ # Install the pdb file.
+ IF( ENABLE_DEBUG AND WIN32 )
+ install( FILES ${CMAKE_CURRENT_BINARY_DIR}/Debug/${name}.pdb DESTINATION ${BIN_DIR} )
+ ENDIF()
+ELSE()
+ # Install the library so file and symlinks.
+ INSTALL( TARGETS ${name} DESTINATION ${LIB_DIR} )
+ENDIF()
+
# Install the pkg-config file
-INSTALL( FILES ${CORE_PKG_CFG_FILE} DESTINATION ${LIB_DIR}/pkgconfig )
+IF( ENABLE_PKG_CONFIGURE )
+ INSTALL( FILES ${CORE_PKG_CFG_FILE} DESTINATION ${LIB_DIR}/pkgconfig )
+ENDIF()
# macro for installing headers by replacing prefix. (TODO, investigate
# if there is a CMAKE way of doing this automatically)
# Install headers using lists defined by ADD_SUBDIRECTORY
INSTALL_HEADERS_WITH_DIRECTORY(PUBLIC_API_HEADERS ${ROOT_SRC_DIR}/dali "dali")
INSTALL_HEADERS_WITH_DIRECTORY(DEVEL_API_HEADERS ${ROOT_SRC_DIR}/dali "dali")
+INSTALL_HEADERS_WITH_DIRECTORY(GRAPHICS_API_HEADERS ${ROOT_SRC_DIR}/dali "dali")
INSTALL_HEADERS_WITH_DIRECTORY(INTEGRATION_API_HEADERS ${ROOT_SRC_DIR}/dali "dali")
INSTALL_HEADERS_WITH_DIRECTORY(PACKAGE_DOXY_HEADERS ${PACKAGE_DOXY_SRC_DIR} "dali/doc" )
# The DALI_CORE_PREFIX must be set if this CMakeLists.txt is executed
# from the top-level CMake script using ADD_SUBDIRECTORY() to avoid
# target names duplication with other DALi modules.
-IF( UNIX )
+IF( ENABLE_COVERAGE )
FIND_PROGRAM( LCOV_BIN "lcov" )
IF( LCOV_BIN )
-name libdali*.so* \)
| grep -v TC | xargs rm -rf
TARGET ${DALI_CORE_PREFIX}distclean
- VERBATIM
+VERBATIM
)
ENDIF( LCOV_BIN )
-ENDIF( UNIX )
-
-# Linker Test
-SET( DALI_TEST_SUITE_DIR ${ROOT_SRC_DIR}/automated-tests/src/dali/dali-test-suite-utils )
-SET( LINKER_TEST_NAME ${DALI_CORE_PREFIX}linker-test )
-SET( LINKER_TEST_SOURCES
- linker-test.cpp
- ${DALI_TEST_SUITE_DIR}/test-application.cpp
- ${DALI_TEST_SUITE_DIR}/test-platform-abstraction.cpp
- ${DALI_TEST_SUITE_DIR}/test-render-controller.cpp
- ${DALI_TEST_SUITE_DIR}/test-render-surface.cpp
- ${DALI_TEST_SUITE_DIR}/test-gl-abstraction.cpp
- ${DALI_TEST_SUITE_DIR}/test-gl-sync-abstraction.cpp
- ${DALI_TEST_SUITE_DIR}/test-trace-call-stack.cpp
-)
-ADD_EXECUTABLE( ${LINKER_TEST_NAME} ${LINKER_TEST_SOURCES} )
-TARGET_LINK_LIBRARIES(${LINKER_TEST_NAME} ${name} )
-TARGET_INCLUDE_DIRECTORIES( ${LINKER_TEST_NAME} PRIVATE ${DALI_TEST_SUITE_DIR} )
+ENDIF()
+
+IF( ENABLE_LINK_TEST )
+ # Linker Test
+ SET( DALI_TEST_SUITE_DIR ${ROOT_SRC_DIR}/automated-tests/src/dali/dali-test-suite-utils )
+ SET( LINKER_TEST_NAME ${DALI_CORE_PREFIX}linker-test )
+ SET( LINKER_TEST_SOURCES
+ linker-test.cpp
+ ${DALI_TEST_SUITE_DIR}/test-application.cpp
+ ${DALI_TEST_SUITE_DIR}/test-gl-abstraction.cpp
+ ${DALI_TEST_SUITE_DIR}/test-graphics-sync-impl.cpp
+ ${DALI_TEST_SUITE_DIR}/test-graphics-sync-object.cpp
+ ${DALI_TEST_SUITE_DIR}/test-graphics-buffer.cpp
+ ${DALI_TEST_SUITE_DIR}/test-graphics-command-buffer.cpp
+ ${DALI_TEST_SUITE_DIR}/test-graphics-controller.cpp
+ ${DALI_TEST_SUITE_DIR}/test-graphics-framebuffer.cpp
+ ${DALI_TEST_SUITE_DIR}/test-graphics-pipeline.cpp
+ ${DALI_TEST_SUITE_DIR}/test-graphics-program.cpp
+ ${DALI_TEST_SUITE_DIR}/test-graphics-reflection.cpp
+ ${DALI_TEST_SUITE_DIR}/test-graphics-sampler.cpp
+ ${DALI_TEST_SUITE_DIR}/test-graphics-shader.cpp
+ ${DALI_TEST_SUITE_DIR}/test-graphics-texture.cpp
+ ${DALI_TEST_SUITE_DIR}/test-platform-abstraction.cpp
+ ${DALI_TEST_SUITE_DIR}/test-render-controller.cpp
+ ${DALI_TEST_SUITE_DIR}/test-trace-call-stack.cpp
+ )
+ ADD_EXECUTABLE( ${LINKER_TEST_NAME} ${LINKER_TEST_SOURCES} )
+ TARGET_LINK_LIBRARIES(${LINKER_TEST_NAME} ${name} )
+ TARGET_INCLUDE_DIRECTORIES( ${LINKER_TEST_NAME} PRIVATE ${DALI_TEST_SUITE_DIR} )
+ENDIF()
# Configuration Messages
MESSAGE( STATUS "Configuration:\n" )
MESSAGE( STATUS "Prefix: " ${PREFIX} )
MESSAGE( STATUS "Lib Dir: " ${LIB_DIR} )
+MESSAGE( STATUS "Bin Dir: " ${BIN_DIR} )
MESSAGE( STATUS "Include Dir: " ${INCLUDE_DIR} )
MESSAGE( STATUS "Debug build: " ${ENABLE_DEBUG} )
MESSAGE( STATUS "Export all symbols: " ${ENABLE_EXPORTALL} )
MESSAGE( STATUS "Scoped Lock backtrace: " ${ENABLE_LOCK_BACKTRACE} )
MESSAGE( STATUS "Coverage: " ${ENABLE_COVERAGE} )
MESSAGE( STATUS "Trace: " ${ENABLE_TRACE} )
+MESSAGE( STATUS "Use pkg configure: " ${ENABLE_PKG_CONFIGURE} )
+MESSAGE( STATUS "Enable link test: " ${ENABLE_LINK_TEST} )
MESSAGE( STATUS "CXXFLAGS: " ${CMAKE_CXX_FLAGS} )
-MESSAGE( STATUS "LDFLAGS: " ${CMAKE_SHARED_LINKER_FLAGS_INIT}${CMAKE_SHARED_LINKER_FLAGS} )
\ No newline at end of file
+MESSAGE( STATUS "LDFLAGS: " ${CMAKE_SHARED_LINKER_FLAGS_INIT}${CMAKE_SHARED_LINKER_FLAGS} )