summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/yap/cmake/Disassemble.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/yap/cmake/Disassemble.cmake')
-rw-r--r--src/boost/libs/yap/cmake/Disassemble.cmake71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/boost/libs/yap/cmake/Disassemble.cmake b/src/boost/libs/yap/cmake/Disassemble.cmake
new file mode 100644
index 00000000..93f6e9a5
--- /dev/null
+++ b/src/boost/libs/yap/cmake/Disassemble.cmake
@@ -0,0 +1,71 @@
+# Copyright Louis Dionne 2016
+# Copyright Zach Laine 2016
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+#
+#
+# This CMake module provides a way to get the disassembly of a function within
+# an executable created with `add_executable`. The module provides a `disassemble`
+# function that creates a target which, when built, outputs the disassembly of
+# the given function within an executable to standard output.
+#
+# Parameters
+# ----------
+# target:
+# The name of the target to create. Building this target will generate the
+# requested disassembly.
+#
+# EXECUTABLE executable:
+# The name of an executable to disassemble. This must be the name of a valid
+# executable that was created with `add_executable`. The disassembly target
+# thus created will be made dependent on the executable, so that it is built
+# automatically when the disassembly is requested.
+#
+# FUNCTION function-name:
+# The name of the function to disassemble in the executable.
+#
+# [ALL]:
+# If provided, the generated target is included in the 'all' target.
+#
+function(disassemble target)
+ cmake_parse_arguments(ARGS "ALL" # options
+ "EXECUTABLE;FUNCTION" # 1 value args
+ "" # multivalued args
+ ${ARGN})
+
+ if (NOT ARGS_EXECUTABLE)
+ message(FATAL_ERROR "The `EXECUTABLE` argument must be provided.")
+ endif()
+ if (NOT TARGET ${ARGS_EXECUTABLE})
+ message(FATAL_ERROR "The `EXECUTABLE` argument must be the name of a valid "
+ "executable created with `add_executable`.")
+ endif()
+
+ if (NOT ARGS_FUNCTION)
+ message(FATAL_ERROR "The `FUNCTION` argument must be provided.")
+ endif()
+
+ if (ARGS_ALL)
+ set(ARGS_ALL "ALL")
+ else()
+ set(ARGS_ALL "")
+ endif()
+
+ if (DISASSEMBLE_lldb)
+ add_custom_target(${target} ${ARGS_ALL}
+ COMMAND ${DISASSEMBLE_lldb} -f $<TARGET_FILE:${ARGS_EXECUTABLE}>
+ -o "disassemble --name ${ARGS_FUNCTION}"
+ -o quit
+ DEPENDS ${ARGS_EXECUTABLE}
+ )
+ elseif(DISASSEMBLE_gdb)
+ add_custom_target(${target} ${ARGS_ALL}
+ COMMAND ${DISASSEMBLE_gdb} -batch -se $<TARGET_FILE:${ARGS_EXECUTABLE}>
+ -ex "disassemble ${ARGS_FUNCTION}"
+ DEPENDS ${ARGS_EXECUTABLE}
+ )
+ endif()
+endfunction()
+
+find_program(DISASSEMBLE_gdb gdb)
+find_program(DISASSEMBLE_lldb lldb)