SHELL=/bin/bash 
.PHONY: all 24_0 24_1 25_0 clean

ifeq ($(XILINX_VITIS_AIETOOLS),)
XILINX_VITIS_AIETOOLS := ${XILINX_VITIS}/aietools
endif

ifeq ($(CARDANO_AIE_ARCH_MODEL_DIR),)
CARDANO_AIE_ARCH_MODEL_DIR := ${XILINX_VITIS_AIETOOLS}/data/versal_prod/lib
endif

ts := $(shell date "+%Y-%m-%d-%H-%M-%S")

XCHESSMK := xchessmk
XCHESSCC := xchesscc
CHESSLLVMLink := ${XILINX_VITIS_AIETOOLS}/tps/${RDI_PLATFORM}/target/bin/LNa64bin/chess-llvm-link
INCLUDE_PATH := -I /home/amd/training/system_simulation/lab/sys_project/aie_component/build/hw -I ${XILINX_VITIS_AIETOOLS}/include -I /home/amd/training/system_simulation/lab/sys_project/aie_component -I /home/amd/training/system_simulation/lab/sys_project/aie_component/AIE/kernels -I /home/amd/training/system_simulation/lab/sys_project/aie_component/AIE -I ${CARDANO_AIE_ARCH_MODEL_DIR}/runtime_cxx/libcxx-lite/include -I ${CARDANO_AIE_ARCH_MODEL_DIR}/runtime_cxx/libs/libcxx-16/include-lite -I ${CARDANO_AIE_ARCH_MODEL_DIR}/runtime/include

.EXPORT_ALL_VARIABLES:
export XILINX_CARDANO_XLOPT_OPTIONS=-xlopt=1 -mapped-json=graph_mapped.json -max-required-vector-alignment=16

all: 24_0 24_1 25_0 

24_0_xlopt:
	${XCHESSCC} +f +s -p me -P ${CARDANO_AIE_ARCH_MODEL_DIR} +P 4  +Wllvm,-O2,-fno-jump-tables,-fno-discard-value-names,-Xclang,-chess-only-info-critical-passes,-g -D_LIBCPP_LIMITS_H -D_LIBCPP_STDIO_H -D_LIBCPP_STDINT_H -D__AIENGINE__ -D__AIE_ARCH__=10 -D__LOCK_FENCE_MODE__=0 -DAIE_OPTION_SCALAR_FLOAT_ON_VECTOR -I /home/amd/training/system_simulation/lab/sys_project/aie_component/AIE/kernels/classifiers ${INCLUDE_PATH} /home/amd/training/system_simulation/lab/sys_project/aie_component/build/hw/Work/aie/24_0/src/24_0.cc -o ir/24_0_main.ll
	${CHESSLLVMLink} --chess-config ${CARDANO_AIE_ARCH_MODEL_DIR}/isg/me_chess_llvm.cfg -S -o ir/24_0_orig.ll ir/i2_classify.ll ir/24_0_main.ll
	/opt/amd/2025.1/Vitis/aietools/lnx64.o/tools/clang/bin/opt -S -load-pass-plugin=/opt/amd/2025.1/Vitis/aietools/lib/lnx64.o/libLLVMXLOpt.so -passes=xlopt ir/24_0_orig.ll -o ir/24_0.ll 2> 24_0/xlopt.log
24_0_llopt: 24_0_xlopt
	/opt/amd/2025.1/Vitis/aietools/lnx64.o/tools/clang/bin/opt -S ir/24_0.ll -o ir/24_0.ll 2>/dev/null

24_1_xlopt:
	${XCHESSCC} +f +s -p me -P ${CARDANO_AIE_ARCH_MODEL_DIR} +P 4  +Wllvm,-O2,-fno-jump-tables,-fno-discard-value-names,-Xclang,-chess-only-info-critical-passes,-g -D_LIBCPP_LIMITS_H -D_LIBCPP_STDIO_H -D_LIBCPP_STDINT_H -D__AIENGINE__ -D__AIE_ARCH__=10 -D__LOCK_FENCE_MODE__=0 -DAIE_OPTION_SCALAR_FLOAT_ON_VECTOR ${INCLUDE_PATH} /home/amd/training/system_simulation/lab/sys_project/aie_component/build/hw/Work/aie/24_1/src/24_1.cc -o ir/24_1_main.ll
	${CHESSLLVMLink} --chess-config ${CARDANO_AIE_ARCH_MODEL_DIR}/isg/me_chess_llvm.cfg -S -o ir/24_1_orig.ll ir/i1_polar_clip.ll ir/24_1_main.ll
	/opt/amd/2025.1/Vitis/aietools/lnx64.o/tools/clang/bin/opt -S -load-pass-plugin=/opt/amd/2025.1/Vitis/aietools/lib/lnx64.o/libLLVMXLOpt.so -passes=xlopt ir/24_1_orig.ll -o ir/24_1.ll 2> 24_1/xlopt.log
