Inside Bitcoin
Opening the selected file…
Inside Bitcoin
Opening the selected file…
The code behind the network, with room to understand it.
Release published 2026-10-28 · Snapshot fetched 2026-11-01. Latest stable release at fetch time; development branches and Git history are excluded. Only the selected code window and visible folders load here.
251)252if(HAVE_SSE42)253if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")254target_compile_options(crc32c_sse42 PRIVATE "/arch:AVX")255else(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")256target_compile_options(crc32c_sse42 PRIVATE "-msse4.2")257endif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")258endif(HAVE_SSE42)260# CMake only enables PIC by default in SHARED and MODULE targets.261if(BUILD_SHARED_LIBS)262set_property(TARGET crc32c_sse42 PROPERTY POSITION_INDEPENDENT_CODE TRUE)263endif(BUILD_SHARED_LIBS)265# Must be included before CMAKE_INSTALL_INCLUDEDIR is used.266include(GNUInstallDirs)268add_library(crc32c ""269# TODO(pwnall): Move the TARGET_OBJECTS generator expressions to the PRIVATE270# section of target_sources when cmake_minimum_required becomes 3.9 or above.271$<TARGET_OBJECTS:crc32c_arm64>272$<TARGET_OBJECTS:crc32c_sse42>273)274target_sources(crc32c275PRIVATE276"${PROJECT_BINARY_DIR}/include/crc32c/crc32c_config.h"277"src/crc32c_arm64.h"278"src/crc32c_arm64_check.h"279"src/crc32c_internal.h"280"src/crc32c_portable.cc"281"src/crc32c_prefetch.h"282"src/crc32c_read_le.h"283"src/crc32c_round_up.h"284"src/crc32c_sse42.h"285"src/crc32c_sse42_check.h"286"src/crc32c.cc"288# Only CMake 3.3+ supports PUBLIC sources in targets exported by "install".289$<$<VERSION_GREATER:CMAKE_VERSION,3.2>:PUBLIC>290"include/crc32c/crc32c.h"291)293target_include_directories(crc32c294PUBLIC295$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>296$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>297)299set_property(300TARGET crc32c_arm64 crc32c_sse42 crc32c301APPEND302PROPERTY COMPILE_DEFINITIONS CRC32C_HAVE_CONFIG_H303)305set_target_properties(crc32c306PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR})308# Warnings as errors in Visual Studio for this project's targets.309if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")310set_property(TARGET crc32c APPEND PROPERTY COMPILE_OPTIONS "/WX")311set_property(TARGET crc32c_arm64 APPEND PROPERTY COMPILE_OPTIONS "/WX")312set_property(TARGET crc32c_sse42 APPEND PROPERTY COMPILE_OPTIONS "/WX")313endif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")315if(CRC32C_BUILD_TESTS)316enable_testing()318# Prevent overriding the parent project's compiler/linker settings on Windows.319set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)320set(install_gtest OFF)321set(install_gmock OFF)323# This project is tested using GoogleTest.324add_subdirectory("third_party/googletest")326# GoogleTest triggers a missing field initializers warning.327if(CRC32C_HAVE_NO_MISSING_FIELD_INITIALIZERS)328set_property(TARGET gtest329APPEND PROPERTY COMPILE_OPTIONS -Wno-missing-field-initializers)330set_property(TARGET gmock331APPEND PROPERTY COMPILE_OPTIONS -Wno-missing-field-initializers)332endif(CRC32C_HAVE_NO_MISSING_FIELD_INITIALIZERS)334add_executable(crc32c_tests "")335target_sources(crc32c_tests336PRIVATE337"${PROJECT_BINARY_DIR}/include/crc32c/crc32c_config.h"338"src/crc32c_arm64_unittest.cc"339"src/crc32c_extend_unittests.h"340"src/crc32c_portable_unittest.cc"341"src/crc32c_prefetch_unittest.cc"342"src/crc32c_read_le_unittest.cc"343"src/crc32c_round_up_unittest.cc"344"src/crc32c_sse42_unittest.cc"345"src/crc32c_unittest.cc"346"src/crc32c_test_main.cc"347)348target_link_libraries(crc32c_tests crc32c gtest)350# Warnings as errors in Visual Studio for this project's targets.351if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")352set_property(TARGET crc32c_tests APPEND PROPERTY COMPILE_OPTIONS "/WX")353endif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")355if(CRC32C_USE_GLOG)356target_link_libraries(crc32c_tests glog)357endif(CRC32C_USE_GLOG)359add_test(NAME crc32c_tests COMMAND crc32c_tests)361add_executable(crc32c_capi_tests "")362target_sources(crc32c_capi_tests363PRIVATE364"src/crc32c_capi_unittest.c"365)366target_link_libraries(crc32c_capi_tests crc32c)368# Warnings as errors in Visual Studio for this project's targets.369if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")370set_property(TARGET crc32c_capi_tests APPEND PROPERTY COMPILE_OPTIONS "/WX")372# The Windows SDK version currently on CI produces warnings when some373# headers are #included using C99 compatibility mode or above. This374# workaround can be removed once the Windows SDK on our CI is upgraded.375set_property(TARGET crc32c_capi_tests376APPEND PROPERTY COMPILE_OPTIONS "/wd5105")377endif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")379add_test(NAME crc32c_capi_tests COMMAND crc32c_capi_tests)380endif(CRC32C_BUILD_TESTS)382if(CRC32C_BUILD_BENCHMARKS)383add_executable(crc32c_bench "")384target_sources(crc32c_bench385PRIVATE386"${PROJECT_BINARY_DIR}/include/crc32c/crc32c_config.h"387"src/crc32c_benchmark.cc"388)389target_link_libraries(crc32c_bench crc32c)391# This project uses Google benchmark for benchmarking.392set(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "" FORCE)393set(BENCHMARK_ENABLE_EXCEPTIONS OFF CACHE BOOL "" FORCE)394add_subdirectory("third_party/benchmark")395target_link_libraries(crc32c_bench benchmark)397if(CRC32C_USE_GLOG)398target_link_libraries(crc32c_bench glog)399endif(CRC32C_USE_GLOG)401# Warnings as errors in Visual Studio for this project's targets.402if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")403set_property(TARGET crc32c_bench APPEND PROPERTY COMPILE_OPTIONS "/WX")404endif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")405endif(CRC32C_BUILD_BENCHMARKS)407if(CRC32C_INSTALL)408install(TARGETS crc32c409EXPORT Crc32cTargets410RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}411LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}412ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}413)414install(415FILES416"include/crc32c/crc32c.h"417DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/crc32c"418)420include(CMakePackageConfigHelpers)421configure_package_config_file(422"${PROJECT_NAME}Config.cmake.in"423"${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"424INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"425)426write_basic_package_version_file(427"${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"428COMPATIBILITY SameMajorVersion429)430install(431EXPORT Crc32cTargets432NAMESPACE Crc32c::433DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"434)435install(436FILES437"${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"438"${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"439DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"440)441endif(CRC32C_INSTALL)
Independent explanations by MyBitcoinExplorer. Not affiliated with or endorsed by Bitcoin Core. Guides are educational and do not replace the source or its tests.
Bitcoin Core source © its contributors, distributed under the MIT license. Original notices and bundled third-party licenses are retained in the source tree.