2019-05-10 13:20:40 +00:00
.PHONY : add -gcroots clean clean -nix react -native -android react -native -ios react -native -desktop test release _list
2017-12-13 21:45:49 +00:00
help : ##@other Show this help
@perl -e '$(HELP_FUN)' $( MAKEFILE_LIST)
# This is a code for automatic help generator.
# It supports ANSI colors and categories.
# To add new item into help output, simply add comments
# starting with '##'. To add category, use @category.
GREEN := $( shell tput -Txterm setaf 2)
2019-02-01 10:44:51 +00:00
RED := $( shell tput -Txterm setaf 1)
2017-12-13 21:45:49 +00:00
WHITE := $( shell tput -Txterm setaf 7)
YELLOW := $( shell tput -Txterm setaf 3)
RESET := $( shell tput -Txterm sgr0)
HELP_FUN = \
%help; \
while ( <>) { push @{ $$ help{ $$ 2 // 'options' } } , [ $$ 1, $$ 3] if /^( [ a-zA-Z\- ] +) \s *:.*\# \# ( ?:@( [ a-zA-Z\- ] +) ) ?\s ( .*) $$ / } ; \
print "Usage: make [target]\n\n" ; \
for ( sort keys %help) { \
print " ${ WHITE } $$ _: ${ RESET } \n " ; \
for ( @{ $$ help{ $$ _} } ) { \
$$ sep = " " x ( 32 - length $$ _->[ 0] ) ; \
print " ${ YELLOW } $$ _->[0] ${ RESET } $$ sep ${ GREEN } $$ _->[1] ${ RESET } \n " ; \
} ; \
print "\n" ; \
}
2019-04-12 08:36:30 +00:00
HOST_OS := $( shell uname | tr '[:upper:]' '[:lower:]' )
2017-12-13 21:45:49 +00:00
2019-05-31 18:39:53 +00:00
# Defines which variables will be kept for Nix pure shell, use semicolon as divider
export NIX_KEEP ?= BUILD_ENV
2019-03-25 16:35:01 +00:00
export NIX_CONF_DIR = $( PWD) /nix
2019-01-10 18:32:30 +00:00
2019-04-05 17:22:49 +00:00
export REACT_SERVER_PORT ?= 5001 # any value different from default 5000 will work; this has to be specified for both the Node.JS server process and the Qt process
# WARNING: This has to be located right before the targets
i f d e f I N _ N I X _ S H E L L
SHELL := env bash
e l s e
SHELL := ./nix/shell.sh
e n d i f
2017-12-13 21:45:49 +00:00
# Main targets
2019-04-05 17:22:49 +00:00
clean : SHELL := /bin /sh
2018-08-30 12:56:45 +00:00
clean : ##@prepare Remove all output folders
2019-02-01 10:44:51 +00:00
git clean -dxf -f
2018-08-30 12:56:45 +00:00
2019-04-05 17:22:49 +00:00
clean-nix : SHELL := /bin /sh
2019-03-25 16:35:01 +00:00
clean-nix : ##@prepare Remove complete nix setup
2019-05-10 13:20:40 +00:00
sudo rm -rf /nix ~/.nix-profile ~/.nix-defexpr ~/.nix-channels ~/.cache/nix ~/.status .nix-gcroots
2019-06-11 09:43:44 +00:00
watchman-clean :
watchman watch-del $( PWD)
2019-05-10 13:20:40 +00:00
add-gcroots : ##@prepare Add Nix GC roots to avoid status-react expressions being garbage collected
scripts/add-gcroots.sh
2019-03-25 16:35:01 +00:00
2019-02-01 10:44:51 +00:00
shell : ##@prepare Enter into a pre-configured shell
i f n d e f I N _ N I X _ S H E L L
2019-04-05 17:22:49 +00:00
@ENTER_NIX_SHELL
2019-02-01 10:44:51 +00:00
e l s e
@echo "Nix shell is already active"
e n d i f
2017-12-13 21:45:49 +00:00
#----------------
# Release builds
#----------------
release : release -android release -ios ##@build build release for Android and iOS
2019-04-12 08:36:30 +00:00
release-android : export TARGET_OS ?= android
2019-06-04 15:20:03 +00:00
release-android : export BUILD_ENV ?= prod
2019-04-05 17:22:49 +00:00
release-android : ##@build build release for Android
@$( MAKE) prod-build-android && \
2019-06-01 06:47:37 +00:00
cp -R translations status-modules/translations && \
cp -R status-modules node_modules/status-modules && \
2017-12-13 21:45:49 +00:00
react-native run-android --variant= release
2019-04-12 08:36:30 +00:00
release-ios : export TARGET_OS ?= ios
2019-06-04 15:20:03 +00:00
release-ios : export BUILD_ENV ?= prod
2019-04-05 17:22:49 +00:00
release-ios : ##@build build release for iOS release
2019-02-01 10:44:51 +00:00
# Open XCode inside the Nix context
2019-04-05 17:22:49 +00:00
@$( MAKE) prod-build-ios && \
2019-04-12 08:36:30 +00:00
echo "Build in XCode, see https://status.im/build_status/ for instructions" && \
2019-06-01 06:47:37 +00:00
cp -R translations status-modules/translations && \
cp -R status-modules node_modules/status-modules && \
2019-02-01 10:44:51 +00:00
open ios/StatusIm.xcworkspace
2017-12-13 21:45:49 +00:00
2019-04-12 08:36:30 +00:00
release-desktop : export TARGET_OS ?= $( HOST_OS )
2019-04-05 17:22:49 +00:00
release-desktop : ##@build build release for desktop release
@$( MAKE) prod-build-desktop && \
2019-06-01 06:47:37 +00:00
cp -R translations status-modules/translations && \
cp -R status-modules node_modules/status-modules && \
2018-09-13 09:44:33 +00:00
scripts/build-desktop.sh
2019-04-12 08:36:30 +00:00
release-windows-desktop : export TARGET_OS ?= windows
2019-04-05 17:22:49 +00:00
release-windows-desktop : ##@build build release for desktop release
@$( MAKE) prod-build-desktop && \
2019-06-01 06:47:37 +00:00
cp -R translations status-modules/translations && \
cp -R status-modules node_modules/status-modules && \
2019-04-12 14:38:08 +00:00
scripts/build-desktop.sh
2018-09-26 14:40:41 +00:00
2019-05-07 15:57:30 +00:00
prod-build : export TARGET_OS ?= all
2019-04-05 17:22:49 +00:00
prod-build :
scripts/prepare-for-platform.sh android && \
scripts/prepare-for-platform.sh ios && \
2018-01-22 17:35:48 +00:00
lein prod-build
2019-04-12 08:36:30 +00:00
prod-build-android : export TARGET_OS ?= android
2019-05-31 18:39:53 +00:00
prod-build-android : export BUILD_ENV ?= prod
2019-04-05 17:22:49 +00:00
prod-build-android :
2019-05-31 18:39:53 +00:00
lein prod-build-android && \
2019-06-04 15:20:03 +00:00
node prepare-modules.js
2018-02-06 18:10:35 +00:00
2019-04-12 08:36:30 +00:00
prod-build-ios : export TARGET_OS ?= ios
2019-05-31 18:39:53 +00:00
prod-build-ios : export BUILD_ENV ?= prod
2019-04-05 17:22:49 +00:00
prod-build-ios :
2019-05-31 18:39:53 +00:00
lein prod-build-ios && \
2019-06-04 15:20:03 +00:00
node prepare-modules.js
2018-02-06 18:10:35 +00:00
2019-05-07 15:57:30 +00:00
prod-build-desktop : export TARGET_OS ?= $( HOST_OS )
2019-05-31 18:39:53 +00:00
prod-build-desktop : export BUILD_ENV ?= prod
2019-04-05 17:22:49 +00:00
prod-build-desktop :
git clean -qdxf -f ./index.desktop.js desktop/ && \
2019-05-31 18:39:53 +00:00
lein prod-build-desktop && \
2019-06-04 15:20:03 +00:00
node prepare-modules.js
2018-09-13 09:44:33 +00:00
2017-12-13 21:45:49 +00:00
#--------------
# REPL
# -------------
2019-04-05 17:22:49 +00:00
_watch-% : ##@watch Start development for device
2019-02-01 10:44:51 +00:00
$( eval SYSTEM := $( word 2, $( subst -, , $@ ) ) )
$( eval DEVICE := $( word 3, $( subst -, , $@ ) ) )
clj -R:dev build.clj watch --platform $( SYSTEM) --$( SYSTEM) -device $( DEVICE)
2018-07-17 15:59:18 +00:00
2019-04-12 08:36:30 +00:00
watch-ios-real : export TARGET_OS ?= ios
2019-02-01 10:44:51 +00:00
watch-ios-real : _watch -ios -real ##@watch Start development for iOS real device
2018-07-17 15:59:18 +00:00
2019-04-12 08:36:30 +00:00
watch-ios-simulator : export TARGET_OS ?= ios
2019-02-01 10:44:51 +00:00
watch-ios-simulator : _watch -ios -simulator ##@watch Start development for iOS simulator
2017-12-13 21:45:49 +00:00
2019-04-12 08:36:30 +00:00
watch-android-real : export TARGET_OS ?= android
2019-02-01 10:44:51 +00:00
watch-android-real : _watch -android -real ##@watch Start development for Android real device
2017-12-13 21:45:49 +00:00
2019-04-12 08:36:30 +00:00
watch-android-avd : export TARGET_OS ?= android
2019-02-01 10:44:51 +00:00
watch-android-avd : _watch -android -avd ##@watch Start development for Android AVD
2019-04-12 08:36:30 +00:00
watch-android-genymotion : export TARGET_OS ?= android
2019-02-01 10:44:51 +00:00
watch-android-genymotion : _watch -android -genymotion ##@watch Start development for Android Genymotion
2017-12-13 21:45:49 +00:00
2019-04-12 08:36:30 +00:00
watch-desktop : export TARGET_OS ?= $( HOST_OS )
2018-10-23 12:17:37 +00:00
watch-desktop : ##@watch Start development for Desktop
clj -R:dev build.clj watch --platform desktop
2019-04-12 08:36:30 +00:00
desktop-server : export TARGET_OS ?= $( HOST_OS )
2019-04-05 17:22:49 +00:00
desktop-server :
node ubuntu-server.js
2017-12-13 21:45:49 +00:00
#--------------
# Run
# -------------
2019-04-05 17:22:49 +00:00
_run-% :
2019-02-01 10:44:51 +00:00
$( eval SYSTEM := $( word 2, $( subst -, , $@ ) ) )
2019-04-01 20:07:39 +00:00
npx react-native run-$( SYSTEM)
2017-12-13 21:45:49 +00:00
2019-04-12 08:36:30 +00:00
run-android : export TARGET_OS ?= android
2019-04-05 17:22:49 +00:00
run-android : ##@run Run Android build
2019-04-01 20:07:39 +00:00
npx react-native run-android --appIdSuffix debug
2019-02-01 10:44:51 +00:00
2019-04-12 08:36:30 +00:00
run-desktop : export TARGET_OS ?= $( HOST_OS )
2019-02-01 10:44:51 +00:00
run-desktop : _run -desktop ##@run Run Desktop build
2018-10-23 12:17:37 +00:00
2018-06-08 11:44:11 +00:00
SIMULATOR =
2019-04-12 08:36:30 +00:00
run-ios : export TARGET_OS ?= ios
2019-04-05 17:22:49 +00:00
run-ios : ##@run Run iOS build
2018-06-06 13:47:28 +00:00
i f n e q ( "$(SIMULATOR)" , "" )
2019-04-01 20:07:39 +00:00
npx react-native run-ios --simulator= " $( SIMULATOR) "
2018-06-06 13:47:28 +00:00
e l s e
2019-04-01 20:07:39 +00:00
npx react-native run-ios
2018-06-06 13:47:28 +00:00
e n d i f
2017-12-13 21:45:49 +00:00
2017-12-23 09:36:25 +00:00
#--------------
# Tests
#--------------
2019-04-05 17:22:49 +00:00
test : ##@test Run tests once in NodeJS
2017-12-23 09:36:25 +00:00
lein with-profile test doo node test once
2019-04-05 17:22:49 +00:00
test-auto : ##@test Run tests in interactive (auto) mode in NodeJS
2017-12-23 09:36:25 +00:00
lein with-profile test doo node test
2017-12-13 21:45:49 +00:00
#--------------
# Other
#--------------
2019-05-07 15:57:30 +00:00
react-native-desktop : export TARGET_OS ?= $( HOST_OS )
react-native-desktop : ##@other Start react native packager
@scripts/start-react-native.sh
react-native-android : export TARGET_OS ?= android
react-native-android : ##@other Start react native packager for Android client
@scripts/start-react-native.sh
react-native-ios : export TARGET_OS ?= ios
react-native-ios : ##@other Start react native packager for Android client
2018-11-23 08:56:31 +00:00
@scripts/start-react-native.sh
2017-12-13 21:45:49 +00:00
2019-04-12 08:36:30 +00:00
geth-connect : export TARGET_OS ?= android
2019-04-05 17:22:49 +00:00
geth-connect : ##@other Connect to Geth on the device
adb forward tcp:8545 tcp:8545 && \
2017-12-13 21:45:49 +00:00
build/bin/geth attach http://localhost:8545
2019-04-12 08:36:30 +00:00
android-ports : export TARGET_OS ?= android
2019-04-05 17:22:49 +00:00
android-ports : ##@other Add proxies to Android Device/Simulator
adb reverse tcp:8081 tcp:8081 && \
adb reverse tcp:3449 tcp:3449 && \
adb reverse tcp:4567 tcp:4567 && \
2018-09-30 06:22:33 +00:00
adb forward tcp:5561 tcp:5561
2018-04-10 08:29:18 +00:00
2019-04-12 08:36:30 +00:00
android-logcat : export TARGET_OS ?= android
2019-04-05 17:22:49 +00:00
android-logcat :
2018-11-20 18:36:11 +00:00
adb logcat | grep -e StatusModule -e ReactNativeJS -e StatusNativeLogs
2018-03-13 11:55:42 +00:00
2019-04-05 17:22:49 +00:00
_list : SHELL := /bin /sh
2019-01-29 18:46:11 +00:00
_list :
@$( MAKE) -pRrq -f $( lastword $( MAKEFILE_LIST) ) : 2>/dev/null | awk -v RS = -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$'
2019-04-05 17:22:49 +00:00
_unknown-startdev-target-% : SHELL := /bin /sh
2019-01-29 18:46:11 +00:00
_unknown-startdev-target-% :
2019-04-12 08:36:30 +00:00
@ echo " Unknown target device ' $* '. Supported targets: " ; \
${ MAKE } _list | grep "watch-" | sed s/watch-/startdev-/; \
exit 1
2019-01-29 18:46:11 +00:00
2019-04-05 17:22:49 +00:00
_startdev-% :
2018-03-13 11:55:42 +00:00
$( eval SYSTEM := $( word 2, $( subst -, , $@ ) ) )
$( eval DEVICE := $( word 3, $( subst -, , $@ ) ) )
2019-01-29 18:46:11 +00:00
@ if [ -z " $( DEVICE) " ] ; then \
2019-02-01 10:44:51 +00:00
$( MAKE) watch-$( SYSTEM) || $( MAKE) _unknown-startdev-target-$@ ; \
2018-11-29 16:59:05 +00:00
else \
2019-02-01 10:44:51 +00:00
$( MAKE) watch-$( SYSTEM) -$( DEVICE) || $( MAKE) _unknown-startdev-target-$@ ; \
2018-11-29 16:59:05 +00:00
fi
2019-01-29 18:46:11 +00:00
2019-04-12 08:36:30 +00:00
startdev-android-avd : export TARGET_OS ?= android
2019-01-29 18:46:11 +00:00
startdev-android-avd : _startdev -android -avd
2019-04-12 08:36:30 +00:00
startdev-android-genymotion : export TARGET_OS ?= android
2019-01-29 18:46:11 +00:00
startdev-android-genymotion : _startdev -android -genymotion
2019-04-12 08:36:30 +00:00
startdev-android-real : export TARGET_OS ?= android
2019-01-29 18:46:11 +00:00
startdev-android-real : _startdev -android -real
2019-04-12 08:36:30 +00:00
startdev-desktop : export TARGET_OS ?= $( HOST_OS )
2019-01-29 18:46:11 +00:00
startdev-desktop : _startdev -desktop
2019-04-12 08:36:30 +00:00
startdev-ios-real : export TARGET_OS ?= ios
2019-01-29 18:46:11 +00:00
startdev-ios-real : _startdev -ios -real
2019-04-12 08:36:30 +00:00
startdev-ios-simulator : export TARGET_OS ?= ios
2019-01-29 18:46:11 +00:00
startdev-ios-simulator : _startdev -ios -simulator