diff --git a/.editorconfig b/.editorconfig index 5728d12e92..247325fdbd 100644 --- a/.editorconfig +++ b/.editorconfig @@ -10,3 +10,6 @@ end_of_line = lf [*.json] indent_size = 4 + +[*.makefile] +indent_style = tab diff --git a/.gitignore b/.gitignore index 48bf292a4c..a80dfafa96 100644 --- a/.gitignore +++ b/.gitignore @@ -475,6 +475,7 @@ Thumbs.db # build & install build install +install-* # pnpm cache .pnpm-store diff --git a/cmake/macos.cmake b/cmake/macos.cmake index 70479561d9..f41b4fb77c 100644 --- a/cmake/macos.cmake +++ b/cmake/macos.cmake @@ -1,3 +1,5 @@ +# This file is no longer used in the official build process, +# but is kept for reference and potential future use. if (BUILD_XCFRAMEWORK) set(XCFRAMEWORK_DIR "${CMAKE_BINARY_DIR}/xcframework") file(MAKE_DIRECTORY ${XCFRAMEWORK_DIR}) diff --git a/src/MaaCore/CMakeLists.txt b/src/MaaCore/CMakeLists.txt index 0558302c00..0b3d630250 100644 --- a/src/MaaCore/CMakeLists.txt +++ b/src/MaaCore/CMakeLists.txt @@ -32,10 +32,10 @@ set_target_properties(MaaCore PROPERTIES PUBLIC_HEADER "${MaaCore_PUBLIC_HEADERS source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${maa_src}) # 收集resource/tasks目录下的所有文件作为资源 -file(GLOB_RECURSE TASKS_RESOURCE_FILES +file(GLOB_RECURSE TASKS_RESOURCE_FILES "${PROJECT_SOURCE_DIR}/resource/tasks/*" ) -file(GLOB_RECURSE GLOBAL_TASKS_RESOURCE_FILES +file(GLOB_RECURSE GLOBAL_TASKS_RESOURCE_FILES "${PROJECT_SOURCE_DIR}/resource/global/*/resource/tasks/*" ) @@ -44,8 +44,8 @@ target_sources(MaaCore PRIVATE ${TASKS_RESOURCE_FILES}) target_sources(MaaCore PRIVATE ${GLOBAL_TASKS_RESOURCE_FILES}) # 使用source_group创建正确的文件夹结构 -source_group(TREE "${PROJECT_SOURCE_DIR}/resource/tasks" - PREFIX "Resource Files/tasks/CN" +source_group(TREE "${PROJECT_SOURCE_DIR}/resource/tasks" + PREFIX "Resource Files/tasks/CN" FILES ${TASKS_RESOURCE_FILES} ) @@ -53,20 +53,20 @@ source_group(TREE "${PROJECT_SOURCE_DIR}/resource/tasks" foreach(GLOBAL_FILE ${GLOBAL_TASKS_RESOURCE_FILES}) # 从完整路径中提取A部分:${PROJECT_SOURCE_DIR}/resource/global/A/resource/tasks/xxx string(REGEX REPLACE "${PROJECT_SOURCE_DIR}/resource/global/([^/]+)/resource/tasks/.*" "\\1" FOLDER_NAME "${GLOBAL_FILE}") - + # 获取相对于resource/tasks的文件路径部分 string(REGEX REPLACE "${PROJECT_SOURCE_DIR}/resource/global/[^/]+/resource/tasks/(.*)" "\\1" REL_FILE_PATH "${GLOBAL_FILE}") - + # 获取文件的目录部分 get_filename_component(FILE_DIR "${REL_FILE_PATH}" DIRECTORY) - + # 构建VS中的显示路径 if(FILE_DIR) set(VS_GROUP "Resource Files/tasks/${FOLDER_NAME}/${FILE_DIR}") else() set(VS_GROUP "Resource Files/tasks/${FOLDER_NAME}") endif() - + # 设置单个文件的source_group source_group("${VS_GROUP}" FILES "${GLOBAL_FILE}") endforeach() @@ -78,6 +78,8 @@ endif() if(APPLE) set_target_properties(MaaCore PROPERTIES INSTALL_RPATH "@loader_path/") + set_target_properties(MaaCore PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE) + set_target_properties(MaaUtils PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE) elseif(UNIX) set_target_properties(MaaCore PROPERTIES INSTALL_RPATH "$ORIGIN/") endif() diff --git a/tools/build_macos_universal.zsh b/tools/build_macos_universal.zsh index 82008829e3..505dfc1d96 100755 --- a/tools/build_macos_universal.zsh +++ b/tools/build_macos_universal.zsh @@ -32,25 +32,6 @@ else exit 1 fi -rm -rf build -mkdir build -for LIB_NAME in $(ls install-"${arch}" | grep .dylib); do - if [[ "${maa_debug}" -eq 1 ]]; then - mv install-"${arch}"/$LIB_NAME build/$LIB_NAME - else - lipo -create install-arm64/$LIB_NAME install-x86_64/$LIB_NAME -output build/$LIB_NAME - fi -done -cp build-"${arch}"/compile_commands.json build +make -f tools/xcframework.makefile MAA_DEBUG=${maa_debug} -j$(sysctl -n hw.ncpu) all -pushd build -xcodebuild -create-xcframework -library libMaaCore.dylib -headers ../include -output MaaCore.xcframework -xcodebuild -create-xcframework -library libMaaUtils.dylib -output MaaUtils.xcframework -xcodebuild -create-xcframework -library libfastdeploy_ppocr.dylib -output fastdeploy_ppocr.xcframework -xcodebuild -create-xcframework -library libonnxruntime.*.dylib -output ONNXRuntime.xcframework -xcodebuild -create-xcframework -library libopencv*.dylib -output OpenCV.xcframework -rm -rf *.dylib -popd - -rm -rf install-arm64 install-x86_64 popd diff --git a/tools/xcframework.makefile b/tools/xcframework.makefile new file mode 100644 index 0000000000..f531c10408 --- /dev/null +++ b/tools/xcframework.makefile @@ -0,0 +1,54 @@ +ARCH ?= $(shell uname -m) +MAA_DEBUG ?= 1 + +BUILD_DIR := build + +XCFRAMEWORKS := $(BUILD_DIR)/MaaCore.xcframework \ + $(BUILD_DIR)/MaaUtils.xcframework \ + $(BUILD_DIR)/fastdeploy_ppocr.xcframework \ + $(BUILD_DIR)/ONNXRuntime.xcframework \ + $(BUILD_DIR)/OpenCV.xcframework + +.PHONY: all clean + +all: $(XCFRAMEWORKS) $(BUILD_DIR)/compile_commands.json + +$(BUILD_DIR): + @mkdir -p $(BUILD_DIR) + +$(BUILD_DIR)/compile_commands.json: build-$(ARCH)/compile_commands.json | $(BUILD_DIR) + @cp $< $@ + +ifeq ($(MAA_DEBUG), 0) + SRC_DIRS := install-arm64 install-x86_64 +else + SRC_DIRS := install-$(ARCH) +endif + +_get_and_check = $(if $(filter-out 1,$(words $(wildcard $(1)/$(2)))),\ + $(error Ambiguous dylibs: $(wildcard $(1)/$(2))),\ + $(wildcard $(1)/$(2))) + +get_srcs = $(foreach dir,$(SRC_DIRS),$(call _get_and_check,$(dir),$(1))) + +$(BUILD_DIR)/MaaCore.xcframework: $(call get_srcs,libMaaCore.dylib) +$(BUILD_DIR)/MaaUtils.xcframework: $(call get_srcs,libMaaUtils.dylib) +$(BUILD_DIR)/fastdeploy_ppocr.xcframework: $(call get_srcs,libfastdeploy_ppocr.dylib) +$(BUILD_DIR)/ONNXRuntime.xcframework: $(call get_srcs,libonnxruntime*.dylib) +$(BUILD_DIR)/OpenCV.xcframework: $(call get_srcs,libopencv*.dylib) + +$(BUILD_DIR)/MaaCore.xcframework: EXTRA_ARGS := -headers include + +$(XCFRAMEWORKS): | $(BUILD_DIR) + @rm -rf $@ + @TMP_LIB="$(BUILD_DIR)/$$(basename "$<")"; \ + if [ "$(MAA_DEBUG)" -eq 0 ]; then \ + lipo -create $^ -output "$$TMP_LIB"; \ + else \ + cp "$<" "$$TMP_LIB"; \ + fi; \ + xcodebuild -create-xcframework -library "$$TMP_LIB" $(EXTRA_ARGS) -output $@; \ + rm -f "$$TMP_LIB" + +clean: + rm -rf $(BUILD_DIR)