mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-12-27 17:57:51 +08:00
154 lines
6.1 KiB
CMake
154 lines
6.1 KiB
CMake
include(vcpkg_common_functions)
|
|
|
|
vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
|
|
|
|
if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
|
|
message(FATAL_ERROR "PBC currently can only be built for desktop")
|
|
endif()
|
|
|
|
if(VCPKG_CRT_LINKAGE STREQUAL "static" AND VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
|
|
message(FATAL_ERROR "PBC currently can only be built using the dynamic CRT when building DLLs")
|
|
endif()
|
|
|
|
set(PBC_VERSION 0.5.14)
|
|
|
|
if(VCPKG_CMAKE_SYSTEM_NAME)
|
|
vcpkg_download_distfile(
|
|
ARCHIVE
|
|
URLS "https://crypto.stanford.edu/pbc/files/pbc-${PBC_VERSION}.tar.gz"
|
|
FILENAME pbc-${PBC_VERSION}.tar.gz
|
|
SHA512 d75d4ceb3f67ee62c7ca41e2a91ee914fbffaeb70256675aed6734d586950ea8e64e2f16dc069d71481eddb703624df8d46497005fb58e75cf098dd7e7961333
|
|
)
|
|
|
|
vcpkg_extract_source_archive_ex(
|
|
OUT_SOURCE_PATH SOURCE_PATH
|
|
ARCHIVE ${ARCHIVE}
|
|
REF ${PBC_VERSION}
|
|
PATCHES linux.patch
|
|
)
|
|
|
|
vcpkg_find_acquire_program(BISON)
|
|
vcpkg_find_acquire_program(FLEX)
|
|
|
|
if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
|
|
set(SHARED_STATIC --enable-static --disable-shared)
|
|
else()
|
|
set(SHARED_STATIC --disable-static --enable-shared)
|
|
endif()
|
|
|
|
set(OPTIONS ${SHARED_STATIC} LEX=${FLEX} YACC=${BISON}\ -y)
|
|
vcpkg_execute_required_process(
|
|
COMMAND ${SOURCE_PATH}/setup
|
|
WORKING_DIRECTORY ${SOURCE_PATH}
|
|
LOGNAME setup-${TARGET_TRIPLET}
|
|
)
|
|
|
|
file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
|
|
file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
|
|
message(STATUS "Configuring ${TARGET_TRIPLET}-dbg")
|
|
set(ENV{CFLAGS} "${VCPKG_C_FLAGS} ${VCPKG_C_FLAGS_DEBUG} -O0 -g -I${SOURCE_PATH}/include")
|
|
set(ENV{LDFLAGS} "${VCPKG_LINKER_FLAGS}")
|
|
vcpkg_execute_required_process(
|
|
COMMAND ${SOURCE_PATH}/configure --prefix=${CURRENT_PACKAGES_DIR}/debug ${OPTIONS} --with-sysroot=${CURRENT_INSTALLED_DIR}/debug
|
|
WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
|
|
LOGNAME configure-${TARGET_TRIPLET}-dbg
|
|
)
|
|
message(STATUS "Building ${TARGET_TRIPLET}-dbg")
|
|
vcpkg_execute_required_process(
|
|
COMMAND make -j install
|
|
WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
|
|
LOGNAME install-${TARGET_TRIPLET}-dbg
|
|
)
|
|
|
|
file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
|
|
file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
|
|
message(STATUS "Configuring ${TARGET_TRIPLET}-rel")
|
|
set(ENV{CFLAGS} "${VCPKG_C_FLAGS} ${VCPKG_C_FLAGS_RELEASE} -O3 -I${SOURCE_PATH}/include")
|
|
set(ENV{LDFLAGS} "${VCPKG_LINKER_FLAGS}")
|
|
vcpkg_execute_required_process(
|
|
COMMAND ${SOURCE_PATH}/configure --prefix=${CURRENT_PACKAGES_DIR} ${OPTIONS} --with-sysroot=${CURRENT_INSTALLED_DIR}
|
|
WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
|
|
LOGNAME configure-${TARGET_TRIPLET}-rel
|
|
)
|
|
message(STATUS "Building ${TARGET_TRIPLET}-rel")
|
|
vcpkg_execute_required_process(
|
|
COMMAND make -j install
|
|
WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
|
|
LOGNAME install-${TARGET_TRIPLET}-rel
|
|
)
|
|
|
|
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include ${CURRENT_PACKAGES_DIR}/debug/share ${CURRENT_PACKAGES_DIR}/share/info)
|
|
configure_file(${SOURCE_PATH}/COPYING ${CURRENT_PACKAGES_DIR}/share/pbc/copyright COPYONLY)
|
|
else()
|
|
vcpkg_from_github(
|
|
OUT_SOURCE_PATH SOURCE_PATH
|
|
REPO blynn/pbc
|
|
REF fbf4589036ce4f662e2d06905862c9e816cf9d08
|
|
SHA512 9348afd3866090b9fca189ae3a6bbb86c842b5f6ee7e1972f1a579993e589952c5926cb0795d4db1e647e3af263827e22c7602314c39bd97e03ffe9ad0fb48ab
|
|
HEAD_REF master
|
|
PATCHES windows.patch
|
|
)
|
|
|
|
set(CMAKE_FIND_LIBRARY_PREFIXES "")
|
|
set(CMAKE_FIND_LIBRARY_SUFFIXES "")
|
|
|
|
find_path(MPIR_INCLUDE_DIR "gmp.h" HINTS ${CURRENT_INSTALLED_DIR} PATH_SUFFIXES include)
|
|
if(NOT MPIR_INCLUDE_DIR)
|
|
message(FATAL_ERROR "GMP includes not found")
|
|
endif()
|
|
|
|
find_library(MPIR_LIBRARIES_REL NAMES "mpir.lib" HINTS ${CURRENT_INSTALLED_DIR} PATH_SUFFIXES lib)
|
|
if(NOT MPIR_LIBRARIES_REL)
|
|
message(FATAL_ERROR "mpir library not found")
|
|
endif()
|
|
|
|
find_library(MPIR_LIBRARIES_DBG NAMES "mpir.lib" HINTS ${CURRENT_INSTALLED_DIR} PATH_SUFFIXES debug/lib)
|
|
if(NOT MPIR_LIBRARIES_DBG)
|
|
message(FATAL_ERROR "mpir debug library not found")
|
|
endif()
|
|
|
|
if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
|
|
set(LibrarySuffix "lib")
|
|
set(ConfigurationSuffix "")
|
|
else()
|
|
set(LibrarySuffix "dll")
|
|
set(ConfigurationSuffix " DLL")
|
|
endif()
|
|
|
|
if(VCPKG_CRT_LINKAGE STREQUAL "static")
|
|
set(RuntimeLibraryExt "")
|
|
else()
|
|
set(RuntimeLibraryExt "DLL")
|
|
endif()
|
|
|
|
if(TRIPLET_SYSTEM_ARCH STREQUAL "x86")
|
|
set(Platform "Win32")
|
|
else()
|
|
set(Platform ${TRIPLET_SYSTEM_ARCH})
|
|
endif()
|
|
|
|
# PBC expects mpir directory in build root
|
|
get_filename_component(SOURCE_PATH_PARENT ${SOURCE_PATH} DIRECTORY)
|
|
file(REMOVE_RECURSE ${SOURCE_PATH_PARENT}/mpir)
|
|
file(MAKE_DIRECTORY ${SOURCE_PATH_PARENT}/mpir)
|
|
file(GLOB FILES ${MPIR_INCLUDE_DIR}/gmp*.h)
|
|
file(COPY ${FILES} ${MPIR_LIBRARIES_REL} DESTINATION "${SOURCE_PATH_PARENT}/mpir/${LibrarySuffix}/${Platform}/Release")
|
|
file(COPY ${FILES} ${MPIR_LIBRARIES_DBG} DESTINATION "${SOURCE_PATH_PARENT}/mpir/${LibrarySuffix}/${Platform}/Debug")
|
|
|
|
get_filename_component(SOURCE_PATH_SUFFIX ${SOURCE_PATH} NAME)
|
|
vcpkg_install_msbuild(SOURCE_PATH ${SOURCE_PATH_PARENT}
|
|
PROJECT_SUBPATH ${SOURCE_PATH_SUFFIX}/pbcwin/projects/pbclib.vcxproj
|
|
INCLUDES_SUBPATH ${SOURCE_PATH_SUFFIX}/include
|
|
LICENSE_SUBPATH ${SOURCE_PATH_SUFFIX}/COPYING
|
|
RELEASE_CONFIGURATION "Release${ConfigurationSuffix}"
|
|
DEBUG_CONFIGURATION "Debug${ConfigurationSuffix}"
|
|
OPTIONS_DEBUG "/p:RuntimeLibrary=MultiThreadedDebug${RuntimeLibraryExt}"
|
|
OPTIONS_RELEASE "/p:RuntimeLibrary=MultiThreaded${RuntimeLibraryExt}"
|
|
OPTIONS /p:SolutionDir=../
|
|
ALLOW_ROOT_INCLUDES ON
|
|
)
|
|
|
|
# clean up mpir stuff
|
|
file(REMOVE ${CURRENT_PACKAGES_DIR}/lib/mpir.lib ${CURRENT_PACKAGES_DIR}/debug/lib/mpir.lib)
|
|
endif()
|