# Project Config
TOOLCHAIN   ?= GCC
EVB_BOARD   := MH2435_QFN68
TARGET      := $(EVB_BOARD)_https
BUILD_DIR   := build
PROJECT_DIR := .
TARGET_FILE := $(TARGET)-$(TOOLCHAIN)

.PHONY: all clean size

# Options
CFLAGS := -mcpu=Cortex-M4 -include global-config.h -O2

ifeq ($(TOOLCHAIN),ARMCLANG)
    CC      := armclang
    CXX     := armclang
    AS      := armclang
    LD      := armclang
    OBJCOPY := fromelf

    CFLAGS += --target=arm-arm-none-eabi
    CFLAGS += -mthumb 
    CFLAGS += -Wno-armcc-pragma-push-pop
    CFLAGS += -Wno-armcc-pragma-anon-unions
    CFLAGS += -Wno-reserved-user-defined-literal
    CFLAGS += -Wno-deprecated-register
    CFLAGS += -fdata-sections
    CFLAGS += -fno-exceptions
    CFLAGS += -fshort-enums
    CFLAGS += -fshort-wchar

    LDFLAGS += -Wl,--scatter=ARMCLANG.sct
    LDFLAGS += -Wl,--map
    LDFLAGS += -Wl,--list=$(TARGET_FILE).map
endif

ifeq ($(TOOLCHAIN),GCC)
    CC      := arm-none-eabi-gcc
    CXX     := arm-none-eabi-g++
    AS      := arm-none-eabi-gcc
    LD      := arm-none-eabi-gcc
    OBJCOPY := arm-none-eabi-objcopy
    SIZE    := arm-none-eabi-size

    LIBS    := -lm

    CFLAGS += -mthumb
    CFLAGS += -Wno-error=incompatible-pointer-types
    CFLAGS += -Wno-error=int-conversion
    CFLAGS += -fmessage-length=0
    CFLAGS += -fno-exceptions
    CFLAGS += -ffunction-sections
    CFLAGS += -fdata-sections
    CFLAGS += -funsigned-char
    CFLAGS += -fomit-frame-pointer
    CFLAGS += -fshort-enums
    CFLAGS += -fshort-wchar
    CFLAGS += -mfloat-abi=hard
    CFLAGS += -mfpu=fpv4-sp-d16
    CFLAGS += -MMD -MP
    CFLAGS += -mthumb -lm -std=gnu99  -u _printf_float -u _scanf_float
    
    
    LDFLAGS += -mcpu=Cortex-M4 -lm -std=gnu99  -u _printf_float -u _scanf_float
    LDFLAGS += -specs=nosys.specs 
    LDFLAGS += -Wl,--gc-sections,--cref,--no-wchar-size-warning -std=gnu99
    LDFLAGS += -T $(LINKER_SCRIPT) -Wl,-Map=$(TARGET_FILE).map
endif

# TOOL
#rwildcard = $(foreach d,$(wildcard $1*), /
#              $(call rwildcard,$d/,$2) /
#              $(filter $(subst *,%,$2),$d))
#

# Sources / Includes
INCS :=
SRCS :=


#Includes
INCS += -I../../user
INCS += -I../../Config
INCS += -I../../system
INCS += -I../../RTOS
INCS += -I../../../../../Libraries/OSS/lwip-2_2_0/include
INCS += -I../../../../../Libraries/RTOS/freertos/11.1.0/include
INCS += -I../../../../../Libraries/RTOS/freertos/11.1.0/portable/GCC/ARM_CM4F
INCS += -I../../../../../Libraries/MH2435_StdPeriph_Driver/inc
INCS += -I../../../../../Libraries/Device/MegaHunt/mh2435/Include
INCS += -I../../../../../Libraries/CMSIS/Include

INCS += -I../../exlib/mbedtls/include
INCS += -I../../exlib/mbedtls/configs
INCS += -I../../exlib/mqtt/inc
INCS += -I../../exlib/http_parse/inc
INCS += -I../../exlib/cjson

INCS += -I../../driver/eth
INCS += -I../../driver/usart
INCS += -I../../driver/net
INCS += -I../../system/net
INCS += -I../../exlib/lwip_port


