SmartAudio/package/avs/sampleapp/files/source/build/cmake/BuildOptions.cmake

74 lines
3.7 KiB
CMake

#
# Setup the build type and compiler options.
#
# To set the build type, run the following command with a build type of DEBUG, RELEASE, or MINSIZEREL:
# cmake <path-to-source> -DCMAKE_BUILD_TYPE=<build-type>
#
# If no build type is specified by specifying it on the command line, default to debug.
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: DEBUG, RELEASE, or MINSIZEREL." FORCE)
message("No build type specified, defaulting to Release.")
endif()
# Verify the build type is valid.
set(buildTypes DEBUG RELEASE MINSIZEREL)
string(TOUPPER "${CMAKE_BUILD_TYPE}" buildType)
list(FIND buildTypes "${buildType}" buildTypeFound)
if (buildTypeFound EQUAL -1)
string(LENGTH "${CMAKE_BUILD_TYPE}" buildTypeLen)
math(EXPR buildTypePadLen "72 - ${buildTypeLen}")
if (buildTypePadLen GREATER 0)
string(RANDOM LENGTH "${buildTypePadLen}" ALPHABET " " buildTypePad)
endif()
message("###############################################################################")
message("# #")
message("# ERROR: #")
message("# Unknown build type selected. Please select from DEBUG, RELEASE, or #")
message("# MINSIZEREL. #")
message("# #")
message("# Build Type: #")
message("# ${buildType}${buildTypePad}#")
message("# #")
message("###############################################################################")
message(FATAL_ERROR "Unknown build type ${buildType}. Please select from DEBUG, RELEASE, or MINSIZEREL. Quitting!")
else()
message("Creating the build directory for the ${PROJECT_NAME} with build type: ${buildType}")
endif()
# Set up the compiler flags.
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# Determine the platform and compiler dependent flags.
if (UNIX OR CMAKE_COMPILER_IS_GNUCXX)
set(CXX_PLATFORM_DEPENDENT_FLAGS_DEBUG "-DDEBUG -DACSDK_DEBUG_LOG_ENABLED -Wall -Werror -Wsign-compare -g")
set(CXX_PLATFORM_DEPENDENT_FLAGS_RELEASE "-DNDEBUG -Wall -Werror -O2")
set(CXX_PLATFORM_DEPENDENT_FLAGS_MINSIZEREL "-DNDEBUG -Wall -Werror -Os")
elseif(MSVC)
set(CXX_PLATFORM_DEPENDENT_FLAGS_DEBUG "/DDEBUG -DACSDK_DEBUG_LOG_ENABLED /W4 /WX /Zi")
set(CXX_PLATFORM_DEPENDENT_FLAGS_RELEASE "/DNDEBUG /W4 /WX /O2")
set(CXX_PLATFORM_DEPENDENT_FLAGS_MINSIZEREL "/DNDEBUG /W4 /WX /O1")
endif()
# Debug build, default.
set(CMAKE_CXX_FLAGS_DEBUG "${CXX_PLATFORM_DEPENDENT_FLAGS_DEBUG} -DRAPIDJSON_HAS_STDSTRING" CACHE INTERNAL "Flags used for DEBUG builds" FORCE)
set(CMAKE_C_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG} CACHE INTERNAL "Flags used for DEBUG builds" FORCE)
# Release build.
set(CMAKE_CXX_FLAGS_RELEASE "${CXX_PLATFORM_DEPENDENT_FLAGS_RELEASE} -DRAPIDJSON_HAS_STDSTRING" CACHE INTERNAL "Flags used for RELEASE builds" FORCE)
set(CMAKE_C_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE} CACHE INTERNAL "Flags used for RELEASE builds" FORCE)
# Minimum sized release build.
set(CMAKE_CXX_FLAGS_MINSIZEREL "${CXX_PLATFORM_DEPENDENT_FLAGS_MINSIZEREL} -DRAPIDJSON_HAS_STDSTRING" CACHE INTERNAL "Flags used for minimum sized RELEASE builds" FORCE)
set(CMAKE_C_FLAGS_MINSIZEREL ${CMAKE_CXX_FLAGS_RELEASE} CACHE INTERNAL "Flags used for minimum sized RELEASE builds" FORCE)
if (ACSDK_LATENCY_LOG)
add_definitions(-DACSDK_LATENCY_LOG_ENABLED)
endif()