@@ -21,15 +21,45 @@ NO_AVX_FLAGS := -DGGML_AVX=OFF -DGGML_AVX2=OFF -DGGML_FMA=OFF -DGGML_F16C=OFF
2121# Common CMake parameters
2222CMAKE_COMMON_PARAMS := -DCMAKE_BUILD_TYPE=$(BUILD_TYPE )
2323
24+ define select_linux_compiler
25+ $(eval ARCH := $(1 ) )
26+ $(if $(filter x64,$(ARCH ) ) ,\
27+ $(eval CC := gcc) \
28+ $(eval CXX := g++) \
29+ $(eval CMAKE_ARCH_FLAGS := -DCMAKE_SYSTEM_PROCESSOR=x86_64) ,\
30+ $(if $(filter aarch64,$(ARCH ) ) ,\
31+ $(eval CC := aarch64-linux-gnu-gcc) \
32+ $(eval CXX := aarch64-linux-gnu-g++) \
33+ $(eval CMAKE_ARCH_FLAGS := -DCMAKE_SYSTEM_PROCESSOR=aarch64) \
34+ $(eval EXTRA_FLAGS += -DCMAKE_TOOLCHAIN_FILE=$(CURDIR ) /aarch64-toolchain.cmake) ,\
35+ $(error Unsupported architecture: $(ARCH ) ) ) )
36+ endef
37+
38+ # Create toolchain file for aarch64 cross-compilation
39+ define create_aarch64_toolchain
40+ echo '# Toolchain file for aarch64 cross-compilation' > aarch64-toolchain.cmake
41+ echo 'set(CMAKE_SYSTEM_NAME Linux)' >> aarch64-toolchain.cmake
42+ echo 'set(CMAKE_SYSTEM_PROCESSOR aarch64)' >> aarch64-toolchain.cmake
43+ echo 'set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)' >> aarch64-toolchain.cmake
44+ echo 'set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)' >> aarch64-toolchain.cmake
45+ echo 'set(CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu)' >> aarch64-toolchain.cmake
46+ echo 'set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)' >> aarch64-toolchain.cmake
47+ echo 'set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)' >> aarch64-toolchain.cmake
48+ echo 'set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)' >> aarch64-toolchain.cmake
49+ endef
2450
2551# Linux base build template
2652define linux_build
27- $(eval ARCH := $(1 ) )
53+ $(call select_compiler, $(1 ) )
2854 $(eval BUILD_PATH := $(BUILD_DIR ) /linux-$(ARCH )$(2 ) )
2955 $(eval EXTRA_FLAGS := $(3 ) )
56+ $(if $(filter aarch64,$(ARCH ) ) ,$(call create_aarch64_toolchain) )
57+
3058 rm -rf $(BUILD_PATH )
31- $(CMAKE ) -S $(WHISPER_CPP_DIR ) -B $(BUILD_PATH ) -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=$(ARCH ) $(CMAKE_COMMON_PARAMS ) $(EXTRA_FLAGS )
32- $(CMAKE ) --build $(BUILD_PATH )
59+
60+ CC=$(CC ) CXX=$(CXX ) $(CMAKE ) -S $(WHISPER_CPP_DIR ) -B $(BUILD_PATH ) -DCMAKE_SYSTEM_NAME=Linux $(CMAKE_ARCH_FLAGS ) $(CMAKE_COMMON_PARAMS ) $(EXTRA_FLAGS )
61+ CC=$(CC ) CXX=$(CXX ) $(CMAKE ) --build $(BUILD_PATH )
62+
3363 mkdir -p $(RUNTIME_DIR ) /linux-$(ARCH )$(2 )
3464 cp $(BUILD_PATH ) /src/libwhisper.so $(RUNTIME_DIR ) /linux-$(ARCH )$(2 ) /
3565 cp $(BUILD_PATH ) /ggml/src/libggml.so $(RUNTIME_DIR ) /linux-$(ARCH )$(2 ) /
0 commit comments