axmol/cmake/AndroidNdkGdb.cmake

97 lines
4.3 KiB
CMake
Raw Normal View History

Squashed commit of the following: commit 59e43a3c80f4af8998e4a14f6463bd7a91617d5f Author: Ricardo Quesada <ricardoquesada@gmail.com> Date: Wed Mar 2 15:19:48 2016 -0800 uses new naming convention for projects uses _ instead of - commit f97ba56608d48b17909649c8617ba9047b566196 Author: Ricardo Quesada <ricardoquesada@gmail.com> Date: Wed Mar 2 14:49:22 2016 -0800 fooling cmake for real commit 20c2560f75eab952e5131b484284bf20cb07fe07 Author: Ricardo Quesada <ricardoquesada@gmail.com> Date: Wed Mar 2 14:43:05 2016 -0800 fooling cmake commit a0ada44bc82941830f6c71219a1492d28c28c306 Author: Ricardo Quesada <ricardoquesada@gmail.com> Date: Wed Mar 2 14:26:59 2016 -0800 makes CMake for Mac happy commit 656b4f5e2dd741215a4699db979fe1b0dce60298 Author: Ricardo Quesada <ricardoquesada@gmail.com> Date: Wed Mar 2 13:50:15 2016 -0800 linux fix commit fa98aeac8505c764f4a69f15c8a8ff1123fad2a3 Author: Ricardo Quesada <ricardoquesada@gmail.com> Date: Wed Mar 2 11:18:18 2016 -0800 links correctly! commit 9c56ce7143d3a35b44d33f246cec093ca9eaa7d9 Author: Ricardo Quesada <ricardoquesada@gmail.com> Date: Tue Mar 1 17:44:58 2016 -0800 Squashed commit of the following: commit 2ef52723dae44204c047cb177d5a5670fb659c79 Merge: 8a5c998 25cf1f1 Author: Ricardo Quesada <ricardoquesada@gmail.com> Date: Tue Mar 1 16:54:04 2016 -0800 Merge branch 'v3' into cmake_android commit 8a5c9981192e344fffc9f14be5cb14f66eccfa24 Author: Chaoren Lin <chaorenl@google.com> Date: Thu Feb 11 18:34:46 2016 -0800 Fix module name in Android template to match CMake project. commit be85e19e852a9d5fbd6c58cea60c75fe47a5a576 Author: Chaoren Lin <chaorenl@google.com> Date: Thu Feb 11 18:27:45 2016 -0800 Add missing platform specific source file to CMake project. commit 705389ac6582107a381d0cbc56268eaa98ffc5c3 Author: Chaoren Lin <chaorenl@google.com> Date: Wed Feb 10 19:21:12 2016 -0800 Find AndroidNdkModules.cmake relative to android.toolchain.cmake. commit a10075e2cb30af2e1f9a30da99efac880658ad6b Author: Chaoren Lin <chaorenl@google.com> Date: Wed Feb 10 19:03:11 2016 -0800 Remove cpp-empty-test from project templates. commit e070fcbf210b8628f75785e738202a80a95ac0ff Author: WenhaiLin <wenhai.lin@chukong-inc.com> Date: Mon Aug 31 09:56:03 2015 +0800 Fix CMake for Android Target
2016-03-03 08:51:54 +08:00
# Copyright (c) 2014, Pavel Rojtberg
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from this
# software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
# ------------------------------------------------------------------------------
# Usage:
# 1. place AndroidNdkGdb.cmake somewhere inside ${CMAKE_MODULE_PATH}
# 2. inside your project add
#
# include(AndroidNdkGdb)
# android_ndk_gdb_enable()
# # for each target
# add_library(MyLibrary ...)
# android_ndk_gdb_debuggable(MyLibrary)
# add gdbserver and general gdb configuration to project
# also create a mininal NDK skeleton so ndk-gdb finds the paths
#
# the optional parameter defines the path to the android project.
# uses PROJECT_SOURCE_DIR by default.
macro(android_ndk_gdb_enable)
if(ANDROID)
# create custom target that depends on the real target so it gets executed afterwards
add_custom_target(NDK_GDB ALL)
if(${ARGC})
set(ANDROID_PROJECT_DIR ${ARGV0})
else()
set(ANDROID_PROJECT_DIR ${PROJECT_SOURCE_DIR})
endif()
set(NDK_GDB_SOLIB_PATH ${ANDROID_PROJECT_DIR}/obj/local/${ANDROID_NDK_ABI_NAME}/)
file(MAKE_DIRECTORY ${NDK_GDB_SOLIB_PATH})
# 1. generate essential Android Makefiles
file(MAKE_DIRECTORY ${ANDROID_PROJECT_DIR}/jni)
if(NOT EXISTS ${ANDROID_PROJECT_DIR}/jni/Android.mk)
file(WRITE ${ANDROID_PROJECT_DIR}/jni/Android.mk "APP_ABI := ${ANDROID_NDK_ABI_NAME}\n")
endif()
if(NOT EXISTS ${ANDROID_PROJECT_DIR}/jni/Application.mk)
file(WRITE ${ANDROID_PROJECT_DIR}/jni/Application.mk "APP_ABI := ${ANDROID_NDK_ABI_NAME}\n")
endif()
# 2. generate gdb.setup
get_directory_property(PROJECT_INCLUDES DIRECTORY ${PROJECT_SOURCE_DIR} INCLUDE_DIRECTORIES)
string(REGEX REPLACE ";" " " PROJECT_INCLUDES "${PROJECT_INCLUDES}")
file(WRITE ${LIBRARY_OUTPUT_PATH}/gdb.setup "set solib-search-path ${NDK_GDB_SOLIB_PATH}\n")
file(APPEND ${LIBRARY_OUTPUT_PATH}/gdb.setup "directory ${PROJECT_INCLUDES}\n")
# 3. copy gdbserver executable
file(COPY ${ANDROID_NDK}/prebuilt/android-${ANDROID_ARCH_NAME}/gdbserver/gdbserver DESTINATION ${LIBRARY_OUTPUT_PATH})
endif()
endmacro()
# register a target for remote debugging
# copies the debug version to NDK_GDB_SOLIB_PATH then strips symbols of original
macro(android_ndk_gdb_debuggable TARGET_NAME)
if(ANDROID)
get_property(TARGET_LOCATION TARGET ${TARGET_NAME} PROPERTY LOCATION)
# create custom target that depends on the real target so it gets executed afterwards
add_dependencies(NDK_GDB ${TARGET_NAME})
# 4. copy lib to obj
add_custom_command(TARGET NDK_GDB POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${TARGET_LOCATION} ${NDK_GDB_SOLIB_PATH})
# 5. strip symbols
add_custom_command(TARGET NDK_GDB POST_BUILD COMMAND ${CMAKE_STRIP} ${TARGET_LOCATION})
endif()
endmacro()