# SPI-specific settings
ifneq (${VERBOSE},)
$(info Including spi/Makefile-bits)
endif

# For Arnold builds, do:
#
#     make OIIO_ARNOLD=1
#
# Otherwise a default 'make' will make a fully generic OIIO build.

OIIO_ARNOLD ?= 0
OIIO_VERS = $(shell grep "OpenImageIO VERSION" CMakeLists.txt | egrep -o "[0-9.]+")

ifeq (${OIIO_ARNOLD},1)
    $(info Building for Arnold)
    NAMESPACE ?= 'OpenImageIO_Arnold'
    $(info Building generic OpenImageIO)
    # NAMESPACE ?= 'OpenImageIO'
endif
#$(info MAKECMDGOALS = $(MAKECMDGOALS))


## 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
    SPI_COMPILER_PLATFORM ?= gcc-6.3
    ifeq (${SPI_COMPILER_PLATFORM},gcc-6.3)
        SPCOMP2_COMPILER ?= gcc63
        CMAKE_CXX_STANDARD ?= 14
        LLVM_VERSION ?= 12.0.1
    endif
    SP_PLATFORM ?= linux
else ifeq (${platform}, macosx)
    # Generic OSX machines (including LG's laptop)
    COMPILER ?= clang
    SPCOMP2_COMPILER ?= clang
    CMAKE_CXX_STANDARD ?= 14
    SP_OS ?= macosx
    SP_PLATFORM ?= macosx
else
    $(error Unknown SP_OS=${SP_OS} platform=${platform})
endif  # endif ${SP_OS}

MY_CMAKE_FLAGS += -DSP_OS=${SP_OS} -DSP_PLATFORM=${SP_PLATFORM}
MY_CMAKE_FLAGS += -DSPI_COMPILER_PLATFORM=${SPI_COMPILER_PLATFORM}
MY_CMAKE_FLAGS += -DEXTRA_CPP_ARGS:STRING="-DOIIO_SPI=1" -DOIIO_SITE:STRING=spi
MY_CMAKE_FLAGS += -DSPI_TESTS=1 -DPROJECT_VERSION_RELEASE_TYPE=spi
MY_CMAKE_FLAGS += -DOIIO_NAMESPACE_INCLUDE_PATCH=1
MY_CMAKE_FLAGS += -DCMAKE_DEBUG_POSTFIX=${CMAKE_DEBUG_POSTFIX:-_d}
REZ_PACKAGE_ROOT ?= /shots/spi/home/software/packages
SPCOMP2_ROOT ?= /shots/spi/home/lib/SpComp2


