diff --git a/src/libcec/cmake/CheckPlatformSupport.cmake b/src/libcec/cmake/CheckPlatformSupport.cmake index a7f65596..00ba55e3 100644 --- a/src/libcec/cmake/CheckPlatformSupport.cmake +++ b/src/libcec/cmake/CheckPlatformSupport.cmake @@ -4,21 +4,24 @@ # PLATFORM_LIBREQUIRES dependencies # LIB_INFO supported features and compilation information # LIB_DESTINATION destination for the .so/.dll files -# HAVE_RANDR ON if xrandr is supported -# HAVE_LIBUDEV ON if udev is supported -# HAVE_RPI_API ON if Raspberry Pi is supported -# HAVE_TDA995X_API ON if TDA995X is supported -# HAVE_EXYNOS_API ON if Exynos is supported -# HAVE_LINUX_API ON if Linux is supported -# HAVE_AOCEC_API ON if AOCEC is supported -# HAVE_IMX_API ON if iMX.6 is supported # HAVE_P8_USB ON if Pulse-Eight devices are supported # HAVE_P8_USB_DETECT ON if Pulse-Eight devices can be auto-detected -# HAVE_DRM_EDID_PARSER ON if DRM EDID parsing is supported # - -set(RPI_LIB_DIR "" CACHE STRING "Path to Raspberry Pi libraries") -set(RPI_INCLUDE_DIR "" CACHE STRING "Path to Raspberry Pi headers") +# The following variables are set automatically, if not defined by user +# HAVE_DRM_EDID_PARSER ON if DRM EDID parsing is supported, otherwise OFF +# HAVE_LIBUDEV ON if udev is supported, otherwise OFF +# HAVE_RANDR ON if xrandr is supported, otherwise OFF +# HAVE_RPI_API ON if Raspberry Pi is supported, otherwise OFF +# +# The following variables must be defined to enable suppport for various features +# HAVE_TDA995X_API ON to enable NXP TDA995x support +# HAVE_EXYNOS_API ON to enable Exynos SoC support +# HAVE_LINUX_API ON to enable Linux kernel CEC framework support +# HAVE_AOCEC_API ON to enable AOCEC (Odroid C2/Amlogic S905) SoC support +# HAVE_IMX_API ON to enable iMX.6 SoC support +# RPI_INCLUDE_DIR PATH to Raspberry Pi includes +# RPI_LIB_DIR PATH to Raspberry Pi libs +# set(PLATFORM_LIBREQUIRES "") @@ -27,20 +30,11 @@ include(CheckSymbolExists) include(FindPkgConfig) # defaults -SET(HAVE_RANDR OFF CACHE BOOL "xrandr not supported") -SET(HAVE_LIBUDEV OFF CACHE BOOL "udev not supported") -SET(HAVE_RPI_API OFF CACHE BOOL "raspberry pi not supported") -SET(HAVE_TDA995X_API OFF CACHE BOOL "tda995x not supported") -SET(HAVE_EXYNOS_API OFF CACHE BOOL "exynos not supported") -SET(HAVE_LINUX_API OFF CACHE BOOL "linux not supported") -SET(HAVE_AOCEC_API OFF CACHE BOOL "aocec not supported") # Pulse-Eight devices are always supported set(HAVE_P8_USB ON CACHE BOOL "p8 usb-cec supported" FORCE) -set(HAVE_P8_USB_DETECT OFF CACHE BOOL "p8 usb-cec detection not supported") -set(HAVE_DRM_EDID_PARSER OFF CACHE BOOL "drm edid parser not supported") # Raspberry Pi libs and headers are in a non-standard path on some distributions -set(RPI_INCLUDE_DIR "" CACHE FILEPATH "root path to Raspberry Pi includes") -set(RPI_LIB_DIR "" CACHE FILEPATH "root path to Raspberry Pi libs") +set(RPI_INCLUDE_DIR "" CACHE FILEPATH "path to Raspberry Pi includes") +set(RPI_LIB_DIR "" CACHE FILEPATH "path to Raspberry Pi libs") if(WIN32) # Windows @@ -64,8 +58,7 @@ if(WIN32) message(FATAL_ERROR "Unknown architecture id: ${MSVC_C_ARCHITECTURE_ID}") endif() - set(HAVE_P8_USB_DETECT ON CACHE BOOL "p8 usb-cec detection supported" FORCE) - set(LIB_INFO "${LIB_INFO}, features: P8_USB, P8_detect") + set(HAVE_P8_USB_DETECT ON CACHE INTERNAL "p8 usb-cec detection supported") list(APPEND CEC_SOURCES_PLATFORM platform/windows/os-edid.cpp platform/windows/serialport.cpp) @@ -77,12 +70,10 @@ else() list(APPEND CEC_SOURCES_PLATFORM platform/posix/os-edid.cpp platform/posix/serialport.cpp) set(LIB_DESTINATION "${CMAKE_INSTALL_LIBDIR}") - set(LIB_INFO "${LIB_INFO}, features: P8_USB") # always try DRM on Linux if other methods fail if(NOT CMAKE_SYSTEM_NAME MATCHES "FreeBSD") - set(HAVE_DRM_EDID_PARSER ON CACHE BOOL "drm edid parser not supported" FORCE) - set(LIB_INFO "${LIB_INFO}, DRM") + set(HAVE_DRM_EDID_PARSER ON CACHE BOOL "drm edid parser supported") endif() # flock @@ -90,64 +81,61 @@ else() check_function_exists(flock HAVE_FLOCK) # udev - pkg_check_modules(UDEV udev) - if (UDEV_FOUND) - set(PLATFORM_LIBREQUIRES "${PLATFORM_LIBREQUIRES} ${UDEV_LIBRARIES}") - else() - # fall back to finding libudev.pc - pkg_check_modules(UDEV libudev) + if(NOT DEFINED HAVE_LIBUDEV OR HAVE_LIBUDEV) + pkg_check_modules(UDEV udev) if (UDEV_FOUND) - set(PLATFORM_LIBREQUIRES "${PLATFORM_LIBREQUIRES} libudev") + set(PLATFORM_LIBREQUIRES "${PLATFORM_LIBREQUIRES} ${UDEV_LIBRARIES}") + list(APPEND CMAKE_REQUIRED_LIBRARIES "${UDEV_LIBRARIES}") + else() + # fall back to finding libudev.pc + pkg_check_modules(UDEV libudev) + if (UDEV_FOUND) + set(PLATFORM_LIBREQUIRES "${PLATFORM_LIBREQUIRES} libudev") + list(APPEND CMAKE_REQUIRED_LIBRARIES "libudev") + endif() endif() endif() - if (UDEV_FOUND) - SET(HAVE_LIBUDEV ON CACHE BOOL "udev supported" FORCE) - set(LIB_INFO "${LIB_INFO}, P8_detect") - list(APPEND CMAKE_REQUIRED_LIBRARIES "${UDEV_LIBRARIES}") - set(HAVE_P8_USB_DETECT ON CACHE BOOL "p8 usb-cec detection supported" FORCE) - endif() # xrandr - check_include_files("X11/Xlib.h;X11/Xatom.h;X11/extensions/Xrandr.h" HAVE_RANDR_HEADERS) - check_library_exists(Xrandr XRRGetScreenResources "" HAVE_RANDR_LIB) - if (HAVE_RANDR_HEADERS AND HAVE_RANDR_LIB) - set(LIB_INFO "${LIB_INFO}, randr") - list(APPEND CEC_SOURCES_PLATFORM platform/X11/randr-edid.cpp) - SET(HAVE_RANDR ON CACHE BOOL "xrandr supported" FORCE) + if(NOT DEFINED HAVE_RANDR OR HAVE_RANDR) + check_include_files("X11/Xlib.h;X11/Xatom.h;X11/extensions/Xrandr.h" HAVE_RANDR_HEADERS) + check_library_exists(Xrandr XRRGetScreenResources "" HAVE_RANDR_LIB) + if (HAVE_RANDR_HEADERS AND HAVE_RANDR_LIB) + list(APPEND CEC_SOURCES_PLATFORM platform/X11/randr-edid.cpp) + endif() endif() # raspberry pi - find_library(RPI_BCM_HOST bcm_host "${RPI_LIB_DIR}") - check_library_exists(bcm_host bcm_host_init "${RPI_LIB_DIR}" HAVE_RPI_LIB) - if (HAVE_RPI_LIB) - SET(HAVE_RPI_API ON CACHE BOOL "raspberry pi supported" FORCE) - find_library(RPI_VCOS vcos "${RPI_LIB_DIR}") - find_library(RPI_VCHIQ_ARM vchiq_arm "${RPI_LIB_DIR}") - include_directories(${RPI_INCLUDE_DIR} ${RPI_INCLUDE_DIR}/interface/vcos/pthreads ${RPI_INCLUDE_DIR}/interface/vmcs_host/linux) - - set(LIB_INFO "${LIB_INFO}, RPi") - set(CEC_SOURCES_ADAPTER_RPI adapter/RPi/RPiCECAdapterDetection.cpp - adapter/RPi/RPiCECAdapterCommunication.cpp - adapter/RPi/RPiCECAdapterMessageQueue.cpp) - source_group("Source Files\\adapter\\RPi" FILES ${CEC_SOURCES_ADAPTER_RPI}) - list(APPEND CEC_SOURCES ${CEC_SOURCES_ADAPTER_RPI}) + if(NOT DEFINED HAVE_RPI_API OR HAVE_RPI_API) + find_library(RPI_BCM_HOST bcm_host "${RPI_LIB_DIR}") + check_library_exists(bcm_host bcm_host_init "${RPI_LIB_DIR}" HAVE_RPI_LIB) + if (HAVE_RPI_LIB) + SET(HAVE_RPI_API ON CACHE BOOL "raspberry pi supported" FORCE) + find_library(RPI_VCOS vcos "${RPI_LIB_DIR}") + find_library(RPI_VCHIQ_ARM vchiq_arm "${RPI_LIB_DIR}") + include_directories(${RPI_INCLUDE_DIR} ${RPI_INCLUDE_DIR}/interface/vcos/pthreads ${RPI_INCLUDE_DIR}/interface/vmcs_host/linux) + + set(CEC_SOURCES_ADAPTER_RPI adapter/RPi/RPiCECAdapterDetection.cpp + adapter/RPi/RPiCECAdapterCommunication.cpp + adapter/RPi/RPiCECAdapterMessageQueue.cpp) + source_group("Source Files\\adapter\\RPi" FILES ${CEC_SOURCES_ADAPTER_RPI}) + list(APPEND CEC_SOURCES ${CEC_SOURCES_ADAPTER_RPI}) + endif() endif() # TDA995x - check_include_files("tda998x_ioctl.h;comps/tmdlHdmiCEC/inc/tmdlHdmiCEC_Types.h" HAVE_TDA995X_API_INC) - if (HAVE_TDA995X_API_INC) - SET(HAVE_TDA995X_API ON CACHE BOOL "tda995x supported" FORCE) - set(LIB_INFO "${LIB_INFO}, TDA995x") - set(CEC_SOURCES_ADAPTER_TDA995x adapter/TDA995x/TDA995xCECAdapterDetection.cpp - adapter/TDA995x/TDA995xCECAdapterCommunication.cpp) - source_group("Source Files\\adapter\\TDA995x" FILES ${CEC_SOURCES_ADAPTER_TDA995x}) - list(APPEND CEC_SOURCES ${CEC_SOURCES_ADAPTER_TDA995x}) + if(NOT DEFINED HAVE_TDA995X_API OR HAVE_TDA995X_API) + check_include_files("tda998x_ioctl.h;comps/tmdlHdmiCEC/inc/tmdlHdmiCEC_Types.h" HAVE_TDA995X_API_INC) + if (HAVE_TDA995X_API_INC) + set(CEC_SOURCES_ADAPTER_TDA995x adapter/TDA995x/TDA995xCECAdapterDetection.cpp + adapter/TDA995x/TDA995xCECAdapterCommunication.cpp) + source_group("Source Files\\adapter\\TDA995x" FILES ${CEC_SOURCES_ADAPTER_TDA995x}) + list(APPEND CEC_SOURCES ${CEC_SOURCES_ADAPTER_TDA995x}) + endif() endif() # Exynos - if (${HAVE_EXYNOS_API}) - set(LIB_INFO "${LIB_INFO}, Exynos") - SET(HAVE_EXYNOS_API ON CACHE BOOL "exynos supported" FORCE) + if (HAVE_EXYNOS_API) set(CEC_SOURCES_ADAPTER_EXYNOS adapter/Exynos/ExynosCECAdapterDetection.cpp adapter/Exynos/ExynosCECAdapterCommunication.cpp) source_group("Source Files\\adapter\\Exynos" FILES ${CEC_SOURCES_ADAPTER_EXYNOS}) @@ -155,9 +143,7 @@ else() endif() # Linux - if (${HAVE_LINUX_API}) - set(LIB_INFO "${LIB_INFO}, Linux") - SET(HAVE_LINUX_API ON CACHE BOOL "linux supported" FORCE) + if (HAVE_LINUX_API) set(CEC_SOURCES_ADAPTER_LINUX adapter/Linux/LinuxCECAdapterDetection.cpp adapter/Linux/LinuxCECAdapterCommunication.cpp) source_group("Source Files\\adapter\\Linux" FILES ${CEC_SOURCES_ADAPTER_LINUX}) @@ -165,27 +151,19 @@ else() endif() # AOCEC - if (${HAVE_AOCEC_API}) - set(LIB_INFO "${LIB_INFO}, AOCEC") - SET(HAVE_AOCEC_API ON CACHE BOOL "AOCEC supported" FORCE) + if (HAVE_AOCEC_API) set(CEC_SOURCES_ADAPTER_AOCEC adapter/AOCEC/AOCECAdapterDetection.cpp adapter/AOCEC/AOCECAdapterCommunication.cpp) source_group("Source Files\\adapter\\AOCEC" FILES ${CEC_SOURCES_ADAPTER_AOCEC}) list(APPEND CEC_SOURCES ${CEC_SOURCES_ADAPTER_AOCEC}) - else() - set(HAVE_AOCEC_API 0) endif() # i.MX6 - if (${HAVE_IMX_API}) - set(LIB_INFO "${LIB_INFO}, 'i.MX6'") - set(HAVE_IMX_API 1) + if (HAVE_IMX_API) set(CEC_SOURCES_ADAPTER_IMX adapter/IMX/IMXCECAdapterCommunication.cpp adapter/IMX/IMXCECAdapterDetection.cpp) source_group("Source Files\\adapter\\IMX" FILES ${CEC_SOURCES_ADAPTER_IMX}) list(APPEND CEC_SOURCES ${CEC_SOURCES_ADAPTER_IMX}) - else() - set(HAVE_IMX_API 0) endif() endif() @@ -195,6 +173,84 @@ check_library_exists(rt clock_gettime "" HAVE_RT) # check for dlopen check_library_exists(dl dlopen "" HAVE_DLOPEN) +set(LIB_INFO "${LIB_INFO}, features: P8_USB") + +if (HAVE_DRM_EDID_PARSER) + set(LIB_INFO "${LIB_INFO}, DRM") +else() + set(HAVE_DRM_EDID_PARSER OFF CACHE BOOL "DRM EDID parser supported") +endif() + +if (UDEV_FOUND) + SET(HAVE_LIBUDEV ON CACHE BOOL "udev supported") + set(HAVE_P8_USB_DETECT ON CACHE INTERNAL "p8 USB-CEC detection supported") +elseif (HAVE_LIBUDEV) + message(FATAL_ERROR "udev library not found") +else() + SET(HAVE_LIBUDEV OFF CACHE BOOL "udev supported") +endif() + +if (CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(HAVE_P8_USB_DETECT ON CACHE INTERNAL "p8 USB-CEC detection supported") +elseif (NOT DEFINED HAVE_P8_USB_DETECT) + set(HAVE_P8_USB_DETECT OFF CACHE INTERNAL "p8 USB-CEC detection supported") +endif() + +if (HAVE_P8_USB_DETECT) + set(LIB_INFO "${LIB_INFO}, P8_detect") +endif() + +if (HAVE_RANDR_HEADERS AND HAVE_RANDR_LIB) + SET(HAVE_RANDR ON CACHE BOOL "xrandr supported") + set(LIB_INFO "${LIB_INFO}, randr") +elseif (HAVE_RANDR) + message(FATAL_ERROR "randr headers or library not found") +else() + SET(HAVE_RANDR OFF CACHE BOOL "xrandr supported") +endif() + +if (HAVE_RPI_LIB) + SET(HAVE_RPI_API ON CACHE BOOL "Raspberry Pi supported") + set(LIB_INFO "${LIB_INFO}, RPi") +elseif (HAVE_RPI_API) + message(FATAL_ERROR "Raspberry Pi library not found") +else() + SET(HAVE_RPI_API OFF CACHE BOOL "Raspberry Pi supported") +endif() + +if (HAVE_TDA995X_API_INC) + SET(HAVE_TDA995X_API ON CACHE BOOL "NXP TDA995x supported") + set(LIB_INFO "${LIB_INFO}, TDA995x") +elseif (HAVE_TDA995X_API) + message(FATAL_ERROR "tda995x headers not found") +else() + SET(HAVE_TDA995X_API OFF CACHE BOOL "TDA995x supported") +endif() + +if (HAVE_EXYNOS_API) + set(LIB_INFO "${LIB_INFO}, Exynos") +else() + SET(HAVE_EXYNOS_API OFF CACHE BOOL "Exynos supported") +endif() + +if (HAVE_LINUX_API) + set(LIB_INFO "${LIB_INFO}, Linux_kernel_API") +else() + SET(HAVE_LINUX_API OFF CACHE BOOL "Linux kernel CEC framework supported") +endif() + +if (HAVE_AOCEC_API) + set(LIB_INFO "${LIB_INFO}, AOCEC") +else() + SET(HAVE_AOCEC_API OFF CACHE BOOL "AOCEC (Odroid C2/Amlogic S905) SoC supported") +endif() + +if (HAVE_IMX_API) + set(LIB_INFO "${LIB_INFO}, 'i.MX6'") +else() + SET(HAVE_IMX_API OFF CACHE BOOL "i.MX6 SoC supported") +endif() + SET(SKIP_PYTHON_WRAPPER 0 CACHE STRING "Define to 1 to not generate the Python wrapper") if (${SKIP_PYTHON_WRAPPER}) diff --git a/src/libcec/cmake/DisplayPlatformSupport.cmake b/src/libcec/cmake/DisplayPlatformSupport.cmake index 8b2a558f..69f1ec14 100644 --- a/src/libcec/cmake/DisplayPlatformSupport.cmake +++ b/src/libcec/cmake/DisplayPlatformSupport.cmake @@ -27,9 +27,9 @@ else() endif() if (HAVE_TDA995X_API) - message(STATUS "TDA995x support: yes") + message(STATUS "NXP TDA995x support: yes") else() - message(STATUS "TDA995x support: no") + message(STATUS "NXP TDA995x support: no") endif() if (HAVE_EXYNOS_API) @@ -45,21 +45,21 @@ else() endif() if (HAVE_LINUX_API) - message(STATUS "Linux support: yes") + message(STATUS "Linux kernel CEC framework support: yes") else() - message(STATUS "Linux support: no") + message(STATUS "Linux kernel CEC framework support: no") endif() if (HAVE_AOCEC_API) - message(STATUS "AOCEC support: yes") + message(STATUS "AOCEC (Odroid C2) SoC support: yes") else() - message(STATUS "AOCEC support: no") + message(STATUS "AOCEC (Odroid C2) SoC support: no") endif() if (HAVE_IMX_API) - message(STATUS "i.MX6 support: yes") + message(STATUS "i.MX6 SoC support: yes") else() - message(STATUS "i.MX6 support: no") + message(STATUS "i.MX6 SoC support: no") endif() if (HAVE_PYTHON)