diff options
author | Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> | 2019-07-02 23:36:16 +0200 |
---|---|---|
committer | Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> | 2021-02-28 17:13:37 +0100 |
commit | 001c859880de24af0c5219a2638fff3100ee5cd2 (patch) | |
tree | 77acf4f66c89aac79c9ffc994813708a98996a39 | |
parent | e042bd9967851448e550142c4d8cdb0a557d8927 (diff) | |
download | hardware_replicant_libsamsung-ril-001c859880de24af0c5219a2638fff3100ee5cd2.tar.gz hardware_replicant_libsamsung-ril-001c859880de24af0c5219a2638fff3100ee5cd2.tar.bz2 hardware_replicant_libsamsung-ril-001c859880de24af0c5219a2638fff3100ee5cd2.zip |
Android.mk: Add support for Android 11replicant-6.0-0004-transitionreplicant-6.0-0004-rc6replicant-6.0-0004-rc5-transitionreplicant-6.0-0004-rc5replicant-6.0-0004
If we configure Replicant 11, libsamsung-ipc and libsamsung-ril
to have both libraries in /system/lib/, tools work fine on the
Galaxy SIII (GT-I9300):
# find -name libsamsung-ril.so 2>/dev/null
./system/lib/libsamsung-ril.so
# find -name libsamsung-ipc.so 2>/dev/null
./system/lib/libsamsung-ipc.so
# find -name nv_data-md5 2>/dev/null
./system/bin/nv_data-md5
# nv_data-md5
Usage: nv_data-md5 [nv_data.bin]
And libsamsung-ril tries to load libsamsung-ipc from the right
location in /system/lib/, but it fails due to the vendor and system
separation:
01-14 15:50:57.739 1475 1475 E RILD : dlopen failed:
dlopen failed: library "/system/lib/libsamsung-ril.so"
needed or dlopened by "/system/vendor/bin/hw/rild" is not
accessible for the namespace "(default)"
Adding LOCAL_PROPRIETARY_MODULE fixes that. Note that the name
of that property can be misleading here: libsamsung-ril is free
software and shall remain free software.
Instead we need to understand LOCAL_PROPRIETARY_MODULE as a way
to tell the Android build system that libsamsung-ril is not part
of the base Android code but instead that it is code that is
specific to a device, set of devices and/or Android distribution.
LOCAL_MODULE_RELATIVE_PATH cannot be used instead: even if the
binaies end up in /vendor/bin/hw/, and that the libraries ends
up in /vendor/lib/hw/, for some reasons the libraries can't be
found:
i9300:/ # /system/vendor/bin/hw/nv_data-md5
CANNOT LINK EXECUTABLE "/system/vendor/bin/hw/nv_data-md5":
library "libsamsung-ipc.so" not found: needed by main executable
And most importantly, rild has the same issue than before:
E RILD : dlopen failed: dlopen failed: library
"libsamsung-ipc.so" not found: needed by
/system/vendor/lib/hw/libsamsung-ril.so
in namespace (default)
Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
-rw-r--r-- | Android.mk | 6 | ||||
-rw-r--r-- | android_versions.mk | 39 |
2 files changed, 45 insertions, 0 deletions
@@ -19,6 +19,7 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) +include $(LOCAL_PATH)/android_versions.mk LOCAL_SRC_FILES := \ samsung-ril.c \ @@ -43,6 +44,7 @@ LOCAL_C_INCLUDES := \ $(LOCAL_PATH) \ $(LOCAL_PATH)/include \ hardware/libhardware_legacy/include \ + hardware/ril/include/ \ system/core/include LOCAL_CFLAGS := -DRIL_SHLIB @@ -56,12 +58,14 @@ LOCAL_MODULE := libsamsung-ril include $(BUILD_SHARED_LIBRARY) include $(CLEAR_VARS) +include $(LOCAL_PATH)/android_versions.mk LOCAL_SRC_FILES := srs-client/srs-client.c LOCAL_C_INCLUDES := \ $(LOCAL_PATH)/include \ $(LOCAL_PATH)/srs-client/include \ + hardware/ril/include/ \ LOCAL_SHARED_LIBRARIES := liblog libcutils @@ -72,12 +76,14 @@ LOCAL_MODULE := libsrs-client include $(BUILD_SHARED_LIBRARY) include $(CLEAR_VARS) +include $(LOCAL_PATH)/android_versions.mk LOCAL_SRC_FILES := tools/srs-test.c LOCAL_C_INCLUDES := \ $(LOCAL_PATH)/include \ $(LOCAL_PATH)/srs-client/include \ + hardware/ril/include/ \ LOCAL_SHARED_LIBRARIES := liblog libcutils libsrs-client diff --git a/android_versions.mk b/android_versions.mk new file mode 100644 index 0000000..f34ce57 --- /dev/null +++ b/android_versions.mk @@ -0,0 +1,39 @@ +# This file is part of libsamsung-ipc. +# +# Copyright (C) 2021 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> +# +# libsamsung-ipc is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# libsamsung-ipc is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with libsamsung-ipc. If not, see <http://www.gnu.org/licenses/>. + +# We need to keep the compatibility with older Replicant versions, at least for +# testing purposes: some of the devices we support in libsamsung-ipc are not +# supported (yet) in newer Android versions or recent GNU/Linux distributions, +# and doing tests on older devices might enable us to also understand better +# the modem protocol and/or the EFS. + +# To limit the amount of work, we need to avoid modifying older Android versions +# to be able to use recent libsamsung-ril and libsamsung-ipc. + +# Here's how different Android distributions behave with +# LOCAL_PROPRIETARY_MODULE := true in libsamsung-ipc's Android.mk: +# Replicant 4.2: It probably breaks the modem support +# Replicant 6.0: It break the modem support +# Replicant 9.0: The modem integration doesn't work because it was not finished +# Replicant 10.0: The modem integration doesn't work because it was not finished +# Replicant 11.0: It is required for the modem to work + +# Set a default value for build systems like Guix +PLATFORM_VERSION ?= 7 +ifneq (1,$(filter 1,$(shell echo "$$(( $$(echo $(PLATFORM_VERSION) | sed 's/\..*//g') < 7 ))" ))) + LOCAL_PROPRIETARY_MODULE := true +endif |