summaryrefslogblamecommitdiffstats
path: root/android/Makefile
blob: ed65edf6c5c17a9baccae5ff1ec855fd1dc60926 (plain) (tree)

































































































































                                                                           
                                 































































































































































































































































































                                                                                          
# 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			\