| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- .POSIX:
- # Cargo binary
- CARGO = cargo
- RELEASE_APK = target/android-artifacts/release/apk/darkfi-app.apk
- DEBUG_APK = target/android-artifacts/debug/apk/darkfi-app.apk
- #ADB_DEVICE = -s DEVICE_ID
- ADB_DEVICE =
- SRC = \
- build.rs \
- Cargo.lock \
- Cargo.toml \
- Dockerfile \
- $(shell find assets -type f) \
- $(shell find src -type f)
- RELEASE_FEATURES = --features=enable-plugins
- DEBUG_FEATURES = --features=enable-filelog,enable-plugins
- #DEV_FEATURES = --features=enable-filelog,enable-netdebug,emulate-android
- #DEV_FEATURES = --features=enable-filelog,enable-netdebug,enable-plugins
- DEV_FEATURES = --features=enable-plugins
- default: build-release
- ./darkfi-app
- android: android-release
- # Platform release builds
- ios-release: $(SRC) fonts forest_720x1280 forest_1920x1080
- # Create the app bundle structure
- rm -rf DarkFi.app
- mkdir -p DarkFi.app
- # Build for iOS device (aarch64)
- SDKROOT=$$(xcrun --sdk iphoneos --show-sdk-path 2>/dev/null); \
- if [ -z "$$SDKROOT" ]; then \
- SDKROOT=$$(xcodebuild -version -sdk iphoneos Path 2>/dev/null); \
- fi; \
- if [ -z "$$SDKROOT" ]; then \
- echo "ERROR: Could not find iphoneos SDK."; \
- echo "Current xcode-select path: $$(xcode-select -p)"; \
- echo "Ensure Xcode is installed and selected: sudo xcode-select -s /Applications/Xcode.app"; \
- exit 1; \
- fi; \
- export SDKROOT=$$SDKROOT; \
- export IPHONEOS_DEPLOYMENT_TARGET=14.0; \
- cargo build --target aarch64-apple-ios --release $(RELEASE_FEATURES)
- # Copy the binary
- cp target/aarch64-apple-ios/release/darkfi-app DarkFi.app/
- # Copy resources
- cp ios-Info.plist DarkFi.app/Info.plist
- cp -r assets/lang DarkFi.app/
- cp -r assets/forest_720x1280 DarkFi.app/
- cp -r assets/forest_1920x1080 DarkFi.app/
- cp assets/*.png DarkFi.app/ || true
- cp embedded.mobileprovision DarkFi.app/ || echo "Warning: No provisioning profile found. Device builds will fail to launch."
- cp ibm-plex-mono-regular.otf DarkFi.app/
- cp NotoColorEmoji.ttf DarkFi.app/
- # Sign the app bundle with entitlements
- codesign --force --sign - --entitlements DarkFi.entitlements --timestamp=none DarkFi.app
- # Create a dummy PkgInfo (optional but good practice)
- echo "APPL????" > DarkFi.app/PkgInfo
- @echo "DarkFi.app built for device (aarch64)."
- ios-sim: $(SRC) fonts forest_720x1280 forest_1920x1080
- # Create the app bundle structure
- rm -rf DarkFi.app
- mkdir -p DarkFi.app
- # Build for iOS simulator (Detect Arch)
- SDKROOT=$$(xcrun --sdk iphonesimulator --show-sdk-path 2>/dev/null); \
- if [ -z "$$SDKROOT" ]; then \
- SDKROOT=$$(xcodebuild -version -sdk iphonesimulator Path 2>/dev/null); \
- fi; \
- if [ -z "$$SDKROOT" ]; then \
- echo "ERROR: Could not find iphonesimulator SDK."; \
- echo "Current xcode-select path: $$(xcode-select -p)"; \
- echo "Ensure Xcode is installed and selected: sudo xcode-select -s /Applications/Xcode.app"; \
- exit 1; \
- fi; \
- export SDKROOT=$$SDKROOT; \
- export IPHONEOS_DEPLOYMENT_TARGET=14.0; \
- ARCH=$$(uname -m); \
- if [ "$$ARCH" = "arm64" ]; then \
- echo "Detected Apple Silicon (arm64). Building for aarch64-apple-ios-sim..."; \
- cargo build --target aarch64-apple-ios-sim --release $(RELEASE_FEATURES); \
- cp target/aarch64-apple-ios-sim/release/darkfi-app DarkFi.app/; \
- else \
- echo "Detected Intel (x86_64). Building for x86_64-apple-ios..."; \
- cargo build --target x86_64-apple-ios --release $(RELEASE_FEATURES); \
- cp target/x86_64-apple-ios/release/darkfi-app DarkFi.app/; \
- fi
- # Copy resources
- cp ios-Info.plist DarkFi.app/Info.plist
- cp -r assets/lang DarkFi.app/
- cp -r assets/forest_720x1280 DarkFi.app/
- cp -r assets/forest_1920x1080 DarkFi.app/
- cp assets/*.png DarkFi.app/ || true
- cp ibm-plex-mono-regular.otf DarkFi.app/
- cp NotoColorEmoji.ttf DarkFi.app/
- # Sign the app bundle with entitlements
- codesign --force --sign - --entitlements DarkFi.entitlements --timestamp=none DarkFi.app
- echo "APPL????" > DarkFi.app/PkgInfo
- @echo "DarkFi.app built for simulator."
- ios-xcode:
- rm -rf DarkFi.xcodeproj
- mkdir -p DarkFi.xcodeproj
- # Generate unique IDs for the project file (24 chars)
- sed -e "s/CONFIG_LIST_ID/$$(uuidgen | tr -d - | tr '[:lower:]' '[:upper:]' | cut -c 1-24)/g" \
- -e "s/MAIN_GROUP_ID/$$(uuidgen | tr -d - | tr '[:lower:]' '[:upper:]' | cut -c 1-24)/g" \
- -e "s/LEGACY_TARGET_ID/$$(uuidgen | tr -d - | tr '[:lower:]' '[:upper:]' | cut -c 1-24)/g" \
- -e "s/PROJECT_ID/$$(uuidgen | tr -d - | tr '[:lower:]' '[:upper:]' | cut -c 1-24)/g" \
- -e "s/PROJECT_CONFIG_LIST_ID/$$(uuidgen | tr -d - | tr '[:lower:]' '[:upper:]' | cut -c 1-24)/g" \
- -e "s/DEBUG_CONFIG_ID/$$(uuidgen | tr -d - | tr '[:lower:]' '[:upper:]' | cut -c 1-24)/g" \
- -e "s/RELEASE_CONFIG_ID/$$(uuidgen | tr -d - | tr '[:lower:]' '[:upper:]' | cut -c 1-24)/g" \
- project.pbxproj.template > DarkFi.xcodeproj/project.pbxproj
- @echo "Generated DarkFi.xcodeproj. Open it in Xcode and ensure the 'External Build Tool' configuration points to 'make' and target 'ios-release' in this directory."
- macos-release: build-release
- -mv darkfi-app darkfi-app.macos
- macos-debug: build-debug
- -mv darkfi-app darkfi-app_debug.macos
- linux-release: build-release
- -mv darkfi-app darkfi-app.linux
- linux-debug: build-debug
- -mv darkfi-app darkfi-app_debug.linux
- win-release: $(SRC) fonts
- $(CARGO) build --release $(RELEASE_FEATURES)
- -mv target/release/darkfi-app.exe .
- win-debug: $(SRC) fonts
- $(CARGO) build $(DEBUG_FEATURES)
- -mv target/debug/darkfi-app.exe .
- android-release: $(SRC) fonts forest_720x1280
- podman run -v $(shell pwd)/../../:/root/darkfi -w /root/darkfi/bin/app/ -t apk cargo quad-apk build --release $(RELEASE_FEATURES)
- -mv $(RELEASE_APK) darkfi-app.apk
- android-debug: $(SRC) fonts forest_720x1280
- podman run -v $(shell pwd)/../../:/root/darkfi -w /root/darkfi/bin/app/ -t apk cargo quad-apk build $(DEBUG_FEATURES)
- -mv $(DEBUG_APK) darkfi-app_debug.apk
- build-release: $(SRC) fonts forest_1920x1080
- $(CARGO) build --release $(RELEASE_FEATURES)
- -mv target/release/darkfi-app .
- build-debug: $(SRC) fonts forest_1920x1080
- $(CARGO) build $(DEBUG_FEATURES)
- -mv target/debug/darkfi-app .
- # Download font data
- fonts: ibm-plex-mono-regular.otf NotoColorEmoji.ttf
- ibm-plex-mono-regular.otf:
- wget -c https://codeberg.org/darkrenaissance/darkfi/raw/branch/data/ibm-plex-mono-regular.otf
- NotoColorEmoji.ttf:
- wget -c https://codeberg.org/darkrenaissance/darkfi/raw/branch/data/NotoColorEmoji.ttf
- forest_1920x1080.zip:
- wget -c https://codeberg.org/darkrenaissance/darkfi/raw/branch/data/forest_1920x1080.zip
- assets/forest_1920x1080/000.qoi:
- cd assets && unzip ../forest_1920x1080.zip
- forest_1920x1080: forest_1920x1080.zip assets/forest_1920x1080/000.qoi
- # rm -fr assets/forest_729x1280/
- forest_720x1280.zip:
- wget -c https://codeberg.org/darkrenaissance/darkfi/raw/branch/data/forest_720x1280.zip
- assets/forest_720x1280/000.qoi:
- cd assets && unzip ../forest_720x1280.zip
- forest_720x1280: forest_720x1280.zip assets/forest_720x1280/000.qoi
- # rm -fr assets/forest_1920x1080/
- # Developer targets
- dev: $(SRC) fonts forest_1920x1080
- $(CARGO) lbuild $(DEV_FEATURES)
- -mv target/debug/darkfi-app .
- ./darkfi-app
- apk: $(SRC) fonts forest_720x1280
- podman run -v $(shell pwd)/../../:/root/darkfi -w /root/darkfi/bin/app/ -t apk cargo quad-apk build $(DEV_FEATURES)
- $(MAKE) install-apk
- install-apk:
- -mv $(DEBUG_APK) .
- -adb $(ADB_DEVICE) uninstall darkfi.darkfi_app
- adb $(ADB_DEVICE) install -r darkfi-app.apk
- reset
- adb $(ADB_DEVICE) logcat -c
- adb $(ADB_DEVICE) shell monkey -p darkfi.darkfi_app -c android.intent.category.LAUNCHER 1
- adb $(ADB_DEVICE) logcat -v color -s darkfi -s SAPP -s libc -s DEBUG -s ActivityManager -s ActivityTaskManager -s WindowManager -s AndroidRuntime -s rkfi.darkfi_app | tee output.log
- # Useful for dev
- cli:
- podman run -v $(shell pwd)/../../:/root/darkfi -w /root/darkfi/bin/app/ -it apk bash
- fmt:
- $(CARGO) +nightly fmt
- clean:
- podman run -v $(shell pwd):/root/dw -w /root/dw -t apk rm -fr target/
- rm -fr target/
- rm -f darkfi-app.apk
- rm -rf DarkFi.app
- rm -rf DarkFi.xcodeproj
- .PHONY: all android cli clean
|