Clang-tidy is part of clang tooling that's a static analyzer of
everything from "unsafe" code that violates security guidelines, to
stylistic fixes. There are many hundreds of tests. Initially we are
just enabling some basic security and correctness tests. Will add more
later.
All you need to do to run it is
make CLANG_TIDY=1
Or if running cmake directly, use -DCLANG_TIDY=1
Warning: it is a long compile.
Set up a Travis test to run clang-tidy for static analysis. But after
much trial and error, I just couldn't get it to run in the 50 minutes
that Travis allows. So for now it's disabled. But if we ever have a CI
solution that executes faster or has longer time limits, I would love to
do a full static analysis on every PR. For now, I will have to be
content running it by hand on my own machine from time to time (and for
every tagged release).
245 lines
10 KiB
Plaintext
245 lines
10 KiB
Plaintext
# SPI-specific settings
|
|
ifneq (${VERBOSE},)
|
|
$(info Including spi/Makefile-bits-arnold)
|
|
endif
|
|
|
|
# READ THIS FIRST
|
|
#
|
|
# If you are building for Arnold, just make.
|
|
|
|
|
|
# Default namespace
|
|
NAMESPACE ?= 'OpenImageIO_Arnold'
|
|
MY_CMAKE_FLAGS += -DEXTRA_CPP_ARGS:STRING="-DOIIO_SPI=1" -DOIIO_SITE:STRING=SPI
|
|
SPCOMP2_LOCATION = /shots/spi/home/lib/SpComp2
|
|
NUKE_VERSION ?= 10.0v4
|
|
PYLIB_LIB_PREFIX ?= 0
|
|
PYLIB_INCLUDE_SONAME ?= 0
|
|
CPPSTDSUFFIX=
|
|
|
|
|
|
## Detect which SPI platform and set $platform, $COMPILER, $SPCOMP2_COMPILER,
|
|
## and PYTHON_VERSION. Lots of other decisions are based on these.
|
|
ifeq (${SP_OS}, rhel7)
|
|
# Rhel7 (current)
|
|
platform := rhel7
|
|
SPCOMP2_COMPILER ?= gcc48m64
|
|
else ifeq (${platform}, macosx)
|
|
# Generic OSX machines (including LG's laptop)
|
|
COMPILER ?= clang
|
|
SPCOMP2_COMPILER ?= clang
|
|
PYTHON_VERSION ?= 2.6
|
|
else
|
|
$(error Unknown SP_OS=${SP_OS} platform=${platform})
|
|
endif # endif ${SP_OS}
|
|
|
|
PYTHON_VERSION ?= 2.7
|
|
PYTHON_LIBRARY_DIR ?= /usr/lib64
|
|
PYTHON_LIBRARY ?= ${PYTHON_LIBRARY_DIR}/libpython${PYTHON_VERSION}.so
|
|
PYTHON_INCLUDE_DIR ?= /usr/include/python${PYTHON_VERSION}
|
|
OCIO_SPCOMP_VERSION ?= 2
|
|
|
|
|
|
## Rhel7 (current)
|
|
ifeq (${SP_OS}, rhel7)
|
|
USE_CPP ?= 11
|
|
USE_SIMD ?= sse4.1,aes
|
|
CMAKE ?= cmake
|
|
USE_NINJA ?= 1
|
|
NINJA ?= ninja
|
|
ifeq ($(USE_NINJA),1)
|
|
MY_CMAKE_FLAGS += -DCMAKE_MAKE_PROGRAM=${NINJA}
|
|
endif
|
|
export CCACHE_CPP2 ?= 1
|
|
# Override lib64 and use SPI convention of lib
|
|
MY_CMAKE_FLAGS += -DCMAKE_INSTALL_LIBDIR="${INSTALL_PREFIX}/lib"
|
|
BOOSTVERS ?= 1.55
|
|
SPCOMP2_USE_BOOSTVERS ?= 1
|
|
BOOSTSPSUFFIX ?=
|
|
BOOSTVERSSP=${BOOSTVERS}${BOOSTSPSUFFIX}
|
|
BOOSTVERS_SUFFIX = -${shell echo ${BOOSTVERS} | sed "s/\\./_/"}
|
|
BOOSTVERS_PREFIX = ${shell echo ${BOOSTVERS} | sed "s/\\./_/"}_0
|
|
CONSTRUCTED_BOOSTVERS = ${shell echo ${BOOSTVERS} | sed "s/\\./0/"}00
|
|
SPCOMP2_BOOSTVERS_SUFFIX = ${shell echo ${BOOSTVERSSP} | sed "s/\\.//"}
|
|
SPCOMP2_FULLBOOST_SUFFIX = ${SP_OS}-${SPCOMP2_COMPILER}-boost${shell echo ${BOOSTVERSSP} | sed "s/\\.//"}
|
|
# $(info BOOSTVERSSP ${BOOSTVERSSP})
|
|
# $(info BOOSTVERS_SUFFIX ${BOOSTVERS_SUFFIX})
|
|
# $(info BOOSTVERS_PREFIX ${BOOSTVERS_PREFIX})
|
|
# $(info CONSTRUCTED_BOOSTVERS ${CONSTRUCTED_BOOSTVERS})
|
|
# $(info SPCOMP2_BOOSTVERS_SUFFIX ${SPCOMP2_BOOSTVERS_SUFFIX})
|
|
# $(info SPCOMP2_FULLBOOST_SUFFIX ${SPCOMP2_FULLBOOST_SUFFIX})
|
|
OCIO_PATH ?= ${SPCOMP2_LOCATION}/OpenColorIO/${SP_OS}-${SPCOMP2_COMPILER}/v${OCIO_SPCOMP_VERSION}
|
|
FIELD3D_HOME ?= ${SPCOMP2_LOCATION}/Field3D/${SPCOMP2_FULLBOOST_SUFFIX}/v412
|
|
TBB_ROOT_DIR ?= /net/apps/rhel7/intel/tbb
|
|
OPENVDB_ROOT_DIR ?= ${SPCOMP2_LOCATION}/openvdb/${SPCOMP2_FULLBOOST_SUFFIX}/v5010000
|
|
|
|
## If not overridden, here is our preferred LLVM installation
|
|
## (may be changed as new versions are rolled out to the facility)
|
|
LLVM_DIRECTORY ?= /shots/spi/home/lib/arnold/rhel7/llvm_7.0.0
|
|
|
|
# A variety of tags can be used to try specific versions of gcc or
|
|
# clang from the site-specific places we have installed them.
|
|
ifeq (${COMPILER},clang5)
|
|
LLVM_DIRECTORY := /shots/spi/home/lib/arnold/rhel7/llvm_5.0.1
|
|
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=${LLVM_DIRECTORY}/bin/clang -DCMAKE_CXX_COMPILER=${LLVM_DIRECTORY}/bin/clang++
|
|
MY_CMAKE_FLAGS += -DCMAKE_C_FLAGS="--gcc-toolchain=/usr" -DCMAKE_CXX_FLAGS="--gcc-toolchain=/usr"
|
|
else ifeq (${COMPILER},clang6)
|
|
LLVM_DIRECTORY := /shots/spi/home/lib/arnold/rhel7/llvm_6.0.1
|
|
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=${LLVM_DIRECTORY}/bin/clang -DCMAKE_CXX_COMPILER=${LLVM_DIRECTORY}/bin/clang++
|
|
MY_CMAKE_FLAGS += -DCMAKE_C_FLAGS="--gcc-toolchain=/usr" -DCMAKE_CXX_FLAGS="--gcc-toolchain=/usr"
|
|
else ifeq (${COMPILER},clang7)
|
|
LLVM_DIRECTORY := /shots/spi/home/lib/arnold/rhel7/llvm_7.0.0
|
|
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=${LLVM_DIRECTORY}/bin/clang -DCMAKE_CXX_COMPILER=${LLVM_DIRECTORY}/bin/clang++
|
|
MY_CMAKE_FLAGS += -DCMAKE_C_FLAGS="--gcc-toolchain=/usr" -DCMAKE_CXX_FLAGS="--gcc-toolchain=/usr"
|
|
else ifeq (${COMPILER},clang)
|
|
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
|
|
MY_CMAKE_FLAGS += -DCMAKE_C_FLAGS="--gcc-toolchain=/usr" -DCMAKE_CXX_FLAGS="--gcc-toolchain=/usr"
|
|
else ifeq (${COMPILER}, gcc490)
|
|
MY_CMAKE_FLAGS += \
|
|
-DCMAKE_C_COMPILER=/net/soft_scratch/apps/arnold/tools/gcc-4.9-20130512-test/bin/gcc \
|
|
-DCMAKE_CXX_COMPILER=/net/soft_scratch/apps/arnold/tools/gcc-4.9-20130512-test/bin/g++
|
|
else ifeq (${COMPILER}, gcc6)
|
|
MY_CMAKE_FLAGS += \
|
|
-DCMAKE_C_COMPILER=/opt/rh/devtoolset-6/root/usr/bin/gcc \
|
|
-DCMAKE_CXX_COMPILER=/opt/rh/devtoolset-6/root/usr/bin/g++
|
|
else ifeq (${COMPILER},gcc)
|
|
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++
|
|
else ifeq (${COMPILER},)
|
|
# default compiler is clang, taken from the LLVM directory
|
|
MY_CMAKE_FLAGS += \
|
|
-DCMAKE_C_COMPILER=${LLVM_DIRECTORY}/bin/clang \
|
|
-DCMAKE_CXX_COMPILER=${LLVM_DIRECTORY}/bin/clang++
|
|
MY_CMAKE_FLAGS += -DCMAKE_C_FLAGS="--gcc-toolchain=/usr" -DCMAKE_CXX_FLAGS="--gcc-toolchain=/usr"
|
|
endif
|
|
|
|
# Set our preferred OpenEXR path, but allow env variable to override
|
|
# with custom/test version.
|
|
ifeq (${OPENEXR_ROOT_DIR},)
|
|
MY_CMAKE_FLAGS += \
|
|
-DOPENEXR_INCLUDE_DIR=/usr/include/OpenEXR2 \
|
|
-DOPENEXR_LIBRARY_DIR=/usr/lib64/OpenEXR2
|
|
endif
|
|
|
|
MY_CMAKE_FLAGS += \
|
|
-DOCIO_PATH=${OCIO_PATH} \
|
|
-DFIELD3D_HOME=${FIELD3D_HOME} \
|
|
-DOPENVDB_ROOT_DIR=${OPENVDB_ROOT_DIR} \
|
|
-DTBB_ROOT_DIR=${TBB_ROOT_DIR} \
|
|
-DHDF5_CUSTOM=1 \
|
|
-DHDF5_LIBRARIES=/usr/lib64/libhdf5.so \
|
|
-DNuke_ROOT=/net/apps/rhel7/foundry/nuke${NUKE_VERSION} \
|
|
-DLIBRAW_INCLUDEDIR_HINT=/usr/include/libraw-0.18.11 \
|
|
-DLIBRAW_LIBDIR_HINT=/usr/lib64/libraw-0.18.11
|
|
|
|
# Special sauce for Python 3.6
|
|
ifeq (${PYTHON_VERSION},3.6)
|
|
PYTHON_INCLUDE_DIR := /usr/include/python${PYTHON_VERSION}m
|
|
PYTHON_LIBRARY := ${PYTHON_LIBRARY_DIR}/libpython${PYTHON_VERSION}m.so
|
|
MY_CMAKE_FLAGS += \
|
|
-DPYTHONINTERP_FOUND=1 \
|
|
-DPYTHON_VERSION_STRING=3.6.3 \
|
|
-DPYTHON_VERSION_MAJOR=3 \
|
|
-DPYTHON_VERSION_MINOR=6 \
|
|
-DPYTHON_VERSION_PATCH=3 \
|
|
-DPython_ADDITIONAL_VERSIONS="${PYTHON_VERSION}"
|
|
endif
|
|
|
|
MY_CMAKE_FLAGS += \
|
|
-DBOOST_CUSTOM=1 \
|
|
-DBoost_VERSION=${CONSTRUCTED_BOOSTVERS} \
|
|
-DBoost_INCLUDE_DIRS=/usr/include/boost_${BOOSTVERSSP} \
|
|
-DBoost_LIBRARY_DIRS=/usr/lib64/boost_${BOOSTVERSSP} \
|
|
-DPYTHON_INCLUDE_DIR:STRING=${PYTHON_INCLUDE_DIR} \
|
|
-DPYTHON_LIBRARY:STRING=${PYTHON_LIBRARY}
|
|
|
|
ifeq (${BOOSTSPSUFFIX}, sp)
|
|
MY_CMAKE_FLAGS += \
|
|
-DBoost_LIBRARIES:STRING="/usr/lib64/boost_${BOOSTVERSSP}/lib${BOOSTSPSUFFIX}boost_${BOOSTVERS_PREFIX}_filesystem-gcc48-mt${BOOSTVERS_SUFFIX}.so;/usr/lib64/boost_${BOOSTVERSSP}/lib${BOOSTSPSUFFIX}boost_${BOOSTVERS_PREFIX}_regex-gcc48-mt${BOOSTVERS_SUFFIX}.so;/usr/lib64/boost_${BOOSTVERSSP}/lib${BOOSTSPSUFFIX}boost_${BOOSTVERS_PREFIX}_system-gcc48-mt${BOOSTVERS_SUFFIX}.so;/usr/lib64/boost_${BOOSTVERSSP}/lib${BOOSTSPSUFFIX}boost_${BOOSTVERS_PREFIX}_thread-gcc48-mt${BOOSTVERS_SUFFIX}.so"
|
|
else
|
|
MY_CMAKE_FLAGS += \
|
|
-DBoost_LIBRARIES:STRING="/usr/lib64/boost_${BOOSTVERSSP}/lib${BOOSTSPSUFFIX}boost_filesystem-gcc48-mt${BOOSTVERS_SUFFIX}.so;/usr/lib64/boost_${BOOSTVERSSP}/lib${BOOSTSPSUFFIX}boost_regex-gcc48-mt${BOOSTVERS_SUFFIX}.so;/usr/lib64/boost_${BOOSTVERSSP}/lib${BOOSTSPSUFFIX}boost_system-gcc48-mt${BOOSTVERS_SUFFIX}.so;/usr/lib64/boost_${BOOSTVERSSP}/lib${BOOSTSPSUFFIX}boost_thread-gcc48-mt${BOOSTVERS_SUFFIX}.so"
|
|
endif
|
|
|
|
# Use libtiff I built myself, static, and try to hide its symbols.
|
|
MY_CMAKE_FLAGS += -DTIFF_INCLUDE_DIR:STRING=/usr/include \
|
|
-DTIFF_LIBRARIES:STRING=/net/soft_scratch/users/lg/tiff-4.0.3/rhel7/lib/libtiff.a
|
|
MY_CMAKE_FLAGS += -DHIDE_SYMBOLS=1
|
|
MY_CMAKE_FLAGS += -DVISIBILITY_MAP_FILE:STRING="${working_dir}/site/spi/hidesymbols.map"
|
|
MY_CMAKE_FLAGS += -DEXTRA_DSO_LINK_ARGS:STRING="-Wl,--exclude-libs,libtiff.a"
|
|
MY_CMAKE_FLAGS += -DUSE_OPENCV=0
|
|
|
|
# end rhel7
|
|
|
|
## Generic OSX machines (including LG's laptop)
|
|
else ifeq (${platform}, macosx)
|
|
USE_SIMD ?= sse4.2
|
|
MY_CMAKE_FLAGS += \
|
|
-DCMAKE_BUILD_WITH_INSTALL_RPATH=1 \
|
|
-DCMAKE_INSTALL_NAME_DIR="${working_dir}/dist/${platform}${variant}/lib"
|
|
|
|
# A variety of tags can be used to try specific versions of gcc or
|
|
# clang from the site-specific places we have installed them.
|
|
ifeq (${COMPILER}, gcc48)
|
|
MY_CMAKE_FLAGS += \
|
|
-DCMAKE_C_COMPILER=gcc-4.8 -DCMAKE_CXX_COMPILER=g++-4.8
|
|
USE_LIBCPLUSPLUS := 0
|
|
else ifeq (${COMPILER}, gcc49)
|
|
MY_CMAKE_FLAGS += \
|
|
-DCMAKE_C_COMPILER=gcc-4.9 -DCMAKE_CXX_COMPILER=g++-4.9
|
|
USE_LIBCPLUSPLUS := 0
|
|
else ifeq (${COMPILER}, gcc5)
|
|
MY_CMAKE_FLAGS += \
|
|
-DCMAKE_C_COMPILER=gcc-5 -DCMAKE_CXX_COMPILER=g++-5
|
|
USE_LIBCPLUSPLUS := 0
|
|
else ifeq (${COMPILER}, gcc6)
|
|
MY_CMAKE_FLAGS += \
|
|
-DCMAKE_C_COMPILER=gcc-6 -DCMAKE_CXX_COMPILER=g++-6
|
|
USE_LIBCPLUSPLUS := 0
|
|
else ifeq (${COMPILER}, gcc8)
|
|
MY_CMAKE_FLAGS += \
|
|
-DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8
|
|
USE_LIBCPLUSPLUS := 0
|
|
else ifeq (${COMPILER},clang6)
|
|
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=/usr/local/Cellar/llvm@6/6.0.1_1/bin/clang -DCMAKE_CXX_COMPILER=/usr/local/Cellar/llvm@6/6.0.1_1/bin/clang++
|
|
else ifeq (${COMPILER},clang7)
|
|
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=/usr/local/Cellar/llvm/7.0.0_1/bin/clang -DCMAKE_CXX_COMPILER=/usr/local/Cellar/llvm/7.0.0_1/bin/clang++
|
|
else ifeq (${COMPILER},clang)
|
|
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
|
|
else ifeq (${COMPILER},gcc)
|
|
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++
|
|
else ifeq (${COMPILER},)
|
|
# default compiler is clang, taken from the LLVM directory
|
|
MY_CMAKE_FLAGS += \
|
|
-DCMAKE_C_COMPILER=${LLVM_DIRECTORY}/bin/clang \
|
|
-DCMAKE_CXX_COMPILER=${LLVM_DIRECTORY}/bin/clang++
|
|
endif
|
|
|
|
# end generic OSX
|
|
|
|
else
|
|
$(error Unknown SP_OS=${SP_OS} platform=${platform})
|
|
endif # endif ${SP_OS}
|
|
|
|
|
|
SPARCH=${SP_OS}-$(SPCOMP2_COMPILER)$(CPPSTDSUFFIX)
|
|
BOOSTVERSSP?=${BOOSTVERS}${BOOSTSPSUFFIX}
|
|
ifdef SPCOMP2_USE_BOOSTVERS
|
|
ifneq ($(BOOSTVERS),1.42)
|
|
SPARCH=${SP_OS}-$(SPCOMP2_COMPILER)$(CPPSTDSUFFIX)-boost$(subst .,,$(BOOSTVERSSP))
|
|
endif
|
|
endif
|
|
PYVERNOSPACE=${shell echo ${PYTHON_VERSION} | sed "s/\\.//"}
|
|
SPPYARCH=$(SPARCH)-py$(PYVERNOSPACE)
|
|
|
|
|
|
|
|
all: dist
|
|
|
|
.PHONY: spcomp2_install spcomp2_install_local clean all
|
|
|
|
comma:= ,
|
|
empty:=
|
|
space:= $(empty) $(empty)
|
|
|
|
local: dist
|