forked from bitcoin/bitcoin
-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
191 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
# Copyright (c) 2023-present The Bitcoin Core developers | ||
# Distributed under the MIT software license, see the accompanying | ||
# file COPYING or https://opensource.org/license/mit/. | ||
|
||
function(generate_setup_nsi) | ||
set(abs_top_srcdir ${PROJECT_SOURCE_DIR}) | ||
set(abs_top_builddir ${PROJECT_BINARY_DIR}) | ||
set(PACKAGE_URL ${PROJECT_HOMEPAGE_URL}) | ||
set(PACKAGE_TARNAME "bitcoin") | ||
set(BITCOIN_GUI_NAME "bitcoin-qt") | ||
set(BITCOIN_DAEMON_NAME "bitcoind") | ||
set(BITCOIN_CLI_NAME "bitcoin-cli") | ||
set(BITCOIN_TX_NAME "bitcoin-tx") | ||
set(BITCOIN_WALLET_TOOL_NAME "bitcoin-wallet") | ||
set(BITCOIN_TEST_NAME "test_bitcoin") | ||
set(EXEEXT ${CMAKE_EXECUTABLE_SUFFIX}) | ||
configure_file(${PROJECT_SOURCE_DIR}/share/setup.nsi.in ${PROJECT_BINARY_DIR}/bitcoin-win64-setup.nsi @ONLY) | ||
endfunction() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,155 @@ | ||
# Copyright (c) 2023-present The Bitcoin Core developers | ||
# Distributed under the MIT software license, see the accompanying | ||
# file COPYING or https://opensource.org/license/mit/. | ||
|
||
include_guard(GLOBAL) | ||
|
||
function(setup_split_debug_script) | ||
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux") | ||
set(OBJCOPY ${CMAKE_OBJCOPY}) | ||
set(STRIP ${CMAKE_STRIP}) | ||
configure_file( | ||
contrib/devtools/split-debug.sh.in split-debug.sh | ||
FILE_PERMISSIONS OWNER_READ OWNER_EXECUTE | ||
GROUP_READ GROUP_EXECUTE | ||
WORLD_READ | ||
@ONLY | ||
) | ||
endif() | ||
endfunction() | ||
|
||
function(add_maintenance_targets) | ||
if(NOT PYTHON_COMMAND) | ||
return() | ||
endif() | ||
|
||
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") | ||
set(exe_format MACHO) | ||
elseif(WIN32) | ||
set(exe_format PE) | ||
else() | ||
set(exe_format ELF) | ||
endif() | ||
|
||
# In CMake, the components of the compiler invocation are separated into three distinct variables: | ||
# - CMAKE_CXX_COMPILER_LAUNCHER: a semicolon-separated list of launchers or tools to precede the compiler (e.g., env or ccache). | ||
# - CMAKE_CXX_COMPILER: the full path to the compiler binary itself (e.g., /usr/bin/clang++). | ||
# - CMAKE_CXX_COMPILER_ARG1: a string containing initial compiler options (e.g., --target=x86_64-apple-darwin -nostdlibinc). | ||
# By concatenating these variables, we form the complete command line to be passed to a Python script via the CC environment variable. | ||
list(JOIN CMAKE_CXX_COMPILER_LAUNCHER " " cxx_compiler_command) | ||
string(STRIP "${cxx_compiler_command} ${CMAKE_CXX_COMPILER}" cxx_compiler_command) | ||
string(STRIP "${cxx_compiler_command} ${CMAKE_CXX_COMPILER_ARG1}" cxx_compiler_command) | ||
add_custom_target(test-security-check | ||
COMMAND ${CMAKE_COMMAND} -E env CXX=${cxx_compiler_command} CXXFLAGS=${CMAKE_CXX_FLAGS} LDFLAGS=${CMAKE_EXE_LINKER_FLAGS} ${PYTHON_COMMAND} ${CMAKE_SOURCE_DIR}/contrib/devtools/test-security-check.py TestSecurityChecks.test_${exe_format} | ||
COMMAND ${CMAKE_COMMAND} -E env CXX=${cxx_compiler_command} CXXFLAGS=${CMAKE_CXX_FLAGS} LDFLAGS=${CMAKE_EXE_LINKER_FLAGS} ${PYTHON_COMMAND} ${CMAKE_SOURCE_DIR}/contrib/devtools/test-symbol-check.py TestSymbolChecks.test_${exe_format} | ||
VERBATIM | ||
) | ||
|
||
foreach(target IN ITEMS bitcoind bitcoin-qt bitcoin-cli bitcoin-tx bitcoin-util bitcoin-wallet test_bitcoin bench_bitcoin) | ||
if(TARGET ${target}) | ||
# Not using the TARGET_FILE generator expression because it creates excessive | ||
# target-level dependencies in the following custom targets. | ||
list(APPEND executables $<TARGET_FILE_DIR:${target}>/$<TARGET_FILE_NAME:${target}>) | ||
endif() | ||
endforeach() | ||
|
||
add_custom_target(check-symbols | ||
COMMAND ${CMAKE_COMMAND} -E echo "Running symbol and dynamic library checks..." | ||
COMMAND ${PYTHON_COMMAND} ${CMAKE_SOURCE_DIR}/contrib/devtools/symbol-check.py ${executables} | ||
VERBATIM | ||
) | ||
|
||
if(ENABLE_HARDENING) | ||
add_custom_target(check-security | ||
COMMAND ${CMAKE_COMMAND} -E echo "Checking binary security..." | ||
COMMAND ${PYTHON_COMMAND} ${CMAKE_SOURCE_DIR}/contrib/devtools/security-check.py ${executables} | ||
VERBATIM | ||
) | ||
else() | ||
add_custom_target(check-security) | ||
endif() | ||
endfunction() | ||
|
||
function(add_windows_deploy_target) | ||
if(MINGW AND TARGET bitcoin-qt AND TARGET bitcoind AND TARGET bitcoin-cli AND TARGET bitcoin-tx AND TARGET bitcoin-wallet AND TARGET bitcoin-util AND TARGET test_bitcoin) | ||
# TODO: Consider replacing this code with the CPack NSIS Generator. | ||
# See https://cmake.org/cmake/help/latest/cpack_gen/nsis.html | ||
include(GenerateSetupNsi) | ||
generate_setup_nsi() | ||
add_custom_command( | ||
OUTPUT ${CMAKE_BINARY_DIR}/bitcoin-win64-setup.exe | ||
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/release | ||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin-qt> -o ${CMAKE_BINARY_DIR}/release/$<TARGET_FILE_NAME:bitcoin-qt> | ||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoind> -o ${CMAKE_BINARY_DIR}/release/$<TARGET_FILE_NAME:bitcoind> | ||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin-cli> -o ${CMAKE_BINARY_DIR}/release/$<TARGET_FILE_NAME:bitcoin-cli> | ||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin-tx> -o ${CMAKE_BINARY_DIR}/release/$<TARGET_FILE_NAME:bitcoin-tx> | ||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin-wallet> -o ${CMAKE_BINARY_DIR}/release/$<TARGET_FILE_NAME:bitcoin-wallet> | ||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin-util> -o ${CMAKE_BINARY_DIR}/release/$<TARGET_FILE_NAME:bitcoin-util> | ||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:test_bitcoin> -o ${CMAKE_BINARY_DIR}/release/$<TARGET_FILE_NAME:test_bitcoin> | ||
COMMAND makensis -V2 ${CMAKE_BINARY_DIR}/bitcoin-win64-setup.nsi | ||
VERBATIM | ||
) | ||
add_custom_target(deploy DEPENDS ${CMAKE_BINARY_DIR}/bitcoin-win64-setup.exe) | ||
endif() | ||
endfunction() | ||
|
||
function(add_macos_deploy_target) | ||
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND TARGET bitcoin-qt) | ||
set(macos_app "Bitcoin-Qt.app") | ||
# Populate Contents subdirectory. | ||
configure_file(${PROJECT_SOURCE_DIR}/share/qt/Info.plist.in ${macos_app}/Contents/Info.plist) | ||
file(CONFIGURE OUTPUT ${macos_app}/Contents/PkgInfo CONTENT "APPL????") | ||
# Populate Contents/Resources subdirectory. | ||
file(CONFIGURE OUTPUT ${macos_app}/Contents/Resources/empty.lproj CONTENT "") | ||
configure_file(${PROJECT_SOURCE_DIR}/src/qt/res/icons/bitcoin.icns ${macos_app}/Contents/Resources/bitcoin.icns COPYONLY) | ||
file(CONFIGURE OUTPUT ${macos_app}/Contents/Resources/Base.lproj/InfoPlist.strings | ||
CONTENT "{ CFBundleDisplayName = \"@PACKAGE_NAME@\"; CFBundleName = \"@PACKAGE_NAME@\"; }" | ||
) | ||
|
||
add_custom_command( | ||
OUTPUT ${CMAKE_BINARY_DIR}/${macos_app}/Contents/MacOS/Bitcoin-Qt | ||
COMMAND ${CMAKE_COMMAND} --install ${CMAKE_BINARY_DIR} --config $<CONFIG> --component GUI --prefix ${macos_app}/Contents/MacOS --strip | ||
COMMAND ${CMAKE_COMMAND} -E rename ${macos_app}/Contents/MacOS/bin/$<TARGET_FILE_NAME:bitcoin-qt> ${macos_app}/Contents/MacOS/Bitcoin-Qt | ||
COMMAND ${CMAKE_COMMAND} -E rm -rf ${macos_app}/Contents/MacOS/bin | ||
VERBATIM | ||
) | ||
|
||
string(REPLACE " " "-" osx_volname ${PACKAGE_NAME}) | ||
if(CMAKE_HOST_APPLE) | ||
add_custom_command( | ||
OUTPUT ${CMAKE_BINARY_DIR}/${osx_volname}.zip | ||
COMMAND ${PYTHON_COMMAND} ${CMAKE_SOURCE_DIR}/contrib/macdeploy/macdeployqtplus ${macos_app} ${osx_volname} -translations-dir=${QT_TRANSLATIONS_DIR} -zip | ||
DEPENDS ${CMAKE_BINARY_DIR}/${macos_app}/Contents/MacOS/Bitcoin-Qt | ||
VERBATIM | ||
) | ||
add_custom_target(deploydir | ||
DEPENDS ${CMAKE_BINARY_DIR}/${osx_volname}.zip | ||
) | ||
add_custom_target(deploy | ||
DEPENDS ${CMAKE_BINARY_DIR}/${osx_volname}.zip | ||
) | ||
else() | ||
add_custom_command( | ||
OUTPUT ${CMAKE_BINARY_DIR}/dist/${macos_app}/Contents/MacOS/Bitcoin-Qt | ||
COMMAND OBJDUMP=${CMAKE_OBJDUMP} ${PYTHON_COMMAND} ${CMAKE_SOURCE_DIR}/contrib/macdeploy/macdeployqtplus ${macos_app} ${osx_volname} -translations-dir=${QT_TRANSLATIONS_DIR} | ||
DEPENDS ${CMAKE_BINARY_DIR}/${macos_app}/Contents/MacOS/Bitcoin-Qt | ||
VERBATIM | ||
) | ||
add_custom_target(deploydir | ||
DEPENDS ${CMAKE_BINARY_DIR}/dist/${macos_app}/Contents/MacOS/Bitcoin-Qt | ||
) | ||
|
||
find_program(ZIP_COMMAND zip REQUIRED) | ||
add_custom_command( | ||
OUTPUT ${CMAKE_BINARY_DIR}/dist/${osx_volname}.zip | ||
WORKING_DIRECTORY dist | ||
COMMAND ${PROJECT_SOURCE_DIR}/cmake/script/macos_zip.sh ${ZIP_COMMAND} ${osx_volname}.zip | ||
VERBATIM | ||
) | ||
add_custom_target(deploy | ||
DEPENDS ${CMAKE_BINARY_DIR}/dist/${osx_volname}.zip | ||
) | ||
add_dependencies(deploy deploydir) | ||
endif() | ||
endif() | ||
endfunction() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
#!/bin/sh | ||
# Copyright (c) 2024-present The Bitcoin Core developers | ||
# Distributed under the MIT software license, see the accompanying | ||
# file COPYING or https://opensource.org/license/mit/. | ||
|
||
export LC_ALL=C | ||
|
||
if [ -n "$SOURCE_DATE_EPOCH" ]; then | ||
find . -exec touch -d "@$SOURCE_DATE_EPOCH" {} + | ||
fi | ||
|
||
find . | sort | "$1" -X@ "$2" |