From 1ed581bbd2ab6950c7edc001bf565a3ebc7c86f0 Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" Date: Sun, 3 Jan 2016 23:43:56 -0800 Subject: [PATCH] Unify the build environment for Android and Apple. --- android-configure.sh | 2 +- android-make.sh | 4 -- android-push.sh | 22 ---------- android-zip.sh | 37 ----------------- apple-configure.sh | 11 +---- apple-make.sh | 22 ---------- apple.mk => build.mk | 79 ++++++++++++++++++++++++++++++++---- cycript.and.in => cycript.in | 21 +++++++--- cycript.ios.in | 23 ----------- make | 2 + 10 files changed, 91 insertions(+), 132 deletions(-) delete mode 100755 android-make.sh delete mode 100755 android-push.sh delete mode 100755 android-zip.sh delete mode 100755 apple-make.sh rename apple.mk => build.mk (76%) rename cycript.and.in => cycript.in (72%) delete mode 100644 cycript.ios.in create mode 100755 make diff --git a/android-configure.sh b/android-configure.sh index c3d9d65..e65c51a 100755 --- a/android-configure.sh +++ b/android-configure.sh @@ -6,4 +6,4 @@ mkdir -p build.and-armeabi cd build.and-armeabi cpp+=(-I../ncurses.and/include -I../readline.and -I../android -I../libffi.and/include) ldf+=(-L../ncurses.and/lib -L../readline.and -L../android/armeabi -L../libffi.and/.libs) -cfg ../configure "$@" +cfg ../configure --enable-maintainer-mode "$@" diff --git a/android-make.sh b/android-make.sh deleted file mode 100755 index 176b47c..0000000 --- a/android-make.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -set -e -cd build.and-armeabi -make "$@" diff --git a/android-push.sh b/android-push.sh deleted file mode 100755 index b7f82d4..0000000 --- a/android-push.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash -set -e - -adb shell mkdir -p /data/local/tmp/Cycript.lib/{l,u} -adb push cycript.and.in /data/local/tmp/cycript -adb shell chmod 755 /data/local/tmp/cycript - -files=() -files+=(.libs/cycript) -files+=(.libs/libcycript.so) -files+=(libcycript.jar) -files+=(libcycript.db) -files+=(../libcycript.cy) -files+=(../android/armeabi/libJavaScriptCore.so) - -for file in "${files[@]}"; do - adb push build.and-armeabi/"${file}" /data/local/tmp/Cycript.lib -done - -for term in linux unknown; do - adb push {terminfo,/data/local/tmp/Cycript.lib}/"${term:0:1}/${term}" -done diff --git a/android-zip.sh b/android-zip.sh deleted file mode 100755 index 9a50a84..0000000 --- a/android-zip.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -set -e - -version=$(git describe --always --tags --dirty="+" --match="v*" | sed -e 's@-\([^-]*\)-\([^-]*\)$$@+\1.\2@;s@^v@@;s@%@~@g') - -for abi in armeabi; do - cd "build.and-${abi}" - - rm -rf Cycript.lib - mkdir Cycript.lib - cp -a ../cycript.and.in Cycript.lib/cycript - chmod 755 Cycript.lib/cycript - - files=() - files+=(.libs/cycript) - files+=(.libs/libcycript.so) - files+=(libcycript.jar) - files+=(libcycript.db) - files+=(../libcycript.cy) - files+=(../android/armeabi/libJavaScriptCore.so) - - for file in "${files[@]}"; do - cp -a "${file}" Cycript.lib - done - - for term in linux unknown; do - mkdir -p Cycript.lib/"${term:0:1}" - cp -a {../terminfo,Cycript.lib}/"${term:0:1}/${term}" - done - - cp -af ../cycript.and.in cycript - chmod 755 cycript - - zip=Cycript_${version}_${abi}.zip - rm -f "${zip}" - zip -r9y "${zip}" cycript Cycript.lib -done diff --git a/apple-configure.sh b/apple-configure.sh index da3efc1..103b11d 100755 --- a/apple-configure.sh +++ b/apple-configure.sh @@ -23,15 +23,6 @@ set -e cd "${0%%/*}" -if ! which aclocal; then - touch aclocal.m4; fi -if ! which autoconf; then - touch configure.ac; fi -if ! which automake; then - touch Makefile.in; fi -if ! which autoheader; then - touch config.h.in; fi - flags=("$@") ccf=(-g0 -O3) @@ -43,7 +34,7 @@ xcs=$(xcode-select --print-path) mac=$(path macosx) xct="${xcs}/Toolchains/XcodeDefault.xctoolchain/usr/lib" -system=0 +system=1 function configure() { local dir=$1 diff --git a/apple-make.sh b/apple-make.sh deleted file mode 100755 index b5e445f..0000000 --- a/apple-make.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -# Cycript - The Truly Universal Scripting Language -# Copyright (C) 2009-2016 Jay Freeman (saurik) - -# GNU Affero General Public License, Version 3 {{{ -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program 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 Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# }}} - -exec make -f apple.mk "$@" diff --git a/apple.mk b/build.mk similarity index 76% rename from apple.mk rename to build.mk index a65e9ae..4190112 100644 --- a/apple.mk +++ b/build.mk @@ -32,7 +32,9 @@ deb := cycript_$(version)_iphoneos-arm.deb zip := cycript_$(version).zip cycript := -cycript += Cycript.lib/cycript +cycript += Cycript.lib/cycript-apl +cycript += Cycript.lib/cycript-a32 +cycript += Cycript.lib/libcycript.so cycript += Cycript.lib/cycript0.9 cycript += Cycript.lib/libcycript.dylib cycript += Cycript.lib/libcycript-sys.dylib @@ -40,6 +42,9 @@ cycript += Cycript.lib/libcycript-sim.dylib cycript += Cycript.lib/libcycript.cy cycript += Cycript.lib/libcycript.db cycript += Cycript.lib/libcycript.jar +cycript += Cycript.lib/libJavaScriptCore.so +cycript += Cycript.lib/l/linux +cycript += Cycript.lib/u/unknown framework := framework += Cycript @@ -52,6 +57,24 @@ links += Cycript.lib/cynject links += Cycript.lib/libsubstrate.dylib links += Cycript.lib/cycript0.9 +data := +data += Cycript.lib/libcycript.jar +data += Cycript.lib/libcycript.db +data += Cycript.lib/libcycript.cy + +local := $(data) +local += Cycript.lib/cycript-apl +local += Cycript.lib/libcycript.dylib +local += Cycript.lib/libcycript-sys.dylib +local += Cycript.lib/libcycript-sim.dylib + +android := $(data) +android += Cycript.lib/cycript-a32 +android += Cycript.lib/libcycript.so +android += Cycript.lib/libJavaScriptCore.so +android += Cycript.lib/l/linux +android += Cycript.lib/u/unknown + all := cycript $(cycript) $(framework) all: $(all) @@ -63,13 +86,13 @@ $(zip): $(all) zip: $(zip) ln -sf $< cycript.zip -$(deb): Cycript.lib/cycript Cycript.lib/libcycript.dylib Cycript.lib/libcycript.db +$(deb): Cycript.lib/cycript-apl Cycript.lib/libcycript.dylib Cycript.lib/libcycript.db rm -rf package mkdir -p package/DEBIAN sed -e 's/#/$(version)/' control.in >package/DEBIAN/control mkdir -p package/usr/{bin,lib} cp -a modules package/usr/lib/cycript0.9 - $(lipo) -extract armv6 -output package/usr/bin/cycript Cycript.lib/cycript + $(lipo) -extract armv6 -output package/usr/bin/cycript Cycript.lib/cycript-apl $(lipo) -extract armv6 -extract arm64 -output package/usr/lib/libcycript.dylib Cycript.lib/libcycript.dylib ln -s libcycript.dylib package/usr/lib/libcycript.0.dylib cp -a libcycript.cy package/usr/lib/libcycript.cy @@ -154,6 +177,24 @@ endef $(foreach arch,armv6 arm64,$(eval $(call build_arm,$(arch)))) +define build_and +.PHONY: build-and-$(1) +build-and-$(1): + $$(MAKE) -C build.and-$(1) +clean-and-$(1): + $$(MAKE) -C build.and-$(1) clean +clean += clean-and-$(1) +db += build.and-$(1)/libcycript.db +build.and-$(1)/.libs/cycript: build-and-$(1) + @ +build.and-$(1)/.libs/libcycript.so: build-and-$(1) + @ +build.and-$(1)/libcycript.db: build-and-$(1) + @ +endef + +$(foreach arch,armeabi,$(eval $(call build_and,$(arch)))) + clean: $(clean) rm -rf cycript Cycript.lib libcycript*.o @@ -167,15 +208,35 @@ Cycript.lib/libcycript.dylib: build.osx-i386/.libs/libcycript.dylib build.osx-x8 install_name_tool -change /System/Library/{,Private}Frameworks/JavaScriptCore.framework/JavaScriptCore $@ codesign -s $(codesign) $@ +Cycript.lib/libcycript.so: build.and-armeabi/.libs/libcycript.so + @mkdir -p $(dir $@) + cp -af $< $@ + +Cycript.lib/libJavaScriptCore.so: android/armeabi/libJavaScriptCore.so + @mkdir -p $(dir $@) + cp -af $< $@ + +Cycript.lib/%: terminfo/% + @mkdir -p $(dir $@) + cp -af $< $@ + %_: % @cp -af $< $@ install_name_tool -change /System/Library/{,Private}Frameworks/JavaScriptCore.framework/JavaScriptCore $@ codesign -s $(codesign) --entitlement cycript-$(word 2,$(subst ., ,$(subst -, ,$*))).xml $@ -Cycript.lib/%: build.osx-i386/.libs/%_ build.osx-x86_64/.libs/%_ build.ios-armv6/.libs/%_ +Cycript.lib/cycript-apl: build.osx-i386/.libs/cycript_ build.osx-x86_64/.libs/cycript_ build.ios-armv6/.libs/cycript_ @mkdir -p $(dir $@) $(lipo) -create -output $@ $^ +Cycript.lib/cycript-a32: build.and-armeabi/.libs/cycript + @mkdir -p $(dir $@) + cp -af $< $@ + +Cycrit.lib/libcycript.so: build.and-armeabi/.libs/libcycript.so + @mkdir -p $(dir $@) + cp -af $< $@ + Cycript.lib/libcycript-sys.dylib: @mkdir -p $(dir $@) ln -sf libcycript.dylib $@ @@ -220,19 +281,21 @@ Cycript.lib/cycript0.9: @mkdir -p $(dir $@) ln -s ../modules $@ -cycript: cycript.ios.in +cycript: cycript.in cp -af $< $@ chmod 755 $@ -local := Cycript.lib/cycript Cycript.lib/libcycript.dylib Cycript.lib/libcycript-sys.dylib Cycript.lib/libcycript-sim.dylib - debug: $(local) - DYLD_LIBRARY_PATH=Cycript.lib lldb Cycript.lib/cycript + DYLD_LIBRARY_PATH=Cycript.lib lldb Cycript.lib/cycript-apl install: $(local) sudo cp -af $(filter-out %.dylib,$^) /usr/bin sudo cp -af $(filter %.dylib,$^) /usr/lib +push: cycript $(android) + adb push cycript /data/local/tmp/cycript + adb shell mkdir -p /data/local/tmp/cycript/Cycript.lib/{l,u} + for x in $(android); do adb push $$x /data/local/tmp/$$x; done cast: $(zip) appcast.sh cycript/mac $(monotonic) $(version) $< "$(CYCRIPT_CHANGES)" diff --git a/cycript.and.in b/cycript.in similarity index 72% rename from cycript.and.in rename to cycript.in index d0638e3..077458e 100644 --- a/cycript.and.in +++ b/cycript.in @@ -1,5 +1,3 @@ -#!/system/bin/sh - # Cycript - The Truly Universal Scripting Language # Copyright (C) 2009-2016 Jay Freeman (saurik) @@ -19,6 +17,19 @@ # along with this program. If not, see . # }}} -dir=${0%/*}; if [[ ${dir} != /* ]]; then dir=$(pwd)/${dir}; fi -export TERMINFO="${dir}"/Cycript.lib; export TERM=linux -LD_LIBRARY_PATH="${dir}"/Cycript.lib exec "${dir}"/Cycript.lib/cycript "$@" +dir=${0%/*}/Cycript.lib +if [[ ${dir} != /* ]]; then + dir=$(pwd)/${dir} +fi + +if [[ -n $ANDROID_ROOT ]]; then + export LD_LIBRARY_PATH="${dir}" + export TERMINFO="${dir}" + export TERM=linux + suffix=-a32 +else + export DYLD_LIBRARY_PATH=${dir} + suffix=-apl +fi + +exec "${dir}"/cycript"${suffix}" "$@" diff --git a/cycript.ios.in b/cycript.ios.in deleted file mode 100644 index 0f6d005..0000000 --- a/cycript.ios.in +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash - -# Cycript - The Truly Universal Scripting Language -# Copyright (C) 2009-2016 Jay Freeman (saurik) - -# GNU Affero General Public License, Version 3 {{{ -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program 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 Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# }}} - -dir=$(dirname "${BASH_SOURCE[0]}") -DYLD_LIBRARY_PATH="${dir}"/Cycript.lib exec "${dir}"/Cycript.lib/cycript "$@" diff --git a/make b/make new file mode 100755 index 0000000..4f8ca36 --- /dev/null +++ b/make @@ -0,0 +1,2 @@ +#!/bin/bash +make -f build.mk -j4 "$@" -- 2.47.2