24_1_llopt: 24_1_xlopt
	/opt/amd/2025.1/Vitis/aietools/lnx64.o/tools/clang/bin/opt -S ir/24_1.ll -o ir/24_1.ll 2>/dev/null

25_0_xlopt:
	${XCHESSCC} +f +s -p me -P ${CARDANO_AIE_ARCH_MODEL_DIR} +P 4  +Wllvm,-O2,-fno-jump-tables,-fno-discard-value-names,-Xclang,-chess-only-info-critical-passes,-g -D_LIBCPP_LIMITS_H -D_LIBCPP_STDIO_H -D_LIBCPP_STDINT_H -D__AIENGINE__ -D__AIE_ARCH__=10 -D__LOCK_FENCE_MODE__=0 -DAIE_OPTION_SCALAR_FLOAT_ON_VECTOR -I /home/amd/training/system_simulation/lab/sys_project/aie_component/AIE/kernels/interpolators ${INCLUDE_PATH} /home/amd/training/system_simulation/lab/sys_project/aie_component/build/hw/Work/aie/25_0/src/25_0.cc -o ir/25_0_main.ll
	${CHESSLLVMLink} --chess-config ${CARDANO_AIE_ARCH_MODEL_DIR}/isg/me_chess_llvm.cfg -S -o ir/25_0_orig.ll ir/i0_hb27_2i.ll ir/25_0_main.ll
	/opt/amd/2025.1/Vitis/aietools/lnx64.o/tools/clang/bin/opt -S -load-pass-plugin=/opt/amd/2025.1/Vitis/aietools/lib/lnx64.o/libLLVMXLOpt.so -passes=xlopt ir/25_0_orig.ll -o ir/25_0.ll 2> 25_0/xlopt.log
25_0_llopt: 25_0_xlopt
	/opt/amd/2025.1/Vitis/aietools/lnx64.o/tools/clang/bin/opt -S ir/25_0.ll -o ir/25_0.ll 2>/dev/null

24_0: 24_0_xlopt 24_0_llopt
	set -o pipefail; (${XCHESSMK}  -C Release_LLVM -P ${CARDANO_AIE_ARCH_MODEL_DIR} +P 4  -DDEPLOYMENT_ELF=1 -D__LOCK_FENCE_MODE__=0 -DAIE_OPTION_SCALAR_FLOAT_ON_VECTOR  +w  +o ../Release 24_0/scripts/24_0.prx) 2>&1 |& tee -a 24_0/24_0.log 24_0/timestamped_log/24_0-${ts}.log
	(readelf --debug-dump=decodedline 24_0/Release/24_0 >> 24_0/Release/24_0.txt)
24_1: 24_1_xlopt 24_1_llopt
	set -o pipefail; (${XCHESSMK}  -C Release_LLVM -P ${CARDANO_AIE_ARCH_MODEL_DIR} +P 4  -DDEPLOYMENT_ELF=1 -D__LOCK_FENCE_MODE__=0 -DAIE_OPTION_SCALAR_FLOAT_ON_VECTOR  +w  +o ../Release 24_1/scripts/24_1.prx) 2>&1 |& tee -a 24_1/24_1.log 24_1/timestamped_log/24_1-${ts}.log
	(readelf --debug-dump=decodedline 24_1/Release/24_1 >> 24_1/Release/24_1.txt)
25_0: 25_0_xlopt 25_0_llopt
	set -o pipefail; (${XCHESSMK}  -C Release_LLVM -P ${CARDANO_AIE_ARCH_MODEL_DIR} +P 4  -DDEPLOYMENT_ELF=1 -D__LOCK_FENCE_MODE__=0 -DAIE_OPTION_SCALAR_FLOAT_ON_VECTOR  +w  +o ../Release 25_0/scripts/25_0.prx) 2>&1 |& tee -a 25_0/25_0.log 25_0/timestamped_log/25_0-${ts}.log
	(readelf --debug-dump=decodedline 25_0/Release/25_0 >> 25_0/Release/25_0.txt)

clean:
	(rm -rf 24_0/Release)
	(rm -rf 24_1/Release)
	(rm -rf 25_0/Release)
