mirror of https://github.com/YosysHQ/yosys.git
87 lines
2.3 KiB
CMake
87 lines
2.3 KiB
CMake
#
|
|
# CMake Find Foreing Function Interface library by Parra Studios
|
|
# CMake script to find FFI library.
|
|
#
|
|
# Copyright (C) 2016 - 2024 Vicente Eduardo Ferrer Garcia <vic798@gmail.com>
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
|
|
# Find FFI library and include paths
|
|
#
|
|
# LIBFFI_FOUND - True if FFI library was found
|
|
# LIBFFI_INCLUDE_DIR - FFI headers path
|
|
# LIBFFI_LIBRARY - List of FFI libraries
|
|
|
|
# Prevent vervosity if already included
|
|
if(LIBFFI_INCLUDE_DIRS)
|
|
set(LIBFFI_FIND_QUITELY TRUE)
|
|
endif()
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
|
|
set(LIBFFI_SUFFIXES
|
|
ffi
|
|
x86_64-linux-gnu
|
|
aarch64-linux-gnu
|
|
arm-linux-gnueabi
|
|
arm-linux-gnueabihf
|
|
i386-linux-gnu
|
|
mips64el-linux-gnuabi64
|
|
mipsel-linux-gnu
|
|
powerpc64le-linux-gnu
|
|
s390x-linux-gnu
|
|
)
|
|
|
|
find_library(LIBFFI_LIBRARY
|
|
NAMES ffi libffi
|
|
PATHS /usr /usr/lib /usr/local /opt/local
|
|
PATH_SUFFIXES lib lib64 ${LIBFFI_SUFFIXES}
|
|
)
|
|
|
|
if(APPLE)
|
|
execute_process(COMMAND brew --prefix libffi OUTPUT_VARIABLE LIBFFI_PREFIXES)
|
|
else()
|
|
# TODO: Windows?
|
|
set(LIBFFI_PREFIXES)
|
|
endif()
|
|
|
|
if(NOT LIBFFI_INCLUDE_DIR)
|
|
find_path(LIBFFI_INCLUDE_DIR ffi.h
|
|
PATHS /usr /usr/include /usr/local /opt/local /usr/include/ffi
|
|
PATH_SUFFIXES ${LIBFFI_SUFFIXES}
|
|
HINT LIBFFI_PREFIXES
|
|
)
|
|
endif()
|
|
|
|
# Try to load by using PkgConfig
|
|
if(NOT LIBFFI_LIBRARY OR NOT LIBFFI_INCLUDE_DIR)
|
|
# Find package configuration module
|
|
find_package(PkgConfig)
|
|
|
|
# Find module
|
|
pkg_check_modules(PC_LIBFFI QUIET libffi)
|
|
|
|
# Find include path
|
|
find_path(LIBFFI_INCLUDE_DIR ffi.h HINTS ${PC_LIBFFI_INCLUDEDIR} ${PC_LIBFFI_INCLUDE_DIRS})
|
|
|
|
# Find library
|
|
find_library(LIBFFI_LIBRARY NAMES ffi HINTS ${PC_LIBFFI_LIBDIR} ${PC_LIBFFI_LIBRARY_DIRS})
|
|
endif()
|
|
|
|
# Define FFI cmake module
|
|
find_package_handle_standard_args(LibFFI DEFAULT_MSG LIBFFI_LIBRARY LIBFFI_INCLUDE_DIR)
|
|
|
|
# Mark cmake module as advanced
|
|
mark_as_advanced(LIBFFI_INCLUDE_DIR LIBFFI_LIBRARY)
|