diff --git a/contrib/devtools/CMakeLists.txt b/contrib/devtools/CMakeLists.txt
--- a/contrib/devtools/CMakeLists.txt
+++ b/contrib/devtools/CMakeLists.txt
@@ -1,5 +1,28 @@
# Copyright (c) 2019 The Bitcoin developers
+set(SPLIT_DEBUG_SCRIPT_TEMPLATE "split-debug.sh.cmake.in")
+# Make the script template executable by copying to the build directory
+file(COPY
+ "${SPLIT_DEBUG_SCRIPT_TEMPLATE}"
+ DESTINATION
+ "${CMAKE_CURRENT_BINARY_DIR}"
+ FILE_PERMISSIONS
+ OWNER_READ
+ OWNER_WRITE
+ OWNER_EXECUTE
+ GROUP_READ
+ GROUP_WRITE
+ GROUP_EXECUTE
+ WORLD_READ
+ WORLD_WRITE
+ WORLD_EXECUTE
+)
+configure_file(
+ "${CMAKE_CURRENT_BINARY_DIR}/${SPLIT_DEBUG_SCRIPT_TEMPLATE}"
+ "split-debug.sh"
+)
+file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/${SPLIT_DEBUG_SCRIPT_TEMPLATE}")
+
add_custom_target(check-devtools)
set(DEVTOOLS_TESTS_PYTHON
diff --git a/contrib/devtools/split-debug.sh.cmake.in b/contrib/devtools/split-debug.sh.cmake.in
new file mode 100644
--- /dev/null
+++ b/contrib/devtools/split-debug.sh.cmake.in
@@ -0,0 +1,12 @@
+#!/usr/bin/env bash
+
+export LC_ALL=C
+
+if [ $# -ne 3 ];
+ then echo "usage: $0 "
+fi
+
+${CMAKE_OBJCOPY} --enable-deterministic-archives -p --only-keep-debug $1 $3
+${CMAKE_OBJCOPY} --enable-deterministic-archives -p --strip-debug $1 $2
+${CMAKE_STRIP} --enable-deterministic-archives -p -s $2
+${CMAKE_OBJCOPY} --enable-deterministic-archives -p --add-gnu-debuglink=$3 $2
diff --git a/contrib/devtools/split-debug.sh.in b/contrib/devtools/split-debug.sh.in
--- a/contrib/devtools/split-debug.sh.in
+++ b/contrib/devtools/split-debug.sh.in
@@ -1,4 +1,6 @@
-#!/bin/sh
+#!/usr/bin/env bash
+
+export LC_ALL=C
if [ $# -ne 3 ];
then echo "usage: $0 "