blob: 32e233420c7d45eb77c724855ebfd5423c51e507 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
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()
|