NFCcreate-web/Makefile
2025-09-25 19:04:00 +08:00

159 lines
7.6 KiB
Makefile

# 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 "檢查完成!"