# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # If we are running clang >= 10.0 then enable more checking. Some of these warnings may not exist # in older versions of clang so we limit the use of older clang for these checks. if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") EXECUTE_PROCESS(COMMAND ${CMAKE_CXX_COMPILER} --version OUTPUT_VARIABLE clang_full_version) string (REGEX REPLACE ".*clang version ([0-9]+\\.[0-9]+).*" "\\1" CLANG_VERSION ${clang_full_version}) message(STATUS "CLANG_VERSION ${CLANG_VERSION}") # cmake 3.2 does not support VERSION_GREATER_EQUAL set(CLANG_MINIMUM_VERSION 10.0) if ((CLANG_VERSION VERSION_GREATER ${CLANG_MINIMUM_VERSION}) OR (CLANG_VERSION VERSION_GREATER ${CLANG_MINIMUM_VERSION})) message(STATUS "Setting enhanced clang warning flags") set(warning_opts # These warnings are only enabled when clang's -Weverything flag is enabled # but there is no harm in turning them off for all cases. -Wno-c++98-compat -Wno-c++98-compat-extra-semi -Wno-c++98-compat-pedantic -Wno-padded -Wno-extra-semi -Wno-extra-semi-stmt -Wno-unused-parameter -Wno-sign-conversion -Wno-weak-vtables -Wno-deprecated-copy-dtor -Wno-global-constructors -Wno-double-promotion -Wno-float-equal -Wno-missing-prototypes -Wno-implicit-int-float-conversion -Wno-implicit-float-conversion -Wno-implicit-int-conversion -Wno-float-conversion -Wno-shorten-64-to-32 -Wno-covered-switch-default -Wno-unused-exception-parameter -Wno-return-std-move -Wno-over-aligned -Wno-undef -Wno-inconsistent-missing-destructor-override -Wno-unreachable-code -Wno-deprecated-copy -Wno-implicit-fallthrough -Wno-unreachable-code-return -Wno-non-virtual-dtor # Here we have non-standard warnings that clang has available and are useful # so enable them if we are using clang. -Wreserved-id-macro -Wused-but-marked-unused -Wdocumentation-unknown-command -Wcast-qual -Wzero-as-null-pointer-constant # These warnings should be enabled one at a time and fixed. # To enable one of these warnings remove the `no-` after -W so # -Wno-documentation -> -Wdocumentation -Wno-documentation -Wno-shadow-uncaptured-local -Wno-shadow-field-in-constructor -Wno-shadow -Wno-shadow-field -Wno-exit-time-destructors -Wno-switch-enum -Wno-old-style-cast -Wno-gnu-anonymous-struct -Wno-nested-anon-types ) target_compile_options(tvm_objs PRIVATE $<$: ${warning_opts}>) target_compile_options(tvm_runtime_objs PRIVATE $<$: ${warning_opts}>) endif () endif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")