## Rhel7 (current)
ifeq (${SP_OS}, rhel7)
    PYTHON_VERSION ?= 2.7
    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"
    ifeq (${OIIO_SPCOMP2},1)
        MY_CMAKE_FLAGS += -DPYTHON_SITE_DIR="${INSTALL_PREFIX}/python"
    else ifeq (${OIIO_ARNOLD},1)
        OIIO_LIBNAME_SUFFIX=_Arnold
    endif

    #
    # Compilers:
    #
    # A variety of tags can be used to try specific versions of gcc or
    # clang from the site-specific places we have installed them.
    LLVM_DIRECTORY ?= ${REZ_PACKAGE_ROOT}/llvm/${LLVM_VERSION}/${SPI_COMPILER_PLATFORM}
    ifeq (${COMPILER},clang9)
        LLVM_DIRECTORY := ${REZ_PACKAGE_ROOT}/llvm/9.0.1-1/${SPI_COMPILER_PLATFORM}
        MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=${LLVM_DIRECTORY}/bin/clang -DCMAKE_CXX_COMPILER=${LLVM_DIRECTORY}/bin/clang++
    else ifeq (${COMPILER},clang10)
        LLVM_DIRECTORY := ${REZ_PACKAGE_ROOT}/llvm/10.0.0-1/${SPI_COMPILER_PLATFORM}
        MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=${LLVM_DIRECTORY}/bin/clang -DCMAKE_CXX_COMPILER=${LLVM_DIRECTORY}/bin/clang++
    else ifeq (${COMPILER},clang11)
        LLVM_DIRECTORY := ${REZ_PACKAGE_ROOT}/llvm/11.0.0/${SPI_COMPILER_PLATFORM}
        MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=${LLVM_DIRECTORY}/bin/clang -DCMAKE_CXX_COMPILER=${LLVM_DIRECTORY}/bin/clang++
    else ifeq (${COMPILER},clang)
        MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
    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++
    endif

    #
    # Boost
    #
    BOOSTVERS ?= 1.70
	SPBOOST_INC_DIR := /usr/include/boostroot/boost${BOOSTVERS}.0
	SPBOOST_LIB_DIR := /usr/lib64/boostroot/boost${BOOSTVERS}.0
    MY_CMAKE_FLAGS += \
            -DBOOST_INCLUDEDIR=${SPBOOST_INC_DIR} \
            -DBOOST_LIBRARYDIR=${SPBOOST_LIB_DIR}

    #
    # Python
    #
    PYTHON_INCLUDE_DIR ?= /usr/include/python${PYTHON_VERSION}
    PYTHON_LIBRARY_DIR ?= /usr/lib64
    PYTHON_LIBRARY ?= ${PYTHON_LIBRARY_DIR}/libpython${PYTHON_VERSION}.so
    ifeq (${PYTHON_VERSION},3.7)
        # Special sauce for Python 3.7
        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.7.3 \
            -DPYTHON_VERSION_MAJOR=3 \
            -DPYTHON_VERSION_MINOR=7 \
            -DPYTHON_VERSION_PATCH=3 \
            -DPython_ADDITIONAL_VERSIONS="${PYTHON_VERSION}"
    else ifeq (${PYTHON_VERSION},2.7)
        # Special sauce for Python 2.7
        PYTHON_INCLUDE_DIR := /usr/include/python${PYTHON_VERSION}
        PYTHON_LIBRARY := ${PYTHON_LIBRARY_DIR}/libpython${PYTHON_VERSION}.so
        MY_CMAKE_FLAGS += \
            -DPYTHONINTERP_FOUND=1 \
            -DPYTHON_VERSION_STRING=2.7.5 \
            -DPYTHON_VERSION_MAJOR=2 \
            -DPYTHON_VERSION_MINOR=7 \
            -DPYTHON_VERSION_PATCH=5 \
            -DPython_ADDITIONAL_VERSIONS="${PYTHON_VERSION}"
    endif
    MY_CMAKE_FLAGS += \
        -DPYTHON_INCLUDE_DIR:STRING=${PYTHON_INCLUDE_DIR} \
        -DPYTHON_LIBRARY:STRING=${PYTHON_LIBRARY} \
        -Dpybind11_ROOT:STRING=${REZ_PACKAGE_ROOT}/pybind11/2.6.2/python-${PYTHON_VERSION}

    # Set our preferred OpenEXR path, but allow env variable to override
    # with custom/test version.
    OPENEXR_VERSION ?= 2.4.3
    OpenEXR_ROOT ?= ${REZ_PACKAGE_ROOT}/OpenEXR/${OPENEXR_VERSION}/${SPI_COMPILER_PLATFORM}
    MY_CMAKE_FLAGS += -DOpenEXR_ROOT=${OpenEXR_ROOT}

    #
    # SpComp2 and other weird SPI-installed packages
    #
    NUKE_VERSION ?= 11.2v3
    SPCOMP2_FULLBOOST_SUFFIX = ${SP_OS}-${SPCOMP2_COMPILER}-boost${shell echo ${BOOSTVERS} | sed "s/\\.//"}
    # $(info SPCOMP2_FULLBOOST_SUFFIX ${SPCOMP2_FULLBOOST_SUFFIX})
    OPENCOLORIO_VERSION ?= 2.1.0
    OpenColorIO_ROOT ?= ${REZ_PACKAGE_ROOT}/OpenColorIO/${OPENCOLORIO_VERSION}/${SPI_COMPILER_PLATFORM}/python-${PYTHON_VERSION}
    #MY_CMAKE_FLAGS += -DOPENCOLORIO_LIBRARY=${OpenColorIO_ROOT}/lib/libOpenColorIO_SPI.so
    OPENVDB_VERSION ?= 8.0.0-2
    OpenVDB_ROOT ?= ${REZ_PACKAGE_ROOT}/OpenVDB/${OPENVDB_VERSION}/${SPI_COMPILER_PLATFORM}/python-${PYTHON_VERSION}/boost-${BOOSTVERS}
    TBB_ROOT ?= /net/apps/rhel7/intel/tbb
    TBB_LIBRARY ?= /net/apps/rhel7/intel/tbb/lib/intel64/gcc4.7
    Libheif_ROOT ?= /shots/spi/home/lib/arnold/rhel7/libheif-1.3.2
    MY_CMAKE_FLAGS += \
        -DOpenColorIO_ROOT=${OpenColorIO_ROOT} \
        -DOpenVDB_ROOT=${OpenVDB_ROOT} \
        -DTBB_ROOT=${TBB_ROOT} \
        -DTBB_LIBRARY=${TBB_LIBRARY} \
        -DTBB_USE_DEBUG_BUILD=0 \
        -DHDF5_CUSTOM=1 \
        -DHDF5_LIBRARIES=/usr/lib64/libhdf5.so \
        -DNuke_ROOT=/net/apps/rhel7/foundry/nuke${NUKE_VERSION} \
        -DLibheif_ROOT=${Libheif_ROOT} \
        -DFFMPEG_INCLUDES=/usr/include/ffmpegroot/ffmpeg42 \
        -DFFMPEG_LIBRARIES="/usr/lib64/ffmpegroot/ffmpeg424/libavcodec.so;/usr/lib64/ffmpegroot/ffmpeg424/libavformat.so;/usr/lib64/ffmpegroot/ffmpeg424/libavutil.so;/usr/lib64/ffmpegroot/ffmpeg424/libswscale.so;" \
        -DUSE_OPENCV=0 \
        -DVISIBILITY_MAP_FILE:STRING="${working_dir}/site/spi/hidesymbols.map"

    # LibRaw
    LibRaw_ROOT ?= ${REZ_PACKAGE_ROOT}/LibRaw/0.21.0.0/${SPI_COMPILER_PLATFORM}
    MY_CMAKE_FLAGS += -DLibRaw_ROOT=${LibRaw_ROOT}
    LIBRAW_LIBDIR = ${LibRaw_ROOT}/lib

    MY_CMAKE_FLAGS += -DWebP_ROOT=${REZ_PACKAGE_ROOT}/webp/1.2.1/${SPI_COMPILER_PLATFORM}

    # 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 \
        -DEXTRA_DSO_LINK_ARGS:STRING="-Wl,--exclude-libs,libtiff.a"

    # 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/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}, gcc6)
        MY_CMAKE_FLAGS += \
           -DCMAKE_C_COMPILER=gcc-6 -DCMAKE_CXX_COMPILER=g++-6
        USE_LIBCPLUSPLUS := 0
    else ifeq (${COMPILER}, gcc9)
        MY_CMAKE_FLAGS += \
           -DCMAKE_C_COMPILER=gcc-9 -DCMAKE_CXX_COMPILER=g++-9
        USE_LIBCPLUSPLUS := 0
    else ifeq (${COMPILER}, gcc10)
        MY_CMAKE_FLAGS += \
           -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10
        USE_LIBCPLUSPLUS := 0
    else ifeq (${COMPILER}, gcc11)
        MY_CMAKE_FLAGS += \
           -DCMAKE_C_COMPILER=gcc-11 -DCMAKE_CXX_COMPILER=g++-11
        USE_LIBCPLUSPLUS := 0
    else ifeq (${COMPILER}, gcc13)
        MY_CMAKE_FLAGS += \
           -DCMAKE_C_COMPILER=gcc-13 -DCMAKE_CXX_COMPILER=g++-13
        USE_LIBCPLUSPLUS := 0
    else ifeq (${COMPILER},clang13)
        MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=/usr/local/opt/llvm@13/bin/clang \
        				  -DCMAKE_CXX_COMPILER=/usr/local/opt/llvm@13/bin/clang++
    else ifeq (${COMPILER},clang14)
        MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=/usr/local/opt/llvm@14/bin/clang \
                          -DCMAKE_CXX_COMPILER=/usr/local/opt/llvm@14/bin/clang++
    else ifeq (${COMPILER},clang15)
        MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=/usr/local/opt/llvm@15/bin/clang \
                          -DCMAKE_CXX_COMPILER=/usr/local/opt/llvm@15/bin/clang++
    else ifeq (${COMPILER},clang16)
        MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=/usr/local/opt/llvm@16/bin/clang \
                          -DCMAKE_CXX_COMPILER=/usr/local/opt/llvm@16/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}



ifneq (${VERBOSE},)
    $(info MY_CMAKE_FLAGS: $(MY_CMAKE_FLAGS))
endif

