X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=build%2Ftizen%2FCMakeLists.txt;h=367446c400c62c723d209473d5ca983562ce9146;hb=79881246746f65474b24ea4fe14151ccef8df3f4;hp=acece1ee0d89f806e0d13a6ce3fa0f54bccd753a;hpb=4afd29f71bfdcc03b31bf9e921b36988cfec631f;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/build/tizen/CMakeLists.txt b/build/tizen/CMakeLists.txt index acece1e..367446c 100644 --- a/build/tizen/CMakeLists.txt +++ b/build/tizen/CMakeLists.txt @@ -1,4 +1,4 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +CMAKE_MINIMUM_REQUIRED(VERSION 3.1) CMAKE_POLICY(SET CMP0012 NEW) # Prevent dereferencing of OFF/ON as variables SET(name "dali-core") @@ -6,6 +6,13 @@ SET(name "dali-core") 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_MINOR 0) @@ -22,45 +29,70 @@ OPTION(ENABLE_BACKTRACE "Enable Backtrace" OFF) 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 ) + FIND_PATH( SYSTEM_INCLUDE_DIR "dali-windows-dependencies.h" ) +ENDIF() # Set up compiler definitions IF(CMAKE_BUILD_TYPE MATCHES Debug) MESSAGE( STATUS "CMAKE_BUILD_TYPE: " Debug ) - SET(ENABLE_DEBUG ON) + SET( ENABLE_DEBUG ON ) ELSE() MESSAGE( STATUS "CMAKE_BUILD_TYPE: " Release ) ENDIF() -ADD_DEFINITIONS(-DPLATFORM_TIZEN -DDALI_COMPILATION) -ADD_DEFINITIONS(-DPIC -DSTDC_HEADERS) +IF( ENABLE_DEBUG ) + ADD_DEFINITIONS( "-DDEBUG_ENABLED" ) + SET( ENABLE_EXPORTALL ON ) +ENDIF() + +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( NOT ${ENABLE_EXPORTALL} AND NOT ${ENABLE_DEBUG} ) - ADD_DEFINITIONS( "-fvisibility=hidden -DHIDE_DALI_INTERNALS" ) -ENDIF( NOT ${ENABLE_EXPORTALL} AND NOT ${ENABLE_DEBUG} ) +ELSEIF( UNIX ) -IF( ENABLE_DEBUG ) - ADD_DEFINITIONS( "-DDEBUG_ENABLED" ) -ENDIF( ENABLE_DEBUG ) + IF( NOT ${ENABLE_EXPORTALL} ) + ADD_DEFINITIONS( "-DHIDE_DALI_INTERNALS" ) + ENDIF() + + ADD_DEFINITIONS(-DPIC -DSTDC_HEADERS) + + IF("${ARCH}" STREQUAL "arm") + ADD_DEFINITIONS("-DTARGET") + ENDIF() + + IF( NOT ${ENABLE_EXPORTALL} ) + ADD_DEFINITIONS( "-fvisibility=hidden" ) + 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( EXEC_PREFIX ${CMAKE_INSTALL_PREFIX}) # from root/build/tizen, get back to root -SET(ROOT_SRC_DIR ${CMAKE_SOURCE_DIR}/../..) +SET(ROOT_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../..) # Make sure the path is absolute GET_FILENAME_COMPONENT(ROOT_SRC_DIR ${ROOT_SRC_DIR} ABSOLUTE) @@ -68,48 +100,65 @@ GET_FILENAME_COMPONENT(ROOT_SRC_DIR ${ROOT_SRC_DIR} ABSOLUTE) # 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 up the lib dir -SET( LIB_DIR $ENV{libdir} ) -IF( NOT LIB_DIR ) +IF( SET_VCPKG_INSTALL_PREFIX ) SET( LIB_DIR ${PREFIX}/lib ) + SET( BIN_DIR ${PREFIX}/bin ) +ELSE() + 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() 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 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 -ggdb ) -ADD_COMPILE_OPTIONS( -std=c++11 -gdwarf-4 ) -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 ) +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}/dali-core.pc ) + CONFIGURE_FILE( ${CORE_PKG_CFG_FILE}.in ${CORE_PKG_CFG_FILE} @ONLY ) ENDIF() -ADD_COMPILE_OPTIONS( -Wall -Wextra -Wno-unused-parameter -Wfloat-equal ) +IF( WIN32 ) # WIN32 includes x64 as well according to the cmake doc. -IF( ENABLE_COVERAGE OR "$ENV{CXXFLAGS}" MATCHES --coverage ) - ADD_COMPILE_OPTIONS( --coverage ) - SET(ENABLE_COVERAGE ON) - SET(COVERAGE --coverage) -ENDIF() + 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. -IF( ENABLE_TRACE ) - ADD_DEFINITIONS("-DTRACE_ENABLED") -ENDIF() +ELSEIF( UNIX ) + + # 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 ) + ENDIF() + ADD_COMPILE_OPTIONS( -Wall -Wextra -Wno-unused-parameter -Wfloat-equal -Wno-class-memaccess -Wno-cast-function-type ) + + IF( ENABLE_COVERAGE OR "$ENV{CXXFLAGS}" MATCHES --coverage ) + ADD_COMPILE_OPTIONS( --coverage ) + SET(ENABLE_COVERAGE ON) + SET(COVERAGE --coverage) + ENDIF() + +ENDIF() INCLUDE_DIRECTORIES( ${ROOT_SRC_DIR} + ${SYSTEM_INCLUDE_DIR} ) SET(SOURCE_DIR "${ROOT_SRC_DIR}/dali") @@ -123,6 +172,11 @@ INCLUDE( ${ROOT_SRC_DIR}/dali/internal/file.list ) 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 ) +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) @@ -132,8 +186,18 @@ ENDIF() ADD_LIBRARY( ${name} ${LIBTYPE} ${SOURCES} ) +# pthread required due to gcc issue +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} - -lpthread + ${OPTIONAL_LIBS} ${COVERAGE} ) @@ -145,10 +209,35 @@ SET_TARGET_PROPERTIES( ${name} ) # Install the library so file and symlinks -INSTALL( TARGETS ${name} DESTINATION ${LIB_DIR} ) +IF( INSTALL_CMAKE_MODULES ) + INSTALL( TARGETS ${name} + EXPORT ${name}-targets + LIBRARY DESTINATION ${LIB_DIR} + ARCHIVE DESTINATION ${LIB_DIR} + RUNTIME DESTINATION ${BIN_DIR} + ) + + 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} ) +ELSE() + INSTALL( TARGETS ${name} DESTINATION ${LIB_DIR} ) +ENDIF() + # Install the pkg-config file -INSTALL( FILES ${CMAKE_BINARY_DIR}/${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) @@ -167,90 +256,102 @@ INSTALL_HEADERS_WITH_DIRECTORY(DEVEL_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" ) -IF(UNIX) - # Define custom rules for coverage - SET(COVERAGE_DIR .cov) - SET(COVERAGE_OUTPUT_DIR doc/coverage) - - # lcov prior to 1.10 doesn't have -rc option; this and subsequent version don't output - # branch coverage. Determine the lcov version, and enable branch coverage accordingly. - EXECUTE_PROCESS( COMMAND bash -c "lcov --version | cut -d' ' -f4" OUTPUT_VARIABLE LCOV_VERSION ) - STRING( REPLACE "." ";" LCOV_VLIST ${LCOV_VERSION}) - IF( NOT $ ) - SET(LCOV_OPTS --rc lcov_branch_coverage=1) - ENDIF() +# 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( ENABLE_COVERAGE ) + FIND_PROGRAM( LCOV_BIN "lcov" ) + IF( LCOV_BIN ) + + # Define custom rules for coverage + SET(COVERAGE_DIR .cov) + SET(COVERAGE_OUTPUT_DIR doc/coverage) + + # lcov prior to 1.10 doesn't have -rc option; this and subsequent version don't output + # branch coverage. Determine the lcov version, and enable branch coverage accordingly. + EXECUTE_PROCESS( COMMAND bash -c "${LCOV_BIN} --version | cut -d' ' -f4" OUTPUT_VARIABLE LCOV_VERSION ) + STRING( REPLACE "." ";" LCOV_VLIST ${LCOV_VERSION}) + IF( NOT $ ) + SET(LCOV_OPTS --rc lcov_branch_coverage=1) + ENDIF() + + ADD_CUSTOM_TARGET( ${DALI_CORE_PREFIX}rename_cov_data ./rename-cov-data ) + + ADD_CUSTOM_TARGET( ${DALI_CORE_PREFIX}cov_data ${LCOV_BIN} ${LCOV_OPTS} --base-directory . --directory . -c -o dali.info + COMMAND ${LCOV_BIN} ${LCOV_OPTS} --remove dali.info \"*/dali-env/*\" \"/usr/include/*\" \"public-api/shader-effects/*\" \"*/image-actor*\" -o dali.info ) + + ADD_CUSTOM_TARGET( ${DALI_CORE_PREFIX}coverage genhtml ${LCOV_OPTS} -o ${COVERAGE_OUTPUT_DIR} dali.info + DEPENDS cov_data ) + + ADD_CUSTOM_TARGET( ${DALI_CORE_PREFIX}reset_coverage @${LCOV_BIN} -z --directory `pwd` ) + + # Define custom rule for distclean + ADD_CUSTOM_TARGET( ${DALI_CORE_PREFIX}distclean @echo cleaning for source distribution ) + ADD_CUSTOM_COMMAND( + DEPENDS ${DALI_CORE_PREFIX}clean + COMMENT "distribution clean" + COMMAND find + ARGS . + -not -name config.cmake -and \( + -name tester.c -or + -name Testing -or + -name CMakeFiles -or + -name doc -or + -name cmake.depends -or + -name cmake.check_depends -or + -name CMakeCache.txt -or + -name cmake.check_cache -or + -name *.cmake -or + -name Makefile -or + -name core -or + -name core.* -or + -name gmon.out -or + -name install_manifest.txt -or + -name *.pc -or + -name *.gcov -or + -name *.gcno -or + -name *.gcda -or + -name *~ -or + -name libdali*.so* \) + | grep -v TC | xargs rm -rf + TARGET ${DALI_CORE_PREFIX}distclean + VERBATIM + ) + + ENDIF( LCOV_BIN ) +ENDIF() - ADD_CUSTOM_TARGET( rename_cov_data ./rename-cov-data ) - - ADD_CUSTOM_TARGET( cov_data lcov ${LCOV_OPTS} --base-directory . --directory . -c -o dali.info - COMMAND lcov ${LCOV_OPTS} --remove dali.info \"*/dali-env/*\" \"/usr/include/*\" \"public-api/shader-effects/*\" \"*/image-actor*\" -o dali.info ) - - ADD_CUSTOM_TARGET( coverage genhtml ${LCOV_OPTS} -o ${COVERAGE_OUTPUT_DIR} dali.info - DEPENDS cov_data ) - - ADD_CUSTOM_TARGET( reset_coverage @lcov -z --directory `pwd` ) - - # Define custom rule for distclean - ADD_CUSTOM_TARGET( distclean @echo cleaning for source distribution ) - ADD_CUSTOM_COMMAND( - DEPENDS clean - COMMENT "distribution clean" - COMMAND find - ARGS . - -not -name config.cmake -and \( - -name tester.c -or - -name Testing -or - -name CMakeFiles -or - -name doc -or - -name cmake.depends -or - -name cmake.check_depends -or - -name CMakeCache.txt -or - -name cmake.check_cache -or - -name *.cmake -or - -name Makefile -or - -name core -or - -name core.* -or - -name gmon.out -or - -name install_manifest.txt -or - -name *.pc -or - -name *.gcov -or - -name *.gcno -or - -name *.gcda -or - -name *~ -or - -name libdali*.so* \) - | grep -v TC | xargs rm -rf - TARGET distclean - VERBATIM - ) - -ENDIF(UNIX) - -# Linker Test -SET( DALI_TEST_SUITE_DIR ${ROOT_SRC_DIR}/automated-tests/src/dali/dali-test-suite-utils ) -SET( LINKER_TEST_NAME 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} ) +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-platform-abstraction.cpp + ${DALI_TEST_SUITE_DIR}/test-render-controller.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() # 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 "Backtrace: " ${ENABLE_BACKTRACE} ) 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} )