Maintenance.cmake raw

   1  # Copyright (c) 2023-present The Bitcoin Core developers
   2  # Distributed under the MIT software license, see the accompanying
   3  # file COPYING or https://opensource.org/license/mit/.
   4  
   5  include_guard(GLOBAL)
   6  
   7  function(setup_split_debug_script)
   8    if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
   9      set(OBJCOPY ${CMAKE_OBJCOPY})
  10      set(STRIP ${CMAKE_STRIP})
  11      configure_file(
  12        contrib/devtools/split-debug.sh.in split-debug.sh
  13        FILE_PERMISSIONS OWNER_READ OWNER_EXECUTE
  14                         GROUP_READ GROUP_EXECUTE
  15                         WORLD_READ
  16        @ONLY
  17      )
  18    endif()
  19  endfunction()
  20  
  21  function(add_windows_deploy_target)
  22    if(MINGW AND TARGET bitcoin 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)
  23      find_program(MAKENSIS_EXECUTABLE makensis)
  24      if(NOT MAKENSIS_EXECUTABLE)
  25        add_custom_target(deploy
  26          COMMAND ${CMAKE_COMMAND} -E echo "Error: NSIS not found"
  27        )
  28        return()
  29      endif()
  30  
  31      # TODO: Consider replacing this code with the CPack NSIS Generator.
  32      #       See https://cmake.org/cmake/help/latest/cpack_gen/nsis.html
  33      include(GenerateSetupNsi)
  34      generate_setup_nsi()
  35      add_custom_command(
  36        OUTPUT ${PROJECT_BINARY_DIR}/bitcoin-win64-setup.exe
  37        COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/release
  38        COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin> -o ${PROJECT_BINARY_DIR}/release/$<TARGET_FILE_NAME:bitcoin>
  39        COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin-qt> -o ${PROJECT_BINARY_DIR}/release/$<TARGET_FILE_NAME:bitcoin-qt>
  40        COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoind> -o ${PROJECT_BINARY_DIR}/release/$<TARGET_FILE_NAME:bitcoind>
  41        COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin-cli> -o ${PROJECT_BINARY_DIR}/release/$<TARGET_FILE_NAME:bitcoin-cli>
  42        COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin-tx> -o ${PROJECT_BINARY_DIR}/release/$<TARGET_FILE_NAME:bitcoin-tx>
  43        COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin-wallet> -o ${PROJECT_BINARY_DIR}/release/$<TARGET_FILE_NAME:bitcoin-wallet>
  44        COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin-util> -o ${PROJECT_BINARY_DIR}/release/$<TARGET_FILE_NAME:bitcoin-util>
  45        COMMAND ${CMAKE_STRIP} $<TARGET_FILE:test_bitcoin> -o ${PROJECT_BINARY_DIR}/release/$<TARGET_FILE_NAME:test_bitcoin>
  46        COMMAND ${MAKENSIS_EXECUTABLE} -V2 ${PROJECT_BINARY_DIR}/bitcoin-win64-setup.nsi
  47        VERBATIM
  48      )
  49      add_custom_target(deploy DEPENDS ${PROJECT_BINARY_DIR}/bitcoin-win64-setup.exe)
  50    endif()
  51  endfunction()
  52  
  53  function(add_macos_deploy_target)
  54    if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND TARGET bitcoin-qt)
  55      set(macos_app "Bitcoin-Qt.app")
  56      # Populate Contents subdirectory.
  57      configure_file(${PROJECT_SOURCE_DIR}/share/qt/Info.plist.in ${macos_app}/Contents/Info.plist NO_SOURCE_PERMISSIONS)
  58      file(CONFIGURE OUTPUT ${macos_app}/Contents/PkgInfo CONTENT "APPL????")
  59      # Populate Contents/Resources subdirectory.
  60      file(CONFIGURE OUTPUT ${macos_app}/Contents/Resources/empty.lproj CONTENT "")
  61      configure_file(${PROJECT_SOURCE_DIR}/src/qt/res/icons/bitcoin.icns ${macos_app}/Contents/Resources/bitcoin.icns NO_SOURCE_PERMISSIONS COPYONLY)
  62      file(CONFIGURE OUTPUT ${macos_app}/Contents/Resources/Base.lproj/InfoPlist.strings
  63        CONTENT "{ CFBundleDisplayName = \"@CLIENT_NAME@\"; CFBundleName = \"@CLIENT_NAME@\"; }"
  64      )
  65  
  66      add_custom_command(
  67        OUTPUT ${PROJECT_BINARY_DIR}/${macos_app}/Contents/MacOS/Bitcoin-Qt
  68        COMMAND ${CMAKE_COMMAND} --install ${PROJECT_BINARY_DIR} --config $<CONFIG> --component bitcoin-qt --prefix ${macos_app}/Contents/MacOS --strip
  69        COMMAND ${CMAKE_COMMAND} -E rename ${macos_app}/Contents/MacOS/bin/$<TARGET_FILE_NAME:bitcoin-qt> ${macos_app}/Contents/MacOS/Bitcoin-Qt
  70        COMMAND ${CMAKE_COMMAND} -E rm -rf ${macos_app}/Contents/MacOS/bin
  71        COMMAND ${CMAKE_COMMAND} -E rm -rf ${macos_app}/Contents/MacOS/share
  72        VERBATIM
  73      )
  74  
  75      set(macos_zip "bitcoin-macos-app")
  76      if(CMAKE_HOST_APPLE)
  77        add_custom_command(
  78          OUTPUT ${PROJECT_BINARY_DIR}/${macos_zip}.zip
  79          COMMAND Python3::Interpreter ${PROJECT_SOURCE_DIR}/contrib/macdeploy/macdeployqtplus ${macos_app} -translations-dir=${QT_TRANSLATIONS_DIR} -zip=${macos_zip}
  80          DEPENDS ${PROJECT_BINARY_DIR}/${macos_app}/Contents/MacOS/Bitcoin-Qt
  81          VERBATIM
  82        )
  83        add_custom_target(deploydir
  84          DEPENDS ${PROJECT_BINARY_DIR}/${macos_zip}.zip
  85        )
  86        add_custom_target(deploy
  87          DEPENDS ${PROJECT_BINARY_DIR}/${macos_zip}.zip
  88        )
  89      else()
  90        add_custom_command(
  91          OUTPUT ${PROJECT_BINARY_DIR}/dist/${macos_app}/Contents/MacOS/Bitcoin-Qt
  92          COMMAND ${CMAKE_COMMAND} -E env OBJDUMP=${CMAKE_OBJDUMP} $<TARGET_FILE:Python3::Interpreter> ${PROJECT_SOURCE_DIR}/contrib/macdeploy/macdeployqtplus ${macos_app} -translations-dir=${QT_TRANSLATIONS_DIR}
  93          DEPENDS ${PROJECT_BINARY_DIR}/${macos_app}/Contents/MacOS/Bitcoin-Qt
  94          VERBATIM
  95        )
  96        add_custom_target(deploydir
  97          DEPENDS ${PROJECT_BINARY_DIR}/dist/${macos_app}/Contents/MacOS/Bitcoin-Qt
  98        )
  99  
 100        find_program(ZIP_EXECUTABLE zip)
 101        if(NOT ZIP_EXECUTABLE)
 102          add_custom_target(deploy
 103            COMMAND ${CMAKE_COMMAND} -E echo "Error: ZIP not found"
 104          )
 105        else()
 106          add_custom_command(
 107            OUTPUT ${PROJECT_BINARY_DIR}/dist/${macos_zip}.zip
 108            WORKING_DIRECTORY dist
 109            COMMAND ${PROJECT_SOURCE_DIR}/cmake/script/macos_zip.sh ${ZIP_EXECUTABLE} ${macos_zip}.zip
 110            VERBATIM
 111          )
 112          add_custom_target(deploy
 113            DEPENDS ${PROJECT_BINARY_DIR}/dist/${macos_zip}.zip
 114          )
 115        endif()
 116      endif()
 117      add_dependencies(deploydir bitcoin-qt)
 118      add_dependencies(deploy deploydir)
 119    endif()
 120  endfunction()
 121