Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F27036853
HandleROSAOptions.cmake
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Authored By
Unknown
Size
6 KB
Referenced Files
None
Subscribers
None
HandleROSAOptions.cmake
View Options
# This CMake module is responsible for interpreting the user defined ROSA_
# options and executing the appropriate CMake commands to realize the users'
# selections.
include
(
CheckCCompilerFlag
)
include
(
CheckCXXCompilerFlag
)
if
(
"${CMAKE_CXX_COMPILER_ID}"
MATCHES
"Clang"
)
set
(
ROSA_COMPILER_IS_CLANG
ON
)
# Enforce minimum version.
if
(
CMAKE_CXX_COMPILER_VERSION
VERSION_LESS
"3.9.0"
)
message
(
FATAL_ERROR
"Insufficient LLVM version"
)
endif
()
else
()
set
(
ROSA_COMPILER_IS_CLANG
OFF
)
endif
()
if
(
CMAKE_COMPILER_IS_GNUCXX
)
set
(
ROSA_COMPILER_IS_GCC_COMPATIBLE
ON
)
elseif
(
MSVC
)
set
(
ROSA_COMPILER_IS_GCC_COMPATIBLE
OFF
)
elseif
(
ROSA_COMPILER_IS_CLANG
)
set
(
ROSA_COMPILER_IS_GCC_COMPATIBLE
ON
)
else
()
message
(
FATAL_ERROR
"Unexpected C++ compiler!"
)
endif
()
function
(
append
value
)
foreach
(
variable
${
ARGN
}
)
set
(
${
variable
}
"${${variable}} ${value}"
PARENT_SCOPE
)
endforeach
(
variable
)
endfunction
()
function
(
append_if
condition
value
)
if
(
${
condition
}
)
foreach
(
variable
${
ARGN
}
)
set
(
${
variable
}
"${${variable}} ${value}"
PARENT_SCOPE
)
endforeach
(
variable
)
endif
()
endfunction
()
function
(
remove
value
)
foreach
(
variable
${
ARGN
}
)
string
(
REPLACE
"${value}"
""
NEWVAR
"${${variable}}"
)
set
(
${
variable
}
"${NEWVAR}"
PARENT_SCOPE
)
endforeach
(
variable
)
endfunction
()
# NDEBUG on non-Debug builds
append
(
"-DNDEBUG"
CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_RELWITHDEBINFO
CMAKE_CXX_FLAGS_MINSIZEREL
CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_RELWITHDEBINFO
CMAKE_C_FLAGS_MINSIZEREL
)
# Assertions are always enabled on Debug builds, this is interesting for
# non-Debug builds.
if
(
NOT
"${uppercase_CMAKE_BUILD_TYPE}"
STREQUAL
"DEBUG"
AND
${
ROSA_ENABLE_ASSERTIONS
}
)
# MSVC doesn't like _DEBUG on release builds. See PR 4379.
if
(
NOT
MSVC
)
add_definitions
(
-D_DEBUG
)
set
(
ENABLE_ASSERTIONS
"1"
)
else
()
set
(
ENABLE_ASSERTIONS
"0"
)
endif
()
# On non-Debug builds we NDEBUG, but in this case we need to undefine it:
add_definitions
(
-UNDEBUG
)
# Also remove /D NDEBUG to avoid MSVC warnings about conflicting defines.
foreach
(
flags_var_to_scrub
CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_RELWITHDEBINFO
CMAKE_CXX_FLAGS_MINSIZEREL
CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_RELWITHDEBINFO
CMAKE_C_FLAGS_MINSIZEREL
)
string
(
REGEX
REPLACE
"(^| )[/-]D *NDEBUG($| )"
" "
"${flags_var_to_scrub}"
"${${flags_var_to_scrub}}"
)
endforeach
()
endif
()
set
(
ROSA_ENABLE_ASSERTIONS_INT
-1
)
if
(
"${uppercase_CMAKE_BUILD_TYPE}"
STREQUAL
"DEBUG"
OR
${
ROSA_ENABLE_ASSERTIONS
}
)
set
(
ROSA_ENABLE_ASSERTIONS_INT
1
)
endif
()
if
(
ROSA_COMPILER_IS_GCC_COMPATIBLE
)
append
(
"-Wall -Wextra -Wdocumentation -Werror"
CMAKE_C_FLAGS
CMAKE_CXX_FLAGS
)
append_if
(
ROSA_ENABLE_PEDANTIC
"-pedantic -Wno-long-long"
CMAKE_C_FLAGS
CMAKE_CXX_FLAGS
)
append
(
"-fno-rtti -fno-exceptions"
CMAKE_CXX_FLAGS
)
append
(
"-Wno-c++1z-compat"
CMAKE_CXX_FLAGS
)
elseif
(
MSVC
)
if
(
ROSA_COMPILER_IS_CLANG
)
# Remove/adjsut incorrect flags that might be generated automatically.
foreach
(
flags_var_to_scrub
CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_RELWITHDEBINFO
CMAKE_CXX_FLAGS_MINSIZEREL
CMAKE_C_FLAGS
CMAKE_C_FLAGS_DEBUG
CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_RELWITHDEBINFO
CMAKE_C_FLAGS_MINSIZEREL
)
string
(
REGEX
REPLACE
"(^| )-Wall($| )"
" "
"${flags_var_to_scrub}"
"${${flags_var_to_scrub}}"
)
string
(
REGEX
REPLACE
"(^| )-frtti($| )"
" "
"${flags_var_to_scrub}"
"${${flags_var_to_scrub}}"
)
string
(
REGEX
REPLACE
"(^| )-fexceptions($| )"
" "
"${flags_var_to_scrub}"
"${${flags_var_to_scrub}}"
)
string
(
REGEX
REPLACE
"(^| )-fno-inline($| )"
" -Ob0 "
"${flags_var_to_scrub}"
"${${flags_var_to_scrub}}"
)
string
(
REGEX
REPLACE
"(^| )-gline-tables-only($| )"
" "
"${flags_var_to_scrub}"
"${${flags_var_to_scrub}}"
)
message
(
"${flags_var_to_scrub}: ${${flags_var_to_scrub}}"
)
endforeach
()
endif
()
# Flags matching GCC-compatible "-Wall -Wextra -Werror".
# NOTE: Do not use -Wall for MSVC because it generates silly warning (e.g.,
# warnings about things in external libraries), use -W4 instead.
append
(
"/W4 /WX"
CMAKE_C_FLAGS
CMAKE_CXX_FLAGS
)
if
(
ROSA_COMPILER_IS_CLANG
)
# GCC-compatible flags without corresponding MSVC options.
append
(
"-Wdocumentation"
CMAKE_C_FLAGS
CMAKE_CXX_FLAGS
)
# The flag "-pedantic" is not in the MSVC flavour.
append_if
(
ROSA_ENABLE_PEDANTIC
"-Wno-long-long"
CMAKE_C_FLAGS
CMAKE_CXX_FLAGS
)
endif
()
# Flags matching GCC-compatible "-fno-rtti".
append
(
"/GR-"
CMAKE_CXX_FLAGS
)
# NOTE: We cannot disable unwind semantics (i.e., -fno-exceptions) for Windows
# libraries...
append
(
"/EHsc"
CMAKE_CXX_FLAGS
)
if
(
ROSA_COMPILER_IS_CLANG
)
append
(
"-Wno-c++1z-compat"
CMAKE_CXX_FLAGS
)
# MSVC puts there some garbage which needs to be ignored...
append
(
"-Qunused-arguments"
CMAKE_C_FLAGS
CMAKE_CXX_FLAGS
)
endif
()
if
(
MSVC
)
# Make MSVC ignore warning C4514 about unreferenced inline functions.
append
(
"/nowarn:4514"
)
# Make MSVC ignore warning LNK4221 in libraries. The warning is caused by
# empty object files that correspond to the empty .cpp files, which we have
# for generating compile database entries for all header files.
append
(
"/IGNORE:4221"
CMAKE_STATIC_LINKER_FLAGS
)
# Let's make the compiler handle a big number of sections in object files.
append
(
"/bigobj"
CMAKE_CXX_FLAGS
)
endif
()
endif
()
if
(
ROSA_ENABLE_CLANG_TIDY
)
# Set clang-tidy arguments, use the same for both C and CXX.
set
(
CMAKE_C_CLANG_TIDY
"${CLANGTIDY_EXECUTABLE};-header-filter=.*"
)
set
(
CMAKE_CXX_CLANG_TIDY
${
CMAKE_C_CLANG_TIDY
}
)
# Apply suggested fixes if requested.
append_if
(
ROSA_CLANG_TIDY_FIX
",-fix"
CMAKE_C_CLANG_TIDY
CMAKE_CXX_CLANG_TIDY
)
endif
(
ROSA_ENABLE_CLANG_TIDY
)
if
(
ROSA_INCLUDE_APPS
STREQUAL
""
)
message
(
STATUS
"Include all apps by default."
)
SUBDIRLIST
(
ROSA_INCLUDE_APPS
${
ROSA_MAIN_SRC_DIR
}
/apps
)
else
()
message
(
STATUS
"Include apps: ${ROSA_INCLUDE_APPS}."
)
endif
()
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Oct 27, 8:15 PM (1 d, 16 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
407280
Default Alt Text
HandleROSAOptions.cmake (6 KB)
Attached To
Mode
R20 SoC_Rosa_repo
Attached
Detach File
Event Timeline