mirror of
https://github.com/eclipse/upm.git
synced 2025-03-14 20:47:30 +03:00

This commit moves common SWIG syntax to a ${libname}.i for sensor libraries. Much of the swig content was originally duplicated for each wrapper language which has lead to inconsistencies between wrappers over time. This commit moves all swig syntax to a common file. Language specific swig syntax can be added with #ifdef SWIG<LANGUAGE>. The src/CMakeLists.txt will look first for a language-specific .i file, then fall back to ${libname}.i. In this way, it's possible to override the common ${libname}.i file. If a fallback .i file does NOT exist, UPM CMake will generate a simple interface file for all languages. Example: If no src/abp/pyupm_abp.i and no src/abp/abp.i then generate ${CMAKE_CURRENT_BINARY_DIR}/abp.i When src/CMakeLists.txt uses a common ${libname}.i, it adds a -module <language>upm_${libname} to the swig command line. In the example below, a -module argument is provided for both Java and Javascript, while the python module takes all syntax from pyupm_abp.i. SWIG FILE Language CMake added SWIG args --------------- ---------- --------------------- src/abp/abp.i java -module javaupm_abp src/abp/abp.i javascript -module jsupm_abp src/abp/pyupm_abp.i python This commit removes ~4500 redundant lines for the UPM repository and helps promote uniformity for the SWIG'ed languages. Signed-off-by: Noel Eck <noel.eck@intel.com>
162 lines
5.3 KiB
Bash
Executable File
162 lines
5.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# The script is used to build .aar packages for Upm modules.
|
|
#
|
|
# Author: Nicolas Oliver <dario.n.oliver@intel.com>
|
|
#
|
|
# All environment variables used are passed from docker-compose.
|
|
# Those environment variables can also be declared in the host,
|
|
# and this script can be used to build .aar packages without using
|
|
# docker-compose.
|
|
#
|
|
# Environment variables:
|
|
# - NDK_HOME - Path to Android NDK install folder. i.e. /opt/android-ndk-r14b/
|
|
# - MRAA_INSTALL_DIR - Path to Mraa library install folder. i.e /opt/mraa/install/
|
|
# - JAVA_HOME - Path to Java install folder. i.e. /usr/lib/jvm/java-8-openjdk-amd64/
|
|
#
|
|
# IMPORTANT: MRAA_INSTALL_DIR must contain an mraa version built for Android Things.
|
|
set -e
|
|
|
|
# Check required environment variables and exit if they are not set
|
|
function check_environment {
|
|
VAR_NAME=$1
|
|
VAR_VALUE=$2
|
|
# Check required parameters
|
|
VAR_NAME=${VAR_NAME:?value not provided}
|
|
# Chek if variable is set
|
|
if [ -z "${VAR_VALUE}" ]; then
|
|
echo "Required environment variable ${VAR_NAME} is not defined. Exiting..."
|
|
exit 1;
|
|
else
|
|
echo "Required environment variable ${VAR_NAME} is set."
|
|
fi
|
|
}
|
|
|
|
# Check for required environment variables
|
|
check_environment "NDK_HOME" ${NDK_HOME}
|
|
check_environment "MRAA_INSTALL_DIR" ${MRAA_INSTALL_DIR}
|
|
check_environment "JAVA_HOME" ${JAVA_HOME}
|
|
|
|
PKG_CONFIG_LIBDIR="$NDK_HOME/platforms/android-24/arch-x86/usr/lib"
|
|
PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR":$MRAA_INSTALL_DIR/lib/pkgconfig/"
|
|
export PKG_CONFIG_LIBDIR
|
|
|
|
cmake \
|
|
-DANDROID_COMPILER_FLAGS_CXX='-std=c++11' \
|
|
-DANDROID_PIE=1 \
|
|
-DANDROID_PLATFORM=android-24 \
|
|
-DANDROID_STL_FORCE_FEATURES=ON \
|
|
-DANDROID_STL=c++_shared \
|
|
-DANDROID_TOOLCHAIN_NAME=x86-i686 \
|
|
-DCMAKE_TOOLCHAIN_FILE=$NDK_HOME/build/cmake/android.toolchain.cmake \
|
|
-DCMAKE_FIND_ROOT_PATH=$MRAA_INSTALL_DIR \
|
|
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
|
-DJAVA_AWT_INCLUDE_PATH=$JAVA_HOME/include \
|
|
-DJAVA_AWT_LIBRARY=$JAVA_HOME/jre/lib/amd64/libjawt.so \
|
|
-DJAVA_INCLUDE_PATH=$JAVA_HOME/include \
|
|
-DJAVA_INCLUDE_PATH2=$JAVA_HOME/include/linux \
|
|
-DJAVA_JVM_LIBRARY=$JAVA_HOME/jre/lib/amd64/server/libjvm.so \
|
|
-DBUILDSWIGJAVA=$BUILDSWIGJAVA \
|
|
-DBUILDSWIGNODE=$BUILDSWIGNODE \
|
|
-DBUILDSWIGPYTHON=$BUILDSWIGPYTHON \
|
|
-DWERROR=$WERROR \
|
|
-H. \
|
|
-Bbuild
|
|
|
|
make -j8 -Cbuild
|
|
|
|
# Anotate the .java src from doxygen
|
|
find src/ -name "*.i" > build/upm.i.list
|
|
#../doxy/doxyport build/upm.i.list \
|
|
# -s src/interfaces/,src/bacnetmstp,src/bmg160,src/bma250e,src/bmm150 \
|
|
# -m doxy/samples.mapping.txt \
|
|
# -d build/src/ \
|
|
# --convert-protected-to-private \
|
|
# -o build/upm-java-files.txt \
|
|
# -c build/compile_commands.json
|
|
|
|
gen_and_upload() {
|
|
# Skip any directories without .java src files
|
|
if [ ! -f *.java ]; then
|
|
return
|
|
fi
|
|
|
|
# Get the MRAA version string from the .pom file
|
|
VERSION=$(ls *.pom | perl -nle 'print $2 if /^(.*)-(\d+\.\d+\.\d+)\.pom/')
|
|
# Get the MRAA name string from the .pom file
|
|
LIB_NAME=$(ls *.pom | perl -nle 'print $1 if /^(.*)-(\d+\.\d+\.\d+)\.pom/')
|
|
|
|
# Bundle upload directory
|
|
PKG_BUNDLE_DIR=BUNDLE_DIR
|
|
mkdir -p ${PKG_BUNDLE_DIR}
|
|
|
|
# Create the aar directory structure
|
|
AAR_DIRECTORY="$LIB_NAME-$VERSION"
|
|
mkdir -p $AAR_DIRECTORY/jni/x86
|
|
mkdir -p $AAR_DIRECTORY/res/values
|
|
|
|
# Write out res/values/values.xml to the aar
|
|
echo "${values_xml/XXX_LIBRARY/$LIB_NAME}" > $AAR_DIRECTORY/res/values/values.xml
|
|
|
|
# Write out AndroidManifest.xml to the aar
|
|
_tmp_manifest=${AndroidManifest_xml/XXX_PACKAGE/$JAVA_PKG_PREFIX_DOT}
|
|
_tmp_manifest=${_tmp_manifest/XXX_LIBRARY/$LIB_NAME}
|
|
echo "${_tmp_manifest/XXX_VERSION/$VERSION}" > $AAR_DIRECTORY/AndroidManifest.xml
|
|
|
|
# Copy over the so's
|
|
cp *.so $AAR_DIRECTORY/jni/x86
|
|
|
|
# Create javadoc jar
|
|
javadoc *.java -d $LIB_NAME-javadoc
|
|
jar cf $PKG_BUNDLE_DIR/$LIB_NAME-$VERSION-javadoc.jar $LIB_NAME-javadoc/*
|
|
|
|
# Create sources jar file for upload
|
|
jar cf $PKG_BUNDLE_DIR/$LIB_NAME-$VERSION-sources.jar *.java
|
|
|
|
# Copy pom file
|
|
cp $LIB_NAME-$VERSION.pom $PKG_BUNDLE_DIR
|
|
|
|
# Copy the java module jar to classes.jar
|
|
cp $LIB_NAME.jar $AAR_DIRECTORY/classes.jar
|
|
|
|
# Create the .aar
|
|
pushd $AAR_DIRECTORY
|
|
jar cf ../$PKG_BUNDLE_DIR/$LIB_NAME-$VERSION.aar *
|
|
popd
|
|
|
|
# Create the bundle file
|
|
pushd $PKG_BUNDLE_DIR
|
|
# Create the tar bundle
|
|
jar cvf ../$LIB_NAME-$VERSION-bundle.jar *
|
|
popd
|
|
}
|
|
|
|
# Template for res/values/values.xml in aar
|
|
values_xml='<?xml version="1.0" encoding="utf-8"?><resources><string name="app_name">XXX_LIBRARY</string></resources>'
|
|
|
|
# Template for AndroidManifest.xml in aar
|
|
AndroidManifest_xml='<?xml version="1.0" encoding="utf-8"?>
|
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
package="XXX_PACKAGE.XXX_LIBRARY"
|
|
android:versionCode="1"
|
|
android:versionName="XXX_VERSION" >
|
|
<uses-sdk android:minSdkVersion="23" android:targetSdkVersion="25"/>
|
|
<application android:allowBackup="true" android:label="@string/app_name" android:supportsRtl="true" />
|
|
</manifest>'
|
|
|
|
# Package prefix
|
|
JAVA_PKG_PREFIX_DOT="io.mraa.at.upm"
|
|
|
|
# Work in the UPM build directory
|
|
cd build/src
|
|
|
|
# For each directory in build/src which contains a .pom file...
|
|
for lib_dir in `ls -d */`; do
|
|
if ls $lib_dir/upm_*.pom 1> /dev/null 2>&1; then
|
|
pushd $lib_dir
|
|
# Allow for spawning multiple if necessary (&)
|
|
gen_and_upload
|
|
popd
|
|
fi
|
|
done
|