1*4882a593Smuzhiyunset(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -fPIC") 2*4882a593Smuzhiyunset(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -fPIC") 3*4882a593Smuzhiyunset(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -gdwarf") 4*4882a593Smuzhiyunset(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG") 5*4882a593Smuzhiyunset(CMAKE_CXX_FLAGS_RELEASE "-O4 -DNDEBUG") 6*4882a593Smuzhiyunset(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -gdwarf") 7*4882a593Smuzhiyun 8*4882a593Smuzhiyunset(CMAKE_C_STANDARD 11) 9*4882a593Smuzhiyunset(CMAKE_CXX_STANDARD 11) 10*4882a593Smuzhiyun 11*4882a593Smuzhiyunset(CMAKE_C_EXTENSIONS ON) 12*4882a593Smuzhiyunset(CMAKE_CXX_EXTENSIONS ON) 13*4882a593Smuzhiyunset(CMAKE_CXX_STANDARD_REQUIRED ON) 14*4882a593Smuzhiyun 15*4882a593Smuzhiyunif (ARCH STREQUAL "arm") 16*4882a593Smuzhiyun set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mthumb -mthumb-interwork") 17*4882a593Smuzhiyun set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mthumb -mthumb-interwork") 18*4882a593Smuzhiyunendif() 19*4882a593Smuzhiyun 20*4882a593Smuzhiyunif (CMAKE_CXX_COMPILER_ID MATCHES "GNU") 21*4882a593Smuzhiyun set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11") 22*4882a593Smuzhiyun set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") 23*4882a593Smuzhiyun execute_process( 24*4882a593Smuzhiyun COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) 25*4882a593Smuzhiyun if (NOT (GCC_VERSION VERSION_GREATER 4.7 OR GCC_VERSION VERSION_EQUAL 4.7)) 26*4882a593Smuzhiyun message(FATAL_ERROR "${PROJECT_NAME} requires g++ 4.7 or greater.") 27*4882a593Smuzhiyun endif () 28*4882a593Smuzhiyunelseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang") 29*4882a593Smuzhiyun set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") 30*4882a593Smuzhiyunelseif (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") 31*4882a593Smuzhiyun set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /stdlib=libc++") 32*4882a593Smuzhiyunelse () 33*4882a593Smuzhiyun message(FATAL_ERROR "Your C++ compiler does not support C++11.") 34*4882a593Smuzhiyunendif () 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun# Workaround Compile Errors 37*4882a593Smuzhiyunif (CMAKE_CXX_COMPILER_ID MATCHES "GNU") 38*4882a593Smuzhiyun set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-reorder -Wno-unused -Wno-misleading-indentation -Wno-format-truncation -fno-strict-aliasing -Wno-address-of-packed-member -Wno-psabi") 39*4882a593Smuzhiyun if(NOT ARCH STREQUAL "fpga") 40*4882a593Smuzhiyun add_compile_options(-fstack-protector-strong -D_FORTIFY_SOURCE=2) 41*4882a593Smuzhiyun endif() 42*4882a593Smuzhiyunelseif (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") 43*4882a593Smuzhiyun add_definitions(-D_CRT_SECURE_NO_WARNINGS) 44*4882a593Smuzhiyunendif() 45*4882a593Smuzhiyun 46*4882a593Smuzhiyunif (RKAIQ_ENABLE_ASAN) 47*4882a593Smuzhiyun set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address") 48*4882a593Smuzhiyun set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address") 49*4882a593Smuzhiyun set(CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address") 50*4882a593Smuzhiyun set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -fno-omit-frame-pointer -fsanitize=address") 51*4882a593Smuzhiyun set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -fno-omit-frame-pointer -fsanitize=address") 52*4882a593Smuzhiyun set(CMAKE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_LINKER_FLAGS_RELWITHDEBINFO} -fno-omit-frame-pointer -fsanitize=address") 53*4882a593Smuzhiyunendif() 54*4882a593Smuzhiyun 55