Browse Source

Updated OIIO/OCIO build to be shared instead of static and several other packaging changes

Signed-off-by: Chris Galvan <[email protected]>
Chris Galvan 3 years ago
parent
commit
35e36e4f16

+ 59 - 26
package-system/openimageio-opencolorio/build_openimageio.py

@@ -37,6 +37,7 @@ that there is no patent danger.
 '''
 
 import argparse
+import glob
 import json
 import os
 import platform
@@ -145,7 +146,7 @@ def exec_and_exit_if_failed(invoke_params, cwd=script_folder, shell=False):
     result_value = subprocess.run(invoke_params, shell=shell, cwd=cwd)
     if result_value.returncode != 0:
         print(f"Exec: Failed with return code {result_value}")
-        sys.exit(0)
+        sys.exit(1)
     return result_value.returncode
 
 # only clones the repo if it doesn't exist.  Otherwise cleans it.
@@ -289,7 +290,7 @@ def BuildOpenColorIO(module_paths_to_use, release=True):
                 f'-Dexpat_STATIC_LIBRARY=ON',
                 f'-DCMAKE_INSTALL_PREFIX={ocio_install_path}',
                 f'-DCMAKE_BUILD_TYPE={build_type}',
-                f'-DBUILD_SHARED_LIBS=OFF',
+                f'-DBUILD_SHARED_LIBS=ON',
                 f'-DCMAKE_CXX_STANDARD=17',
                 f'-DOCIO_BUILD_APPS=ON',
                 f'-DOCIO_BUILD_OPENFX=OFF',
@@ -563,7 +564,7 @@ def BuildOpenImageIO(release=True):
         f'-DCMAKE_INSTALL_PREFIX={oiio_install_path}',
         f'-DPNG_ROOT={get_dependency_path(args.platform, "libpng") / "libpng"}',
         f'-DCMAKE_BUILD_TYPE={build_type}',
-        f'-DBUILD_SHARED_LIBS=OFF',
+        f'-DBUILD_SHARED_LIBS=ON',
         f'-DCMAKE_CXX_STANDARD=17',
         f'-DPYTHON_VERSION={expected_python_version}',
         f'-DOIIO_BUILD_TESTS=OFF',
@@ -713,28 +714,10 @@ print("Copying OpenColorIO")
 shutil.copytree(src=ocio_install_path, dst=final_package_image_root / 'OpenColorIO')
 shutil.copy2(src=script_folder / 'distribution' / 'FindOpenColorIO.cmake', dst=final_package_image_root / 'FindOpenColorIO.cmake')
 
-# the following are considered private dependencies, do not depend on them!
-print("Copying LibJPEGTurbo")
-shutil.copytree(src=libjpegturbo_install_path, dst=private_deps_folder / 'LibJPEGTurbo')
-print("Copying Boost")
-shutil.copytree(src=boost_install_path, dst=private_deps_folder / 'Boost')
-print("Copying pystring")
-shutil.copytree(src=temp_folder_path / 'pystring_install', dst=private_deps_folder / 'pystring')
-print("Copying yaml-cpp")
-shutil.copytree(src=temp_folder_path / 'yaml-cpp_install', dst=private_deps_folder / 'yaml-cpp')
-
 print("Cleaning unnecessary/private files")
-# we don't actually want to expose this copy of boost as being something people can use
-# and the OpenImageIO library doesn't expose any boost usage in its public API, so we can remove all the headers.
 # note that we delete the cmake and pkgconfig files since they contain absolute paths to the machine
 # that they were built on, and won't be useful anyway
 # Ignore errors when removing the pkgconfig folders since they won't be present on windows
-shutil.rmtree(path=private_deps_folder / 'Boost' / 'include')
-shutil.rmtree(path=private_deps_folder / 'Boost' / 'lib' / 'cmake')
-shutil.rmtree(path=private_deps_folder / 'LibJPEGTurbo' / 'include')
-shutil.rmtree(path=private_deps_folder / 'LibJPEGTurbo' / 'bin')
-shutil.rmtree(path=private_deps_folder / 'LibJPEGTurbo' / 'lib' / 'cmake')
-shutil.rmtree(path=private_deps_folder / 'LibJPEGTurbo' / 'lib' / 'pkgconfig', ignore_errors=True)
 shutil.rmtree(path=final_package_image_root / 'OpenColorIO' / 'lib' / 'pkgconfig', ignore_errors=True)
 shutil.rmtree(path=final_package_image_root / 'OpenColorIO' / 'lib' / 'cmake')
 shutil.rmtree(path=final_package_image_root / 'OpenColorIO' / 'share')
@@ -742,6 +725,20 @@ shutil.rmtree(path=final_package_image_root / 'OpenColorIO' / 'share')
 shutil.rmtree(path=final_package_image_root / 'OpenImageIO' / 'lib' / 'pkgconfig', ignore_errors=True)
 shutil.rmtree(path=final_package_image_root / 'OpenImageIO' / 'lib' / 'cmake')
 
+# Remove the fonts from OpenImageIO since they just bloat the package
+shutil.rmtree(path=final_package_image_root / 'OpenImageIO' / 'share' / 'fonts')
+
+# On Windows only, the OpenImageIO install includes several MSVC runtime dlls we don't want to ship:
+#   concrt, msvc*, and vcruntime*
+# So look through the OpenImageIO package bin directory and remove any dlls that aren't
+# explicitly from the OpenImageIO library itself
+if args.platform == "windows":
+    oiio_dlls = final_package_image_root / 'OpenImageIO' / 'bin' / '*.dll'
+    for file_path in glob.glob(oiio_dlls.as_posix()):
+        file_name = pathlib.Path(file_path).name
+        if not file_name.startswith('OpenImageIO'):
+            os.remove(file_path)
+
 # Generate our PackageInfo.json dynamically for the platform, and pretty
 # print the JSON so that it's human readable
 print("Generating PackageInfo.json")
@@ -749,7 +746,7 @@ platform_name = args.platform.lower()
 if platform_name == "darwin":
     platform_name = "mac" # Our convention in the package list is to use mac
 package_info = {
-    "PackageName" : f"openimageio-opencolorio-2.3.12.0-{platform_name}",
+    "PackageName" : f"openimageio-opencolorio-2.3.12.0-rev2-{platform_name}",
     "URL"         : "https://github.com/OpenImageIO/oiio and https://opencolorio.org/",
     "License"     : "BSD-3-Clause",
     "LicenseFile" : "LICENSE.TXT"
@@ -766,12 +763,29 @@ shutil.copy2(src=script_folder / 'distribution' / 'LICENSE.TXT', dst=final_packa
 # we also have to include other license files when the install step for the package doesn't do it themselves
 shutil.copy2(src=source_folder_path / 'opencolorio' / 'LICENSE', dst=final_package_image_root / 'OpenColorIO' / 'LICENSE')
 shutil.copy2(src=source_folder_path / 'opencolorio' / 'THIRD-PARTY.md', dst=final_package_image_root / 'OpenColorIO' / 'THIRD-PARTY.md')
-shutil.copy2(src=source_folder_path / 'boost' / 'LICENSE_1_0.txt', dst=private_deps_folder / 'Boost' / 'LICENSE_1_0.txt')
-shutil.copy2(src=source_folder_path / 'boost' / 'README.md', dst=private_deps_folder / 'Boost' / 'README.md')
-shutil.copy2(src=private_deps_folder / 'LibJPEGTurbo' / 'share' / 'doc' / 'libjpeg-turbo' / 'LICENSE.md', dst=private_deps_folder / 'LibJPEGTurbo' / 'LICENSE.md')
+
+os.makedirs(private_deps_folder / 'Boost', exist_ok=True)
+shutil.copy2(src=source_folder_path / 'boost' / 'LICENSE_1_0.txt', dst=private_deps_folder / 'Boost')
+shutil.copy2(src=source_folder_path / 'boost' / 'README.md', dst=private_deps_folder / 'Boost')
+
+os.makedirs(private_deps_folder / 'LibJPEGTurbo', exist_ok=True)
+shutil.copy2(src=libjpegturbo_install_path / 'share' / 'doc' / 'libjpeg-turbo' / 'LICENSE.md', dst=private_deps_folder / 'LibJPEGTurbo')
+
+os.makedirs(private_deps_folder / 'pystring', exist_ok=True)
+shutil.copy2(src=pystring_install_path / 'LICENSE', dst=private_deps_folder / 'pystring')
+
+os.makedirs(private_deps_folder / 'yaml-cpp', exist_ok=True)
+shutil.copy2(src=yamlcpp_install_path / 'LICENSE', dst=private_deps_folder / 'yaml-cpp')
 
 print("\n----------------------------- Test package image -----------------------------")
 
+if args.platform == 'darwin':
+    shared_lib_suffix = '.dylib'
+elif args.platform == 'windows':
+    shared_lib_suffix = '.dll'
+else: # linux
+    shared_lib_suffix = '.so'
+
 def TestOpenImageIO(release=True):
     build_type = 'Release' if release else 'Debug'
     test_configure_command = [
@@ -815,13 +829,25 @@ def TestOpenImageIO(release=True):
         test_executable_path = test_build_folder / 'test_OpenImageIO.app' / 'Contents' / 'MacOS' / 'test_OpenImageIO'
     elif args.platform == 'windows':
         test_executable_path = test_build_folder / f'{build_type}' / 'test_OpenImageIO.exe'
-    else:
+    else: # linux
         test_executable_path = test_build_folder / 'test_OpenImageIO'
 
     test_exec_command = [
         test_executable_path
     ]
 
+    # Manual copy of runtime dependencies (the OCIO/OIIO shared libs) to the
+    # test executable folder so that the executable can run
+    test_executable_dir = test_executable_path.parent
+    ocio_debug = ''
+    oiio_debug = ''
+    if not release:
+        ocio_debug = 'd'
+        oiio_debug = '_d'
+    shutil.copy2(src=final_package_image_root / 'OpenColorIO' / 'bin' / f'{lib_prefix}OpenColorIO{ocio_debug}_2_1{shared_lib_suffix}', dst=test_executable_dir)
+    shutil.copy2(src=final_package_image_root / 'OpenImageIO' / 'bin' / f'{lib_prefix}OpenImageIO{oiio_debug}{shared_lib_suffix}', dst=test_executable_dir)
+    shutil.copy2(src=final_package_image_root / 'OpenImageIO' / 'bin' / f'{lib_prefix}OpenImageIO_Util{oiio_debug}{shared_lib_suffix}', dst=test_executable_dir)
+
     exec_and_exit_if_failed(test_exec_command, cwd=test_script_folder)
 
 module_path_string_with_package_folder = module_path_string + f';{final_package_image_root.as_posix()}'
@@ -852,6 +878,13 @@ else:
 sys.path.insert(1, str(test_script_folder.absolute().resolve()))
 sys.path.insert(1, str(oiio_site_packages.absolute().resolve()))
 sys.path.insert(1, str(ocio_site_packages.absolute().resolve()))
+
+# Also need to add OpenColorIO and OpenImageIO bin directories to the PATH
+# so their shared libs can be found
+ocio_bin = final_package_image_root / 'OpenColorIO' / 'bin'
+oiio_bin = final_package_image_root / 'OpenImageIO' / 'bin'
+os.environ["PATH"] = f"{str(ocio_bin.absolute().resolve())}{os.pathsep}{str(oiio_bin.absolute().resolve())}{os.pathsep}{os.environ['PATH']}"
+
 from python_tests import test_OpenImageIO, test_OpenColorIO
 
 if not test_OpenImageIO():

+ 0 - 9
package-system/openimageio-opencolorio/custom_find_files/FindOpenColorIO.cmake

@@ -51,12 +51,3 @@ find_library(yaml_cpp_LIBRARY NAMES libyaml-cpp yaml-cpp HINTS ${YAMLCPP_INSTALL
 add_library(yaml-cpp UNKNOWN IMPORTED GLOBAL)
 set_target_properties(yaml-cpp PROPERTIES IMPORTED_LOCATION ${yaml_cpp_LIBRARY}
 )
-
-# On Windows only, we need to make sure that this is built statically
-# and anything linking against OpenColorIO will link statically as well
-if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
-    target_compile_definitions(OpenColorIO::OpenColorIO
-        INTERFACE
-            OpenColorIO_SKIP_IMPORTS
-    )
-endif()

+ 39 - 23
package-system/openimageio-opencolorio/distribution/FindOpenColorIO.cmake

@@ -30,40 +30,33 @@ set(OpenColorIO_BIN_DIR ${CMAKE_CURRENT_LIST_DIR}/OpenColorIO/bin)
 set(OpenColorIO_FOUND True)
 set(OpenColorIO_VERSION "2.1.1")
 
-add_library(OpenColorIO::OpenColorIO STATIC IMPORTED GLOBAL)
-set_target_properties(OpenColorIO::OpenColorIO PROPERTIES 
-    IMPORTED_LOCATION ${OpenColorIO_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}OpenColorIO${CMAKE_STATIC_LIBRARY_SUFFIX}
-    INTERFACE_COMPILE_DEFINITIONS "OIIO_STATIC_DEFINE=1"
+set(OpenColorIO_SHARED_LIB ${OpenColorIO_BIN_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}OpenColorIO_2_1${CMAKE_SHARED_LIBRARY_SUFFIX})
+
+add_library(OpenColorIO::OpenColorIO SHARED IMPORTED GLOBAL)
+set_target_properties(OpenColorIO::OpenColorIO PROPERTIES
+    IMPORTED_LOCATION ${OpenColorIO_SHARED_LIB}
 )
 
 # windows has Debug libraries available.
-set(_OCIO_DEBUG_POSTFIX "")
 if (${CMAKE_SYSTEM_NAME} STREQUAL Windows)
+    set(_OCIO_DEBUG_POSTFIX "")
     if ("${CMAKE_BUILD_TYPE}" STREQUAL Debug)
         set(_OCIO_DEBUG_POSTFIX "d")
-    endif()
+        set(OpenColorIO_SHARED_LIB_DEBUG ${OpenColorIO_BIN_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}OpenColorIO${_OCIO_DEBUG_POSTFIX}_2_1${CMAKE_SHARED_LIBRARY_SUFFIX})
 
-    set_target_properties(OpenColorIO::OpenColorIO PROPERTIES 
-    IMPORTED_LOCATION_DEBUG ${OpenColorIO_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}OpenColorIO${_OCIO_DEBUG_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX})
-
-    # On Windows the yaml lib is built with an extra "md" suffix
-    set(_yaml-cpp_LIB_SUFFIX "md")
+        set_target_properties(OpenColorIO::OpenColorIO PROPERTIES
+            IMPORTED_LOCATION_DEBUG ${OpenColorIO_SHARED_LIB_DEBUG}
+            IMPORTED_IMPLIB_DEBUG ${OpenColorIO_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}OpenColorIO${_OCIO_DEBUG_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}
+        )
+    endif()
 
-    # On Windows only, we need to make sure that this is built statically
-    # and anything linking against OpenColorIO will link statically as well
-    target_compile_definitions(OpenColorIO::OpenColorIO
-        INTERFACE
-            OpenColorIO_SKIP_IMPORTS
+    set_target_properties(OpenColorIO::OpenColorIO PROPERTIES
+        IMPORTED_IMPLIB ${OpenColorIO_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}OpenColorIO${CMAKE_STATIC_LIBRARY_SUFFIX}
     )
 endif()
 
-
 target_link_libraries(OpenColorIO::OpenColorIO INTERFACE 
     Imath::Imath
-    expat::expat
-    # private dependencies that we intentionally DO NOT WANT to create friendly targets for:
-    ${CMAKE_CURRENT_LIST_DIR}/privatedeps/pystring/lib/${CMAKE_STATIC_LIBRARY_PREFIX}pystring${_OCIO_DEBUG_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}
-    ${CMAKE_CURRENT_LIST_DIR}/privatedeps/yaml-cpp/lib/libyaml-cpp${_yaml-cpp_LIB_SUFFIX}${_OCIO_DEBUG_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}
 )
 
 if (COMMAND ly_target_include_system_directories)
@@ -95,15 +88,38 @@ set(OpenColorIO_TOOLS_BINARIES
     ${OpenColorIO_BIN_DIR}/ociowrite${CMAKE_EXECUTABLE_SUFFIX}
 )
 
+add_library(OpenColorIO::OpenColorIO::Runtime INTERFACE IMPORTED GLOBAL)
 add_library(OpenColorIO::OpenColorIO::Tools::Binaries INTERFACE IMPORTED GLOBAL)
 add_library(OpenColorIO::OpenColorIO::Tools::PythonPlugins INTERFACE IMPORTED GLOBAL)
 if (COMMAND ly_add_target_files)
-    ly_add_target_files(TARGETS OpenColorIO::OpenColorIO::Tools::Binaries FILES ${OpenColorIO_TOOLS_BINARIES})
-    ly_add_target_files(TARGETS OpenColorIO::OpenColorIO::Tools::PythonPlugins FILES ${OpenColorPythonBindings})
+    ly_add_target_files(TARGETS OpenColorIO::OpenColorIO FILES ${OpenColorIO_SHARED_LIB})
+
+    if (${CMAKE_SYSTEM_NAME} STREQUAL Windows AND "${CMAKE_BUILD_TYPE}" STREQUAL Debug)
+        ly_add_target_files(TARGETS OpenColorIO::OpenColorIO FILES ${OpenColorIO_SHARED_LIB_DEBUG})
+    endif()
+
+    ly_add_target_files(TARGETS OpenColorIO::OpenColorIO::Runtime FILES
+        ${OpenColorIO_SHARED_LIB}
+    )
+    ly_add_target_files(TARGETS OpenColorIO::OpenColorIO::Tools::Binaries FILES
+        ${OpenColorIO_TOOLS_BINARIES}
+    )
+    ly_add_target_files(TARGETS OpenColorIO::OpenColorIO::Tools::PythonPlugins FILES
+        ${OpenColorPythonBindings}
+    )
 endif()
 
+# Make sure our tools get the runtime dependency (shared library)
+target_link_libraries(OpenColorIO::OpenColorIO::Tools::Binaries INTERFACE
+    OpenColorIO::OpenColorIO::Runtime
+)
+target_link_libraries(OpenColorIO::OpenColorIO::Tools::PythonPlugins INTERFACE
+    OpenColorIO::OpenColorIO::Runtime
+)
+
 # alias the OpenColorIO library to the O3DE 3rdParty library
 add_library(3rdParty::OpenColorIO ALIAS OpenColorIO::OpenColorIO)
+add_library(3rdParty::OpenColorIO::Runtime ALIAS OpenColorIO::OpenColorIO::Runtime)
 add_library(3rdParty::OpenColorIO::Tools::Binaries ALIAS OpenColorIO::OpenColorIO::Tools::Binaries)
 add_library(3rdParty::OpenColorIO::Tools::PythonPlugins ALIAS OpenColorIO::OpenColorIO::Tools::PythonPlugins)
 

+ 58 - 48
package-system/openimageio-opencolorio/distribution/FindOpenImageIO.cmake

@@ -73,53 +73,21 @@ set(OpenImageIO_BIN_DIR ${CMAKE_CURRENT_LIST_DIR}/OpenImageIO/bin)
 set(OpenImageIO_VERSION "2.3.12.0")
 set(OpenImageIO_FOUND True)
 
-add_library(OpenImageIO::OpenImageIO_Util STATIC IMPORTED GLOBAL)
+set(OpenImageIO_Util_SHARED_LIB ${OpenImageIO_BIN_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}OpenImageIO_Util${CMAKE_SHARED_LIBRARY_SUFFIX})
+set(OpenImageIO_SHARED_LIB ${OpenImageIO_BIN_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}OpenImageIO${CMAKE_SHARED_LIBRARY_SUFFIX})
+
+add_library(OpenImageIO::OpenImageIO_Util SHARED IMPORTED GLOBAL)
 set_target_properties(OpenImageIO::OpenImageIO_Util PROPERTIES 
-    IMPORTED_LOCATION ${OpenImageIO_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}OpenImageIO_Util${CMAKE_STATIC_LIBRARY_SUFFIX})
+    IMPORTED_LOCATION ${OpenImageIO_Util_SHARED_LIB})
 
-add_library(OpenImageIO::OpenImageIO STATIC IMPORTED GLOBAL)
+add_library(OpenImageIO::OpenImageIO SHARED IMPORTED GLOBAL)
 set_target_properties(OpenImageIO::OpenImageIO PROPERTIES
-    INTERFACE_COMPILE_DEFINITIONS "OIIO_STATIC_DEFINE=1"
-    IMPORTED_LOCATION ${OpenImageIO_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}OpenImageIO${CMAKE_STATIC_LIBRARY_SUFFIX})
-
-# The Boost and LibJPEGTurbo libs have special suffixes on windows
-# Also look if we need to expose our debug libraries on windows
-# if the CMAKE_BUILD_TYPE has been set to Debug
-set(_OIIO_DEBUG_POSTFIX "")
-if (${CMAKE_SYSTEM_NAME} STREQUAL Windows)
-    set(_boost_DEBUG_TAG "")
-    if ("${CMAKE_BUILD_TYPE}" STREQUAL Debug)
-        set(_OIIO_DEBUG_POSTFIX "_d")
-        set(_boost_DEBUG_TAG "-gd")
-    endif()
-
-    # Boost has their own special debug lib tagging we need to account for
-    set(_boost_LIB_SUFFIX "-vc142-mt${_boost_DEBUG_TAG}-x64-1_76")
-    set(_jpegTurbo_LIB_SUFFIX "-static")
-endif()
+    IMPORTED_LOCATION ${OpenImageIO_SHARED_LIB})
 
 target_link_libraries(OpenImageIO::OpenImageIO INTERFACE 
-    expat::expat
     OpenImageIO::OpenImageIO_Util
     OpenColorIO::OpenColorIO
-    Imath::Imath
-    PNG::PNG
-    TIFF::TIFF
-    OpenEXR::OpenEXR
-    OpenEXR::OpenEXRCore
-    OpenEXR::OpenEXRUtil
-    ZLIB::ZLIB
-    Freetype::Freetype
     ${CMAKE_DL_LIBS}
-    # private dependencies that we intentionally DO NOT WANT to create friendly targets for:
-    ${CMAKE_CURRENT_LIST_DIR}/privatedeps/Boost/lib/libboost_atomic${_boost_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}
-    ${CMAKE_CURRENT_LIST_DIR}/privatedeps/Boost/lib/libboost_chrono${_boost_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}
-    ${CMAKE_CURRENT_LIST_DIR}/privatedeps/Boost/lib/libboost_date_time${_boost_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}
-    ${CMAKE_CURRENT_LIST_DIR}/privatedeps/Boost/lib/libboost_filesystem${_boost_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}
-    ${CMAKE_CURRENT_LIST_DIR}/privatedeps/Boost/lib/libboost_system${_boost_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}
-    ${CMAKE_CURRENT_LIST_DIR}/privatedeps/Boost/lib/libboost_thread${_boost_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}
-    ${CMAKE_CURRENT_LIST_DIR}/privatedeps/LibJPEGTurbo/lib/${CMAKE_STATIC_LIBRARY_PREFIX}turbojpeg${_jpegTurbo_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}
-    ${CMAKE_CURRENT_LIST_DIR}/privatedeps/LibJPEGTurbo/lib/${CMAKE_STATIC_LIBRARY_PREFIX}jpeg${_jpegTurbo_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}
 )
 
 if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
@@ -157,21 +125,63 @@ set(OpenImageIO_TOOLS_BINARIES
     ${OpenImageIO_BIN_DIR}/oiiotool${CMAKE_EXECUTABLE_SUFFIX}
 )
 
-add_library(OpenImageIO::OpenImageIO::Tools::Binaries INTERFACE IMPORTED GLOBAL)
-add_library(OpenImageIO::OpenImageIO::Tools::PythonPlugins INTERFACE IMPORTED GLOBAL)
-if (COMMAND ly_add_target_files)
-    ly_add_target_files(TARGETS OpenImageIO::OpenImageIO::Tools::Binaries FILES ${OpenImageIO_TOOLS_BINARIES})
-    ly_add_target_files(TARGETS OpenImageIO::OpenImageIO::Tools::PythonPlugins FILES ${OpenImageIOPythonBindings})
-endif()
-
 #only windows ships with debug libraries:
 if (${CMAKE_SYSTEM_NAME} STREQUAL Windows)
+    set(_OIIO_DEBUG_POSTFIX "")
+    if ("${CMAKE_BUILD_TYPE}" STREQUAL Debug)
+        set(_OIIO_DEBUG_POSTFIX "_d")
+        set(OpenImageIO_Util_SHARED_LIB_DEBUG ${OpenImageIO_BIN_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}OpenImageIO_Util${_OIIO_DEBUG_POSTFIX}${CMAKE_SHARED_LIBRARY_SUFFIX})
+        set(OpenImageIO_SHARED_LIB_DEBUG ${OpenImageIO_BIN_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}OpenImageIO${_OIIO_DEBUG_POSTFIX}${CMAKE_SHARED_LIBRARY_SUFFIX})
+
+        set_target_properties(OpenImageIO::OpenImageIO_Util PROPERTIES
+            IMPORTED_LOCATION_DEBUG ${OpenImageIO_Util_SHARED_LIB_DEBUG}
+            IMPORTED_IMPLIB_DEBUG ${OpenImageIO_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}OpenImageIO_Util${_OIIO_DEBUG_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}
+        )
+        set_target_properties(OpenImageIO::OpenImageIO PROPERTIES
+            IMPORTED_LOCATION_DEBUG ${OpenImageIO_SHARED_LIB_DEBUG}
+            IMPORTED_IMPLIB_DEBUG ${OpenImageIO_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}OpenImageIO${_OIIO_DEBUG_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}
+        )
+    endif()
+
     set_target_properties(OpenImageIO::OpenImageIO_Util PROPERTIES 
-        IMPORTED_LOCATION_DEBUG ${OpenImageIO_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}OpenImageIO_Util${_OIIO_DEBUG_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX})
+        IMPORTED_IMPLIB ${OpenImageIO_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}OpenImageIO_Util${CMAKE_STATIC_LIBRARY_SUFFIX}
+    )
     set_target_properties(OpenImageIO::OpenImageIO PROPERTIES
-        IMPORTED_LOCATION_DEBUG ${OpenImageIO_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}OpenImageIO${_OIIO_DEBUG_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX})
+        IMPORTED_IMPLIB ${OpenImageIO_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}OpenImageIO${CMAKE_STATIC_LIBRARY_SUFFIX}
+    )
+endif()
+
+add_library(OpenImageIO::OpenImageIO::Tools::Binaries INTERFACE IMPORTED GLOBAL)
+add_library(OpenImageIO::OpenImageIO::Tools::PythonPlugins INTERFACE IMPORTED GLOBAL)
+if (COMMAND ly_add_target_files)
+    ly_add_target_files(TARGETS OpenImageIO::OpenImageIO_Util FILES ${OpenImageIO_Util_SHARED_LIB})
+    ly_add_target_files(TARGETS OpenImageIO::OpenImageIO FILES ${OpenImageIO_SHARED_LIB})
+
+    if (${CMAKE_SYSTEM_NAME} STREQUAL Windows AND "${CMAKE_BUILD_TYPE}" STREQUAL Debug)
+        ly_add_target_files(TARGETS OpenImageIO::OpenImageIO_Util FILES ${OpenImageIO_Util_SHARED_LIB_DEBUG})
+        ly_add_target_files(TARGETS OpenImageIO::OpenImageIO FILES ${OpenImageIO_SHARED_LIB_DEBUG})
+    endif()
+
+    ly_add_target_files(TARGETS OpenImageIO::OpenImageIO::Tools::Binaries FILES
+        ${OpenImageIO_TOOLS_BINARIES}
+        ${OpenImageIO_Util_SHARED_LIB}
+        ${OpenImageIO_SHARED_LIB}
+    )
+    ly_add_target_files(TARGETS OpenImageIO::OpenImageIO::Tools::PythonPlugins FILES
+        ${OpenImageIOPythonBindings}
+        ${OpenImageIO_Util_SHARED_LIB}
+        ${OpenImageIO_SHARED_LIB}
+    )
 endif()
 
+# Our OpenImageIO tools also depend on the OpenColorIO runtime (shared library)
+target_link_libraries(OpenImageIO::OpenImageIO::Tools::Binaries INTERFACE
+    OpenColorIO::OpenColorIO::Runtime
+)
+target_link_libraries(OpenImageIO::OpenImageIO::Tools::PythonPlugins INTERFACE
+    OpenColorIO::OpenColorIO::Runtime
+)
+
 # alias the OpenImageIO library to the O3DE 3rdParty library
 add_library(3rdParty::OpenImageIO ALIAS OpenImageIO::OpenImageIO)
 add_library(3rdParty::OpenImageIO_Util ALIAS OpenImageIO::OpenImageIO_Util)

+ 4 - 1
package-system/openimageio-opencolorio/distribution/README.md

@@ -1,3 +1,6 @@
 The files in this folder are added to the package being built.
 For example, the LICENSE.TXT file applies to the package that is built, not
-to this repo.  It is copied into the package as part of building it.
+to this repo.  It is copied into the package as part of building it.
+
+For additional LICENSE files for the private build dependencies of
+these libraries, see the `privatedeps` folder.

+ 2 - 2
package_build_list_host_darwin.json

@@ -25,7 +25,7 @@
         "OpenSSL-1.1.1o-rev1-mac": "package-system/OpenSSL/build_package_image.py",
         "OpenSSL-1.1.1o-rev1-ios": "package-system/OpenSSL/build_package_image.py --platform ios",
         "OpenEXR-3.1.3-rev4-mac": "Scripts/extras/pull_and_build_from_git.py ../../package-system/OpenEXR --platform-name Mac --package-root ../../package-system/OpenEXR/temp --clean",
-        "openimageio-opencolorio-2.3.12.0-mac": "package-system/openimageio-opencolorio/build_openimageio.py --clean",
+        "openimageio-opencolorio-2.3.12.0-rev2-mac": "package-system/openimageio-opencolorio/build_openimageio.py --clean",
         "PhysX-4.1.2.29882248-rev5-mac": "package-system/PhysX/build_package_image.py --platform mac",
         "PhysX-4.1.2.29882248-rev5-ios": "package-system/PhysX/build_package_image.py --platform ios",
         "NvCloth-v1.1.6-4-gd243404-pr58-rev1-mac": "package-system/NvCloth/build_package_image.py --platform-name mac",
@@ -74,7 +74,7 @@
         "OpenSSL-1.1.1o-rev1-mac": "package-system/OpenSSL/temp/OpenSSL-mac",
         "OpenSSL-1.1.1o-rev1-ios": "package-system/OpenSSL/temp/OpenSSL-ios",
         "OpenEXR-3.1.3-rev4-mac": "package-system/OpenEXR/temp/OpenEXR-mac",
-        "openimageio-opencolorio-2.3.12.0-mac": "package-system/openimageio-opencolorio/temp/package-darwin",
+        "openimageio-opencolorio-2.3.12.0-rev2-mac": "package-system/openimageio-opencolorio/temp/package-darwin",
         "tiff-4.2.0.15-rev3-mac": "package-system/tiff-mac",
         "tiff-4.2.0.15-rev3-ios": "package-system/tiff-ios",
         "python-3.7.12-rev3-darwin": "package-system/python/darwin_x64/package",

+ 2 - 2
package_build_list_host_linux.json

@@ -20,7 +20,7 @@
         "pyside2-5.15.2-rev2-linux": "Scripts/extras/pull_and_build_from_git.py ../../package-system/pyside2-qt --platform-name Linux --package-root ../../package-system --clean",
         "OpenEXR-3.1.3-rev4-linux": "Scripts/extras/pull_and_build_from_git.py ../../package-system/OpenEXR --platform-name Linux --package-root ../../package-system/OpenEXR/temp --clean",
         "OpenXR-1.0.22-rev2-linux": "Scripts/extras/pull_and_build_from_git.py ../../package-system/OpenXR --platform-name Linux --package-root ../../package-system --clean",
-        "openimageio-opencolorio-2.3.12.0-linux": "package-system/openimageio-opencolorio/build_openimageio.py --clean",
+        "openimageio-opencolorio-2.3.12.0-rev2-linux": "package-system/openimageio-opencolorio/build_openimageio.py --clean",
         "PhysX-4.1.2.29882248-rev5-linux": "package-system/PhysX/build_package_image.py --platform-name linux",
         "NvCloth-v1.1.6-4-gd243404-pr58-rev1-linux": "package-system/NvCloth/build_package_image.py --platform-name linux",
         "poly2tri-7f0487a-rev1-linux": "package-system/poly2tri/build_package_image.py --platform-name linux",
@@ -56,7 +56,7 @@
         "pyside2-5.15.2-rev2-linux": "package-system/pyside2-linux",
         "OpenEXR-3.1.3-rev4-linux": "package-system/OpenEXR/temp/OpenEXR-linux",
         "OpenXR-1.0.22-rev2-linux": "package-system/OpenXR-linux",
-        "openimageio-opencolorio-2.3.12.0-linux": "package-system/openimageio-opencolorio/temp/package-linux",
+        "openimageio-opencolorio-2.3.12.0-rev2-linux": "package-system/openimageio-opencolorio/temp/package-linux",
         "SPIRVCross-2021.04.29-rev1-linux": "package-system/SPIRVCross-linux",
         "squish-ccr-deb557d-rev1-linux": "package-system/squish-ccr-linux",
         "astc-encoder-3.2-rev2-linux": "package-system/astc-encoder-linux",

+ 2 - 2
package_build_list_host_windows.json

@@ -35,7 +35,7 @@
         "NvCloth-v1.1.6-4-gd243404-pr58-rev1-windows": "package-system/NvCloth/build_package_image.py --platform-name windows",
         "NvCloth-v1.1.6-4-gd243404-pr58-rev1-android": "package-system/NvCloth/build_package_image.py --platform-name android",
         "OpenEXR-3.1.3-rev4-windows": "Scripts/extras/pull_and_build_from_git.py ../../package-system/OpenEXR --platform-name Windows --package-root ../../package-system/OpenEXR/temp --clean",
-        "openimageio-opencolorio-2.3.12.0-windows": "package-system/openimageio-opencolorio/build_openimageio.py --clean",
+        "openimageio-opencolorio-2.3.12.0-rev2-windows": "package-system/openimageio-opencolorio/build_openimageio.py --clean",
         "OpenMesh-8.1-rev3-windows": "Scripts/extras/pull_and_build_from_git.py ../../package-system/OpenMesh --platform-name Windows --package-root ../../package-system --clean",
         "OpenSSL-1.1.1o-rev2-android": "package-system/OpenSSL/build_package_image.py --platform-name android",
         "OpenSSL-1.1.1o-rev1-windows": "package-system/OpenSSL/build_package_image.py",
@@ -100,7 +100,7 @@
     "NvCloth-v1.1.6-4-gd243404-pr58-rev1-windows": "package-system/NvCloth-windows",
     "NvCloth-v1.1.6-4-gd243404-pr58-rev1-android": "package-system/NvCloth-android",
     "OpenEXR-3.1.3-rev4-windows": "package-system/OpenEXR/temp/OpenEXR-windows",
-    "openimageio-opencolorio-2.3.12.0-windows": "package-system/openimageio-opencolorio/temp/package-windows",
+    "openimageio-opencolorio-2.3.12.0-rev2-windows": "package-system/openimageio-opencolorio/temp/package-windows",
     "OpenMesh-8.1-rev3-windows": "package-system/OpenMesh-windows",
     "OpenSSL-1.1.1o-rev2-android": "package-system/OpenSSL/temp/OpenSSL-android",
     "OpenSSL-1.1.1o-rev1-windows": "package-system/OpenSSL/temp/OpenSSL-windows",