mirror of
https://github.com/holub/mame
synced 2025-05-25 07:15:25 +03:00

* Tested and works on Windows, macOS, and Linux. * Fixes compatibility with macOS Ventura and bugfixes WASAPI and WDM-KS on Windows.
80 lines
2.8 KiB
CMake
80 lines
2.8 KiB
CMake
#[=======================================================================[.rst:
|
|
FindASIO
|
|
--------
|
|
|
|
Finds the ASIO SDK by searching for the SDK ZIP in CMAKE_PREFIX_PATH and
|
|
CMAKE_CURRENT_BINARY_DIR. Alternatively, you may manually specify the path of
|
|
the SDK ZIP with the ASIO_SDK_ZIP_PATH variable, which can be used for caching
|
|
in CI scripts.
|
|
|
|
If the ZIP is found, this module extracts it.
|
|
The ZIP extraction is skipped if the unzipped SDK is found.
|
|
|
|
This module provides an `ASIO::host` IMPORT library target for building host
|
|
applications which use ASIO drivers. If you want to build an ASIO driver, this
|
|
module may serve as a useful start but you will need to modify it.
|
|
|
|
#]=======================================================================]
|
|
|
|
if(NOT WIN32)
|
|
message(FATAL_ERROR "ASIO is only supported on Windows.")
|
|
endif()
|
|
|
|
file(GLOB HEADER_FILE
|
|
"${CMAKE_CURRENT_BINARY_DIR}/asiosdk*/common/asio.h"
|
|
"${CMAKE_PREFIX_PATH}/asiosdk*/common/asio.h"
|
|
# The old build systems before PortAudio 19.8 used to look for the ASIO SDK
|
|
# in the same parent directory as the source code repository. This is no
|
|
# longer advised or documented but kept for backwards compatibility.
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/../asiosdk*/common/asio.h"
|
|
)
|
|
if(NOT EXISTS "${HEADER_FILE}")
|
|
# The file(ARCHIVE_EXTRACT) command was added in CMake 3.18, so if using an
|
|
# older version of CMake, the user needs to extract it themselves.
|
|
if(CMAKE_VERSION VERSION_LESS 3.18)
|
|
message(STATUS "ASIO SDK NOT found. Download the ASIO SDK ZIP from "
|
|
"https://www.steinberg.net/asiosdk and extract it to "
|
|
"${CMAKE_PREFIX_PATH} or ${CMAKE_CURRENT_BINARY_DIR}"
|
|
)
|
|
return()
|
|
endif()
|
|
file(GLOB results
|
|
"${ASIO_SDK_ZIP_PATH}"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/asiosdk*.zip"
|
|
"${CMAKE_PREFIX_PATH}/asiosdk*.zip"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/../asiosdk*.zip"
|
|
)
|
|
foreach(f ${results})
|
|
if(EXISTS "${f}")
|
|
message(STATUS "Extracting ASIO SDK ZIP archive: ${f}")
|
|
file(ARCHIVE_EXTRACT INPUT "${f}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}")
|
|
endif()
|
|
endforeach()
|
|
file(GLOB HEADER_FILE "${CMAKE_CURRENT_BINARY_DIR}/asiosdk*/common/asio.h")
|
|
endif()
|
|
|
|
get_filename_component(HEADER_DIR "${HEADER_FILE}" DIRECTORY)
|
|
get_filename_component(ASIO_ROOT "${HEADER_DIR}" DIRECTORY)
|
|
|
|
if(ASIO_ROOT)
|
|
set(ASIO_FOUND TRUE)
|
|
message(STATUS "Found ASIO SDK: ${ASIO_ROOT}")
|
|
|
|
if(ASIO_FOUND AND NOT TARGET ASIO::host)
|
|
add_library(ASIO::host INTERFACE IMPORTED)
|
|
target_sources(ASIO::host INTERFACE
|
|
"${ASIO_ROOT}/common/asio.cpp"
|
|
"${ASIO_ROOT}/host/asiodrivers.cpp"
|
|
"${ASIO_ROOT}/host/pc/asiolist.cpp"
|
|
)
|
|
target_include_directories(ASIO::host INTERFACE
|
|
"${ASIO_ROOT}/common"
|
|
"${ASIO_ROOT}/host"
|
|
"${ASIO_ROOT}/host/pc"
|
|
)
|
|
target_link_libraries(ASIO::host INTERFACE ole32 uuid)
|
|
endif()
|
|
else()
|
|
message(STATUS "ASIO SDK NOT found")
|
|
endif()
|