Skip to content

Commit cf4b7d1

Browse files
committed
Add missing files
1 parent 92f5121 commit cf4b7d1

5 files changed

+8380
-0
lines changed

src/crc32c/src/crc32c_arm64_check.h

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
// Copyright 2017 The CRC32C Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file. See the AUTHORS file for names of contributors.
4+
5+
// ARM-specific code checking for the availability of CRC32C instructions.
6+
7+
#ifndef CRC32C_CRC32C_ARM_CHECK_H_
8+
#define CRC32C_CRC32C_ARM_CHECK_H_
9+
10+
#include <cstddef>
11+
#include <cstdint>
12+
13+
#ifdef CRC32C_HAVE_CONFIG_H
14+
#include "crc32c/crc32c_config.h"
15+
#endif
16+
17+
#if HAVE_ARM64_CRC32C
18+
19+
#ifdef __linux__
20+
#if HAVE_STRONG_GETAUXVAL
21+
#include <sys/auxv.h>
22+
#elif HAVE_WEAK_GETAUXVAL
23+
// getauxval() is not available on Android until API level 20. Link it as a weak
24+
// symbol.
25+
extern "C" unsigned long getauxval(unsigned long type) __attribute__((weak));
26+
27+
#define AT_HWCAP 16
28+
#endif // HAVE_STRONG_GETAUXVAL || HAVE_WEAK_GETAUXVAL
29+
#endif // defined (__linux__)
30+
31+
#ifdef __APPLE__
32+
#include <sys/types.h>
33+
#include <sys/sysctl.h>
34+
#endif // defined (__APPLE__)
35+
36+
namespace crc32c {
37+
38+
inline bool CanUseArm64Crc32() {
39+
#if defined (__linux__) && (HAVE_STRONG_GETAUXVAL || HAVE_WEAK_GETAUXVAL)
40+
// From 'arch/arm64/include/uapi/asm/hwcap.h' in Linux kernel source code.
41+
constexpr unsigned long kHWCAP_PMULL = 1 << 4;
42+
constexpr unsigned long kHWCAP_CRC32 = 1 << 7;
43+
unsigned long hwcap =
44+
#if HAVE_STRONG_GETAUXVAL
45+
// Some compilers warn on (&getauxval != nullptr) in the block below.
46+
getauxval(AT_HWCAP);
47+
#elif HAVE_WEAK_GETAUXVAL
48+
(&getauxval != nullptr) ? getauxval(AT_HWCAP) : 0;
49+
#else
50+
#error This is supposed to be nested inside a check for HAVE_*_GETAUXVAL.
51+
#endif // HAVE_STRONG_GETAUXVAL
52+
return (hwcap & (kHWCAP_PMULL | kHWCAP_CRC32)) ==
53+
(kHWCAP_PMULL | kHWCAP_CRC32);
54+
#elif defined(__APPLE__)
55+
int val = 0;
56+
size_t len = sizeof(val);
57+
return sysctlbyname("hw.optional.armv8_crc32", &val, &len, nullptr, 0) == 0
58+
&& val != 0;
59+
#else
60+
return false;
61+
#endif // HAVE_STRONG_GETAUXVAL || HAVE_WEAK_GETAUXVAL
62+
}
63+
64+
} // namespace crc32c
65+
66+
#endif // HAVE_ARM64_CRC32C
67+
68+
#endif // CRC32C_CRC32C_ARM_CHECK_H_

src/secp256k1/src/CMakeLists.txt

