Skip to content
This repository was archived by the owner on Aug 5, 2022. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 27 additions & 2 deletions bindings/python/Android.mk
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,13 @@ LOCAL_32_BIT_ONLY := true
LOCAL_SHARED_LIBRARIES := libparameter_host
LOCAL_STATIC_LIBRARIES := libxmlserializer_host

# python is only available in 32bits for now, thus arch is forced to 32bits
PYTHON_INSTALL_PATH := prebuilts/python/$(HOST_OS)-x86/2.7.5/
PYTHON_INCLUDES_PATH := $(PYTHON_INSTALL_PATH)/include/python2.7
PYTHON_BIN_PATH := $(PYTHON_INSTALL_PATH)/bin

LOCAL_C_INCLUDES := \
prebuilts/python/linux-x86/2.7.5/include/python2.7 \
$(PYTHON_INCLUDES_PATH) \
$(HOST_OUT_HEADERS)/parameter

# The 'unused-but-set-variable' warning must be disabled because SWIG generates
Expand All @@ -74,6 +79,26 @@ LOCAL_GENERATED_SOURCES := $(generated-sources-dir)/pfw_wrap.cxx $(generated-sou

LOCAL_EXPORT_C_INCLUDE_DIRS := $(generated-sources-dir)

# Get the interpreter ld options.
ifeq ($(HOST_OS), darwin)
# Contrary to linux, on darwin, a python 64 bit executable is installed
# in the x86 prebuild directory,
# As all host libraries are 32 bit in android. We can not link and host
# python module against the prebuild python library.
#
# As a *dirty* workaround, use the system's python configuration and hope
# it will be compatible with the prebuild python interpreter used at runtime.
# To summarize the prebuild python (64 bit?) interpreter will load a
# python native module (32bit) linked with the host (32 bit ?) python library.
LOCAL_LDLIBS += $(shell python-config --ldflags)
else
# Careful, we need to invoke the android python config not the host's one.
# Unfortunately, the internal install directory of python is hardcoded to a dummy value,
# As a workaround, we need to manually add the correct path to libs to the library list.
LOCAL_LDLIBS += $(shell $(PYTHON_BIN_PATH)/python $(PYTHON_BIN_PATH)/python-config --ldflags) \
-L $(PYTHON_INSTALL_PATH)/lib/
endif

$(generated-sources-dir)/pfw_wrap.h: $(generated-sources-dir)/pfw_wrap.cxx

# The PyPfw.py file is generated in the directory given by -outdir switch, thus
Expand All @@ -82,7 +107,7 @@ $(generated-sources-dir)/pfw_wrap.cxx: $(LOCAL_PATH)/pfw.i
@echo "Generating Python binding files"
mkdir -p $(dir $@) # surprisingly, path is not generated by build system
mkdir -p $(HOST_LIBRARY_PATH)
prebuilts/misc/linux-x86_64/swig/swig \
prebuilts/misc/$(HOST_OS)-$(HOST_ARCH)/swig/swig \
-Iprebuilts/misc/common/swig/include/2.0.11/python/ \
-Iprebuilts/misc/common/swig/include/2.0.11/ \
-Wall -Werror -v -python -c++ -outdir $(HOST_LIBRARY_PATH)/ -o $@ $^
Expand Down
38 changes: 4 additions & 34 deletions parameter/Android.mk
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@ include $(CLEAR_VARS)
LOCAL_COPY_HEADERS_TO := $(common_copy_headers_to)
LOCAL_COPY_HEADERS := $(common_copy_headers)

LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)

LOCAL_CFLAGS := $(common_cflags)

LOCAL_SRC_FILES := $(common_src_files)
Expand Down Expand Up @@ -170,6 +172,8 @@ include $(CLEAR_VARS)
LOCAL_COPY_HEADERS_TO := $(common_copy_headers_to)
LOCAL_COPY_HEADERS := $(common_copy_headers)

LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)

LOCAL_CFLAGS := $(common_cflags) -O0 -ggdb

LOCAL_SRC_FILES := $(common_src_files)
Expand All @@ -188,37 +192,3 @@ LOCAL_LDLIBS += -ldl

LOCAL_CLANG := false
include $(BUILD_HOST_SHARED_LIBRARY)

################################
# Export includes for plugins (Target build)

include $(CLEAR_VARS)

LOCAL_MODULE := $(common_module)_includes
LOCAL_MODULE_OWNER := intel

LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)

LOCAL_STATIC_LIBRARIES := \
libxmlserializer \
libpfw_utility \
libxml2

include $(BUILD_STATIC_LIBRARY)

################################
# Export includes for plugins (Host build)

include $(CLEAR_VARS)

LOCAL_MODULE := $(common_module)_includes_host
LOCAL_MODULE_OWNER := intel

LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)

LOCAL_STATIC_LIBRARIES := \
libxmlserializer_host \
libpfw_utility_host \
libxml2

include $(BUILD_HOST_STATIC_LIBRARY)
42 changes: 31 additions & 11 deletions remote-processor/Socket.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,9 @@
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <sys/time.h>
#include <signal.h>

