2019-07-23 06:19:48 +00:00
.PHONY : nix -add -gcroots clean nix -clean disable -githooks react -native -android react -native -ios react -native -desktop test release _list _fix -node -perms
2017-12-13 21:45:49 +00:00
2019-07-23 06:19:48 +00:00
help : SHELL := /bin /sh
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
2019-06-04 16:50:29 +00:00
export _NIX_KEEP ?= BUILD_ENV
2019-03-25 16:35:01 +00:00
export NIX_CONF_DIR = $( PWD) /nix
2019-07-15 16:34:33 +00:00
# We don't want to use /run/user/$UID because it runs out of space too easilly
export TMPDIR = /tmp
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
2019-07-15 16:34:33 +00:00
#----------------
# Nix targets
#----------------
2019-04-05 17:22:49 +00:00
# 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
2019-07-23 06:19:48 +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
@ENTER_NIX_SHELL
e l s e
@echo " ${ YELLOW } Nix shell is already active $( RESET) "
e n d i f
2019-07-15 16:34:33 +00:00
nix-clean : ##@nix Remove all status-react build artifacts from /nix/store
nix/clean.sh
nix-purge : SHELL := /bin /sh
nix-purge : ##@nix Completely remove the complete Nix setup
sudo rm -rf /nix ~/.nix-profile ~/.nix-defexpr ~/.nix-channels ~/.cache/nix ~/.status .nix-gcroots
2019-07-26 14:51:06 +00:00
nix-add-gcroots : export TARGET_OS := none
2019-07-15 16:34:33 +00:00
nix-add-gcroots : ##@nix Add Nix GC roots to avoid status-react expressions being garbage collected
scripts/add-nix-gcroots.sh
2019-07-26 14:51:06 +00:00
nix-update-npm : export TARGET_OS := none
2019-07-15 16:34:33 +00:00
nix-update-npm : ##@nix Update node2nix expressions based on current package.json
nix/desktop/realm-node/generate-nix.sh
2019-07-26 14:51:06 +00:00
nix-update-gradle : export TARGET_OS := android
2019-07-15 16:34:33 +00:00
nix-update-gradle : ##@nix Update maven nix expressions based on current gradle setup
nix/mobile/android/maven-and-npm-deps/maven/generate-nix.sh
2019-07-26 14:51:06 +00:00
nix-update-lein : export TARGET_OS := none
2019-07-15 16:34:33 +00:00
nix-update-lein : ##@nix Update maven nix expressions based on current lein setup
nix/tools/lein/generate-nix.sh nix/lein
2019-07-23 06:19:48 +00:00
#----------------
# General targets
#----------------
2017-12-13 21:45:49 +00:00
2019-07-23 06:19:48 +00:00
_fix-node-perms : SHELL := /bin /sh
_fix-node-perms : ##@prepare Fix permissions so that directory can be cleaned
2019-06-04 16:50:29 +00:00
$( shell test -d node_modules && chmod -R 744 node_modules)
$( shell test -d node_modules.tmp && chmod -R 744 node_modules.tmp)
2019-04-05 17:22:49 +00:00
clean : SHELL := /bin /sh
2019-07-23 06:19:48 +00:00
clean : _fix -node -perms ##@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-06-04 16:50:29 +00:00
watchman-clean : export _NIX_ATTR := targets .watchman .shell
2019-07-23 06:19:48 +00:00
watchman-clean : ##@prepare Delete repo directory from watchman
2019-06-04 16:50:29 +00:00
watchman watch-del $$ { STATUS_REACT_HOME}
2019-03-25 16:35:01 +00:00
2019-07-23 06:19:48 +00:00
disable-githooks : SHELL := /bin /sh
disable-githooks : ##@prepare Disables lein githooks
@rm -f ${ env .WORKSPACE } /.git/hooks/pre-commit && \
sed -i'~' -e 's|\[rasom/lein-githooks|;; [rasom/lein-githooks|' \
-e 's|:githooks|;; :githooks|' \
-e 's|:pre-commit|;; :pre-commit|' project.clj; \
rm project.clj~
2019-02-01 10:44:51 +00:00
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-07-15 16:34:33 +00:00
release-android : export BUILD_TYPE ?= nightly
release-android : export NDK_ABI_FILTERS ?= armeabi -v 7a ;arm 64-v 8a ;x 86
release-android : export STORE_FILE ?= ~/.gradle /status -im .keystore
2019-04-05 17:22:49 +00:00
release-android : ##@build build release for Android
2019-07-15 16:34:33 +00:00
nix/build.sh targets.mobile.$( TARGET_OS) .release \
--arg env '{NDK_ABI_FILTERS="$(NDK_ABI_FILTERS)";}' \
--argstr build-type $( BUILD_TYPE) \
--argstr keystore-file $( STORE_FILE) \
--option extra-sandbox-paths $( STORE_FILE)
2017-12-13 21:45:49 +00:00
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-06-04 16:50:29 +00:00
release-ios : watchman -clean ##@build build release for iOS release
2019-02-01 10:44:51 +00:00
# Open XCode inside the Nix context
2019-06-04 16:50:29 +00:00
@git clean -dxf -f target/ios && \
2019-07-23 20:54:17 +00:00
$( MAKE) jsbundle-ios && \
2019-04-12 08:36:30 +00:00
echo "Build in XCode, see https://status.im/build_status/ for instructions" && \
2019-06-04 16:50:29 +00:00
scripts/copy-translations.sh && \
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-07-23 20:54:17 +00:00
release-desktop : ##@build build release for desktop release based on TARGET_OS
@$( MAKE) jsbundle-desktop && \
2019-06-04 16:50:29 +00:00
scripts/copy-translations.sh && \
scripts/build-desktop.sh; \
$( MAKE) watchman-clean
2018-09-13 09:44:33 +00:00
2019-04-12 08:36:30 +00:00
release-windows-desktop : export TARGET_OS ?= windows
2019-07-23 20:54:17 +00:00
release-windows-desktop : ##@build build release for windows desktop release
@$( MAKE) jsbundle-desktop && \
2019-06-04 16:50:29 +00:00
scripts/copy-translations.sh && \
scripts/build-desktop.sh; \
$( MAKE) watchman-clean
2018-01-22 17:35:48 +00:00
2019-07-23 20:54:17 +00:00
prod-build-android : jsbundle -android ##@legacy temporary legacy alias for jsbundle-android
@echo " ${ YELLOW } This a deprecated target name, use jsbundle-android. $( RESET) "
jsbundle-android : SHELL := /bin /sh
jsbundle-android : export TARGET_OS ?= android
jsbundle-android : export BUILD_ENV ?= prod
jsbundle-android : ##@jsbundle Compile JavaScript and Clojure into index.android.js
# Call nix-build to build the 'targets.mobile.jsbundle' attribute and copy the index.android.js file to the project root
2019-07-15 16:34:33 +00:00
@git clean -dxf ./index.$( TARGET_OS) .js
nix/build.sh targets.mobile.jsbundle && \
mv result/index.$( TARGET_OS) .js ./
2018-02-06 18:10:35 +00:00
2019-07-23 20:54:17 +00:00
prod-build-ios : jsbundle -ios ##@legacy temporary legacy alias for jsbundle-ios
@echo " ${ YELLOW } This a deprecated target name, use jsbundle-ios. $( RESET) "
jsbundle-ios : export TARGET_OS ?= ios
jsbundle-ios : export BUILD_ENV ?= prod
jsbundle-ios : ##@jsbundle Compile JavaScript and Clojure into index.ios.js
2019-06-04 16:50:29 +00:00
@git clean -dxf -f ./index.$( TARGET_OS) .js && \
2019-07-23 20:54:17 +00:00
lein jsbundle-ios && \
2019-06-04 15:20:03 +00:00
node prepare-modules.js
2018-02-06 18:10:35 +00:00
2019-07-23 20:54:17 +00:00
prod-build-desktop : jsbundle -desktop ##@legacy temporary legacy alias for jsbundle-desktop
@echo " ${ YELLOW } This a deprecated target name, use jsbundle-desktop. $( RESET) "
jsbundle-desktop : export TARGET_OS ?= $( HOST_OS )
jsbundle-desktop : export BUILD_ENV ?= prod
jsbundle-desktop : ##@jsbundle Compile JavaScript and Clojure into index.desktop.js
2019-04-05 17:22:49 +00:00
git clean -qdxf -f ./index.desktop.js desktop/ && \
2019-07-23 20:54:17 +00:00
lein jsbundle-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-06-04 16:50:29 +00:00
# TODO: Migrate this to a Nix recipe, much the same way as nix/mobile/android/targets/release-android.nix
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-06-04 16:50:29 +00:00
test : export _NIX_ATTR := targets .leiningen .shell
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-06-04 16:50:29 +00:00
test-auto : export _NIX_ATTR := targets .leiningen .shell
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
2019-07-03 19:00:51 +00:00
coverage : ##@test Run tests once in NodeJS generating coverage
@scripts/run-coverage.sh
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 )
2019-07-15 16:34:33 +00:00
react-native-desktop : export _NIX_PURE ?= true
2019-05-07 15:57:30 +00:00
react-native-desktop : ##@other Start react native packager
@scripts/start-react-native.sh
react-native-android : export TARGET_OS ?= android
2019-07-15 16:34:33 +00:00
react-native-android : export _NIX_PURE ?= true
2019-05-07 15:57:30 +00:00
react-native-android : ##@other Start react native packager for Android client
@scripts/start-react-native.sh
react-native-ios : export TARGET_OS ?= ios
2019-07-15 16:34:33 +00:00
react-native-ios : export _NIX_PURE ?= true
2019-05-07 15:57:30 +00:00
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-06-04 16:50:29 +00:00
geth-connect : export _NIX_ATTR := targets .mobile .android .adb .shell
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-06-04 16:50:29 +00:00
android-ports : export _NIX_ATTR := targets .mobile .android .adb .shell
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-06-04 16:50:29 +00:00
android-logcat : export _NIX_ATTR := targets .mobile .android .adb .shell
2019-04-12 08:36:30 +00:00
android-logcat : export TARGET_OS ?= android
2019-07-23 20:54:17 +00:00
android-logcat : ##@other Read status-react logs from Android phone using adb
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-06-04 16:50:29 +00:00
android-install : export _NIX_ATTR := targets .mobile .android .adb .shell
android-install : export TARGET_OS ?= android
android-install : export BUILD_TYPE ?= release
android-install :
adb install android/app/build/outputs/apk/$( BUILD_TYPE) /app-$( BUILD_TYPE) .apk
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