# Digital Logic # www.d-logic.net # # Helper Makefile # #$(VERBOSE).SILENT: PRJNAME = nt4h_c_example all : help help info : echo "----------------------------------------------" echo "Making example to test Reader opening function" echo "Project output name: $(PRJNAME)" echo "----------------------------------------------" echo "For 32 bit Windows - type: 'make win32'" echo "For 64 bit Windows - type: 'make win64'" echo "For 32 bit Linux - type: 'make lin32'" echo "For 64 bit Linux - type: 'make lin64'" echo "For 64 bit Mac OS - type: 'make osx'" echo "----------------------------------------------" echo "ARM Linux 交叉編譯選項:" echo "For ARM 64-bit (aarch64) - type: 'make arm64'" echo "For ARM 32-bit (armhf) - type: 'make arm32'" echo "For ARM 32-bit (armel) - type: 'make armel'" echo "For ARM 64-bit (static) - type: 'make arm64-static'" echo "For ARM 32-bit (static) - type: 'make arm32-static'" echo "----------------------------------------------" echo "API 服務器編譯選項:" echo "For API Server (x64) - type: 'make api-server'" echo "For API Server (ARM64) - type: 'make api-server-arm64'" echo "For API Server (ARM32) - type: 'make api-server-arm32'" echo "----------------------------------------------" lin32 linux32 : cd linux32_release && gcc -m32 -o $(PRJNAME) ../src/*.c -I../ufr-lib/include -L../ufr-lib/linux/x86 -luFCoder-x86 -Wl,-R../ufr-lib/linux/x86 echo "Making done, without errors." echo "To run the example - type:" echo " 'cd linux32_release && ./$(PRJNAME)'" lin64 linux64 : cd linux64_release && gcc -m64 -o $(PRJNAME) ../src/main.c ../src/utils.c ../src/uFR.c ../src/conio_gnu.c -I../ufr-lib/include -L../ufr-lib/linux/x86_64 -luFCoder-x86_64 -Wl,-R../ufr-lib/linux/x86_64 echo "Making done, without errors." echo "To run the example - type:" echo " 'cd linux64_release && ./$(PRJNAME)'" # API 服務器編譯規則 api-server : cd linux64_release && gcc -m64 -o cmac_api_server ../src/api_server.c ../src/utils.c -I../ufr-lib/include -L../ufr-lib/linux/x86_64 -luFCoder-x86_64 -lpthread -Wl,-R../ufr-lib/linux/x86_64 echo "API 服務器編譯完成!" echo "執行方式: 'cd linux64_release && ./cmac_api_server [port]'" # ARM 版本的 API 服務器 api-server-arm64 : -mkdir -p arm64_release aarch64-linux-gnu-gcc -o arm64_release/cmac_api_server src/api_server.c src/utils.c -I./ufr-lib/include -L./ufr-lib/linux/aarch64 -luFCoder-aarch64 -lpthread -lm -Wl,-rpath,./ufr-lib/linux/aarch64 echo "ARM64 API 服務器編譯完成!" api-server-arm32 : -mkdir -p arm32_release arm-linux-gnueabihf-gcc -o arm32_release/cmac_api_server src/api_server.c src/utils.c -I./ufr-lib/include -L./ufr-lib/linux/arm-hf -luFCoder-armhf -lpthread -lm -Wl,-rpath,./ufr-lib/linux/arm-hf echo "ARM32 API 服務器編譯完成!" win32 : echo "If You see error like: 'skipping incompatible ufr-lib/windows/x86/uFCoder-x86.dll when searching for...'" echo " This means You have the gcc compiler for 64 bit" echo " type 'make win64' instead of 'make win32'" echo "" cd win32_release && gcc -o $(PRJNAME) ../src/*.c -I../ufr-lib/include -L../ufr-lib/windows/x86 -luFCoder-x86 -Wl,-R../ufr-lib/windows/x86 -Wl,--enable-stdcall-fixup echo "Making done, without errors." echo "To run the example - type:" echo " 'cd win32_release'" echo " 'run_me'" # generate run_me echo "@echo off" > win32_release/run_me.cmd echo "set path=../ufr-lib/windows/x86;%path%" >> win32_release/run_me.cmd echo "$(PRJNAME)" >> win32_release/run_me.cmd win64 : echo "If You see error like: 'ufr-lib/windows/x86_64/uFCoder-x86_64.dll: file not recognized: File format not recognized'" echo " This means You have the gcc compiler for 32 bit" echo " type 'make win32' instead of 'make win64'" echo "" cd win64_release && gcc -o $(PRJNAME) ../src/*.c -I../ufr-lib/include -L../ufr-lib/windows/x86_64 -luFCoder-x86_64 -Wl,-R../ufr-lib/windows/x86_64 echo "Making done, without errors." echo "You must use library from the 'lib\windows\x86_64\'" echo "" echo "To run the example - type:" echo " 'cd win64_release'" echo " 'run_me'" # generate run_me echo "@echo off" > win64_release/run_me.cmd echo "set path=../ufr-lib/windows/x86_64;%path%" >> win64_release/run_me.cmd echo "$(PRJNAME)" >> win64_release/run_me.cmd osx : -mkdir -p macos-x86_64-release cd macos-x86_64-release && gcc -o $(PRJNAME) -I../ufr-lib/include ../src/*.c -L../ufr-lib/macos/x86_64 -luFCoder-x86_64 -Xlinker -rpath ../ufr-lib/macos/x86_64/ install_name_tool -change "libuFCoder-x86_64.dylib" "@loader_path/../ufr-lib/macos/x86_64/ufr-libuFCoder-x86_64.dylib" macos-x86_64-release/$(PRJNAME) echo "Making on 64-bit Intel macOS is done - without errors." echo "Output is in macos-x86_64-release/" echo # running help message echo "You must use library from the 'ufr-lib/macos/x86_64'" echo "" echo "To run the example - type:" echo " 'cd macos-x86_64-release && ./$(PRJNAME)'" # ARM Linux 交叉編譯規則 arm64 aarch64 linux-arm64 : -mkdir -p arm64_release aarch64-linux-gnu-gcc -o arm64_release/$(PRJNAME) src/*.c -I./ufr-lib/include -L./ufr-lib/linux/aarch64 -luFCoder-aarch64 -lm -Wl,-rpath,./ufr-lib/linux/aarch64 echo "ARM64 編譯完成!" echo "輸出位置: arm64_release/" echo "執行方式: 'cd arm64_release && ./$(PRJNAME)'" echo "注意: 需要將 ufr-lib/linux/aarch64/ 目錄複製到目標 ARM64 設備" arm32 armhf linux-arm32 : -mkdir -p arm32_release arm-linux-gnueabihf-gcc -o arm32_release/$(PRJNAME) src/*.c -I./ufr-lib/include -L./ufr-lib/linux/arm-hf -luFCoder-armhf -lm -Wl,-rpath,./ufr-lib/linux/arm-hf echo "ARM32 (hard float) 編譯完成!" echo "輸出位置: arm32_release/" echo "執行方式: 'cd arm32_release && ./$(PRJNAME)'" echo "注意: 需要將 ufr-lib/linux/arm-hf/ 目錄複製到目標 ARM32 設備" armel linux-armel : -mkdir -p armel_release arm-linux-gnueabi-gcc -o armel_release/$(PRJNAME) src/*.c -I./ufr-lib/include -L./ufr-lib/linux/arm-el -luFCoder-armel -lm -Wl,-rpath,./ufr-lib/linux/arm-el echo "ARM (little endian) 編譯完成!" echo "輸出位置: armel_release/" echo "執行方式: 'cd armel_release && ./$(PRJNAME)'" echo "注意: 需要將 ufr-lib/linux/arm-el/ 目錄複製到目標 ARMEL 設備" # ARM 靜態連結版本 (無需動態函式庫) arm64-static aarch64-static : -mkdir -p arm64_static_release aarch64-linux-gnu-gcc -static -DDL_USE_STATIC_LIB -o arm64_static_release/$(PRJNAME) src/*.c -I./ufr-lib/include -L./ufr-lib/linux/static-aarch64 -luFCoder-aarch64 -lpthread -ldl -lm echo "ARM64 靜態編譯完成!" echo "輸出位置: arm64_static_release/" echo "執行方式: 'cd arm64_static_release && ./$(PRJNAME)'" echo "優點: 無需額外函式庫,可直接在 ARM64 設備上執行" arm32-static armhf-static : -mkdir -p arm32_static_release arm-linux-gnueabihf-gcc -static -DDL_USE_STATIC_LIB -o arm32_static_release/$(PRJNAME) src/*.c -I./ufr-lib/include -L./ufr-lib/linux/static-armhf -luFCoder-armhf -lpthread -ldl -lm echo "ARM32 靜態編譯完成!" echo "輸出位置: arm32_static_release/" echo "執行方式: 'cd arm32_static_release && ./$(PRJNAME)'" echo "優點: 無需額外函式庫,可直接在 ARM32 設備上執行" # 檢查交叉編譯工具 check-cross-tools : echo "檢查 ARM 交叉編譯工具..." which aarch64-linux-gnu-gcc || echo "❌ 缺少 aarch64-linux-gnu-gcc (安裝: sudo apt install gcc-aarch64-linux-gnu)" which arm-linux-gnueabihf-gcc || echo "❌ 缺少 arm-linux-gnueabihf-gcc (安裝: sudo apt install gcc-arm-linux-gnueabihf)" which arm-linux-gnueabi-gcc || echo "❌ 缺少 arm-linux-gnueabi-gcc (安裝: sudo apt install gcc-arm-linux-gnueabi)" echo "檢查完成!"