vcpkg/ports/argon2/CMakeLists.txt
Hamish Moffatt 96c35a683e
[Argon2] Add new port (#24747)
* start of argon2 port

* continue development

* attempt to compile with optimization

* add feature to enable hardware optimizations

* fix symbol visibility

* set symbol visibility

* add pkg-config

* use libs.private for threading

* use last release

* start of argon2 port

* continue development

* attempt to compile with optimization

* add feature to enable hardware optimizations

* fix symbol visibility

* set symbol visibility

* add pkg-config

* use libs.private for threading

* use last release

* publish the command line tool

* Argon2 port

* add version info for argon2

* use preferred vcpkg cmake functions

* update version

* fix compile of x64-windows-static

* update version

* Update ports/argon2/portfile.cmake

Co-authored-by: Jack·Boos·Yu <47264268+JackBoosY@users.noreply.github.com>

* Update ports/argon2/portfile.cmake

Co-authored-by: Jack·Boos·Yu <47264268+JackBoosY@users.noreply.github.com>

* install pdbs

Co-authored-by: Jack·Boos·Yu <47264268+JackBoosY@users.noreply.github.com>

* add argon2 licence

* use target-specific functions for link libraries

* use upstream pkgconfig file

* export library for cmake

* update version hash

* don't use deprecated vcpkg_fixup_cmake_targets

* fix cmake integration

* update version

* fix thread.c includes when building on mingw32

* export header path and thread dependency properly

* don't export the argon2_tool

* fix output clash between library and tool on mingw

* use declspec for symbol visibility with mingw

* update version

* fix missing PDBs for library due to tool/library filename clash

* update argon2 version

* quote filenames for safety

Co-authored-by: Jack·Boos·Yu <47264268+JackBoosY@users.noreply.github.com>

* update arong2 version

* note upstream PR for visibility patch

* always build with hardware optimizations if supported by compiler

* update argon2 version

Co-authored-by: Jack·Boos·Yu <47264268+JackBoosY@users.noreply.github.com>
2022-08-29 16:38:21 -07:00

84 lines
2.4 KiB
CMake

cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
project(argon2)
set(ARGON2_VERSION 20190702)
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
if ((CMAKE_CXX_COMPILER_ID MATCHES "Clang")
OR (CMAKE_CXX_COMPILER_ID STREQUAL "GNU"))
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
endif()
find_package(Threads REQUIRED)
set(ARGON2_HEADERS
include/argon2.h
)
set (ARGON2_SRC
"src/argon2.c"
"src/core.c"
"src/blake2/blake2b.c"
"src/thread.c"
"src/encoding.c"
)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
message(STATUS "Checking support for hardware optimization:")
try_compile(WITH_OPTIMIZATIONS
${CMAKE_CURRENT_BINARY_DIR}/optimization
SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/opt.c
CMAKE_FLAGS -DINCLUDE_DIRECTORIES=${CMAKE_CURRENT_SOURCE_DIR}/include
OUTPUT_VARIABLE OUTPUT_TEST_SUPPORT_OPTIMIZATION)
message(STATUS "Build with hardware optimization? ${WITH_OPTIMIZATIONS}")
if (WITH_OPTIMIZATIONS)
list(APPEND ARGON2_SRC "src/opt.c")
else()
list(APPEND ARGON2_SRC "src/ref.c")
endif()
add_library(libargon2 ${ARGON2_SRC})
target_include_directories(libargon2 PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:include> PRIVATE src)
target_link_libraries(libargon2 Threads::Threads)
target_compile_definitions(libargon2 PUBLIC "A2_VISCTL")
set_target_properties(libargon2 PROPERTIES OUTPUT_NAME argon2)
add_executable(argon2_tool ${ARGON2_SRC} src/run.c)
target_include_directories(argon2_tool PRIVATE include src)
target_compile_definitions(argon2_tool PUBLIC "A2_VISCTL")
target_link_libraries(argon2_tool Threads::Threads)
install(FILES ${ARGON2_HEADERS} DESTINATION include)
set(PREFIX ${CMAKE_INSTALL_PREFIX})
set(UPSTREAM_VER 20190702)
if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
set(EXTRA_LIBS "-lrt -ldl")
endif ()
configure_file ("${CMAKE_SOURCE_DIR}/libargon2.pc.in" "${PROJECT_BINARY_DIR}/libargon2.pc" @ONLY)
install (FILES "${CMAKE_CURRENT_BINARY_DIR}/libargon2.pc" DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig")
install(TARGETS libargon2
EXPORT unofficial-libargon2
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
install(EXPORT unofficial-libargon2
NAMESPACE unofficial::argon2::
DESTINATION "share/unofficial-libargon2"
)
install(TARGETS argon2_tool
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)