TiagoMSSantos/MobileRT

View on GitHub
app/Unit_Testing/CMakeLists.txt

Summary

Maintainability
Test Coverage
###############################################################################
# Include auxiliary functions
###############################################################################
message( STATUS "Adding helper functions." )
include( ${CMAKE_SOURCE_DIR}/CMakeLists_helper.cmake )
include( CheckCXXCompilerFlag )
print_environment()
###############################################################################
###############################################################################


###############################################################################
# Add compiler flag to auto generated MOC
###############################################################################
if( CMAKE_CXX_COMPILER MATCHES "clang" )
  # Turn off redundant parentheses warning because of Qt moc generated code
  set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-redundant-parens" CACHE STRING "CUSTOM" FORCE )
endif()
###############################################################################
###############################################################################


###############################################################################
# Set up project
###############################################################################
message( STATUS "Setting up Unit Tests project." )
project( UnitTests VERSION 1.0.0.0 LANGUAGES CXX )

message( STATUS "Adding unit tests source files." )
file( GLOB GTEST_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" )

if( NOT DEFINED ANDROID_ABI )
  # Add native Ray Tracing engine tests if it's not for Android, so the code coverage is more accurate.
  # Also, since these engine tests use the native 'System_Dependent' dependency, it won't work in Android.
  file( GLOB GTEST_SOURCES_RAY_TRACING "${CMAKE_CURRENT_SOURCE_DIR}/engine/*.cpp" )
  set( GTEST_SOURCES "${GTEST_SOURCES};${GTEST_SOURCES_RAY_TRACING}" CACHE STRING "CUSTOM" FORCE )
endif()

message( STATUS "Creating executable." )
add_executable( ${PROJECT_NAME} ${GTEST_SOURCES} ${MOBILE_DEPENDENT_SOURCES} ${SCENES_SOURCES} )

if( DEFINED CONAN )
  if( DEFINED ANDROID_ABI )
    include( ${CMAKE_SOURCE_DIR}/../conanbuildinfo.cmake )
  else()
    include( ${CMAKE_SOURCE_DIR}/../conanbuildinfo.cmake )
  endif()
  conan_basic_setup( TARGETS )
endif()
###############################################################################
###############################################################################


###############################################################################
# Set target properties
###############################################################################
message( STATUS "Adding debug postfix." )
set_target_properties( ${PROJECT_NAME} PROPERTIES
  DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}" )
###############################################################################
###############################################################################


###############################################################################
# Set compiler flags
###############################################################################
# Add dependencies headers installed from conan package manager.
target_include_directories( ${PROJECT_NAME} SYSTEM PUBLIC ${CMAKE_INCLUDE_PATH} )
target_link_libraries( ${PROJECT_NAME} PRIVATE ${gtest_LIBRARIES_TARGETS} )

message( STATUS "Adding compiler flags." )
target_compile_options( ${PROJECT_NAME} PRIVATE ${COMMON_FLAGS} )
target_compile_options( ${PROJECT_NAME} PRIVATE
  $<$<CONFIG:DEBUG>:${COMMON_FLAGS_DEBUG}> )
target_compile_options( ${PROJECT_NAME} PRIVATE
  $<$<CONFIG:DEBUG>:${COMMON_FLAGS_TEST}> )
target_compile_options( ${PROJECT_NAME} PRIVATE
  $<$<CONFIG:RELEASE>:${COMMON_FLAGS_RELEASE}> )

# Turn off warnings because of Google Test
if( NOT "${CMAKE_GENERATOR}" MATCHES "Visual Studio" )
  target_compile_options( ${PROJECT_NAME} PRIVATE -Wno-global-constructors )
  target_compile_options( ${PROJECT_NAME} PRIVATE -Wno-used-but-marked-unused )
  target_compile_options( ${PROJECT_NAME} PRIVATE -Wno-covered-switch-default )
  # Necessary because in MacOS it gives: error: redundant move in return statement
  target_compile_options( ${PROJECT_NAME} PRIVATE -Wno-redundant-move )
endif()
###############################################################################
###############################################################################


###############################################################################
# Link project
###############################################################################
if( DEFINED ANDROID_ABI )
  message( STATUS "Adding Android JNI layer." )
  target_link_libraries( ${PROJECT_NAME} PRIVATE android jnigraphics )
endif()

message( STATUS "Linking with MobileRT and Google Test." )
target_link_libraries( ${PROJECT_NAME} PRIVATE -L/usr/local/lib )
target_link_libraries( ${PROJECT_NAME}
  PRIVATE MobileRT Components gtest
  general "${COMMON_LINKER_FLAGS}"
  debug "${COMMON_LINKER_FLAGS_DEBUG}" "${COMMON_LINKER_FLAGS_TEST}"
  optimized "${COMMON_LINKER_FLAGS_RELEASE}" )
###############################################################################
###############################################################################