CSocket::CSocket() : _iSockFd(socket(AF_INET, SOCK_STREAM, 0))
CSocket::CSocket() : _iSockFd(socket(AF_INET, SOCK_STREAM, 0)), mSendFlag(0)
{
assert(_iSockFd != -1);

Expand All @@ -50,6 +51,19 @@ CSocket::CSocket() : _iSockFd(socket(AF_INET, SOCK_STREAM, 0))
// they are ready to be sent, instead of waiting for more data on the
// socket.
setsockopt(_iSockFd, IPPROTO_TCP, TCP_NODELAY, (char *)&iNoDelay, sizeof(iNoDelay));

// Disable sigpipe reception on send
# if not defined(SIGPIPE)
// Pipe signal does not exist, there no sigpipe to ignore on send
# elif defined(SO_NOSIGPIPE)
const int set = 1;
setsockopt(sd, SOL_SOCKET, SO_NOSIGPIPE, &set, sizeof(set));
# elif defined(MSG_NOSIGNAL)
// Use flag NOSIGNAL on send call
mSendFlag = MSG_NOSIGNAL;
# else
# error Can no disable SIGPIPE
# endif
}

CSocket::CSocket(int iSockId) : _iSockFd(iSockId)
Expand All @@ -59,7 +73,11 @@ CSocket::CSocket(int iSockId) : _iSockFd(iSockId)

CSocket::~CSocket()
{
close(_iSockFd);
// fd might be invalide if send had an error.
// valgrind displays a warning if closing an invalid fd.
if (_iSockFd != -1) {
close(_iSockFd);
}
}

// Socket address init
Expand Down Expand Up @@ -108,7 +126,7 @@ bool CSocket::read(void* pvData, uint32_t uiSize)

while (uiSize) {

int32_t iAccessedSize = ::recv(_iSockFd, &pucData[uiOffset], uiSize, MSG_NOSIGNAL);
int32_t iAccessedSize = ::recv(_iSockFd, &pucData[uiOffset], uiSize, 0);

switch (iAccessedSize) {
case 0:
Expand Down Expand Up @@ -140,17 +158,19 @@ bool CSocket::write(const void* pvData, uint32_t uiSize)

while (uiSize) {

int32_t iAccessedSize = ::send(_iSockFd, &pucData[uiOffset], uiSize, MSG_NOSIGNAL);
int32_t iAccessedSize = ::send(_iSockFd, &pucData[uiOffset], uiSize, mSendFlag);

if (iAccessedSize == -1) {
if (errno == ECONNRESET) {
// Peer has disconnected
_disconnected = true;
}
// errno == EINTR => The send system call was interrupted, try again
if (errno != EINTR) {
return false;
if (errno == EINTR) {
// The send system call was interrupted, try again
continue;
}

// An error occured, forget this socket
_disconnected = true;
close(_iSockFd);
_iSockFd = -1; // Avoid writing again on the same socket
return false;
} else {
uiSize -= iAccessedSize;
uiOffset += iAccessedSize;
Expand Down
1 change: 1 addition & 0 deletions remote-processor/Socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -108,4 +108,5 @@ class CSocket
* See hasPeerDisconnected for more details.
*/
bool _disconnected;
int mSendFlag;
};
3 changes: 2 additions & 1 deletion support/android/build_pfw_settings.mk
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ $(LOCAL_BUILT_MODULE): MY_TOOL := $(HOST_OUT)/bin/domainGenerator.py
# As of Android K, python is available as prebuilt. We can't reliably use the
# host's default python because the low-level python binding has been compiled
# against Android's Python headers.
$(LOCAL_BUILT_MODULE): MY_PYTHON := prebuilts/python/linux-x86/2.7.5/bin/python
# BTW, python is only available in 32bits for now, thus arch is forces to 32bits
$(LOCAL_BUILT_MODULE): MY_PYTHON := prebuilts/python/$(HOST_OS)-x86/2.7.5/bin/python
# The parameter-framework binding module is installed on these locations on
# Android (On 64bit machines, PyPfw.py is installed in the 'lib64' directory
# and _PyPfw.so is installed in the 'lib' directory, hence the need for these
Expand Down
21 changes: 4 additions & 17 deletions xmlserializer/Android.mk
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ include $(CLEAR_VARS)

LOCAL_SRC_FILES := $(common_src_files)

LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)

LOCAL_MODULE := $(common_module)
LOCAL_MODULE_OWNER := intel
LOCAL_MODULE_TAGS := $(common_module_tags)
Expand All @@ -86,6 +88,8 @@ include $(CLEAR_VARS)

LOCAL_SRC_FILES := $(common_src_files)

LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)

LOCAL_MODULE := $(common_module)_host
LOCAL_MODULE_OWNER := intel
LOCAL_MODULE_TAGS := $(common_module_tags)
Expand All @@ -101,20 +105,3 @@ LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)

include $(BUILD_HOST_STATIC_LIBRARY)

################################
# Export includes for plugins (Target build)
include $(CLEAR_VARS)
LOCAL_MODULE := $(common_module)_includes
LOCAL_MODULE_OWNER := intel
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)
LOCAL_STATIC_LIBRARIES := libxml2
include $(BUILD_STATIC_LIBRARY)

################################
# Export includes for plugins (Host build)
include $(CLEAR_VARS)
LOCAL_MODULE := $(common_module)_includes
LOCAL_MODULE_OWNER := intel
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)
LOCAL_STATIC_LIBRARIES := libxml2
include $(BUILD_HOST_STATIC_LIBRARY)