From 40711cbf386b9f3ac975573e07f4fedfb8871e72 Mon Sep 17 00:00:00 2001 From: walon Date: Thu, 15 Jun 2023 09:57:15 +0800 Subject: [PATCH] =?UTF-8?q?[new]=20iOS=E6=89=93=E5=8C=85=E6=97=B6=E7=9B=B4?= =?UTF-8?q?=E6=8E=A5=E5=B0=86=E6=BA=90=E7=A0=81=E5=8C=85=E5=90=AB=E5=88=B0?= =?UTF-8?q?=E5=B7=A5=E7=A8=8B=EF=BC=8C=E4=B8=8D=E5=86=8D=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E5=8D=95=E7=8B=AC=E7=BC=96=E8=AF=91libil2cpp.a=20[remove]=20?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=E6=97=A0=E7=94=A8=E7=9A=84iOSBuild=E7=9B=AE?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Data~/iOSBuild/CMakeLists.txt | 88 ------- Data~/iOSBuild/build_libil2cpp.sh | 19 -- Data~/iOSBuild/external/CMakeLists.txt | 47 ---- Data~/iOSBuild/gen_lump.sh | 64 ----- Data~/iOSBuild/objective/CMakeLists.txt | 62 ----- Editor/3rds/UnityFS.meta | 8 - ...Lil2cppSourceCodeToXcodeproj2021OrOlder.cs | 238 ++++++++++++++++++ ...ppSourceCodeToXcodeproj2021OrOlder.cs.meta | 11 + ...Lil2cppSourceCodeToXcodeproj2022OrNewer.cs | 56 +++++ ...ppSourceCodeToXcodeproj2022OrNewer.cs.meta | 11 + Editor/BuildProcessors/CheckSettings.cs | 4 +- Editor/Installer/InstallerController.cs | 6 - 12 files changed, 317 insertions(+), 297 deletions(-) delete mode 100644 Data~/iOSBuild/CMakeLists.txt delete mode 100644 Data~/iOSBuild/build_libil2cpp.sh delete mode 100644 Data~/iOSBuild/external/CMakeLists.txt delete mode 100644 Data~/iOSBuild/gen_lump.sh delete mode 100644 Data~/iOSBuild/objective/CMakeLists.txt delete mode 100644 Editor/3rds/UnityFS.meta create mode 100644 Editor/BuildProcessors/AddLil2cppSourceCodeToXcodeproj2021OrOlder.cs create mode 100644 Editor/BuildProcessors/AddLil2cppSourceCodeToXcodeproj2021OrOlder.cs.meta create mode 100644 Editor/BuildProcessors/AddLil2cppSourceCodeToXcodeproj2022OrNewer.cs create mode 100644 Editor/BuildProcessors/AddLil2cppSourceCodeToXcodeproj2022OrNewer.cs.meta diff --git a/Data~/iOSBuild/CMakeLists.txt b/Data~/iOSBuild/CMakeLists.txt deleted file mode 100644 index 3345fde..0000000 --- a/Data~/iOSBuild/CMakeLists.txt +++ /dev/null @@ -1,88 +0,0 @@ -# file: CMakeList.txt -cmake_minimum_required(VERSION 3.0) -set(CMAKE_OSX_DEPLOYMENT_TARGET iOS) - -set(TMP $ENV{HUATUO_IL2CPP_SOURCE_DIR}) -if ( NOT TMP ) - message(FATAL_ERROR "需要设置环境变量: HUATUO_IL2CPP_SOURCE_DIR") -else() - message(STATUS "unity il2cpp 路径为: ${TMP}") -endif() - -set(SDK_VERSION $ENV{IPHONESIMULATOR_VERSION}) -if ( SDK_VERSION ) - message(STATUS "使用iPhoneSimulator版本:" ${SDK_VERSION}) -else() - message(STATUS "当前使用默认版本的iPhoneSimulator,可以通过设置环境变量IPHONESIMULATOR_VERSION,指定版本") -endif() - -project(il2cpp) -execute_process(COMMAND sh gen_lump.sh ${PROJECT_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) - -add_subdirectory(external) -add_subdirectory(objective) - - -set(IL2CPP_SOURCE_DIR $ENV{HUATUO_IL2CPP_SOURCE_DIR}) - -message(STATUS "il2cpp project, binary dir: " ${CMAKE_BINARY_DIR}) -message(STATUS "il2cpp project, build dir: " ${PROJECT_BINARY_DIR}) -message(STATUS "il2cpp project, il2cpp source dir: " ${IL2CPP_SOURCE_DIR}) - - -SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON) -find_program(CLANG_EXECUTABLE NAMES clang clang-7 clang-8 clang-9 clang-10) -if (NOT CLANG_EXECUTABLE) - message(FATAL_ERROR "Cannot find any clang executable.") -endif() - - -set(CMAKE_OSX_SYSROOT /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator${SDK_VERSION}.sdk) - -#set(CMAKE_VERBOSE_MAKEFILE ON) -set(CMAKE_CXX_COMPILER clang++) -set(CMAKE_C_COMPILER clang) -#add_compile_options(-x objective-c++) - -# 以下命令为复制的Xcode生成中的命令 -set(CMAKE_CXX_FLAGS "-target arm64-apple-ios11.0 -fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -std=gnu++1z -fmodules -fmodules-prune-interval=86400 -fmodules-prune-after=345600 -fmodules-ignore-macro=IL2CPP_TARGET_IOS=1 -fembed-bitcode -fmodules-ignore-macro=BASELIB_DYNAMICLIBRARY=1 -fmodules-ignore-macro=BASELIB_INLINE_NAMESPACE=il2cpp_baselib -fmodules-ignore-macro=AARCH64 -fmodules-ignore-macro=__aarch64__ -fmodules-ignore-macro=IL2CPP_SUPPORT_THREADS -fmodules-ignore-macro=IL2CPP_THREADS_PTHREAD -Wnon-modular-include-in-framework-module -Werror=non-modular-include-in-framework-module -Wno-trigraphs -fpascal-strings -Os -fno-common -Wno-missing-field-initializers -Wno-missing-prototypes -Werror=return-type -Wdocumentation -Wunreachable-code -Wquoted-include-in-framework-header -Werror=deprecated-objc-isa-usage -Werror=objc-root-class -Wno-non-virtual-dtor -Wno-overloaded-virtual -Wno-exit-time-destructors -Wno-missing-braces -Wparentheses -Wswitch -Wno-unused-function -Wno-unused-label -Wno-unused-parameter -Wno-unused-variable -Wunused-value -Wempty-body -Wuninitialized -Wconditional-uninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wno-float-conversion -Wnon-literal-null-conversion -Wobjc-literal-conversion -Wshorten-64-to-32 -Wno-newline-eof -Wno-c++11-extensions -DIL2CPP_TARGET_IOS=1 -isysroot ${CMAKE_OSX_SYSROOT} -fasm-blocks -fstrict-aliasing -Wdeprecated-declarations -Winvalid-offsetof -g -Wno-sign-conversion -Winfinite-recursion -Wmove -Wcomma -Wblock-capture-autoreleasing -Wstrict-prototypes -Wrange-loop-analysis -Wno-semicolon-before-method-body -Wunguarded-availability ") - - -add_definitions(-DIL2CPP_TARGET_IOS=1) -add_definitions(-DBASELIB_DYNAMICLIBRARY=1) -add_definitions(-DBASELIB_INLINE_NAMESPACE=il2cpp_baselib) -add_definitions(-DAARCH64) -add_definitions(-D__aarch64__) -add_definitions(-DIL2CPP_SUPPORT_THREADS) -add_definitions(-DIL2CPP_THREADS_PTHREAD) -#add_definitions(-DCMAKE_C_COMPILER=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang) -#add_definitions(-DCMAKE_CXX_COMPILER=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++) -#add_definitions(-DIL2CPP_TARGET_DARWIN) -add_definitions(-DIL2CPP_PLATFORM_SUPPORTS_TIMEZONEINFO) - -add_definitions(-MMD) -add_definitions(-MT dependencies) - - -include_directories(${IL2CPP_SOURCE_DIR}/libil2cpp/) -include_directories(${IL2CPP_SOURCE_DIR}/external/) -include_directories(${IL2CPP_SOURCE_DIR}/external/baselib/Include/) -include_directories(${IL2CPP_SOURCE_DIR}/external/bdwgc/include/) -include_directories(${IL2CPP_SOURCE_DIR}/external/baselib/Platforms/OSX/Include/) - -# 修改为本机对应SDK路径 -include_directories(SYSTEM /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include/c++/v1) -include_directories(SYSTEM /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include) - -aux_source_directory(${PROJECT_BINARY_DIR}/lump_cpp LUMP_SOURCE_LIST) -aux_source_directory(${IL2CPP_SOURCE_DIR}/libil2cpp LIBIL2CPP_SOURCE_LIST) - -#find_library(zlib ${PROJECT_SOURCE_DIR}/external) -add_library(il2cpp_original STATIC ${LIBIL2CPP_SOURCE_LIST} ${LUMP_SOURCE_LIST}) -add_dependencies(il2cpp_original external objective) - -add_custom_command(TARGET il2cpp_original - POST_BUILD - COMMAND xcrun -r libtool -static -o libil2cpp.a libil2cpp_original.a external/libexternal.a objective/libobjective.a - COMMENT "post build this is command combine libil2cpp_original.a, libojjective.a and libzlib.a into libil2cpp" - ) diff --git a/Data~/iOSBuild/build_libil2cpp.sh b/Data~/iOSBuild/build_libil2cpp.sh deleted file mode 100644 index 2b41a28..0000000 --- a/Data~/iOSBuild/build_libil2cpp.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -export HUATUO_IL2CPP_SOURCE_DIR=$(pushd ../LocalIl2CppData-OSXEditor/il2cpp > /dev/null && pwd && popd > /dev/null) -export IPHONESIMULATOR_VERSION= - -rm -rf build - -mkdir build -cd build -cmake -DCMAKE_SYSTEM_PROCESSOR=arm64 -DCMAKE_OSX_ARCHITECTURES=arm64 .. -make -j24 - -if [ -f "libil2cpp.a" ] -then - echo 'build succ' -else - echo "build fail" - exit 1 -fi diff --git a/Data~/iOSBuild/external/CMakeLists.txt b/Data~/iOSBuild/external/CMakeLists.txt deleted file mode 100644 index 6ccb239..0000000 --- a/Data~/iOSBuild/external/CMakeLists.txt +++ /dev/null @@ -1,47 +0,0 @@ -# file: external/CMakeList.txt -cmake_minimum_required(VERSION 3.0) -set(CMAKE_OSX_DEPLOYMENT_TARGET iOS) - -set(IL2CPP_SOURCE_DIR $ENV{HUATUO_IL2CPP_SOURCE_DIR}) -set(SDK_VERSION $ENV{IPHONESIMULATOR_VERSION}) - -message(STATUS "external project, external source dir: " ${IL2CPP_SOURCE_DIR}) - -SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON) - -find_program(CLANG_EXECUTABLE NAMES clang clang-7 clang-8 clang-9 clang-10) -if (NOT CLANG_EXECUTABLE) - message(FATAL_ERROR "Cannot find any clang executable.") -endif() - -set(CMAKE_OSX_SYSROOT /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator${SDK_VERSION}.sdk) -set(CMAKE_VERBOSE_MAKEFILE ON) -set(CMAKE_C_COMPILER clang) - -set(CMAKE_C_FLAGS "-x c -target arm64-apple-ios11.0 -fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -std=gnu11 -fmodules -fmodules-prune-interval=86400 -fmodules-prune-after=345600 -fmodules-ignore-macro=IL2CPP_TARGET_IOS=1 -fembed-bitcode -fmodules-ignore-macro=BASELIB_DYNAMICLIBRARY=1 -fmodules-ignore-macro=BASELIB_INLINE_NAMESPACE=il2cpp_baselib -fmodules-ignore-macro=AARCH64 -fmodules-ignore-macro=__aarch64__ -fmodules-ignore-macro=IL2CPP_SUPPORT_THREADS -fmodules-ignore-macro=IL2CPP_THREADS_PTHREAD -Wnon-modular-include-in-framework-module -Werror=non-modular-include-in-framework-module -Wno-trigraphs -fpascal-strings -Os -fno-common -Wno-missing-field-initializers -Wno-missing-prototypes -Werror=return-type -Wdocumentation -Wunreachable-code -Wquoted-include-in-framework-header -Werror=deprecated-objc-isa-usage -Werror=objc-root-class -Wno-missing-braces -Wparentheses -Wswitch -Wunused-function -Wno-unused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wempty-body -Wuninitialized -Wconditional-uninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wno-float-conversion -Wnon-literal-null-conversion -Wobjc-literal-conversion -Wshorten-64-to-32 -Wpointer-sign -Wno-newline-eof -DIL2CPP_TARGET_IOS=1 -isysroot ${CMAKE_OSX_SYSROOT} -fstrict-aliasing -Wdeprecated-declarations -g -Wno-sign-conversion -Winfinite-recursion -Wcomma -Wblock-capture-autoreleasing -Wstrict-prototypes -Wno-semicolon-before-method-body -Wunguarded-availability") - - -add_definitions(-DIL2CPP_TARGET_IOS=1) -add_definitions(-DBASELIB_DYNAMICLIBRARY=1) -add_definitions(-DBASELIB_INLINE_NAMESPACE=il2cpp_baselib) -add_definitions(-DAARCH64) -add_definitions(-D__aarch64__) -#add_definitions(-D__arm64__) -add_definitions(-DIL2CPP_SUPPORT_THREADS) -add_definitions(-DIL2CPP_THREADS_PTHREAD) -#add_definitions(-DCMAKE_C_COMPILER=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang) -#add_definitions(-DCMAKE_CXX_COMPILER=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++) -#add_definitions(-DIL2CPP_TARGET_DARWIN) -add_definitions(-DIL2CPP_PLATFORM_SUPPORTS_TIMEZONEINFO=0) - -add_definitions(-MMD) -add_definitions(-MT dependencies) - -include_directories(${IL2CPP_SOURCE_DIR}/external/) -include_directories(${IL2CPP_SOURCE_DIR}/external/baselib/Include/) -include_directories(${IL2CPP_SOURCE_DIR}/external/bdwgc/include/) -include_directories(${IL2CPP_SOURCE_DIR}/external/baselib/Platforms/OSX/Include/) - -aux_source_directory(${IL2CPP_SOURCE_DIR}/external/zlib/ ZLIB_C_SOURCE_LIST) -add_library(external STATIC ${ZLIB_C_SOURCE_LIST}) - diff --git a/Data~/iOSBuild/gen_lump.sh b/Data~/iOSBuild/gen_lump.sh deleted file mode 100644 index 577a7a8..0000000 --- a/Data~/iOSBuild/gen_lump.sh +++ /dev/null @@ -1,64 +0,0 @@ -echo '=====================================================================' -echo 'gen lump' -echo '$HUATUO_IL2CPP_SOURCE_DIR='${HUATUO_IL2CPP_SOURCE_DIR} #/Applications/Unity/Unity.app/Contents/il2cpp/ - -GEN_SOURCE_DIR=$1 -BASE_DIR=${HUATUO_IL2CPP_SOURCE_DIR}/libil2cpp -echo base dir: ${BASE_DIR} -echo " " -#BASE_DIR=${HUATUO_IL2CPP_SOURCE_DIR}/libil2cpp -function SearchCppFile() -{ - for f in $(ls $1) - do - SUB_DIR=$1/$f - if [ -d ${SUB_DIR} ]; then - SearchCppFile ${SUB_DIR} - fi - done - - CPP_FILE_NUM=`ls -l $1/ | grep "\.cpp$"|wc -l` - if (( ${CPP_FILE_NUM} > 0 )) - then - for f in $1/*.cpp - do - echo "#include \""$f"\"" >> ${OUTPUT_FILE_NAME} - done - fi - - MM_FILE_NUM=`ls -l $1/ | grep "\.mm$"|wc -l` - if (( ${MM_FILE_NUM} > 0 )) - then - for f in $1/*.mm - do - echo "#include \""$f"\"" >> ${OBJECTIVE_FILE_NAME} - done - fi -} - -rm -rf "${GEN_SOURCE_DIR}"/lump_cpp -rm -rf "${GEN_SOURCE_DIR}"/lump_mm -mkdir "${GEN_SOURCE_DIR}"/lump_cpp -mkdir "${GEN_SOURCE_DIR}"/lump_mm - -OBJECTIVE_FILE_NAME=${GEN_SOURCE_DIR}/lump_mm/lump_libil2cpp_ojective.mm -echo "#include \"${BASE_DIR}/il2cpp-config.h\"" > ${OBJECTIVE_FILE_NAME} -echo gen file: ${OBJECTIVE_FILE_NAME} - -for FOLDER in hybridclr vm pch utils vm-utils codegen metadata os debugger mono gc icalls -do - OUTPUT_FILE_NAME=${GEN_SOURCE_DIR}/lump_cpp/lump_libil2cpp_${FOLDER}.cpp - echo "#include \"${BASE_DIR}/il2cpp-config.h\"" > ${OUTPUT_FILE_NAME} - if [ $FOLDER = hybridclr ] || [ $FOLDER = vm ] - then - echo "#include \"${BASE_DIR}/codegen/il2cpp-codegen.h\"" >> ${OUTPUT_FILE_NAME} - fi - SearchCppFile ${BASE_DIR}/${FOLDER} - echo gen file: ${OUTPUT_FILE_NAME} -done - -echo gen done. -echo '=====================================================================' -echo " " - - diff --git a/Data~/iOSBuild/objective/CMakeLists.txt b/Data~/iOSBuild/objective/CMakeLists.txt deleted file mode 100644 index 9e21221..0000000 --- a/Data~/iOSBuild/objective/CMakeLists.txt +++ /dev/null @@ -1,62 +0,0 @@ -# file: CMakeList.txt -cmake_minimum_required(VERSION 3.0) -set(CMAKE_OSX_DEPLOYMENT_TARGET iOS) -project(il2cpp) - -set(IL2CPP_SOURCE_DIR $ENV{HUATUO_IL2CPP_SOURCE_DIR}) -set(SDK_VERSION $ENV{IPHONESIMULATOR_VERSION}) - -message(STATUS "objective project, binary dir: " ${PROJECT_BINARY_DIR}) -message(STATUS "objective project, il2cpp source dir: " ${PROJECT_SOURCE_DIR}) - - -SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON) -find_program(CLANG_EXECUTABLE NAMES clang clang-7 clang-8 clang-9 clang-10) -if (NOT CLANG_EXECUTABLE) - message(FATAL_ERROR "Cannot find any clang executable.") -endif() - - -set(CMAKE_OSX_SYSROOT /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator${SDK_VERSION}.sdk) - -set(CMAKE_VERBOSE_MAKEFILE ON) -set(CMAKE_CXX_COMPILER clang++) -set(CMAKE_C_COMPILER clang) -#add_compile_options(-x objective-c++) - -# 以下命令为复制的Xcode生成中的命令 -set(CMAKE_CXX_FLAGS "-target arm64-apple-ios11.0 -fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -std=gnu++1z -fmodules -fmodules-prune-interval=86400 -fmodules-prune-after=345600 -fmodules-ignore-macro=IL2CPP_TARGET_IOS=1 -fembed-bitcode -fmodules-ignore-macro=BASELIB_DYNAMICLIBRARY=1 -fmodules-ignore-macro=BASELIB_INLINE_NAMESPACE=il2cpp_baselib -fmodules-ignore-macro=AARCH64 -fmodules-ignore-macro=__aarch64__ -fmodules-ignore-macro=IL2CPP_SUPPORT_THREADS -fmodules-ignore-macro=IL2CPP_THREADS_PTHREAD -Wnon-modular-include-in-framework-module -Werror=non-modular-include-in-framework-module -Wno-trigraphs -fpascal-strings -Os -fno-common -Wno-missing-field-initializers -Wno-missing-prototypes -Werror=return-type -Wdocumentation -Wunreachable-code -Wquoted-include-in-framework-header -Werror=deprecated-objc-isa-usage -Werror=objc-root-class -Wno-non-virtual-dtor -Wno-overloaded-virtual -Wno-exit-time-destructors -Wno-missing-braces -Wparentheses -Wswitch -Wno-unused-function -Wno-unused-label -Wno-unused-parameter -Wno-unused-variable -Wunused-value -Wempty-body -Wuninitialized -Wconditional-uninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wno-float-conversion -Wnon-literal-null-conversion -Wobjc-literal-conversion -Wshorten-64-to-32 -Wno-newline-eof -Wno-c++11-extensions -DIL2CPP_TARGET_IOS=1 -isysroot ${SDK_VERSION} -fasm-blocks -fstrict-aliasing -Wdeprecated-declarations -Winvalid-offsetof -g -Wno-sign-conversion -Winfinite-recursion -Wmove -Wcomma -Wblock-capture-autoreleasing -Wstrict-prototypes -Wrange-loop-analysis -Wno-semicolon-before-method-body -Wunguarded-availability ") - - -add_definitions(-DIL2CPP_TARGET_IOS=1) -add_definitions(-DBASELIB_DYNAMICLIBRARY=1) -add_definitions(-DBASELIB_INLINE_NAMESPACE=il2cpp_baselib) -add_definitions(-DAARCH64) -add_definitions(-D__aarch64__) -add_definitions(-DIL2CPP_SUPPORT_THREADS) -add_definitions(-DIL2CPP_THREADS_PTHREAD) -#add_definitions(-DCMAKE_C_COMPILER=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang) -#add_definitions(-DCMAKE_CXX_COMPILER=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++) -#add_definitions(-DIL2CPP_TARGET_DARWIN) -add_definitions(-DIL2CPP_PLATFORM_SUPPORTS_TIMEZONEINFO) - -add_definitions(-MMD) -add_definitions(-MT dependencies) - - -include_directories(${IL2CPP_SOURCE_DIR}/libil2cpp) -include_directories(${IL2CPP_SOURCE_DIR}/external) -include_directories(${IL2CPP_SOURCE_DIR}/external/baselib/Include/) -include_directories(${IL2CPP_SOURCE_DIR}/external/bdwgc/include/) -include_directories(${IL2CPP_SOURCE_DIR}/external/baselib/Platforms/OSX/Include/) - -# 修改为本机对应SDK路径 -include_directories(SYSTEM /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include/c++/v1) -include_directories(SYSTEM /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include) - -get_filename_component(PARENT_PATH ${PROJECT_BINARY_DIR} PATH) -aux_source_directory(${PARENT_PATH}/lump_mm LUMP_SOURCE_LIST) - -#find_library(zlib ${PROJECT_SOURCE_DIR}/external) -add_library(objective STATIC ${LUMP_SOURCE_LIST}) - diff --git a/Editor/3rds/UnityFS.meta b/Editor/3rds/UnityFS.meta deleted file mode 100644 index bee3c03..0000000 --- a/Editor/3rds/UnityFS.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 59ab7ccacd9a9944bb9456da235d6760 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/BuildProcessors/AddLil2cppSourceCodeToXcodeproj2021OrOlder.cs b/Editor/BuildProcessors/AddLil2cppSourceCodeToXcodeproj2021OrOlder.cs new file mode 100644 index 0000000..c43bda6 --- /dev/null +++ b/Editor/BuildProcessors/AddLil2cppSourceCodeToXcodeproj2021OrOlder.cs @@ -0,0 +1,238 @@ +using HybridCLR.Editor.Installer; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using UnityEditor; +#if (UNITY_2020 || UNITY_2021) && UNITY_IOS +using UnityEditor.Build; +using UnityEditor.Callbacks; +using UnityEditor.iOS.Xcode; +using UnityEngine; + +namespace HybridCLR.Editor +{ + public static class AddLil2cppSourceCodeToXcodeproj2021OrOlder + { + //[MenuItem("Test/GenProj")] + //public static void Modify() + //{ + // OnPostProcessBuild(BuildTarget.iOS, $"{SettingsUtil.ProjectDir}/Build-iOS"); + //} + + //[MenuItem("Test/CreateLumps")] + //public static void CreateLumpsCmd() + //{ + // CreateLumps($"{SettingsUtil.LocalIl2CppDir}/libil2cpp", $"{SettingsUtil.HybridCLRDataDir}/lumps"); + //} + + [PostProcessBuild] + public static void OnPostProcessBuild(BuildTarget target, string pathToBuiltProject) + { + if (target != BuildTarget.iOS) + return; + + /* + * 1. 生成lump,并且添加到工程 + 3. 将libil2cpp目录复制到 Library/. 删除旧的. search paths里修改 libil2cpp/include为libil2cpp + 3. Libraries/bdwgc/include -> Libraries/external/bdwgc/include + 4. 将external目录复制到 Library/external。删除旧目录 + 5. 将Library/external/baselib/Platforms/OSX改名为 IOS 全大写 + 6. 将 external/zlib下c 文件添加到工程 + 7. 移除libil2cpp.a + 8. Include path add libil2cpp/os/ClassLibraryPAL/brotli/include + 9. add external/xxHash + */ + + string pbxprojFile = $"{pathToBuiltProject}/Unity-iPhone.xcodeproj/project.pbxproj"; + string srcLibil2cppDir = $"{SettingsUtil.LocalIl2CppDir}/libil2cpp"; + string dstLibil2cppDir = $"{pathToBuiltProject}/Libraries/libil2cpp"; + string lumpDir = $"{pathToBuiltProject}/Libraries/lumps"; + string srcExternalDir = $"{SettingsUtil.LocalIl2CppDir}/external"; + string dstExternalDir = $"{pathToBuiltProject}/Libraries/external"; + //RemoveExternalLibil2cppOption(srcExternalDir, dstExternalDir); + CopyLibil2cppToXcodeProj(srcLibil2cppDir, dstLibil2cppDir); + CopyExternalToXcodeProj(srcExternalDir, dstExternalDir); + var lumpFiles = CreateLumps(dstLibil2cppDir, lumpDir); + var extraSources = GetExtraSourceFiles(dstExternalDir); + var cflags = new List() + { + "-DIL2CPP_MONO_DEBUGGER_DISABLED", + }; + ModifyPBXProject(pathToBuiltProject, pbxprojFile, lumpFiles, extraSources, cflags); + } + + private static void ModifyPBXProject(string pathToBuiltProject, string pbxprojFile, List lumpFiles, List extraFiles, List cflags) + { + var proj = new PBXProject(); + proj.ReadFromFile(pbxprojFile); + string targetGUID = proj.GetUnityFrameworkTargetGuid(); + // 移除旧的libil2cpp.a + var libil2cppGUID = proj.FindFileGuidByProjectPath("Libraries/libil2cpp.a"); + if (!string.IsNullOrEmpty(libil2cppGUID)) + { + proj.RemoveFileFromBuild(targetGUID, libil2cppGUID); + proj.RemoveFile(libil2cppGUID); + File.Delete(Path.Combine(pathToBuiltProject, "Libraries", "libil2cpp.a")); + } + + //var lumpGroupGuid = proj.AddFile("Lumps", $"Classes/Lumps", PBXSourceTree.Group); + + foreach (var lumpFile in lumpFiles) + { + string projPathOfFile = $"Classes/Lumps/{Path.GetFileName(lumpFile.lumpFile)}"; + string lumpGuid = proj.FindFileGuidByProjectPath(projPathOfFile); + if (!string.IsNullOrEmpty(lumpGuid)) + { + proj.RemoveFileFromBuild(targetGUID, lumpGuid); + proj.RemoveFile(lumpGuid); + } + lumpGuid = proj.AddFile(lumpFile.lumpFile, projPathOfFile, PBXSourceTree.Source); + proj.AddFileToBuild(targetGUID, lumpGuid); + } + + foreach (var extraFile in extraFiles) + { + string projPathOfFile = $"Classes/Extrals/{Path.GetFileName(extraFile)}"; + string extraFileGuid = proj.FindFileGuidByProjectPath(projPathOfFile); + if (!string.IsNullOrEmpty(extraFileGuid)) + { + proj.RemoveFileFromBuild(targetGUID, extraFileGuid); + proj.RemoveFile(extraFileGuid); + //Debug.LogWarning($"remove exist extra file:{projPathOfFile} guid:{extraFileGuid}"); + } + var lumpGuid = proj.AddFile(extraFile, projPathOfFile, PBXSourceTree.Source); + proj.AddFileToBuild(targetGUID, lumpGuid); + } + + foreach(var configName in proj.BuildConfigNames()) + { + //Debug.Log($"build config:{bcn}"); + string configGuid = proj.BuildConfigByName(targetGUID, configName); + string headerSearchPaths = "HEADER_SEARCH_PATHS"; + string hspProp = proj.GetBuildPropertyForConfig(configGuid, headerSearchPaths); + //Debug.Log($"config guid:{configGuid} prop:{hspProp}"); + string newPro = hspProp.Replace("libil2cpp/include", "libil2cpp") + .Replace("Libraries/bdwgc", "Libraries/external/bdwgc"); + + if (!newPro.Contains("Libraries/libil2cpp/os/ClassLibraryPAL/brotli/include")) + { + newPro += " $(SRCROOT)/Libraries/libil2cpp/os/ClassLibraryPAL/brotli/include"; + } + if (!newPro.Contains("Libraries/external/xxHash")) + { + newPro += " $(SRCROOT)/Libraries/external/xxHash"; + } + //Debug.Log($"config:{bcn} new prop:{newPro}"); + proj.SetBuildPropertyForConfig(configGuid, headerSearchPaths, newPro); + + string cflagKey = "OTHER_CFLAGS"; + string cfProp = proj.GetBuildPropertyForConfig(configGuid, cflagKey); + foreach (var flag in cflags) + { + if (!cfProp.Contains(flag)) + { + cfProp += " " + flag; + } + } + if (configName.Contains("Debug") && !cfProp.Contains("-DIL2CPP_DEBUG=")) + { + cfProp += " -DIL2CPP_DEBUG=1 -DDEBUG=1"; + } + proj.SetBuildPropertyForConfig(configGuid, cflagKey, cfProp); + + } + proj.WriteToFile(pbxprojFile); + } + + private static void CopyLibil2cppToXcodeProj(string srcLibil2cppDir, string dstLibil2cppDir) + { + BashUtil.RemoveDir(dstLibil2cppDir); + BashUtil.CopyDir(srcLibil2cppDir, dstLibil2cppDir, true); + } + + + private static void CopyExternalToXcodeProj(string srcExternalDir, string dstExternalDir) + { + BashUtil.RemoveDir(dstExternalDir); + BashUtil.CopyDir(srcExternalDir, dstExternalDir, true); + + string baselibPlatfromsDir = $"{dstExternalDir}/baselib/Platforms"; + BashUtil.RemoveDir($"{baselibPlatfromsDir}/IOS"); + BashUtil.CopyDir($"{baselibPlatfromsDir}/OSX", $"{baselibPlatfromsDir}/IOS", true); + } + + class LumpFile + { + public List cppFiles = new List(); + + public readonly string lumpFile; + + public readonly string il2cppConfigFile; + + public LumpFile(string lumpFile, string il2cppConfigFile) + { + this.lumpFile = lumpFile; + this.il2cppConfigFile = il2cppConfigFile; + this.cppFiles.Add(il2cppConfigFile); + } + + public void SaveFile() + { + var lumpFileContent = new List(); + foreach (var file in cppFiles) + { + lumpFileContent.Add($"#include \"{file}\""); + } + File.WriteAllLines(lumpFile, lumpFileContent, Encoding.UTF8); + Debug.Log($"create lump file:{lumpFile}"); + } + } + + private static List CreateLumps(string libil2cppDir, string outputDir) + { + BashUtil.RecreateDir(outputDir); + var cppFiles = Directory.GetFiles(libil2cppDir, "*.cpp", SearchOption.AllDirectories); + int maxCppFilePerLump = 50; + string il2cppConfigFile = $"{libil2cppDir}/il2cpp-config.h"; + var lumpFiles = new List(); + for (int i = 0; i < (cppFiles.Length + maxCppFilePerLump - 1) / maxCppFilePerLump; i++) + { + var lumpFile = new LumpFile($"{outputDir}/lump_{i}.cpp", il2cppConfigFile); + for (int j = 0; j < maxCppFilePerLump; j++) + { + int index = i * maxCppFilePerLump + j; + if (index >= cppFiles.Length) + { + break; + } + lumpFile.cppFiles.Add(cppFiles[index]); + } + lumpFile.SaveFile(); + lumpFiles.Add(lumpFile); + } + + var mmFiles = Directory.GetFiles(libil2cppDir, "*.mm", SearchOption.AllDirectories); + if (mmFiles.Length > 0) + { + var lumpFile = new LumpFile($"{outputDir}/lump_mm.mm", il2cppConfigFile); + foreach (var file in mmFiles) + { + lumpFile.cppFiles.Add(file); + } + lumpFile.SaveFile(); + lumpFiles.Add(lumpFile); + } + return lumpFiles; + } + + private static List GetExtraSourceFiles(string externalDir) + { + var files = new List(); + files.AddRange(Directory.GetFiles($"{externalDir}/zlib", "*.c")); + files.Add($"{externalDir}/xxHash/xxhash.c"); + return files; + } + } +} +#endif \ No newline at end of file diff --git a/Editor/BuildProcessors/AddLil2cppSourceCodeToXcodeproj2021OrOlder.cs.meta b/Editor/BuildProcessors/AddLil2cppSourceCodeToXcodeproj2021OrOlder.cs.meta new file mode 100644 index 0000000..7eba538 --- /dev/null +++ b/Editor/BuildProcessors/AddLil2cppSourceCodeToXcodeproj2021OrOlder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 61948fcb1bc40ba47b8c10b0ae801ebb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/BuildProcessors/AddLil2cppSourceCodeToXcodeproj2022OrNewer.cs b/Editor/BuildProcessors/AddLil2cppSourceCodeToXcodeproj2022OrNewer.cs new file mode 100644 index 0000000..6e80096 --- /dev/null +++ b/Editor/BuildProcessors/AddLil2cppSourceCodeToXcodeproj2022OrNewer.cs @@ -0,0 +1,56 @@ +using HybridCLR.Editor.Installer; +using System.IO; +using System.Text; +using UnityEditor; +using UnityEditor.Build; +using UnityEditor.Callbacks; +using UnityEngine; + +#if UNITY_2022_2_OR_NEWER && UNITY_IOS + +namespace HybridCLR.Editor +{ + public static class AddLil2cppSourceCodeToXcodeproj2022OrNewer + { + //[MenuItem("HybridCLR/Modfiyxcode")] + //public static void Modify() + //{ + // OnPostProcessBuild(BuildTarget.iOS, $"{SettingsUtil.ProjectDir}/Build-iOS"); + //} + + [PostProcessBuild] + public static void OnPostProcessBuild(BuildTarget target, string pathToBuiltProject) + { + if (target != BuildTarget.iOS) + return; + + string pbxprojFile = $"{pathToBuiltProject}/Unity-iPhone.xcodeproj/project.pbxproj"; + RemoveExternalLibil2cppOption(pbxprojFile); + CopyLibil2cppToXcodeProj(pathToBuiltProject); + } + + private static void RemoveExternalLibil2cppOption(string pbxprojFile) + { + string pbxprojContent = File.ReadAllText(pbxprojFile, Encoding.UTF8); + string removeBuildOption = @"--external-lib-il2-cpp=\""$PROJECT_DIR/Libraries/libil2cpp.a\"""; + if (!pbxprojContent.Contains(removeBuildOption)) + { + //throw new BuildFailedException("modified project.pbxproj fail"); + Debug.LogError("[AddLil2cppSourceCodeToXcodeproj] modified project.pbxproj fail"); + return; + } + pbxprojContent = pbxprojContent.Replace(removeBuildOption, ""); + File.WriteAllText(pbxprojFile, pbxprojContent, Encoding.UTF8); + Debug.Log($"[AddLil2cppSourceCodeToXcodeproj] remove il2cpp build option '{removeBuildOption}' from file '{pbxprojFile}'"); + } + + private static void CopyLibil2cppToXcodeProj(string pathToBuiltProject) + { + string srcLibil2cppDir = $"{SettingsUtil.LocalIl2CppDir}/libil2cpp"; + string destLibil2cppDir = $"{pathToBuiltProject}/Il2CppOutputProject/IL2CPP/libil2cpp"; + BashUtil.RemoveDir(destLibil2cppDir); + BashUtil.CopyDir(srcLibil2cppDir, destLibil2cppDir, true); + } + } +} +#endif \ No newline at end of file diff --git a/Editor/BuildProcessors/AddLil2cppSourceCodeToXcodeproj2022OrNewer.cs.meta b/Editor/BuildProcessors/AddLil2cppSourceCodeToXcodeproj2022OrNewer.cs.meta new file mode 100644 index 0000000..e71a765 --- /dev/null +++ b/Editor/BuildProcessors/AddLil2cppSourceCodeToXcodeproj2022OrNewer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a4ce072f7e4a17248a3d9ebfd011356b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/BuildProcessors/CheckSettings.cs b/Editor/BuildProcessors/CheckSettings.cs index 4a2f75a..cd2585a 100644 --- a/Editor/BuildProcessors/CheckSettings.cs +++ b/Editor/BuildProcessors/CheckSettings.cs @@ -17,7 +17,6 @@ namespace HybridCLR.Editor.BuildProcessors public void OnPreprocessBuild(BuildReport report) { HybridCLRSettings globalSettings = SettingsUtil.HybridCLRSettings; -#if !UNITY_2020_1_OR_NEWER || !UNITY_IOS if (!globalSettings.enable || globalSettings.useGlobalIl2cpp) { string oldIl2cppPath = Environment.GetEnvironmentVariable("UNITY_IL2CPP_PATH"); @@ -36,7 +35,6 @@ namespace HybridCLR.Editor.BuildProcessors Debug.Log($"[CheckSettings] UNITY_IL2CPP_PATH 当前值为:'{curIl2cppPath}',更新为:'{SettingsUtil.LocalIl2CppDir}'"); } } -#endif if (!globalSettings.enable) { return; @@ -58,7 +56,7 @@ namespace HybridCLR.Editor.BuildProcessors var installer = new Installer.InstallerController(); if (!installer.HasInstalledHybridCLR()) { - throw new Exception($"你没有初始化HybridCLR,请通过菜单'HybridCLR/Installer'安装"); + throw new BuildFailedException($"你没有初始化HybridCLR,请通过菜单'HybridCLR/Installer'安装"); } HybridCLRSettings gs = SettingsUtil.HybridCLRSettings; diff --git a/Editor/Installer/InstallerController.cs b/Editor/Installer/InstallerController.cs index 1531549..6d4cd53 100644 --- a/Editor/Installer/InstallerController.cs +++ b/Editor/Installer/InstallerController.cs @@ -211,12 +211,6 @@ namespace HybridCLR.Editor.Installer } string workDir = SettingsUtil.HybridCLRDataDir; Directory.CreateDirectory(workDir); - //BashUtil.RecreateDir(workDir); - - string buildiOSDir = $"{workDir}/iOSBuild"; - BashUtil.RemoveDir(buildiOSDir); - BashUtil.CopyDir($"{SettingsUtil.HybridCLRDataPathInPackage}/iOSBuild", buildiOSDir, true); - // create LocalIl2Cpp string localUnityDataDir = SettingsUtil.LocalUnityDataDir;