# XScreenSaver for Android export TERM=dumb GRADLE = ./gradlew default:: debug all:: release clean:: $(GRADLE) clean distdepend:: # Set this to the set of platforms you want to compile for in debug mode. # E.g., if you are running an x86 emulator, there's no point in compiling # for a dozen other platforms. Release builds override this to "all". # export APP_ABI = all # TODO: # check_versions: # These hacks have interdependencies with others, so we can't build without # including them or there are link errors: # ANDROID_BASE_HACKS= \ apple2 \ bubble3d \ pacman \ polyhedra \ sonar \ sproingies \ # These are the ones that currently work, at least to some degree: # export ANDROID_HACKS= \ $(ANDROID_BASE_HACKS) \ abstractile \ anemone \ anemotaxis \ antmaze \ antspotlight \ apollonian \ atlantis \ attraction \ atunnel \ binaryring \ blaster \ blinkbox \ blitspin \ blocktube \ boing \ bouboule \ bouncingcow \ boxed \ boxfit \ braid \ bsod \ bumps \ cage \ ccurve \ celtic \ circuit \ cityflow \ cloudlife \ companioncube \ compass \ coral \ crackberg \ crumbler \ crystal \ cube21 \ cubenetic \ cubestack \ cubestorm \ cubetwist \ cubicgrid \ cwaves \ cynosure \ dangerball \ decayscreen \ deco \ deluxe \ demon \ discoball \ discrete \ distort \ dnalogo \ drift \ dymaxionmap \ endgame \ energystream \ engine \ epicycle \ eruption \ esper \ euler2d \ fadeplot \ fiberlamp \ filmleader \ fireworkx \ flame \ flipflop \ flipscreen3d \ flow \ fluidballs \ flyingtoasters \ fuzzyflakes \ galaxy \ gears \ geodesic \ geodesicgears \ gflux \ glblur \ glcells \ gleidescope \ glhanoi \ glknots \ glmatrix \ glplanet \ glschool \ glslideshow \ glsnake \ gltext \ goop \ grav \ greynetic \ halo \ handsy \ helix \ hexadrop \ hexstrut \ hilbert \ hopalong \ hypertorus \ hypnowheel \ ifs \ imsmap \ interaggregate \ interference \ intermomentary \ jigglypuff \ jigsaw \ julia \ kaleidescope \ kaleidocycle \ klein \ kumppa \ lament \ lavalite \ loop \ m6502 \ maze \ maze3d \ memscroller \ menger \ metaballs \ mirrorblob \ moebius \ moebiusgears \ moire \ moire2 \ morph3d \ mountain \ munch \ nerverot \ noof \ noseguy \ peepers \ penetrate \ penrose \ petri \ piecewise \ pinion \ pipes \ polytopes \ pong \ popsquares \ projectiveplane \ providence \ pulsar \ pyro \ quasicrystal \ queens \ raverhoop \ razzledazzle \ rd-bomb \ ripples \ rocks \ romanboy \ rorschach \ rotzoomer \ rubik \ rubikblocks \ sballs \ shadebobs \ sierpinski \ sierpinski3d \ skytentacles \ slidescreen \ slip \ spheremonics \ splitflap \ splodesic \ spotlight \ squiral \ stairs \ stonerview \ strange \ substrate \ superquadrics \ surfaces \ swirl \ tangram \ tessellimage \ thornbird \ timetunnel \ topblock \ triangle \ tronbit \ truchet \ twang \ unknownpleasures \ vermiculate \ vfeedback \ vigilance \ voronoi \ wander \ whirlwindwarp \ winduprobot \ wormhole \ xanalogtv \ xflame \ xjack \ xlyap \ xmatrix \ xrayswarm \ xspirograph \ zoom \ # These don't work well enough to turn on by default: # ANDROID_TODO= \ antinspect \ barcode \ carousel \ fliptext \ fontglide \ halftone \ juggler3d \ molecule \ pedal \ phosphor \ photopile \ polyominoes \ qix \ speedmine \ starfish \ starwars \ testx11 \ unicrud \ # Download and resize images from jwz.org. # This saves us having to include 4MB of images in the tar file # that will only be used by a vast minority of people building # from source. # Android actually wants these to be 160x160 but our source is 200x150. URL = https://www.jwz.org/xscreensaver/screenshots/ WGET = wget -q -U xscreensaver-build-android CVT = -thumbnail '150x150^' -gravity center -extent 150x150 \ \( +clone -alpha extract \ -draw 'fill black polygon 0,0 0,15 15,0 fill white circle 15,15 15,0' \ \( +clone -flip \) -compose Multiply -composite \ \( +clone -flop \) -compose Multiply -composite \ \) -alpha off -compose CopyOpacity -composite \ -colorspace sRGB \ -strip \ -quality 95 \ +dither -colors 128 # If we are making the m6502 hack, create the header file for Android m6502.h:: @for h in $(ANDROID_HACKS) ; do \ if [ $${h} = "m6502" ] ; then \ echo "Making $${h} header ..."; \ ../hacks/m6502.sh ../hacks/m6502.h ../hacks/images/m6502/*.asm ; \ echo "Made $${h} header"; \ fi; \ done xscreensaver/res/drawable/%.png: @\ FILE1=`echo "$@" | sed 's!^.*/\([^/]*\)\.png$$!\1.jpg!'` ; \ FILE2="$@" ; \ FILE1=`echo "$$FILE1" | sed s/rdbomb/rd-bomb/` ; \ FILE2=`echo "$$FILE2" | sed s/rd-bomb/rdbomb/` ; \ URL="$(URL)$$FILE1" ; \ echo "converting $$URL..." ; \ rm -f "$$FILE2" ; \ $(WGET) -O- "$$URL" | \ convert jpg:- $(CVT) "$$FILE2" ; \ if [ ! -s "$$FILE2" ]; then \ echo "$$FILE2 failed" >&2 ; \ exit 1 ; \ fi thumbs:: @for f in $(ANDROID_HACKS) $(ANDROID_TODO) ; do \ $(MAKE) xscreensaver/res/drawable/$$f.png ; \ done clean_thumbs:: @\ for f in $(ANDROID_HACKS) $(ANDROID_TODO) ; do \ rm -f xscreensaver/res/drawable/$$f.png ; \ done distclean:: clean_thumbs clean EXTRA_TARFILES = xscreensaver/res/drawable/thumbnail.png \ echo_tarfiles: @FILES=`find . $(EXTRA_TARFILES) \( \( \ -name .DS_Store \ -o -name '*~' \ -o -name '*.jks' \ -o -name '*.keystore' \ -o -name '*_dream.xml' \ -o -name '*_settings.xml' \ -o -name '*_wallpaper.xml' \ -o -name AndroidManifest.xml \ -o -name strings.xml \ -o -name settings.xml \ -o -name attrs.xml \ -o -name .gitignore \ -o -name .gradle \ -o -name drawable \ -o -name build \ -o -name gen \ -o -name libs \ -o -name obj \ \) -prune \) \ -o \( \( -type f -o -type l \) \ -print \) \ | sed 's@^\./@@' \ | sort` ; \ echo $$FILES images_png_h: cd ../hacks/images && $(MAKE) run_check:: ../hacks/check-configs.pl --build-android $(ANDROID_HACKS) debug:: m6502.h run_check images_png_h $(GRADLE) assembleDebug release:: m6502.h run_check images_png_h export APP_ABI=all ; \ $(GRADLE) assembleRelease KEYSTORE = xscreensaver.jks $(KEYSTORE): keytool -genkey -v -keystore $@ \ -alias xscreensaver -keyalg RSA -keysize 2048 -validity 10000 APK_DIR = xscreensaver/build/outputs/apk/release/ APK_UNSIGNED = $(APK_DIR)xscreensaver-release-unsigned.apk APK_UNALIGNED = $(APK_DIR)xscreensaver-release-unaligned.apk APK_SIGNED = $(APK_DIR)xscreensaver-release.apk TOOLDIR = $(shell ls -d $$HOME/Library/Android/sdk/build-tools/* | tail -1) ZIPALIGN = $(TOOLDIR)/zipalign JARSIGNER = jarsigner sign_release:: cp -p $(APK_UNSIGNED) $(APK_UNALIGNED) $(JARSIGNER) -verbose -sigalg SHA1withRSA -digestalg SHA1 \ -keystore $(KEYSTORE) $(APK_UNALIGNED) xscreensaver rm -f $(APK_SIGNED) $(ZIPALIGN) -v 4 $(APK_UNALIGNED) $(APK_SIGNED) rm -f $(APK_UNALIGNED) $(JARSIGNER) -verify -verbose -certs $(APK_SIGNED) @ls -lF $(APK_SIGNED) apk:: release @\ VERS=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' ../utils/version.h` ; \ HEAD="xscreensaver-$$VERS" ; \ if [ ! -s $(APK_SIGNED) -o $(APK_UNSIGNED) -nt $(APK_SIGNED) ]; then \ $(MAKE) sign_release ; \ fi ; \ set -x ; \ cp -p $(APK_SIGNED) ../archive/$$HEAD.apk ## #### Pare it down for faster debugging... #export APP_ABI = armeabi-v7a #export APP_ABI = x86 # #export ANDROID_HACKS= \ # $(ANDROID_BASE_HACKS) \ # bsod \ # apollonian \ # engine \ # dnalogo \ # twang \ # memscroller \ # phosphor \ # discoball \ # cubetwist \ # cubestack \ # splodesic \