Skip to content

Commit

Permalink
EHN: add library dependency only if the library doesn't exist
Browse files Browse the repository at this point in the history
  • Loading branch information
leochan2009 committed Sep 11, 2017
1 parent f3bef7f commit 28621b0
Show file tree
Hide file tree
Showing 8 changed files with 92 additions and 77 deletions.
4 changes: 2 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ OPTION(BUILD_VIDEOSTREAM "Build the Video Stream." ON)
OPTION(USE_H264 "Link the OpenH264 tree." OFF)
OPTION(USE_VP9 "Link the VP9 tree." OFF)
OPTION(USE_X265 "Link the X265 tree." OFF)
OPTION(USE_OPENHEVC "Link the OpenHevc tree." OFF)
OPTION(USE_OpenHEVC "Link the OpenHEVC tree." OFF)
SET(OpenIGTLink_LINK_H264 "0")
SET(OpenIGTLink_LINK_VP9 "0")
SET(OpenIGTLink_LINK_X265 "0")
Expand All @@ -49,7 +49,7 @@ IF(BUILD_VIDEOSTREAM)
IF(USE_X265)
SET(OpenIGTLink_LINK_X265 "1")
ENDIF()
IF(USE_OPENHEVC)
IF(USE_OpenHEVC)
SET(OpenIGTLink_LINK_OPENHEVC "1")
ENDIF()
ENDIF()
Expand Down
22 changes: 17 additions & 5 deletions Source/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -250,16 +250,28 @@ LIST(APPEND OpenIGTLink_DEPENDENCIES igtlutil)
IF (NOT (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 3.4))
IF(BUILD_VIDEOSTREAM)
IF(USE_H264)
add_dependencies(OpenIGTLink OpenH264)
include(${OpenIGTLink_SOURCE_DIR}/SuperBuild/findOpenH264.cmake)
IF(NOT OpenH264_FOUND)
add_dependencies(OpenIGTLink OpenH264)
ENDIF()
ENDIF()
IF(USE_VP9)
add_dependencies(OpenIGTLink VP9)
include(${OpenIGTLink_SOURCE_DIR}/SuperBuild/findVP9.cmake)
IF(NOT VP9_FOUND)
add_dependencies(OpenIGTLink VP9)
ENDIF()
ENDIF()
IF(USE_X265)
add_dependencies(OpenIGTLink X265)
include(${OpenIGTLink_SOURCE_DIR}/SuperBuild/findX265.cmake)
IF(NOT X265_FOUND)
add_dependencies(OpenIGTLink X265)
ENDIF()
ENDIF()
IF(USE_OPENHEVC)
add_dependencies(OpenIGTLink OpenHEVC)
IF(USE_OpenHEVC)
include(${OpenIGTLink_SOURCE_DIR}/SuperBuild/findOpenHEVC.cmake)
IF(NOT OpenHEVC_FOUND)
add_dependencies(OpenIGTLink OpenHEVC)
ENDIF()
ENDIF()
ENDIF()
IF(BUILD_WEBSOCKET)
Expand Down
18 changes: 9 additions & 9 deletions Source/VideoStreaming/VideoStreaming.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -91,12 +91,12 @@ IF(${OpenIGTLink_PROTOCOL_VERSION} GREATER "2" AND BUILD_VIDEOSTREAM)
ENDIF()
ENDIF()

