tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

FindHWY.cmake (2643B)


      1 # Copyright (c) the JPEG XL Project Authors. All rights reserved.
      2 #
      3 # Use of this source code is governed by a BSD-style
      4 # license that can be found in the LICENSE file.
      5 
      6 find_package(PkgConfig QUIET)
      7 if (PkgConfig_FOUND)
      8  pkg_check_modules(PC_HWY QUIET libhwy)
      9  set(HWY_VERSION ${PC_HWY_VERSION})
     10 endif ()
     11 
     12 find_path(HWY_INCLUDE_DIR
     13  NAMES hwy/base.h hwy/highway.h
     14  HINTS ${PC_HWY_INCLUDEDIR} ${PC_HWY_INCLUDE_DIRS}
     15 )
     16 
     17 find_library(HWY_LIBRARY
     18  NAMES ${HWY_NAMES} hwy
     19  HINTS ${PC_HWY_LIBDIR} ${PC_HWY_LIBRARY_DIRS}
     20 )
     21 
     22 # If version not found using pkg-config, try extracting it from header files
     23 if (HWY_INCLUDE_DIR AND NOT HWY_VERSION)
     24  set(HWY_VERSION "")
     25  set(HWY_POSSIBLE_HEADERS "${HWY_INCLUDE_DIR}/hwy/base.h" "${HWY_INCLUDE_DIR}/hwy/highway.h")
     26  foreach(HWY_HEADER_FILE IN LISTS HWY_POSSIBLE_HEADERS)
     27    if (EXISTS "${HWY_HEADER_FILE}")
     28      file(READ  "${HWY_HEADER_FILE}" HWY_VERSION_CONTENT)
     29 
     30      string(REGEX MATCH "#define HWY_MAJOR +([0-9]+)" _sink "${HWY_VERSION_CONTENT}")
     31      set(HWY_VERSION_MAJOR "${CMAKE_MATCH_1}")
     32 
     33      string(REGEX MATCH "#define +HWY_MINOR +([0-9]+)" _sink "${HWY_VERSION_CONTENT}")
     34      set(HWY_VERSION_MINOR "${CMAKE_MATCH_1}")
     35 
     36      string(REGEX MATCH "#define +HWY_PATCH +([0-9]+)" _sink "${HWY_VERSION_CONTENT}")
     37      set(HWY_VERSION_PATCH "${CMAKE_MATCH_1}")
     38      if (NOT HWY_VERSION_MAJOR STREQUAL "" AND NOT HWY_VERSION_MINOR STREQUAL "" AND NOT HWY_VERSION_PATCH STREQUAL "")
     39        set(HWY_VERSION "${HWY_VERSION_MAJOR}.${HWY_VERSION_MINOR}.${HWY_VERSION_PATCH}")
     40        break()
     41      endif()
     42    endif ()
     43  endforeach ()
     44  if (NOT HWY_VERSION)
     45    message(WARNING "Highway version not found.")
     46  endif()
     47 endif ()
     48 
     49 include(FindPackageHandleStandardArgs)
     50 find_package_handle_standard_args(HWY
     51  FOUND_VAR HWY_FOUND
     52  REQUIRED_VARS HWY_LIBRARY HWY_INCLUDE_DIR
     53  VERSION_VAR HWY_VERSION
     54 )
     55 
     56 if (HWY_LIBRARY AND NOT TARGET hwy)
     57  add_library(hwy INTERFACE IMPORTED GLOBAL)
     58 
     59  if(CMAKE_VERSION VERSION_LESS "3.13.5")
     60    set_property(TARGET hwy PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${HWY_INCLUDE_DIR})
     61    target_link_libraries(hwy INTERFACE ${HWY_LIBRARY})
     62    set_property(TARGET hwy PROPERTY INTERFACE_COMPILE_OPTIONS ${PC_HWY_CFLAGS_OTHER})
     63  else()
     64    target_include_directories(hwy INTERFACE ${HWY_INCLUDE_DIR})
     65    target_link_libraries(hwy INTERFACE ${HWY_LIBRARY})
     66    target_link_options(hwy INTERFACE ${PC_HWY_LDFLAGS_OTHER})
     67    target_compile_options(hwy INTERFACE ${PC_HWY_CFLAGS_OTHER})
     68  endif()
     69 endif()
     70 
     71 mark_as_advanced(HWY_INCLUDE_DIR HWY_LIBRARY)
     72 
     73 if (HWY_FOUND)
     74    set(HWY_LIBRARIES ${HWY_LIBRARY})
     75    set(HWY_INCLUDE_DIRS ${HWY_INCLUDE_DIR})
     76 endif ()