Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

build: Add support for pip install OpenImageIO #4011

Draft
wants to merge 7 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,5 @@ _coverage/
/*.jxl
/*.tx
/*.log
*.egg-info/
*.whl
2 changes: 1 addition & 1 deletion INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@ Additionally, a few helpful modifiers alter some build-time options:
| make STOP_ON_WARNING=0 | Do not stop building if compiler warns |
| make EMBEDPLUGINS=0 ... | Don't compile the plugins into libOpenImageIO |
| make USE_OPENGL=0 ... | Skip anything that needs OpenGL |
| make USE_QT=0 ... | Skip anything that needs Qt |
| make USE_QT5=0 ... | Skip anything that needs Qt |
| make MYCC=xx MYCXX=yy ... | Use custom compilers |
| make USE_PYTHON=0 ... | Don't build the Python binding |
| make BUILD_SHARED_LIBS=0 | Build static library instead of shared |
Expand Down
50 changes: 50 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
[project]
name = "OpenImageIO"
version = "2.6.0.2"
description = "Reading, writing, and processing images in a wide variety of file formats, using a format-agnostic API, aimed at VFX applications."
authors = [
{name = "Larry Gritz", email = "[email protected]"},
]
readme = "README.md"
license = {text = "Apache-2.0, BSD-3-Clause"}
keywords = [""]
maintainers = [
{name = "Larry Gritz", email = "[email protected]"},
]
classifiers = [
"Development Status :: 4 - Beta",
"Natural Language :: English",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Topic :: Multimedia :: Graphics",
"Topic :: Multimedia :: Video",
"Topic :: Multimedia :: Video :: Display",
"Topic :: Software Development :: Libraries :: Python Modules",
]

[project.urls]
Homepage = "http://openimageio.org/"
Source = "https://github.com/OpenImageIO/oiio"
Documentation = "https://openimageio.readthedocs.io"
Issues = "https://github.com/OpenImageIO/oiio/issues"

[project.scripts]
iconvert = "OpenImageIO._commands:iconvert"
idiff = "OpenImageIO._commands:idiff"
igrep = "OpenImageIO._commands:igrep"
iinfo = "OpenImageIO._commands:iinfo"
maketx = "OpenImageIO._commands:maketx"
oiiotool = "OpenImageIO._commands:oiiotool"
testtex = "OpenImageIO._commands:testtex"

[build-system]
requires = [
"scikit-build-core",
"cmake>=3.12",
"oldest-supported-numpy"
]
build-backend = "scikit_build_core.build"
13 changes: 13 additions & 0 deletions src/build-scripts/build_opencolorio.bash
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,26 @@ OPENCOLORIO_BUILD_DIR=${OPENCOLORIO_BUILD_DIR:=${LOCAL_DEPS_DIR}/OpenColorIO-bui
OPENCOLORIO_INSTALL_DIR=${OPENCOLORIO_INSTALL_DIR:=${LOCAL_DEPS_DIR}/dist}
OPENCOLORIO_BUILD_TYPE=${OPENCOLORIO_BUILD_TYPE:=Release}
OPENCOLORIO_CXX_FLAGS=${OPENCOLORIO_CXX_FLAGS:="-Wno-unused-function -Wno-deprecated-declarations -Wno-cast-qual -Wno-write-strings"}
OPENCOLORIO_YAML_CXX_FLAGS=${OPENCOLORIO_YAML_CXX_FLAGS:=''}
if [[ "$OSTYPE" != "msys" ]]; then
OPENCOLORIO_CXX_FLAGS=${OPENCOLORIO_CXX_FLAGS:="-Wno-unused-function -Wno-deprecated-declarations -Wno-cast-qual -Wno-write-strings"}
OPENCOLORIO_YAML_CXX_FLAGS=${OPENCOLORIO_YAML_CXX_FLAGS:=''}
else
if [[ "${OPENCOLORIO_BUILD_SHARED_LIBS}" != "ON" ]]; then
OPENCOLORIO_CXX_FLAGS=${OPENCOLORIO_CXX_FLAGS:="//MT"}
aclark4life marked this conversation as resolved.
Show resolved Hide resolved
OPENCOLORIO_YAML_CXX_FLAGS=${OPENCOLORIO_YAML_CXX_FLAGS:='//MT'}
fi
fi
# Just need libs:
OPENCOLORIO_BUILDOPTS="-DOCIO_BUILD_APPS=OFF -DOCIO_BUILD_NUKE=OFF \
-DOCIO_BUILD_DOCS=OFF -DOCIO_BUILD_TESTS=OFF \
-DOCIO_BUILD_GPU_TESTS=OFF \
-DOCIO_BUILD_PYTHON=OFF -DOCIO_BUILD_PYGLUE=OFF \
-DOCIO_BUILD_JAVA=OFF \
-DBUILD_SHARED_LIBS=${OPENCOLORIO_BUILD_SHARED_LIBS:=ON}"

OPENCOLORIO_BUILDOPTS="${OPENCOLORIO_BUILDOPTS} -DCMAKE_POSITION_INDEPENDENT_CODE=ON"

BASEDIR=`pwd`
pwd
echo "OpenColorIO install dir will be: ${OPENCOLORIO_INSTALL_DIR}"
Expand Down
22 changes: 18 additions & 4 deletions src/build-scripts/build_openexr.bash
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,16 @@ OPENEXR_INSTALL_DIR=${OPENEXR_INSTALL_DIR:=${LOCAL_DEPS_DIR}/dist}
OPENEXR_BUILD_TYPE=${OPENEXR_BUILD_TYPE:=Release}
OPENEXR_CMAKE_FLAGS=${OPENEXR_CMAKE_FLAGS:=""}
OPENEXR_CXX_FLAGS=${OPENEXR_CXX_FLAGS:=""}
OPENEXR_BUILD_SHARED_LIBS=${OPENEXR_BUILD_SHARED_LIBS:="ON"}
BASEDIR=$PWD

if [[ "$OSTYPE" == "msys" ]]; then
OPENEXR_CXX_FLAGS="${OPENEXR_CXX_FLAGS} /W1 /EHsc /DWIN32=1"
if [[ "${OPENEXR_BUILD_SHARED_LIBS}" != "ON" ]]; then
OPENEXR_CXX_FLAGS="${OPENEXR_CXX_FLAGS} /MT"
fi
fi

pwd
echo "Building OpenEXR ${OPENEXR_VERSION}"
echo "OpenEXR build dir will be: ${OPENEXR_BUILD_DIR}"
Expand All @@ -39,8 +47,10 @@ mkdir -p ${OPENEXR_INSTALL_DIR} && true
pushd ${OPENEXR_SOURCE_DIR}
git checkout ${OPENEXR_VERSION} --force

cmake -S . -B ${OPENEXR_BUILD_DIR} \
-DCMAKE_BUILD_TYPE=${OPENEXR_BUILD_TYPE} \
# Simplified setup for 2.4+
cd ${OPENEXR_BUILD_DIR}
cmake -DCMAKE_BUILD_TYPE=${OPENEXR_BUILD_TYPE} \
-DBUILD_SHARED_LIBS=${OPENEXR_BUILD_SHARED_LIBS} \
-DCMAKE_INSTALL_PREFIX="${OPENEXR_INSTALL_DIR}" \
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}" \
-DOPENEXR_BUILD_UTILS=0 \
Expand All @@ -50,8 +60,12 @@ cmake -S . -B ${OPENEXR_BUILD_DIR} \
-DOPENEXR_INSTALL_EXAMPLES=0 \
-DCMAKE_INSTALL_LIBDIR=lib \
-DCMAKE_CXX_FLAGS="${OPENEXR_CXX_FLAGS}" \
${OPENEXR_CMAKE_FLAGS}
time cmake --build ${OPENEXR_BUILD_DIR} --target install --config ${OPENEXR_BUILD_TYPE}
-DCMAKE_CXX_FLAGS_RELEASE="${OPENEXR_CXX_FLAGS}" \
-DCMAKE_C_FLAGS="${OPENEXR_CXX_FLAGS}" \
-DCMAKE_C_FLAGS_RELEASE="${OPENEXR_CXX_FLAGS}" \
-DCMAKE_MODULE_PATH=${CONAN_CMAKE_FILES} \
${OPENEXR_CMAKE_FLAGS} ${OPENEXR_SOURCE_DIR}
time cmake --build . --target install --config ${OPENEXR_BUILD_TYPE}

popd

Expand Down
9 changes: 8 additions & 1 deletion src/build-scripts/build_pugixml.bash
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,12 @@ PUGIXML_BUILD_DIR=${PUGIXML_BUILD_DIR:=${PUGIXML_SRC_DIR}/build}
LOCAL_DEPS_DIR=${LOCAL_DEPS_DIR:=${PWD}/ext}
PUGIXML_INSTALL_DIR=${PUGIXML_INSTALL_DIR:=${LOCAL_DEPS_DIR}/dist}
#PUGIXML_BUILD_OPTS=${PUGIXML_BUILD_OPTS:=}
PUGIXML_BUILD_SHARED_LIBS=${PUGIXML_BUILD_SHARED_LIBS:="ON"}

PUGIXML_CXX_FLAGS=${PUGIXML_CXX_FLAGS:=}
if [[ "$OSTYPE" == 'msys' ]] && [[ "${PUGIXML_BUILD_SHARED_LIBS}" != "ON" ]]; then
PUGIXML_CXX_FLAGS="${PUGIXML_CXX_FLAGS}"
fi

pwd
echo "pugixml install dir will be: ${PUGIXML_INSTALL_DIR}"
Expand All @@ -41,8 +47,9 @@ git checkout ${PUGIXML_VERSION} --force
if [[ -z $DEP_DOWNLOAD_ONLY ]]; then
time cmake -S . -B ${PUGIXML_BUILD_DIR} -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=${PUGIXML_INSTALL_DIR} \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_SHARED_LIBS=${PUGIXML_BUILD_SHARED_LIBS} \
-DBUILD_TESTS=OFF \
-DCMAKE_CXX_FLAGS_RELEASE=${PUGIXML_CXX_FLAGS} \
${PUGIXML_BUILD_OPTS} ..
time cmake --build ${PUGIXML_BUILD_DIR} --config Release --target install
fi
Expand Down
8 changes: 5 additions & 3 deletions src/build-scripts/ci-startup.bash
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,11 @@ export UBSAN_OPTIONS=suppressions=$PWD/src/build-scripts/ubsan-suppressions.txt
export PYTHON_VERSION=${PYTHON_VERSION:="3.7"}
export PYTHONPATH=$OpenImageIO_ROOT/lib/python${PYTHON_VERSION}/site-packages:$PYTHONPATH
export BUILD_MISSING_DEPS=${BUILD_MISSING_DEPS:=1}
export COMPILER=${COMPILER:=gcc}
export CC=${CC:=gcc}
export CXX=${CXX:=g++}
if [[ "$OSTYPE" != "msys" ]]; then
export COMPILER=${COMPILER:=gcc}
export CC=${CC:=gcc}
export CXX=${CXX:=g++}
fi
export OpenImageIO_CI=true
export USE_NINJA=${USE_NINJA:=1}
export CMAKE_GENERATOR=${CMAKE_GENERATOR:=Ninja}
Expand Down
123 changes: 123 additions & 0 deletions src/build-scripts/docker-centos.bash
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
# docker run -ti --rm -v $(pwd):/jc quay.io/pypa/manylinux2014_x86_64:latest bash
set -ex

if [[ "$OSTYPE" != "msys" ]]; then
yum install wget less ccache -y
fi

python -m pip install conan --user

if [[ "$OSTYPE" != "msys" ]]; then
if [[ ! -d /opt/cmake ]]; then
currentPath=$(pwd)
wget https://github.com/Kitware/CMake/releases/download/v3.23.2/cmake-3.23.2-linux-x86_64.tar.gz
mkdir -p /opt/cmake
cd /opt
tar -xzf "${currentPath}/cmake-3.23.2-linux-x86_64.tar.gz"
rm "${currentPath}/cmake-3.23.2-linux-x86_64.tar.gz"
mv cmake-3.23.2-linux-x86_64/* cmake/
rm -rf cmake-3.23.2-linux-x86_64/
cd "${currentPath}"
fi

cp $(which ccache) /usr/local/bin/ || true
ln -sf $(which ccache) /usr/local/bin/gcc
ln -sf $(which ccache) /usr/local/bin/g++
ln -sf $(which ccache) /usr/local/bin/cc
ln -sf $(which ccache) /usr/local/bin/c++
ccache --max-files 0 --max-size 0
fi

export PATH=/opt/cmake/bin:/usr/local/bin:~/.local/bin:$PATH
if [[ "$OSTYPE" == 'msys' ]]; then
export PATH=$PATH:~/AppData/Roaming/Python/Python310/Scripts
fi

export CMAKE_CXX_STANDARD=17

export USE_OPENVDB=0
export USE_QT5=0
export USE_OPENGL=0
export USE_NUKE=0
export USE_R3DSDK=0
export USE_JPEGTURBO=0

export USE_FFMPEG=1
export USE_PNG=1
export USE_OPENCV=0 # Always disable
export USE_GIF=1
export USE_PTEX=1
export USE_WEBP=1
export USE_OPENCOLORIO=1
export USE_OPENEXR=1
export USE_LIBHEIF=1
export USE_TIFF=1
export USE_LIBRAW=1
export USE_OPENJPEG=1
export USE_FREETYPE=1
export USE_CONAN=1

export OPENCOLORIO_VERSION=v2.1.2
export PUGIXML_VERSION=v1.11.4
export FMT_VERSION=9.0.0
export OPENEXR_VERSION=v3.1.5
export PYBIND11_VERSION=v2.9.2

export OPENCOLORIO_BUILD_SHARED_LIBS=OFF
export PUGIXML_BUILD_SHARED_LIBS=OFF
export OPENEXR_BUILD_SHARED_LIBS=OFF

export MY_CMAKE_FLAGS="${MY_CMAKE_FLAGS} -DBUILD_SHARED_LIBS=OFF -DLINKSTATIC=ON -DOIIO_BUILD_TESTS=OFF -DOPENCOLORIO_NO_CONFIG=ON -DOIIO_BUILD_TOOLS=ON"
export PYTHON_VERSION=3.10

export OPENIMAGEIO_OPTIONS="openexr:core=1"

source src/build-scripts/ci-startup.bash

export CMAKE_BUILD_PARALLEL_LEVEL=16

unset TERM

mkdir -p build

pushd build
if [[ $(conan profile list | grep default) == '' ]]; then
conan profile new default --detect
fi

if [[ "$OSTYPE" == linux-* ]]; then
conan profile update settings.compiler=gcc default
conan profile update settings.compiler.version=10 default
conan profile update settings.compiler.libcxx=libstdc++ default
elif [[ "$OSTYPE" == "msys" ]]; then
conan profile update settings.compiler='Visual Studio' default
conan profile update settings.compiler.runtime=MT default
conan profile update settings.compiler.version=16 default
conan profile update settings.arch=x86_64 default

export CONAN_CMAKE_FILES=$(pwd)
fi

conanArgs=''

if [[ "$USE_FFMPEG" == '1' ]]; then
cp ../conanfile.txt .
conanArgs='--build=openjpeg --build=libx264 --build=ffmpeg --build=libx265 --build expat -c tools.system.package_manager:mode=install -c tools.system.package_manager:tool=yum'
if [[ "$OSTYPE" == "msys" ]]; then
cat ../conanfile.txt | grep -v with_vulkan | grep -v with_pulse > conanfile.txt
conanArgs=''
fi

else
cat ../conanfile.txt | grep -v 'ffmpeg/' > conanfile.txt
fi

PATH=/opt/python/cp310-cp310/bin:$PATH CONAN_SYSREQUIRES_SUDO=0 CONAN_SYSREQUIRES_MODE=enabled conan install . --build #$conanArgs

popd

source src/build-scripts/gh-installdeps.bash

# source src/build-scripts/ci-build.bash

/opt/python/cp310-cp310/bin/python setup.py bdist_wheel
13 changes: 12 additions & 1 deletion src/build-scripts/gh-installdeps.bash
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ if [[ "$ASWF_ORG" != "" ]] ; then
icpx --version
fi

else
elif [[ "$USE_CONAN" != "1" ]] ; then
# Using native Ubuntu runner

if [[ "${SKIP_APT_GET_UPDATE}" != "1" ]] ; then
Expand Down Expand Up @@ -204,6 +204,17 @@ if [[ "$LIBJPEGTURBO_VERSION" != "" ]] ; then
source src/build-scripts/build_libjpeg-turbo.bash
fi

if [[ "$LIBAOM_VERSION" != "" ]] ; then
source src/build-scripts/build_libaom.bash
fi

if [[ "$LIBDE265_VERSION" != "" ]] ; then
source src/build-scripts/build_libde265.bash
fi

if [[ "$LIBHEIF_VERSION" != "" ]] ; then
source src/build-scripts/build_libheif.bash

if [[ "$USE_ICC" != "" ]] ; then
# We used gcc for the prior dependency builds, but use icc for OIIO itself
echo "which icpc:" $(which icpc)
Expand Down
1 change: 0 additions & 1 deletion src/build-scripts/gh-win-installdeps.bash
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,6 @@ source src/build-scripts/build_pybind11.bash
echo "CMAKE_PREFIX_PATH = $CMAKE_PREFIX_PATH"


OPENEXR_CXX_FLAGS=" /W1 /EHsc /DWIN32=1 "
#OPENEXR_BUILD_TYPE=$CMAKE_BUILD_TYPE
OPENEXR_INSTALL_DIR=$DEP_DIR
source src/build-scripts/build_openexr.bash
Expand Down
34 changes: 6 additions & 28 deletions src/heif.imageio/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,11 @@
# SPDX-License-Identifier: Apache-2.0
# https://github.com/AcademySoftwareFoundation/OpenImageIO

if (Libheif_FOUND)
if (LINKSTATIC)
set (_static_suffixes .lib .a)
set (_static_libraries_found 0)

foreach (_libeheif_library IN LISTS LIBHEIF_LIBRARIES)
get_filename_component (_ext ${_libeheif_library} LAST_EXT)
list (FIND _static_suffixes ${_ext} _index)
if (${_index} GREATER -1)
MATH (EXPR _static_libraries_found "${static_libraries_found}+1")
endif()
endforeach()

if (${_static_libraries_found} GREATER 0)
message (STATUS "${ColorYellow}")
message (STATUS "You are linking OpenImageIO against a static version of libheif, which is LGPL")
message (STATUS "licensed. If you intend to redistribute this build of OpenImageIO, we recommend")
message (STATUS "that you review the libheif license terms, or you may wish to switch to using a")
message (STATUS "dynamically-linked libheif.")
message ("${ColorReset}")
endif()
endif()

add_oiio_plugin (heifinput.cpp heifoutput.cpp
INCLUDE_DIRS ${LIBHEIF_INCLUDES}
LINK_LIBRARIES ${LIBHEIF_LIBRARIES}
DEFINITIONS "USE_HEIF=1")
if (LIBRAW_FOUND)
add_oiio_plugin (rawinput.cpp
INCLUDE_DIRS ${LibRaw_INCLUDE_DIR}
LINK_LIBRARIES ${LibRaw_r_LIBRARIES}
DEFINITIONS "USE_LIBRAW=1" ${LibRaw_r_DEFINITIONS})
else ()
message (WARNING "heif plugin will not be built")
message (WARNING "Raw plugin will not be built")
endif ()
6 changes: 5 additions & 1 deletion src/libOpenImageIO/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,11 @@ target_include_directories (OpenImageIO
target_include_directories (OpenImageIO SYSTEM PUBLIC ${OpenCV_INCLUDES})

if (NOT BUILD_SHARED_LIBS)
target_compile_definitions (OpenImageIO PUBLIC OIIO_STATIC_DEFINE=1)
target_compile_definitions (OpenImageIO
PUBLIC
OIIO_STATIC_DEFINE=1
$<$<AND:$<PLATFORM_ID:Windows>,$<BOOL:${LINKSTATIC}>,$<TARGET_EXISTS:OpenColorIO::OpenColorIO>>:OpenColorIO_SKIP_IMPORTS=1>
)
endif ()

# Propagate C++ minimum to downstream
Expand Down
9 changes: 9 additions & 0 deletions src/python/OpenImageIO/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import os
import sys
import platform


if sys.version_info >= (3, 8) and platform.system() == 'Windows':
os.add_dll_directory(os.path.dirname(__file__), 'libs')

from .OpenImageIO import *
Loading