From d72e5e5b24e83e9a701e14365203ad89d5c9598e Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 14 Apr 2017 15:38:44 -0700 Subject: [PATCH] add handling for install_name_tool calls on OS X --- cmake/externals/nvtt/CMakeLists.txt | 57 ++++++++++++++++++++++------- cmake/modules/FindNVTT.cmake | 22 ++++------- libraries/image/CMakeLists.txt | 1 - 3 files changed, 51 insertions(+), 29 deletions(-) diff --git a/cmake/externals/nvtt/CMakeLists.txt b/cmake/externals/nvtt/CMakeLists.txt index 48873f956d..0f45bc45c6 100644 --- a/cmake/externals/nvtt/CMakeLists.txt +++ b/cmake/externals/nvtt/CMakeLists.txt @@ -11,25 +11,21 @@ if (NOT ANDROID) ${EXTERNAL_NAME} URL http://s3.amazonaws.com/hifi-public/dependencies/nvtt-win-2.1.0.zip URL_MD5 3ea6eeadbcc69071acf9c49ba565760e - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" LOG_DOWNLOAD 1 ) ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR) - set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${SOURCE_DIR}/include CACHE PATH "Location of NVTT include directory") + set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${SOURCE_DIR}/Release/x64/nvtt.lib CACHE FILEPATH "Path to NVTT static release library") + set(${EXTERNAL_NAME_UPPER}_LIBRARY_DEBUG ${SOURCE_DIR}/Debug/x64/nvtt.lib CACHE FILEPATH "Path to NVTT static debug library") - set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${SOURCE_DIR}/Release/x64/nvtt.lib CACHE FILEPATH "Path to NVTT release library") - - set(${EXTERNAL_NAME_UPPER}_DLL_PATH "${SOURCE_DIR}/Release/x64" CACHE PATH "Location of NVTT release DLL") + set(${EXTERNAL_NAME_UPPER}_DLL_PATH "${SOURCE_DIR}/$<$:Debug>$<$>:Release>/x64" CACHE PATH "Location of NVTT DLL") else () ExternalProject_Add( ${EXTERNAL_NAME} URL http://hifi-public.s3.amazonaws.com/dependencies/nvidia-texture-tools-2.1.0.zip URL_MD5 79842ea185c8c95aaa70cee91e77f032 - CONFIGURE_COMMAND CMAKE_ARGS ${ANDROID_CMAKE_ARGS} -DNVTT_SHARED=0 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX:PATH= + CONFIGURE_COMMAND CMAKE_ARGS ${ANDROID_CMAKE_ARGS} -DNVTT_SHARED=1 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX:PATH= LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 @@ -39,11 +35,46 @@ if (NOT ANDROID) set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${INSTALL_DIR}/include CACHE PATH "Location of NVTT include directory") - set(${EXTERNAL_NAME_UPPER}_BASE_LIBRARY ${INSTALL_DIR}/lib/static/libnvtt.a CACHE FILEPATH "Path to NVTT base static library") - set(${EXTERNAL_NAME_UPPER}_CORE_LIBRARY ${INSTALL_DIR}/lib/static/libnvcore.a CACHE FILEPATH "Path to NVTT core static library") - set(${EXTERNAL_NAME_UPPER}_IMAGE_LIBRARY ${INSTALL_DIR}/lib/static/libnvimage.a CACHE FILEPATH "Path to NVTT image static library") - set(${EXTERNAL_NAME_UPPER}_MATH_LIBRARY ${INSTALL_DIR}/lib/static/libnvmath.a CACHE FILEPATH "Path to NVTT math static library") - set(${EXTERNAL_NAME_UPPER}_THREAD_LIBRARY ${INSTALL_DIR}/lib/static/libnvthread.a CACHE FILEPATH "Path to NVTT thread static library") + if (APPLE) + set(_LIB_EXT "dylib") + else () + set(_LIB_EXT "so") + endif () + + set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${INSTALL_DIR}/lib/libnvtt.${_LIB_EXT} CACHE FILEPATH "Path to NVTT library") + + if (APPLE) + # on OS X we have to use install_name_tool to fix the paths found in the NVTT shared libraries + # so that they can be found and linked during the linking phase + set(_NVTT_LIB_DIR "${INSTALL_DIR}/lib") + + # first fix the install names of all present libraries + ExternalProject_Add_Step( + ${EXTERNAL_NAME} + change-install-name + COMMENT "Calling install_name_tool on NVTT libraries to fix install name for dylib linking" + COMMAND ${CMAKE_COMMAND} -DINSTALL_NAME_LIBRARY_DIR=${_NVTT_LIB_DIR} -P ${EXTERNAL_PROJECT_DIR}/OSXInstallNameChange.cmake + DEPENDEES install + WORKING_DIRECTORY + LOG 1 + ) + + # then, for the main library (libnvtt) fix the paths to the dependency libraries (core, image, math) + ExternalProject_Add_Step( + ${EXTERNAL_NAME} + change-dependency-paths + COMMENT "Calling install_name_tool on NVTT libraries to fix paths for dependency libraries" + COMMAND install_name_tool -change libnvimage.dylib ${INSTALL_DIR}/lib/libnvimage.dylib libnvtt.dylib + COMMAND install_name_tool -change libnvcore.dylib ${INSTALL_DIR}/lib/libnvcore.dylib libnvtt.dylib + COMMAND install_name_tool -change libnvmath.dylib ${INSTALL_DIR}/lib/libnvmath.dylib libnvtt.dylib + COMMAND install_name_tool -change libnvcore.dylib ${INSTALL_DIR}/lib/libnvcore.dylib libnvimage.dylib + COMMAND install_name_tool -change libnvmath.dylib ${INSTALL_DIR}/lib/libnvmath.dylib libnvimage.dylib + COMMAND install_name_tool -change libnvcore.dylib ${INSTALL_DIR}/lib/libnvcore.dylib libnvmath.dylib + DEPENDEES install + WORKING_DIRECTORY /lib + LOG 1 + ) + endif () endif () # Hide this external target (for IDE users) diff --git a/cmake/modules/FindNVTT.cmake b/cmake/modules/FindNVTT.cmake index 9881c130b7..8fae621d81 100644 --- a/cmake/modules/FindNVTT.cmake +++ b/cmake/modules/FindNVTT.cmake @@ -23,23 +23,15 @@ find_path(NVTT_INCLUDE_DIRS nvtt/nvtt.h PATH_SUFFIXES include HINTS ${NVTT_SEARC include(FindPackageHandleStandardArgs) +find_library(NVTT_LIBRARY_RELEASE nvtt PATH_SUFFIXES "lib" "Release.x64/lib" HINTS ${NVTT_SEARCH_DIRS}) +find_library(NVTT_LIBRARY_DEBUG nvtt PATH_SUFFIXES "lib" "Debug.x64/lib" HINTS ${NVTT_SEARCH_DIRS}) + +include(SelectLibraryConfigurations) +select_library_configurations(NVTT) + if (WIN32) - find_library(NVTT_LIBRARY_RELEASE nvtt PATH_SUFFIXES "Release.x64/lib" HINTS ${NVTT_SEARCH_DIRS}) - find_library(NVTT_LIBRARY_DEBUG nvtt PATH_SUFFIXES "Debug.x64/lib" HINTS ${NVTT_SEARCH_DIRS}) - find_path(NVTT_DLL_PATH nvtt.dll PATH_SUFFIXES "Release.x64/bin" HINTS ${NVTT_SEARCH_DIRS}) - - include(SelectLibraryConfigurations) - select_library_configurations(NVTT) - find_package_handle_standard_args(NVTT DEFAULT_MSG NVTT_INCLUDE_DIRS NVTT_LIBRARIES NVTT_DLL_PATH) else () - find_library(NVTT_BASE_LIBRARY nvtt PATH_SUFFIXES "lib/static" HINTS ${NVTT_SEARCH_DIRS}) - find_library(NVTT_CORE_LIBRARY nvcore PATH_SUFFIXES "lib/static" HINTS ${NVTT_SEARCH_DIRS}) - find_library(NVTT_IMAGE_LIBRARY nvimage PATH_SUFFIXES "lib/static" HINTS ${NVTT_SEARCH_DIRS}) - find_library(NVTT_MATH_LIBRARY nvmath PATH_SUFFIXES "lib/static" HINTS ${NVTT_SEARCH_DIRS}) - find_library(NVTT_THREAD_LIBRARY nvthread PATH_SUFFIXES "lib/static" HINTS ${NVTT_SEARCH_DIRS}) - - find_package_handle_standard_args(NVTT DEFAULT_MSG NVTT_INCLUDE_DIRS NVTT_BASE_LIBRARY NVTT_CORE_LIBRARY NVTT_IMAGE_LIBRARY NVTT_MATH_LIBRARY NVTT_THREAD_LIBRARY) - set(NVTT_LIBRARIES ${NVTT_BASE_LIBRARY} ${NVTT_CORE_LIBRARY} ${NVTT_IMAGE_LIBRARY} ${NVTT_MATH_LIBRARY} ${NVTT_THREAD_LIBRARY}) + find_package_handle_standard_args(NVTT DEFAULT_MSG NVTT_INCLUDE_DIRS NVTT_LIBRARIES) endif () diff --git a/libraries/image/CMakeLists.txt b/libraries/image/CMakeLists.txt index cc1e3f4df2..85d3d8f1ae 100644 --- a/libraries/image/CMakeLists.txt +++ b/libraries/image/CMakeLists.txt @@ -8,5 +8,4 @@ add_dependency_external_projects(nvtt) find_package(NVTT REQUIRED) target_include_directories(${TARGET_NAME} PRIVATE ${NVTT_INCLUDE_DIRS}) target_link_libraries(${TARGET_NAME} ${NVTT_LIBRARIES}) -message(${NVTT_DLL_PATH}) add_paths_to_fixup_libs(${NVTT_DLL_PATH})