summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2014-06-06 17:48:06 (GMT)
committerBrad King <brad.king@kitware.com>2014-06-06 18:03:42 (GMT)
commit42f74df6d4ffca8f6f08dfe191e441173be0f270 (patch)
tree9a0ebb2e87ace4a37eb7ac671f0b5c2e29e74a6a
parent618b7df5bf7767561822c1673a9640860a2613a1 (diff)
downloadCMake-42f74df6d4ffca8f6f08dfe191e441173be0f270.zip
CMake-42f74df6d4ffca8f6f08dfe191e441173be0f270.tar.gz
CMake-42f74df6d4ffca8f6f08dfe191e441173be0f270.tar.bz2
Add basic Android platform module
Create a Platform/Android module that includes Platform/Linux since Android is based on Linux. Provide only the minimal settings needed to get builds with Android NDK toolchains to work. Disable use of RPATH since the Android loader ignores it and we cannot predict the install destination anyway. Android supports soname but shared library names must end in ".so" and we cannot represent the versioned names with associated symlinks on all host operating systems anyway. However, we do want the SONAME of library files to be set so that linking to them by path to the library file produces NEEDED entries with the soname and not the path. Add a new CMAKE_PLATFORM_NO_VERSIONED_SONAME setting to tell the cmTarget::GetLibraryNames method that not to use the VERSION or SOVERSION target properties in the soname.
-rw-r--r--Modules/Platform/Android.cmake9
-rw-r--r--Source/cmTarget.cxx1
2 files changed, 10 insertions, 0 deletions
diff --git a/Modules/Platform/Android.cmake b/Modules/Platform/Android.cmake
new file mode 100644
index 0000000..e6d4fcf
--- /dev/null
+++ b/Modules/Platform/Android.cmake
@@ -0,0 +1,9 @@
+include(Platform/Linux)
+
+# Android has soname, but binary names must end in ".so" so we cannot append
+# a version number. Also we cannot portably represent symlinks on the host.
+set(CMAKE_PLATFORM_NO_VERSIONED_SONAME 1)
+
+# Android reportedly ignores RPATH, and we cannot predict the install
+# location anyway.
+set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "")
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 15acfdd..8143556 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -4348,6 +4348,7 @@ void cmTarget::GetLibraryNames(std::string& name,
const char* version = this->GetProperty("VERSION");
const char* soversion = this->GetProperty("SOVERSION");
if(!this->HasSOName(config) ||
+ this->Makefile->IsOn("CMAKE_PLATFORM_NO_VERSIONED_SONAME") ||
this->IsFrameworkOnApple())
{
// Versioning is supported only for shared libraries and modules,