2019-06-04 16:50:29 +00:00
.PHONY : add -gcroots clean clean -nix disable -githooks react -native -android react -native -ios react -native -desktop test release _list _fix -perms
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-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-06-04 16:50:29 +00:00
_fix-perms : SHELL := /bin /sh
_fix-perms : ##@prepare Fix permissions so that directory can be cleaned
$( 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-06-04 16:50:29 +00:00
clean : _fix -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-06-11 09:43:44 +00:00
watchman-clean :
2019-06-04 16:50:29 +00:00
watchman watch-del $$ { STATUS_REACT_HOME}
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
2019-07-16 20:34:04 +00:00
@echo " ${ YELLOW } Nix shell is already active $( RESET) "
2019-02-01 10:44:51 +00:00
e n d i f
2019-06-04 16:50:29 +00:00
add-gcroots : SHELL := /bin /sh
add-gcroots : ##@nix Add Nix GC roots to avoid status-react expressions being garbage collected
scripts/add-gcroots.sh
clean-nix : SHELL := /bin /sh
clean-nix : ##@nix Remove complete nix setup
sudo rm -rf /nix ~/.nix-profile ~/.nix-defexpr ~/.nix-channels ~/.cache/nix ~/.status .nix-gcroots
update-npm-nix : SHELL := /bin /sh
update-npm-nix : ##@nix Update node2nix expressions based on current package.json
nix/desktop/realm-node/generate-nix.sh
update-gradle-nix : SHELL := /bin /sh
update-gradle-nix : ##@nix Update maven nix expressions based on current gradle setup
nix/mobile/android/maven-and-npm-deps/maven/generate-nix.sh
update-lein-nix : SHELL := /bin /sh
update-lein-nix : ##@nix Update maven nix expressions based on current lein setup
nix/tools/lein/generate-nix.sh nix/lein
disable-githooks : SHELL := /bin /sh
disable-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~
2017-12-13 21:45:49 +00:00
#----------------
# Release builds
#----------------
release : release -android release -ios ##@build build release for Android and iOS
2019-06-04 16:50:29 +00:00
release-android : SHELL := /bin /sh
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
2019-06-04 16:50:29 +00:00
scripts/release-$( TARGET_OS) .sh
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 && \
$( 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-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-04-05 17:22:49 +00:00
release-desktop : ##@build build release for desktop release
@$( MAKE) prod-build-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-04-05 17:22:49 +00:00
release-windows-desktop : ##@build build release for desktop release
@$( MAKE) prod-build-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-06-04 16:50:29 +00:00
prod-build-android : SHELL := /bin /sh
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-06-04 16:50:29 +00:00
# Call nix-build to build the 'targets.mobile.prod-build' attribute and copy the index.android.js file to the project root
@git clean -dxf -f ./index.$( TARGET_OS) .js && \
_NIX_RESULT_PATH = $( shell . ~/.nix-profile/etc/profile.d/nix.sh && nix-build --argstr target-os $( TARGET_OS) --pure --no-out-link --show-trace -A targets.mobile.prod-build) && \
[ -n " $$ {_NIX_RESULT_PATH} " ] && cp -av $$ { _NIX_RESULT_PATH} /* .
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-06-04 16:50:29 +00:00
@git clean -dxf -f ./index.$( TARGET_OS) .js && \
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-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 )
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-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-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-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