INCS += -I../../user/include
INCS += -I../../user/net_test

            
# ====== #SOURCE======
SRCS += ../../user/main.c
SRCS += ../../user/test.c
SRCS += ../../user/mh2435_it.c
SRCS += ../../user/net_test/test_http.c
SRCS += ../../user/net_test/test_tcpip.c
SRCS += ../../user/net_test/mqtt_test.c
SRCS += ../../user/net_test/ping.c

SRCS += ../../driver/eth/ethconf.c
SRCS += ../../driver/eth/netconf.c
SRCS += ../../driver/keyboard/dev_keyboard.c
SRCS += ../../driver/usart/usart.c

SRCS += ../../system/os_memory.c
SRCS += ../../system/system.c
SRCS += ../../system/net/net_monitor.c
SRCS += ../../system/net/os_socket.c
SRCS += ../../system/net/ssl_socket.c
SRCS += ../../system/net/tcpip_socket.c
SRCS += ../../system/net/iot_mqtt.c

SRCS += ../../exlib/lwip_port/ethernetif.c
SRCS += ../../exlib/lwip_port/arch/sys_arch.c

SRCS += ../../exlib/mqtt/src/mqtt.c
SRCS += ../../exlib/mqtt/src/mqtt_pal.c
SRCS += ../../exlib/http_parse/http_parser/http_parser.c
SRCS += ../../exlib/cjson/cJSON.c


# ====== kernel-api ======
#SRCS += ../../RTOS/osal.h
SRCS += ../../RTOS/osal_freertos.c
SRCS += ../../RTOS/rtos-freertos.c
#SRCS += ../../RTOS/rtos-freertos.h

# ====== freertos-kernel ======
SRCS += ../../../../../Libraries/RTOS/freertos/11.1.0/croutine.c
SRCS += ../../../../../Libraries/RTOS/freertos/11.1.0/event_groups.c
SRCS += ../../../../../Libraries/RTOS/freertos/11.1.0/list.c
SRCS += ../../../../../Libraries/RTOS/freertos/11.1.0/queue.c
SRCS += ../../../../../Libraries/RTOS/freertos/11.1.0/stream_buffer.c
SRCS += ../../../../../Libraries/RTOS/freertos/11.1.0/tasks.c
SRCS += ../../../../../Libraries/RTOS/freertos/11.1.0/timers.c
SRCS += ../../../../../Libraries/RTOS/freertos/11.1.0/portable/MemMang/heap_4.c
SRCS += ../../../../../Libraries/RTOS/freertos/11.1.0/portable/GCC/ARM_CM4F/port.c

# ====== lwip ======
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/api/api_lib.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/api/api_msg.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/api/err.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/api/if_api.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/api/netbuf.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/api/netdb.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/api/netifapi.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/api/sockets.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/api/tcpip.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/netif/bridgeif.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/netif/bridgeif_fdb.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/netif/ethernet.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/netif/lowpan6.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/netif/lowpan6_ble.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/netif/lowpan6_common.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/netif/zepif.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/altcp.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/altcp_alloc.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/altcp_tcp.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/def.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/dns.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/inet_chksum.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/init.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/ip.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/mem.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/memp.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/netif.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/pbuf.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/raw.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/stats.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/sys.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/tcp.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/tcp_in.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/tcp_out.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/timeouts.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/udp.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/ipv4/acd.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/ipv4/autoip.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/ipv4/dhcp.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/ipv4/etharp.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/ipv4/icmp.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/ipv4/igmp.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/ipv4/ip4.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/ipv4/ip4_addr.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/ipv4/ip4_frag.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/ipv6/dhcp6.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/ipv6/ethip6.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/ipv6/icmp6.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/ipv6/inet6.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/ipv6/ip6.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/ipv6/ip6_addr.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/ipv6/ip6_frag.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/ipv6/mld6.c
SRCS += ../../../../../Libraries/OSS/lwip-2_2_0/core/ipv6/nd6.c