IF(USE_OPENHEVC)
IF(USE_OpenHEVC)
INCLUDE(${OpenIGTLink_SOURCE_DIR}/SuperBuild/External_openHEVC.cmake)
LIST(APPEND OpenIGTLink_INCLUDE_DIRS
${OPENHEVC_INCLUDE_DIR}
${OPENHEVC_INCLUDE_DIR}/gpac/modules/openhevc_dec
${OPENHEVC_LIBRARY_DIR}
${OpenHEVC_INCLUDE_DIR}
${OpenHEVC_INCLUDE_DIR}/gpac/modules/openhevc_dec
${OpenHEVC_LIBRARY_DIR}
)
LIST(APPEND OpenIGTLink_SOURCES
${PROJECT_SOURCE_DIR}/Source/VideoStreaming/H265Decoder.cxx
Expand Down Expand Up @@ -128,9 +128,9 @@ IF(WIN32) # for Windows
${LINK_X265_LIBRARY}
)
ENDIF()
IF((${OpenIGTLink_PROTOCOL_VERSION} GREATER "2" ) AND USE_OPENHEVC)
IF((${OpenIGTLink_PROTOCOL_VERSION} GREATER "2" ) AND USE_OpenHEVC)
#To do, library name depends on the compiler setting, could be vpxmt.lib and vpxmtd also. Make sure the setting matches.
SET(LINK_OPENHEVC_LIBRARY optimized ${OPENHEVC_LIBRARY_DIR}\\Release\\LibOpenHevcWrapper.lib debug ${OPENHEVC_LIBRARY_DIR}\\Debug\\LibOpenHevcWrapper.lib)
SET(LINK_OPENHEVC_LIBRARY optimized ${OpenHEVC_LIBRARY_DIR}\\Release\\LibOpenHevcWrapper.lib debug ${OpenHEVC_LIBRARY_DIR}\\Debug\\LibOpenHevcWrapper.lib)
LIST(APPEND LINK_LIBS
${LINK_OPENHEVC_LIBRARY}
)
Expand All @@ -151,10 +151,10 @@ ELSE() # for POSIX-compatible OSs
${X265_LIBRARY_DIR}/libx265.a
)
ENDIF()
IF((${OpenIGTLink_PROTOCOL_VERSION} GREATER "2" ) AND USE_OPENHEVC)
SET(LINK_OPENHEVC_LIBRARY ${OPENHEVC_LIBRARY_DIR}/libLibOpenHevcWrapper.a)
IF((${OpenIGTLink_PROTOCOL_VERSION} GREATER "2" ) AND USE_OpenHEVC)
SET(LINK_OPENHEVC_LIBRARY ${OpenHEVC_LIBRARY_DIR}/libLibOpenHevcWrapper.a)
IF (CMAKE_CONFIGURATION_TYPES)
SET(LINK_OPENHEVC_LIBRARY optimized ${OPENHEVC_LIBRARY_DIR}/Release/libLibOpenHevcWrapper.a debug ${OPENHEVC_LIBRARY_DIR}/Debug/libLibOpenHevcWrapper.a)
SET(LINK_OPENHEVC_LIBRARY optimized ${OpenHEVC_LIBRARY_DIR}/Release/libLibOpenHevcWrapper.a debug ${OpenHEVC_LIBRARY_DIR}/Debug/libLibOpenHevcWrapper.a)
ENDIF()
LIST(APPEND LINK_LIBS
${LINK_OPENHEVC_LIBRARY}
Expand Down
32 changes: 16 additions & 16 deletions SuperBuild/External_openHEVC.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -6,39 +6,39 @@ SET(OpenHEVC_DEPENDENCIES)
IF(NOT YASM_FOUND)
LIST(APPEND OpenHEVC_DEPENDENCIES YASM)
ENDIF()
IF(OPENHEVC_FOUND)
# openHEVC has been built already
MESSAGE(STATUS "Using openHEVC available at: ${OPENHEVC_INCLUDE_DIR}")
#FIND_PACKAGE(openHEVC REQUIRED)
#SET(OPENHEVC_LIBRARY_DIR "${openHEVC_DIR}" CACHE INTERNAL "Path to store openHEVC library")
IF(OpenHEVC_FOUND)
# OpenHEVC has been built already
MESSAGE(STATUS "Using OpenHEVC available at: ${OpenHEVC_INCLUDE_DIR}")
#FIND_PACKAGE(OpenHEVC REQUIRED)
#SET(OpenHEVC_LIBRARY_DIR "${OpenHEVC_DIR}" CACHE INTERNAL "Path to store OpenHEVC library")
ELSE()
# openHEVC has not been built yet, so download and build it as an external project
# OpenHEVC has not been built yet, so download and build it as an external project
SET(GIT_REPOSITORY "https://github.com/openigtlink/openHEVC.git")
SET(GIT_TAG "master")

IF(MSVC)
LIST(APPEND PLATFORM_SPECIFIC_ARGS -DCMAKE_CXX_MP_FLAG:BOOL=ON)
ENDIF()

MESSAGE(STATUS "Downloading openHEVC ${GIT_TAG} from: ${GIT_REPOSITORY}")
MESSAGE(STATUS "Downloading OpenHEVC ${GIT_TAG} from: ${GIT_REPOSITORY}")

SET (OPENHEVC_INCLUDE_DIR "${CMAKE_BINARY_DIR}/Deps/openHEVC" CACHE PATH "openHEVC source directory" FORCE)
SET (OPENHEVC_LIBRARY_DIR "${CMAKE_BINARY_DIR}/Deps/openHEVC-bin" CACHE PATH "openHEVC library directory" FORCE)
SET (OpenHEVC_INCLUDE_DIR "${CMAKE_BINARY_DIR}/Deps/OpenHEVC" CACHE PATH "OpenHEVC source directory" FORCE)
SET (OpenHEVC_LIBRARY_DIR "${CMAKE_BINARY_DIR}/Deps/OpenHEVC-bin" CACHE PATH "OpenHEVC library directory" FORCE)

ExternalProject_Add( OpenHEVC
PREFIX "${CMAKE_BINARY_DIR}/Deps/openHEVC-prefix"
SOURCE_DIR "${OPENHEVC_INCLUDE_DIR}"
BINARY_DIR "${OPENHEVC_LIBRARY_DIR}"
PREFIX "${CMAKE_BINARY_DIR}/Deps/OpenHEVC-prefix"
SOURCE_DIR "${OpenHEVC_INCLUDE_DIR}"
BINARY_DIR "${OpenHEVC_LIBRARY_DIR}"
#--Download step--------------
GIT_REPOSITORY "${GIT_REPOSITORY}"
GIT_TAG ${GIT_TAG}
#--Configure step-------------
CMAKE_ARGS
${PLATFORM_SPECIFIC_ARGS}
-DCMAKE_INSTALL_PREFIX:PATH="${CMAKE_BINARY_DIR}/Deps/openHEVC-install"
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY:STRING=${OPENHEVC_LIBRARY_DIR}
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY:STRING=${OPENHEVC_LIBRARY_DIR}
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${OPENHEVC_LIBRARY_DIR}
-DCMAKE_INSTALL_PREFIX:PATH="${CMAKE_BINARY_DIR}/Deps/OpenHEVC-install"
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY:STRING=${OpenHEVC_LIBRARY_DIR}
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY:STRING=${OpenHEVC_LIBRARY_DIR}
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${OpenHEVC_LIBRARY_DIR}
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
-DBUILD_SHARED_LIBS:BOOL=${OpenIGTLink_BUILD_SHARED_LIBS}
-DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS}
Expand Down
14 changes: 8 additions & 6 deletions SuperBuild/External_yasm.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -18,23 +18,25 @@ ELSE()
MESSAGE(STATUS "Downloading yasm ${GIT_TAG} from: ${GIT_REPOSITORY}")

SET (YASM_SOURCE_DIR "${CMAKE_BINARY_DIR}/Deps/yasm" CACHE PATH "YASM source directory" FORCE)
SET (YASM_BINART_DIR "${CMAKE_BINARY_DIR}/Deps/yasm-bin" CACHE PATH "YASM library directory" FORCE)

SET (YASM_BINARY_DIR "${CMAKE_BINARY_DIR}/Deps/yasm-bin" CACHE PATH "YASM library directory" FORCE)
IF(TARGET YASM)
return()
ENDIF()
ExternalProject_Add( YASM
PREFIX "${CMAKE_BINARY_DIR}/Deps/yasm-prefix"
SOURCE_DIR "${YASM_SOURCE_DIR}"
BINARY_DIR "${YASM_BINART_DIR}"
BINARY_DIR "${YASM_BINARY_DIR}"
#--Download step--------------
GIT_REPOSITORY "${GIT_REPOSITORY}"
GIT_TAG ${GIT_TAG}
#--Configure step-------------
CMAKE_ARGS
${PLATFORM_SPECIFIC_ARGS}
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY:STRING=${YASM_BINART_DIR}
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY:STRING=${YASM_BINART_DIR}
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY:STRING=${YASM_BINARY_DIR}
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY:STRING=${YASM_BINARY_DIR}
-DYASM_INSTALL_BIN_DIR:STRING="bin"
-DPYTHON_EXECUTABLE:STRING=${PYTHON_EXECUTABLE}
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${YASM_BINART_DIR}
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${YASM_BINARY_DIR}
-DBUILD_SHARED_LIBS:BOOL=${OpenIGTLink_BUILD_SHARED_LIBS}
-DBUILD_TESTING:BOOL=OFF
-DBUILD_EXAMPLES:BOOL=OFF
Expand Down
40 changes: 21 additions & 19 deletions SuperBuild/Superbuild.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -4,31 +4,32 @@ SET(OpenIGTLink_DEPENDENCIES)
#---------------------------------------------------
# VideoStreaming dependencies
IF(BUILD_VIDEOSTREAM)
IF(USE_H264)
set(OpenH264_INCLUDE_DIR "" CACHE PATH "H264 source directory" FORCE)
set(OpenH264_LIBRARY_DIR "" CACHE PATH "H264 library directory" FORCE)
IF(USE_H264)
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/External_openh264.cmake)
IF(NOT OpenH264_FOUND)
LIST(APPEND OpenIGTLink_DEPENDENCIES OpenH264)
ENDIF()
ENDIF()

IF(USE_VP9)
set(VP9_INCLUDE_DIR "" CACHE PATH "VP9 source directory" FORCE)
set(VP9_LIBRARY_DIR "" CACHE PATH "VP9 library directory" FORCE)
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/External_VP9.cmake)
LIST(APPEND OpenIGTLink_DEPENDENCIES VP9)
IF(NOT VP9_FOUND)
LIST(APPEND OpenIGTLink_DEPENDENCIES VP9)
ENDIF()
ENDIF()