+176
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
1+
# Must be included before CMAKE_INSTALL_INCLUDEDIR is used.
2+
include(GNUInstallDirs)
3+
4+
add_library(secp256k1_precomputed OBJECT EXCLUDE_FROM_ALL
5+
precomputed_ecmult.c
6+
precomputed_ecmult_gen.c
7+
)
8+
9+
# Add objects explicitly rather than linking to the object libs to keep them
10+
# from being exported.
11+
add_library(secp256k1 secp256k1.c $<TARGET_OBJECTS:secp256k1_precomputed>)
12+
13+
add_library(secp256k1_asm INTERFACE)
14+
if(SECP256K1_ASM STREQUAL "arm32")
15+
add_library(secp256k1_asm_arm OBJECT EXCLUDE_FROM_ALL)
16+
target_sources(secp256k1_asm_arm PUBLIC
17+
asm/field_10x26_arm.s
18+
)
19+
target_sources(secp256k1 PRIVATE $<TARGET_OBJECTS:secp256k1_asm_arm>)
20+
target_link_libraries(secp256k1_asm INTERFACE secp256k1_asm_arm)
21+
endif()
22+
23+
if(WIN32)
24+
# Define our export symbol only for shared libs.
25+
set_target_properties(secp256k1 PROPERTIES DEFINE_SYMBOL SECP256K1_DLL_EXPORT)
26+
target_compile_definitions(secp256k1 INTERFACE $<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:SECP256K1_STATIC>)
27+
endif()
28+
29+
# Object libs don't know if they're being built for a shared or static lib.
30+
# Grab the PIC property from secp256k1 which knows.
31+
get_target_property(use_pic secp256k1 POSITION_INDEPENDENT_CODE)
32+
set_target_properties(secp256k1_precomputed PROPERTIES POSITION_INDEPENDENT_CODE ${use_pic})
33+
34+
target_include_directories(secp256k1 INTERFACE
35+
# Add the include path for parent projects so that they don't have to manually add it.
36+
$<BUILD_INTERFACE:$<$<NOT:$<BOOL:${PROJECT_IS_TOP_LEVEL}>>:${PROJECT_SOURCE_DIR}/include>>
37+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
38+
)
39+
40+
# This emulates Libtool to make sure Libtool and CMake agree on the ABI version,
41+
# see below "Calculate the version variables" in build-aux/ltmain.sh.
42+
math(EXPR ${PROJECT_NAME}_soversion "${${PROJECT_NAME}_LIB_VERSION_CURRENT} - ${${PROJECT_NAME}_LIB_VERSION_AGE}")
43+
set_target_properties(secp256k1 PROPERTIES
44+
SOVERSION ${${PROJECT_NAME}_soversion}
45+
)
46+
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
47+
set_target_properties(secp256k1 PROPERTIES
48+
VERSION ${${PROJECT_NAME}_soversion}.${${PROJECT_NAME}_LIB_VERSION_AGE}.${${PROJECT_NAME}_LIB_VERSION_REVISION}
49+
)
50+
elseif(APPLE)
51+
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.17)
52+
math(EXPR ${PROJECT_NAME}_compatibility_version "${${PROJECT_NAME}_LIB_VERSION_CURRENT} + 1")
53+
set_target_properties(secp256k1 PROPERTIES
54+
MACHO_COMPATIBILITY_VERSION ${${PROJECT_NAME}_compatibility_version}
55+
MACHO_CURRENT_VERSION ${${PROJECT_NAME}_compatibility_version}.${${PROJECT_NAME}_LIB_VERSION_REVISION}
56+
)
57+
unset(${PROJECT_NAME}_compatibility_version)
58+
elseif(BUILD_SHARED_LIBS)
59+
message(WARNING
60+
"The 'compatibility version' and 'current version' values of the DYLIB "
61+
"will diverge from the values set by the GNU Libtool. To ensure "
62+
"compatibility, it is recommended to upgrade CMake to at least version 3.17."
63+
)
64+
endif()
65+
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
66+
set(${PROJECT_NAME}_windows "secp256k1")
67+
if(MSVC)
68+
set(${PROJECT_NAME}_windows "${PROJECT_NAME}")
69+
endif()
70+
set_target_properties(secp256k1 PROPERTIES
71+
ARCHIVE_OUTPUT_NAME "${${PROJECT_NAME}_windows}"
72+
RUNTIME_OUTPUT_NAME "${${PROJECT_NAME}_windows}-${${PROJECT_NAME}_soversion}"
73+
)
74+
unset(${PROJECT_NAME}_windows)
75+
endif()
76+
unset(${PROJECT_NAME}_soversion)
77+
78+
if(SECP256K1_BUILD_BENCHMARK)
79+
add_executable(bench bench.c)
80+
target_link_libraries(bench secp256k1)
81+
add_executable(bench_internal bench_internal.c)
82+
target_link_libraries(bench_internal secp256k1_precomputed secp256k1_asm)
83+
add_executable(bench_ecmult bench_ecmult.c)
84+
target_link_libraries(bench_ecmult secp256k1_precomputed secp256k1_asm)
85+
endif()
86+
87+
if(SECP256K1_BUILD_TESTS)
88+
add_executable(noverify_tests tests.c)
89+
target_link_libraries(noverify_tests secp256k1_precomputed secp256k1_asm)
90+
add_test(NAME secp256k1_noverify_tests COMMAND noverify_tests)
91+
if(NOT CMAKE_BUILD_TYPE STREQUAL "Coverage")
92+
add_executable(tests tests.c)
93+
target_compile_definitions(tests PRIVATE VERIFY)
94+
target_link_libraries(tests secp256k1_precomputed secp256k1_asm)
95+
add_test(NAME secp256k1_tests COMMAND tests)
96+
endif()
97+
endif()
98+
99+
if(SECP256K1_BUILD_EXHAUSTIVE_TESTS)
100+
# Note: do not include secp256k1_precomputed in exhaustive_tests (it uses runtime-generated tables).
101+
add_executable(exhaustive_tests tests_exhaustive.c)
102+
target_link_libraries(exhaustive_tests secp256k1_asm)
103+
target_compile_definitions(exhaustive_tests PRIVATE $<$<NOT:$<CONFIG:Coverage>>:VERIFY>)
104+
add_test(NAME secp256k1_exhaustive_tests COMMAND exhaustive_tests)
105+
endif()
106+
107+
if(SECP256K1_BUILD_CTIME_TESTS)
108+
add_executable(ctime_tests ctime_tests.c)
109+
target_link_libraries(ctime_tests secp256k1)
110+
endif()
111+
112+
if(SECP256K1_INSTALL)
113+
install(TARGETS secp256k1
114+
EXPORT ${PROJECT_NAME}-targets
115+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
116+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
117+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
118+
)
119+
set(${PROJECT_NAME}_headers
120+
"${PROJECT_SOURCE_DIR}/include/secp256k1.h"
121+
"${PROJECT_SOURCE_DIR}/include/secp256k1_preallocated.h"
122+
)
123+
if(SECP256K1_ENABLE_MODULE_ECDH)
124+
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_ecdh.h")
125+
endif()
126+
if(SECP256K1_ENABLE_MODULE_RECOVERY)
127+
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_recovery.h")
128+
endif()
129+
if(SECP256K1_ENABLE_MODULE_EXTRAKEYS)
130+
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_extrakeys.h")
131+
endif()
132+
if(SECP256K1_ENABLE_MODULE_SCHNORRSIG)
133+
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_schnorrsig.h")
134+
endif()
135+
if(SECP256K1_ENABLE_MODULE_MUSIG)
136+
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_musig.h")
137+
endif()
138+
if(SECP256K1_ENABLE_MODULE_ELLSWIFT)
139+
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_ellswift.h")
140+
endif()
141+
install(FILES ${${PROJECT_NAME}_headers}
142+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
143+
)
144+
145+
install(EXPORT ${PROJECT_NAME}-targets
146+
FILE ${PROJECT_NAME}-targets.cmake
147+
NAMESPACE ${PROJECT_NAME}::
148+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
149+
)
150+
151+
include(CMakePackageConfigHelpers)
152+
configure_package_config_file(
153+
${PROJECT_SOURCE_DIR}/cmake/config.cmake.in
154+
${PROJECT_NAME}-config.cmake
155+
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
156+
NO_SET_AND_CHECK_MACRO
157+
)
158+
write_basic_package_version_file(${PROJECT_NAME}-config-version.cmake
159+
COMPATIBILITY SameMinorVersion
160+
)
161+
162+
install(
163+
FILES
164+
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake
165+
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake
166+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
167+
)
168+
169+
include(GeneratePkgConfigFile)
170+
generate_pkg_config_file(${PROJECT_SOURCE_DIR}/libsecp256k1.pc.in)
171+
install(
172+
FILES
173+
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc
174+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
175+
)
176+
endif()

0 commit comments

Comments
 (0)