# ====== mbedtls ======
SRCS += ../../exlib/mbedtls/library/aes.c
SRCS += ../../exlib/mbedtls/library/aesce.c
SRCS += ../../exlib/mbedtls/library/aesni.c
SRCS += ../../exlib/mbedtls/library/aria.c
SRCS += ../../exlib/mbedtls/library/asn1parse.c
SRCS += ../../exlib/mbedtls/library/asn1write.c
SRCS += ../../exlib/mbedtls/library/base64.c
SRCS += ../../exlib/mbedtls/library/bignum.c
SRCS += ../../exlib/mbedtls/library/bignum_core.c
SRCS += ../../exlib/mbedtls/library/bignum_mod.c
SRCS += ../../exlib/mbedtls/library/bignum_mod_raw.c
SRCS += ../../exlib/mbedtls/library/block_cipher.c
SRCS += ../../exlib/mbedtls/library/camellia.c
SRCS += ../../exlib/mbedtls/library/ccm.c
SRCS += ../../exlib/mbedtls/library/chacha20.c
SRCS += ../../exlib/mbedtls/library/chachapoly.c
SRCS += ../../exlib/mbedtls/library/cipher.c
SRCS += ../../exlib/mbedtls/library/cipher_wrap.c
SRCS += ../../exlib/mbedtls/library/cmac.c
SRCS += ../../exlib/mbedtls/library/constant_time.c
SRCS += ../../exlib/mbedtls/library/ctr_drbg.c
SRCS += ../../exlib/mbedtls/library/debug.c
SRCS += ../../exlib/mbedtls/library/des.c
SRCS += ../../exlib/mbedtls/library/dhm.c
SRCS += ../../exlib/mbedtls/library/ecdh.c
SRCS += ../../exlib/mbedtls/library/ecdsa.c
SRCS += ../../exlib/mbedtls/library/ecjpake.c
SRCS += ../../exlib/mbedtls/library/ecp.c
SRCS += ../../exlib/mbedtls/library/ecp_curves.c
SRCS += ../../exlib/mbedtls/library/ecp_curves_new.c
SRCS += ../../exlib/mbedtls/library/entropy.c
SRCS += ../../exlib/mbedtls/library/entropy_poll.c
SRCS += ../../exlib/mbedtls/library/error.c
SRCS += ../../exlib/mbedtls/library/gcm.c
SRCS += ../../exlib/mbedtls/library/hkdf.c
SRCS += ../../exlib/mbedtls/library/hmac_drbg.c
SRCS += ../../exlib/mbedtls/library/lmots.c
SRCS += ../../exlib/mbedtls/library/lms.c
SRCS += ../../exlib/mbedtls/library/md.c
SRCS += ../../exlib/mbedtls/library/md5.c
SRCS += ../../exlib/mbedtls/library/memory_buffer_alloc.c
SRCS += ../../exlib/mbedtls/library/mps_reader.c
SRCS += ../../exlib/mbedtls/library/mps_trace.c
SRCS += ../../exlib/mbedtls/library/net_sockets.c
SRCS += ../../exlib/mbedtls/library/nist_kw.c
SRCS += ../../exlib/mbedtls/library/oid.c
SRCS += ../../exlib/mbedtls/library/padlock.c
SRCS += ../../exlib/mbedtls/library/pem.c
SRCS += ../../exlib/mbedtls/library/pk.c
SRCS += ../../exlib/mbedtls/library/pk_ecc.c
SRCS += ../../exlib/mbedtls/library/pk_wrap.c
SRCS += ../../exlib/mbedtls/library/pkcs5.c
SRCS += ../../exlib/mbedtls/library/pkcs7.c
SRCS += ../../exlib/mbedtls/library/pkcs12.c
SRCS += ../../exlib/mbedtls/library/pkparse.c
SRCS += ../../exlib/mbedtls/library/pkwrite.c
SRCS += ../../exlib/mbedtls/library/platform.c
SRCS += ../../exlib/mbedtls/library/platform_util.c
SRCS += ../../exlib/mbedtls/library/poly1305.c
SRCS += ../../exlib/mbedtls/library/psa_crypto.c
SRCS += ../../exlib/mbedtls/library/psa_crypto_aead.c
SRCS += ../../exlib/mbedtls/library/psa_crypto_cipher.c
SRCS += ../../exlib/mbedtls/library/psa_crypto_client.c
SRCS += ../../exlib/mbedtls/library/psa_crypto_driver_wrappers_no_static.c
SRCS += ../../exlib/mbedtls/library/psa_crypto_ecp.c
SRCS += ../../exlib/mbedtls/library/psa_crypto_ffdh.c
SRCS += ../../exlib/mbedtls/library/psa_crypto_hash.c
SRCS += ../../exlib/mbedtls/library/psa_crypto_mac.c
SRCS += ../../exlib/mbedtls/library/psa_crypto_pake.c
SRCS += ../../exlib/mbedtls/library/psa_crypto_rsa.c
SRCS += ../../exlib/mbedtls/library/psa_crypto_se.c
SRCS += ../../exlib/mbedtls/library/psa_crypto_slot_management.c
SRCS += ../../exlib/mbedtls/library/psa_crypto_storage.c
SRCS += ../../exlib/mbedtls/library/psa_its_file.c
SRCS += ../../exlib/mbedtls/library/psa_util.c
SRCS += ../../exlib/mbedtls/library/ripemd160.c
SRCS += ../../exlib/mbedtls/library/rsa.c
SRCS += ../../exlib/mbedtls/library/rsa_alt_helpers.c
SRCS += ../../exlib/mbedtls/library/sha1.c
SRCS += ../../exlib/mbedtls/library/sha3.c
SRCS += ../../exlib/mbedtls/library/sha256.c
SRCS += ../../exlib/mbedtls/library/sha512.c
SRCS += ../../exlib/mbedtls/library/ssl_cache.c
SRCS += ../../exlib/mbedtls/library/ssl_ciphersuites.c
SRCS += ../../exlib/mbedtls/library/ssl_client.c
SRCS += ../../exlib/mbedtls/library/ssl_cookie.c
SRCS += ../../exlib/mbedtls/library/ssl_debug_helpers_generated.c
SRCS += ../../exlib/mbedtls/library/ssl_msg.c
SRCS += ../../exlib/mbedtls/library/ssl_ticket.c
SRCS += ../../exlib/mbedtls/library/ssl_tls.c
SRCS += ../../exlib/mbedtls/library/ssl_tls12_client.c
SRCS += ../../exlib/mbedtls/library/ssl_tls12_server.c
SRCS += ../../exlib/mbedtls/library/ssl_tls13_client.c
SRCS += ../../exlib/mbedtls/library/ssl_tls13_generic.c
SRCS += ../../exlib/mbedtls/library/ssl_tls13_keys.c
SRCS += ../../exlib/mbedtls/library/ssl_tls13_server.c
SRCS += ../../exlib/mbedtls/library/threading.c
SRCS += ../../exlib/mbedtls/library/timing.c
SRCS += ../../exlib/mbedtls/library/version.c
SRCS += ../../exlib/mbedtls/library/version_features.c
SRCS += ../../exlib/mbedtls/library/x509.c
SRCS += ../../exlib/mbedtls/library/x509_create.c
SRCS += ../../exlib/mbedtls/library/x509_crl.c
SRCS += ../../exlib/mbedtls/library/x509_crt.c
SRCS += ../../exlib/mbedtls/library/x509_csr.c
SRCS += ../../exlib/mbedtls/library/x509write.c
SRCS += ../../exlib/mbedtls/library/x509write_crt.c
SRCS += ../../exlib/mbedtls/library/x509write_csr.c