IF(USE_X265)
set(X265_INCLUDE_DIR "" CACHE PATH "X265 source directory" FORCE)
set(X265_LIBRARY_DIR "" CACHE PATH "X265 library directory" FORCE)
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/External_X265.cmake)
LIST(APPEND OpenIGTLink_DEPENDENCIES X265)
IF(NOT X265_FOUND)
LIST(APPEND OpenIGTLink_DEPENDENCIES X265)
ENDIF()
ENDIF()

IF(USE_OPENHEVC)
set(OPENHEVC_INCLUDE_DIR "" CACHE PATH "OpenHEVC source directory" FORCE)
set(OPENHEVC_LIBRARY_DIR "" CACHE PATH "OpenHEVC library directory" FORCE)
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/External_openHEVC.cmake)
LIST(APPEND OpenIGTLink_DEPENDENCIES OpenHEVC)
IF(USE_OpenHEVC)
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/External_openHEVC.cmake)
IF(NOT OpenHEVC_FOUND)
LIST(APPEND OpenIGTLink_DEPENDENCIES OpenHEVC)
ENDIF()
ENDIF()

IF(BUILD_WEBSOCKET)
Expand All @@ -42,8 +43,8 @@ ExternalProject_Add( OpenIGTLink-lib
SOURCE_DIR "${CMAKE_BINARY_DIR}/OpenIGTLink"
BINARY_DIR "${CMAKE_BINARY_DIR}/OpenIGTLink-bin"
#--Download step--------------
GIT_REPOSITORY "https://github.com/leochan2009/OpenIGTLink.git"
GIT_TAG superbuild-findmodules
GIT_REPOSITORY "https://github.com/openigtlink/OpenIGTLink.git"
GIT_TAG master
#--Configure step-------------
CMAKE_ARGS
${PLATFORM_SPECIFIC_ARGS}
Expand All @@ -59,7 +60,7 @@ ExternalProject_Add( OpenIGTLink-lib
-DUSE_H264:BOOL=${USE_H264}
-DUSE_VP9:BOOL=${USE_VP9}
-DUSE_X265:BOOL=${USE_X265}
-DUSE_OPENHEVC:BOOL=${USE_OPENHEVC}
-DUSE_OpenHEVC:BOOL=${USE_OpenHEVC}
-DBUILD_WEBSOCKET:BOOL=${BUILD_WEBSOCKET}
-DBUILD_EXAMPLES:BOOL=${BUILD_EXAMPLES}
-DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS}
Expand All @@ -68,10 +69,11 @@ ExternalProject_Add( OpenIGTLink-lib
-DOpenH264_LIBRARY_DIR:STRING=${OpenH264_LIBRARY_DIR}
-DX265_INCLUDE_DIR:STRING=${X265_INCLUDE_DIR}
-DX265_LIBRARY_DIR:STRING=${X265_LIBRARY_DIR}
-DOPENHEVC_INCLUDE_DIR:STRING=${OPENHEVC_INCLUDE_DIR}
-DOPENHEVC_LIBRARY_DIR:STRING=${OPENHEVC_LIBRARY_DIR}
-DOpenHEVC_INCLUDE_DIR:STRING=${OpenHEVC_INCLUDE_DIR}
-DOpenHEVC_LIBRARY_DIR:STRING=${OpenHEVC_LIBRARY_DIR}
-DVP9_INCLUDE_DIR:STRING=${VP9_INCLUDE_DIR}
-DVP9_LIBRARY_DIR:STRING=${VP9_LIBRARY_DIR}
-DYASM_BINARY_DIR:STRING=${YASM_BINARY_DIR}
#--Build step-----------------
BUILD_ALWAYS 1
#--Install step-----------------
Expand Down
37 changes: 18 additions & 19 deletions SuperBuild/findOpenHEVC.cmake
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
# - The OPENHEVC library
# Once done this will define
#
# OPENHEVC_ROOT - A list of search hints
# Open - A list of search hints
#
# OPENHEVC_FOUND - found OPENHEVC
# OPENHEVC_INCLUDE_DIR - the OPENHEVC include directory
# OPENHEVC_LIBRARY_DIR - OPENHEVC library directory
# OpenHEVC_FOUND - found OpenHEVC
# OpenHEVC_INCLUDE_DIR - the OpenHEVC include directory
# OpenHEVC_LIBRARY_DIR - OpenHEVC library directory

IF((EXISTS ${OPENHEVC_INCLUDE_DIR}) AND (EXISTS ${OPENHEVC_LIBRARY_DIR}))
IF(EXISTS "${OPENHEVC_INCLUDE_DIR}/openHevcWrapper.h")
IF((EXISTS ${OpenHEVC_INCLUDE_DIR}) AND (EXISTS ${OpenHEVC_LIBRARY_DIR}))
IF(EXISTS "${OpenHEVC_INCLUDE_DIR}/openHevcWrapper.h")
IF(WIN32)
ELSE()
IF(${CMAKE_BUILD_TYPE})
Expand All @@ -24,26 +24,25 @@ IF((EXISTS ${OPENHEVC_INCLUDE_DIR}) AND (EXISTS ${OPENHEVC_LIBRARY_DIR}))
ENDIF()
ENDIF()

SET( OPENHEVC_PATH_HINTS
${OPENHEVC_ROOT}
${OPENHEVC_INCLUDE_DIR}
${OPENHEVC_LIBRARY_DIR}
SET( OpenHEVC_PATH_HINTS
${OpenHEVC_ROOT}
${OpenHEVC_INCLUDE_DIR}
${OpenHEVC_LIBRARY_DIR}
)

unset(OPENHEVC_INCLUDE_DIR CACHE)
find_path(OPENHEVC_INCLUDE_DIR NAMES openHevcWrapper.h
unset(OpenHEVC_INCLUDE_DIR CACHE)
find_path(OpenHEVC_INCLUDE_DIR NAMES openHevcWrapper.h
PATH_SUFFIXES gpac/modules/openhevc_dec
HINTS ${OPENHEVC_PATH_HINTS}
HINTS ${OpenHEVC_PATH_HINTS}
)

unset(OPENHEVC_LIBRARY_DIR CACHE)
find_path(OPENHEVC_LIBRARY_DIR
unset(OpenHEVC_LIBRARY_DIR CACHE)
find_path(OpenHEVC_LIBRARY_DIR
NAMES LibOpenHevcWrapper${CMAKE_STATIC_LIBRARY_SUFFIX} libLibOpenHevcWrapper.a
PATH_SUFFIXES ${CMAKE_BUILD_TYPE}
HINTS ${OPENHEVC_PATH_HINTS}
HINTS ${OpenHEVC_PATH_HINTS}
)

include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(OPENHEVC REQUIRED_VARS OPENHEVC_LIBRARY_DIR OPENHEVC_INCLUDE_DIR)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenHEVC REQUIRED_VARS OpenHEVC_LIBRARY_DIR OpenHEVC_INCLUDE_DIR)

mark_as_advanced(OPENHEVC_INCLUDE_DIR OPENHEVC_LIBRARY_DIR)
mark_as_advanced(OpenHEVC_INCLUDE_DIR OpenHEVC_LIBRARY_DIR)
2 changes: 1 addition & 1 deletion Testing/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ IF(${OpenIGTLink_PROTOCOL_VERSION} GREATER "2")
ADD_TEST(igtlMessageRTPWrapperTestFormatVersion2 ${OpenIGTLink_EXECUTABLE_PATH}/igtlMessageRTPWrapperTest ${TestStringFormat2})
ENDIF()

IF(${OpenIGTLink_PROTOCOL_VERSION} GREATER "2" AND BUILD_VIDEOSTREAM AND (USE_H264 OR USE_VP9 OR (USE_X265 AND USE_OPENHEVC)))
IF(${OpenIGTLink_PROTOCOL_VERSION} GREATER "2" AND BUILD_VIDEOSTREAM AND (USE_H264 OR USE_VP9 OR (USE_X265 AND USE_OpenHEVC)))
ADD_TEST(igtlVideoMessageTestFormatVersion1 ${OpenIGTLink_EXECUTABLE_PATH}/igtlVideoMessageTest ${TestStringFormat1})
ADD_TEST(igtlVideoMessageTestFormatVersion2 ${OpenIGTLink_EXECUTABLE_PATH}/igtlVideoMessageTest ${TestStringFormat2})
ADD_TEST(igtlVideoMetaMessageTestFormatVersion2 ${OpenIGTLink_EXECUTABLE_PATH}/igtlVideoMetaMessageTest ${TestStringFormat2})
Expand Down

0 comments on commit 28621b0

Please sign in to comment.