diff --git a/HybridCLRData/README.md b/HybridCLRData/README.md new file mode 100644 index 00000000..436331c2 --- /dev/null +++ b/HybridCLRData/README.md @@ -0,0 +1,22 @@ +# 使用说明 + +这个目录主要包含 + +- huatuo相关仓库 +- 本地il2cpp目录 +- 其他生成的目录 + +## 安装huatuo + +正常情况下,安装huatuo需要替换Unity安装目录下libil2cpp目录为huatuo版本的实现,但Unity允许使用环境变量UNITY_IL2CPP_PATH自定义%IL2CPP_PATH%的位置。 +因此我们不修改原始的il2cpp目录,直接在本地创建huatuo版本的il2cpp,并让环境变量指向它 + +安装流程 + +- 酌情修改 init_local_il2cpp_data.bat(或.sh)文件中代码 + - `set IL2CPP_BRANCH=2020.3.33` 改成你的版本(目前只有2020.3.33或2021.3.1) + - `set IL2CPP_PATH=<你的Unity editor的il2cpp目录的路径>` 改成你的Unity安装目录 +- 运行 init_local_il2cpp_data.bat 或.sh 文件 创建本地il2cpp目录,即 LocalIl2CppData 目录。 + +如果看到初始化成功,表示运行成功。否则请参照文档,对应 .bat或.sh文件,自己查找错误原因。 + diff --git a/HybridCLRData/iOSBuild/CMakeLists.txt b/HybridCLRData/iOSBuild/CMakeLists.txt new file mode 100644 index 00000000..3345fde5 --- /dev/null +++ b/HybridCLRData/iOSBuild/CMakeLists.txt @@ -0,0 +1,88 @@ +# 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/HybridCLRData/iOSBuild/build_libil2cpp.sh b/HybridCLRData/iOSBuild/build_libil2cpp.sh new file mode 100644 index 00000000..af3cc3ae --- /dev/null +++ b/HybridCLRData/iOSBuild/build_libil2cpp.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +export HUATUO_IL2CPP_SOURCE_DIR=$(pushd ../LocalIl2CppData/il2cpp > /dev/null && pwd && popd > /dev/null) +export IPHONESIMULATOR_VERSION= + +rm -rf build + +mkdir build +cd build +cmake .. +make -j4 + +if [ -f "libil2cpp.a" ] +then + echo 'build succ' +else + echo "build fail" + exit 1 +fi diff --git a/HybridCLRData/iOSBuild/external/CMakeLists.txt b/HybridCLRData/iOSBuild/external/CMakeLists.txt new file mode 100644 index 00000000..6ccb2398 --- /dev/null +++ b/HybridCLRData/iOSBuild/external/CMakeLists.txt @@ -0,0 +1,47 @@ +# 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/HybridCLRData/iOSBuild/gen_lump.sh b/HybridCLRData/iOSBuild/gen_lump.sh new file mode 100644 index 00000000..5a1ccab4 --- /dev/null +++ b/HybridCLRData/iOSBuild/gen_lump.sh @@ -0,0 +1,64 @@ +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 huatuo 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 = huatuo ] || [ $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/HybridCLRData/iOSBuild/objective/CMakeLists.txt b/HybridCLRData/iOSBuild/objective/CMakeLists.txt new file mode 100644 index 00000000..9e21221b --- /dev/null +++ b/HybridCLRData/iOSBuild/objective/CMakeLists.txt @@ -0,0 +1,62 @@ +# 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/HybridCLRData/init_local_il2cpp_data.bat b/HybridCLRData/init_local_il2cpp_data.bat new file mode 100644 index 00000000..31c8ad4d --- /dev/null +++ b/HybridCLRData/init_local_il2cpp_data.bat @@ -0,0 +1,61 @@ +@echo off + +rem set default branch +set IL2CPP_BRANCH=2020.3.33 + +rd /s /q hybridclr_repo +rem git clone https://github.com/focus-creative-games/hybridclr +git clone --depth=1 https://gitee.com/focus-creative-games/hybridclr hybridclr_repo + +rd /s /q il2cpp_plus_repo +rem git clone https://github.com/focus-creative-games/il2cpp_huatuo +git clone --depth=1 -b %IL2CPP_BRANCH% https://gitee.com/focus-creative-games/il2cpp_plus il2cpp_plus_repo + + +rem replace with right Unity Editor Install path +set IL2CPP_PATH=C:\Program Files\Unity\Hub\Editor\2020.3.33f1\Editor\Data\il2cpp + +if not exist "%IL2CPP_PATH%" ( + echo "please set correct IL2CPP_PATH value" + goto EXIT +) + +set LOCAL_IL2CPP_DATA=LocalIl2CppData + +if not exist %LOCAL_IL2CPP_DATA% ( + mkdir %LOCAL_IL2CPP_DATA% +) + +rem need copdy MonoBleedingEdge +set MBE=%LOCAL_IL2CPP_DATA%\MonoBleedingEdge +if not exist %MBE% ( + xcopy /q /i /e "%IL2CPP_PATH%\..\MonoBleedingEdge" %MBE% +) + + +rem copy il2cpp +set IL2CPP=%LOCAL_IL2CPP_DATA%\il2cpp +if not exist %IL2CPP% ( + xcopy /q /i /e "%IL2CPP_PATH%" %IL2CPP% +) + +set HYBRIDCLR_REPO_DIR=hybridclr_repo + +set IL2CPP_PLUS_REPO_DIR=il2cpp_plus_repo + +set LIBIL2CPP_PATH=%LOCAL_IL2CPP_DATA%\il2cpp\libil2cpp +rd /s /q %LIBIL2CPP_PATH% + +xcopy /q /i /e %IL2CPP_PLUS_REPO_DIR%\libil2cpp %LIBIL2CPP_PATH% +xcopy /q /i /e %HYBRIDCLR_REPO_DIR%\huatuo %LIBIL2CPP_PATH%\huatuo + +rem clean il2cpp build cache +set IL2CPP_CACHE=..\Library\Il2cppBuildCache +echo clean %IL2CPP_CACHE% +if exist "%IL2CPP_CACHE%" rd /s /q "%IL2CPP_CACHE%" + +echo succ + +:EXIT + +PAUSE \ No newline at end of file diff --git a/HybridCLRData/init_local_il2cpp_data.sh b/HybridCLRData/init_local_il2cpp_data.sh new file mode 100644 index 00000000..3ef3667b --- /dev/null +++ b/HybridCLRData/init_local_il2cpp_data.sh @@ -0,0 +1,69 @@ +#!/bin/bash + +# 设置默认分支为2020.3.33,避免很多人忘了切分支 +IL2CPP_BRANCH=2020.3.33 + +rm -rf hybridclr_repo +# clone huatuo仓库,国内推荐用 gitee +# git clone https://github.com/focus-creative-games/hybridclr +git clone --depth=1 https://gitee.com/focus-creative-games/hybridclr hybridclr_repo + +rm -rf il2cpp_plus_repo +# git clone https://github.com/focus-creative-games/il2cpp_plus +git clone --depth=1 -b $IL2CPP_BRANCH https://gitee.com/focus-creative-games/il2cpp_plus il2cpp_plus_repo + + +# 请修改为你所用Unity的il2cpp目录 +# 一般像这样 +# C:\Program Files\Unity\Hub\Editor\2020.3.33f1c2\Editor\Data\il2cpp +# /Applications/Unity/Hub/Editor/2020.3.33f1/Unity.app/Contents/il2cpp +IL2CPP_PATH='/Applications/Unity/Hub/Editor/2020.3.33f1/Unity.app/Contents/il2cpp' + +if [ ! -d "$IL2CPP_PATH" ] ; then + echo "你未指定正确的il2cpp路径" + exit 1 +fi + +LOCAL_IL2CPP_DATA=LocalIl2CppData + +if [ ! -d "$LOCAL_IL2CPP_DATA" ]; then + mkdir $LOCAL_IL2CPP_DATA +fi + + +# Unity 打包时允许使用环境变量UNITY_IL2CPP_PATH自定义%IL2CPP_PATH%的位置 +# 但同时又要求同级目录包含MonoBleedingEdge,因此需要拷贝这两个目录 + +# 拷贝 MonoBleedingEdge 目录 +MBE=$LOCAL_IL2CPP_DATA/MonoBleedingEdge +if [ ! -d "$MBE" ]; then + cp -r "$IL2CPP_PATH/../MonoBleedingEdge" $MBE +fi + + +# 拷贝il2cpp目录 +IL2CPP=$LOCAL_IL2CPP_DATA/il2cpp +if [ ! -d "$IL2CPP" ]; then + cp -r "$IL2CPP_PATH" "$IL2CPP" +fi + +# 接下来替换 il2cpp目录下的libil2cpp为 huatuo修改后的版本 +# 需要使用 {https://gitee.com/focus-creative-games/il2cpp_plus}/libil2cpp 替换 il2cpp/libil2cpp目录 +# 需要使用 {https://gitee.com/focus-creative-games/hybridclr}/huatuo 添加到 il2cpp/libil2cpp目录下,即il2cpp/libil2cpp/huatuo + +HYBRIDCLR_REPO_DIR=hybridclr_repo +IL2CPP_PLUS_REPO_DIR=il2cpp_plus_repo + +LIBIL2CPP_PATH=$LOCAL_IL2CPP_DATA/il2cpp/libil2cpp +rm -rf "$LIBIL2CPP_PATH" + +cp -r "$IL2CPP_PLUS_REPO_DIR/libil2cpp" "$LIBIL2CPP_PATH" +cp -r "$HYBRIDCLR_REPO_DIR/huatuo" "$LIBIL2CPP_PATH/huatuo" + +# 务必清除缓存,不然build仍然使用旧版本。 +# 只影响直接build的情况,不影响导出工程的情形。 + +echo 清除 Library/Il2cppBuildCache 缓存目录 +rm -rf ../Library/Il2cppBuildCache + +echo 初始化成功