# ====== peripheral ======
SRCS += ../../../../../Libraries/MH2435_StdPeriph_Driver/src/mh2435_adc.c
SRCS += ../../../../../Libraries/MH2435_StdPeriph_Driver/src/mh2435_cache.c
SRCS += ../../../../../Libraries/MH2435_StdPeriph_Driver/src/mh2435_crc.c
SRCS += ../../../../../Libraries/MH2435_StdPeriph_Driver/src/mh2435_dma.c
SRCS += ../../../../../Libraries/MH2435_StdPeriph_Driver/src/mh2435_eth.c
SRCS += ../../../../../Libraries/MH2435_StdPeriph_Driver/src/mh2435_exti.c
SRCS += ../../../../../Libraries/MH2435_StdPeriph_Driver/src/mh2435_gpio.c
SRCS += ../../../../../Libraries/MH2435_StdPeriph_Driver/src/mh2435_dma2d.c
SRCS += ../../../../../Libraries/MH2435_StdPeriph_Driver/src/mh2435_i2c.c
SRCS += ../../../../../Libraries/MH2435_StdPeriph_Driver/src/mh2435_jpeg.c
SRCS += ../../../../../Libraries/MH2435_StdPeriph_Driver/src/mh2435_ltdc.c
SRCS += ../../../../../Libraries/MH2435_StdPeriph_Driver/src/mh2435_misc.c
SRCS += ../../../../../Libraries/MH2435_StdPeriph_Driver/src/mh2435_pwr.c
SRCS += ../../../../../Libraries/MH2435_StdPeriph_Driver/src/mh2435_qspi.c
SRCS += ../../../../../Libraries/MH2435_StdPeriph_Driver/src/mh2435_sdio.c
SRCS += ../../../../../Libraries/MH2435_StdPeriph_Driver/src/mh2435_spi.c
SRCS += ../../../../../Libraries/MH2435_StdPeriph_Driver/src/mh2435_sysctrl.c
SRCS += ../../../../../Libraries/MH2435_StdPeriph_Driver/src/mh2435_tim.c
SRCS += ../../../../../Libraries/MH2435_StdPeriph_Driver/src/mh2435_trng.c
SRCS += ../../../../../Libraries/MH2435_StdPeriph_Driver/src/mh2435_usart.c
SRCS += ../../../../../Libraries/MH2435_StdPeriph_Driver/src/peripheral.c
SRCS += ../../../../../Libraries/MH2435_StdPeriph_Driver/src/mh2435_sdram.c

