rvthtool/cmake/libs/FindNETTLE.cmake
David Korth 43372103cb Port over CMake changes from rom-properties.
- CPUInstructionSetFlags.cmake: Add more CPU architectures.

- DirInstallPaths.cmake: Set ${TARGET_CPU_ARCH} and add more
  CPU architectures.

- FindNETTLE.cmake: Use ${TARGET_CPU_ARCH}.

- SplitDebugInformation.cmake: Add the `mold` workaround.

- options.cmake: Disable split debug by default on macOS.

- platform.cmake: Minor cleanups.

- gcc.cmake: Code coverage cleanup, check for "--no-undefined" and
  "--no-allow-shlib-undefined" (but only allow them on Linux),
  and check for "-ftree-vectorize".

- msvc.cmake:
  - Add: /we4477 /MP /guard:cf /guard:ehcont /permissive-
  - On i386 only: /SAFESEH
  - Disable /Zc:externC /Zc:noexceptTypes on Clang.
  - Disable thread-safe statics only on i386 and amd64.

- win32-gcc.cmake, win32-msvc.cmake:
  - Various flag changes.
2023-11-25 10:09:48 -05:00

92 lines
3.1 KiB
CMake

# Find the Nettle library.
# Reference: https://github.com/tatsuhiro-t/wslay/blob/9fe71b1d77823fbca70538bb88a56aec61fecfb3/cmake/FindNettle.cmake
# NETTLE_INCLUDE_DIRS - where to find <nettle/sha.h>, etc.
# NETTLE_LIBRARIES - List of libraries when using libnettle.
# NETTLE_FOUND - True if libnettle found.
IF(NOT TARGET NETTLE_dll_target)
IF(NOT WIN32)
if(NETTLE_INCLUDE_DIRS)
# Already in cache, be silent
set(NETTLE_FIND_QUIETLY YES)
endif()
find_path(NETTLE_INCLUDE_DIRS nettle/md5.h nettle/ripemd160.h nettle/sha.h)
find_library(NETTLE_LIBRARY NAMES nettle libnettle)
find_library(HOGWEED_LIBRARY NAMES hogweed libhogweed)
# handle the QUIETLY and REQUIRED arguments and set NETTLE_FOUND to TRUE if
# all listed variables are TRUE
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(NETTLE DEFAULT_MSG NETTLE_LIBRARY NETTLE_INCLUDE_DIRS)
if(NETTLE_FOUND)
set(NETTLE_LIBRARIES ${HOGWEED_LIBRARY} ${NETTLE_LIBRARY})
endif()
ELSE(NOT WIN32)
# Use the included Win32 build of Nettle.
INCLUDE(CPUInstructionSetFlags)
INCLUDE(DirInstallPaths)
IF(CPU_i386 OR CPU_amd64)
# Supported CPU
ELSE()
MESSAGE(FATAL_ERROR "Unsupported CPU architecture, please fix!")
ENDIF()
SET(NETTLE_WIN32_BASE_PATH "${CMAKE_SOURCE_DIR}/extlib/nettle.win32")
SET(NETTLE_INCLUDE_DIRS "${NETTLE_WIN32_BASE_PATH}/include")
IF(MSVC)
SET(NETTLE_LIBRARY "${NETTLE_WIN32_BASE_PATH}/lib.${TARGET_CPU_ARCH}/libnettle-8.lib")
SET(HOGWEED_LIBRARY "${NETTLE_WIN32_BASE_PATH}/lib.${TARGET_CPU_ARCH}/libhogweed-6.lib")
ELSE(MSVC)
SET(NETTLE_LIBRARY "${NETTLE_WIN32_BASE_PATH}/lib.${TARGET_CPU_ARCH}/libnettle.dll.a")
SET(HOGWEED_LIBRARY "${NETTLE_WIN32_BASE_PATH}/lib.${TARGET_CPU_ARCH}/libhogweed.dll.a")
ENDIF(MSVC)
SET(NETTLE_LIBRARIES ${NETTLE_LIBRARY} ${HOGWEED_LIBRARY})
# Copy and install the DLLs.
SET(NETTLE_NETTLE_DLL "${NETTLE_WIN32_BASE_PATH}/lib.${TARGET_CPU_ARCH}/libnettle-8.dll")
SET(NETTLE_HOGWEED_DLL "${NETTLE_WIN32_BASE_PATH}/lib.${TARGET_CPU_ARCH}/libhogweed-6.dll")
# Destination directory.
# If CMAKE_CFG_INTDIR is set, a Debug or Release subdirectory is being used.
IF(CMAKE_CFG_INTDIR)
SET(DLL_DESTDIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}")
ELSE(CMAKE_CFG_INTDIR)
SET(DLL_DESTDIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
ENDIF(CMAKE_CFG_INTDIR)
ADD_CUSTOM_TARGET(NETTLE_dll_target ALL
DEPENDS HOGWEED_dll_command NETTLE_dll_command
)
ADD_CUSTOM_COMMAND(OUTPUT NETTLE_dll_command
COMMAND ${CMAKE_COMMAND}
ARGS -E copy_if_different
"${NETTLE_NETTLE_DLL}" "${DLL_DESTDIR}/libnettle-8.dll"
DEPENDS NETTLE_always_rebuild
)
ADD_CUSTOM_COMMAND(OUTPUT HOGWEED_dll_command
COMMAND ${CMAKE_COMMAND}
ARGS -E copy_if_different
"${NETTLE_HOGWEED_DLL}" "${DLL_DESTDIR}/libhogweed-6.dll"
DEPENDS NETTLE_always_rebuild
)
ADD_CUSTOM_COMMAND(OUTPUT NETTLE_always_rebuild
COMMAND ${CMAKE_COMMAND}
ARGS -E echo
)
INSTALL(FILES "${NETTLE_NETTLE_DLL}" "${NETTLE_HOGWEED_DLL}"
DESTINATION "${DIR_INSTALL_DLL}"
COMPONENT "dll"
)
SET(NETTLE_FOUND 1)
SET(HAVE_NETTLE 1)
UNSET(DLL_DESTDIR)
UNSET(arch)
ENDIF(NOT WIN32)
ENDIF(NOT TARGET NETTLE_dll_target)