# Simple Makefile for embedded Rust
# Created by jiaqiang.ye@lnxall.com
# 2023/07/11

MAKEFLAGS += -r -R

BUILD_TARGET :=
export CARGO_NET_GIT_FETCH_WITH_CLI:=true

ifneq ("$(wildcard /opt/rust-lang)","")
export RUSTUP_HOME:=/opt/rust-lang/rustup
export PATH:=/opt/rust-lang/cargo/bin:$(PATH)
endif

ifeq ("$(TARGET_CC)","arm-openwrt-linux-muslgnueabi-gcc")
BUILD_TARGET := armv7-unknown-linux-musleabihf
export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_LINKER:=$(CURDIR)/misc/arm-openwrt-linux-muslgnueabi-gcc1
endif

ifeq ("$(TARGET_CC)","x86_64-openwrt-linux-musl-gcc")
BUILD_TARGET := x86_64-unknown-linux-musl
export CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER:=$(TARGET_CC)
endif

ifeq ("$(TARGET_CC)","mipsel-openwrt-linux-musl-gcc")
BUILD_TARGET := mipsel-unknown-linux-musl
export CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_LINKER:=$(TARGET_CC)
endif

ifeq ("$(TARGET_CC)","arm-openwrt-linux-gnueabi-gcc")
BUILD_TARGET := armv7-unknown-linux-gnueabihf
export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER:=$(TARGET_CC)
endif

ifeq ("$(TARGET_CC)","arm-linux-gnueabihf-gcc")
BUILD_TARGET := armv7-unknown-linux-gnueabihf
export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER:=$(TARGET_CC)
endif

ifeq ("$(TARGET_CC)","aarch64-linux-gnu-gcc")
BUILD_TARGET := aarch64-unknown-linux-gnu
export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER:=$(TARGET_CC)
endif

ifeq ("$(TARGET_CC)","aarch64-buildroot-linux-gnu-gcc")
BUILD_TARGET := aarch64-unknown-linux-gnu
export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER:=$(TARGET_CC)
endif

ifeq ($(BUILD_TARGET),)
$(error Unsupported target compiler: $(TARGET_CC))
endif

ifeq ($(TARGET_CFLAGS),)
$(error TARGET_CFLAGS not defined)
endif

export TARGET_CC:=$(TARGET_CC)
export TARGET_CFLAGS:=$(TARGET_CFLAGS)
ifneq ($(OPENSSL_DIR),)
export OPENSSL_DIR:=$(OPENSSL_DIR)
else
  ifneq ("$(STAGING_DIR)","")
    export OPENSSL_DIR:=$(OPENSSL_DIR)/usr
  endif
endif

.PHONY: all clean

all: Cargo.toml
	@echo "Building for target $(BUILD_TARGET)"
	@cargo build --release --target $(BUILD_TARGET)
	cp -v ./target/$(BUILD_TARGET)/release/youcan ./
ifneq ("$(TARGET_STRIP)","")
	$(TARGET_STRIP) -s youcan cmod/libcmod.so
endif

clean:
	rm -rf youcan cmod/*.o cmod/*.so ./target