# ====== target-soc ======
SRCS += ../../../../../Libraries/Device/MegaHunt/mh2435/Source/system_mh2435.c
SRCS += ../../../../../Libraries/Device/MegaHunt/mh2435/Source/startup_mh2435.c
 
# ====== syscalls ======
SRCS += syscalls.c


CFLAGS +=-lm
LDFLAGS  +=-lm
 
CFLAGS += -DUSE_STDPERIPH_DRIVER -DCONFIG_MODULE_MQTT -D$(EVB_BOARD)
CFLAGS += -DHAVE_CONFIG_H  -DLWIP_TIMEVAL_PRIVATE=1


# Response files for compiler options (to avoid "Argument list too long" error)
CFLAGS_RSP := $(BUILD_DIR)/cflags.rsp
INCS_RSP := $(BUILD_DIR)/includes.rsp

# Create build directory and response files at the start
$(shell mkdir -p $(BUILD_DIR))
$(shell echo $(CFLAGS) > $(CFLAGS_RSP))
$(shell echo $(INCS) > $(INCS_RSP))

# Generate Objects
define GenerateObject
$$(eval OBJS += $(BUILD_DIR)/$(subst ../,_,$(basename $(1))).${TOOLCHAIN}.o)
$(BUILD_DIR)/$(subst ../,_,$(basename $(1))).${TOOLCHAIN}.o: $(1)
	@mkdir -p $$(dir $$@)
	$(CC) @$(CFLAGS_RSP) @$(INCS_RSP) -c $$< -o $$@
endef

# Targets
all: $(TARGET_FILE).hex

# Objects
filterSources := $(filter %.c,$(SRCS))
$(foreach source,$(filterSources),$(eval $(call GenerateObject,$(source))))

# Linker Script
ifeq ($(TOOLCHAIN),GCC)
LINKER_SCRIPT := $(BUILD_DIR)/$(TARGET_FILE).ld
$(LINKER_SCRIPT):
	@mkdir -p $(dir $@)
	$(CC) -E -x assembler-with-cpp -I . -P GCC.ld  -o $(LINKER_SCRIPT)
endif

# Response file for objects (to avoid "Argument list too long" error)
OBJS_RSP := $(BUILD_DIR)/objects.rsp

$(OBJS_RSP): $(OBJS)
	@mkdir -p $(dir $@)
	$(file > $@,$(OBJS))

# ELF Target
$(TARGET_FILE).elf: $(OBJS) $(LINKER_SCRIPT) $(OBJS_RSP)
	$(LD) $(CFLAGS) $(LDFLAGS) @$(OBJS_RSP) $(LIBS) -o $@

# Hex Output
$(TARGET_FILE).hex: $(TARGET_FILE).elf
ifeq ($(TOOLCHAIN),ARMCLANG)
	$(OBJCOPY) --i32combined -o $@ $<
endif
ifeq ($(TOOLCHAIN),GCC)
	$(OBJCOPY) -O ihex $< $@
	@echo ""
	@echo "===== Firmware Size ====="
	$(SIZE) $<
	@echo "========================="
endif
	@echo "Compile done!"

# Size target
size: $(TARGET_FILE).elf
	$(SIZE) $<

clean:
	rm -rf ./$(BUILD_DIR)
	rm -f $(TARGET)-*.*
	@echo "Clean done!"

# Include dependency files
-include $(OBJS:.o=.d)
