diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..9011403f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,6 @@ +FROM alpine +WORKDIR /mpw/gradle +ADD . /mpw + +RUN apk update && apk add libtool automake autoconf make g++ openjdk8 +RUN ./gradlew -i build diff --git a/lib/bin/build_lib b/lib/bin/build_lib index 1b9760b1..33d5d51e 100755 --- a/lib/bin/build_lib +++ b/lib/bin/build_lib @@ -151,7 +151,9 @@ _target_prepare() { # # Configure the library for building the target. # -# By default, this will run `./configure --host= --prefix=/ --disable-shared `. +# By default, this will run `./configure --host= --prefix=/ `. +# By default, some platform-specific arguments will be passed in as well as +# --enable-pic --disable-pie to ensure the resulting library can be linked again. target_configure() { _target_configure "$@"; } _target_configure() { local prefix=$1 platform=$2 arch=$3; shift 3 @@ -173,7 +175,7 @@ _target_configure() { ;; esac - ./configure ${host:+--host="$host"} --prefix="$prefix/$arch" "$@" + ./configure ${host:+--host="$host"} --enable-pic --disable-pie --prefix="$prefix/$arch" "$@" } # target_build @@ -214,27 +216,34 @@ _finalize() { finalize_merge() { _finalize_merge "$@"; } _finalize_merge() { local prefix=$1 platform=$2; shift 2 + local archs=( "$@" ) - [[ -e "$prefix/$1/include" ]] && mv -f -- "$prefix/$1/include" "$prefix/out/" + [[ -e "$prefix/$archs/include" ]] && mv -f -- "$prefix/$archs/include" "$prefix/out/" mkdir -p "$prefix/out/lib" case "$platform" in + 'linux') + for arch in "${archs[@]}"; do + install -d "$prefix/out/lib/$arch" + install -p "$prefix/$arch/lib/"*.a "$prefix/out/lib/$arch/" + done + ;; 'windows') - for arch; do + for arch in "${archs[@]}"; do install -d "$prefix/out/lib/$arch" install -p "$prefix/$arch/"*.lib "$prefix/out/lib/$arch/" done ;; 'macos'|'ios') - for lib in "$prefix/$1/lib/"*; do + for lib in "$prefix/$archs/lib/"*; do if lipo -info "$lib" >/dev/null 2>&1; then - local lib=("${lib##*/}") libs=("${@/#/$prefix/}") libs=("${libs[@]/%//lib/$lib}") + local lib=("${lib##*/}") libs=("${archs/#/$prefix/}") libs=("${libs[@]/%//lib/$lib}") lipo -create "${libs[@]}" -output "$prefix/out/lib/$lib" fi done ;; 'android') - for arch; do + for arch in "${archs[@]}"; do local abi=$arch case "$arch" in 'arm') abi='armeabi-v7a' ;; diff --git a/lib/bin/build_libjson-c-linux b/lib/bin/build_libjson-c-linux new file mode 100755 index 00000000..b3e30201 --- /dev/null +++ b/lib/bin/build_libjson-c-linux @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +source "${BASH_SOURCE%/*}/build_lib" + +autoreconf() { + command autoreconf -Iautoconf-archive/m4 "$@" +} + +build libjson-c linux diff --git a/lib/bin/build_libsodium-linux b/lib/bin/build_libsodium-linux new file mode 100755 index 00000000..f5534da7 --- /dev/null +++ b/lib/bin/build_libsodium-linux @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +source "${BASH_SOURCE%/*}/build_lib" + +build libsodium linux diff --git a/platform-independent/c/core/lib/linux/x86_64/libmpw.so b/platform-independent/c/core/lib/linux/x86_64/libmpw.so new file mode 100755 index 00000000..c435a862 Binary files /dev/null and b/platform-independent/c/core/lib/linux/x86_64/libmpw.so differ