├── .gitignore ├── LICENSE ├── build ├── Android.mk ├── Application.mk ├── DistributionSummary.plist ├── Ecs │ ├── CMakeLists.txt │ ├── cmake │ │ ├── android.toolchain.cmake │ │ ├── android.windows.toolchain.cmake │ │ ├── iOS.cmake │ │ └── ios.toolchain.cmake │ ├── generate_ios.sh │ └── generate_osx.sh ├── ExportOptions-tf.plist ├── ExportOptions.plist ├── accelerator.sh ├── build_android.sh ├── build_android_ecs.sh ├── build_dll.sh ├── build_ios.sh ├── build_ios_batch.sh ├── build_ios_ecs.sh ├── build_ios_native.sh ├── build_ios_sha.sh ├── build_ios_test.sh ├── build_log.sh ├── build_tf.sh ├── build_upr.sh ├── build_windows.sh ├── build_windows_sha.sh ├── clean_bundle.sh ├── commits ├── disk_clean.sh ├── envinfo.sh ├── get_xcode_proj.sh ├── git.sh ├── git_tag.sh ├── mailformat ├── operation.py ├── qrcode.sh ├── sendmail.sh ├── symbol.sh ├── timer.plist ├── timer.sh ├── timerjob.sh ├── upload.sh ├── xbuild2dll.sh └── zip_filter.sh ├── build_ab ├── buildab.sh ├── db.php ├── db.sql ├── do_buildab.sh ├── do_gitop.sh ├── do_reset.sh ├── do_uploadofficial.sh ├── gitop.sh ├── log.php ├── log.txt ├── login.html ├── loglist.php ├── logmv.sh ├── main.php ├── ob2release.sh ├── read.html ├── readme.md ├── reset.sh ├── server.php ├── shell.php ├── spinner.gif ├── style.css ├── test.php ├── test.sh ├── upload.sh └── uploadofficial.sh └── readme.md /.gitignore: -------------------------------------------------------------------------------- 1 | log/ 2 | .DS_Store 3 | **/__MACOSX/ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 huailiang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /build/Android.mk: -------------------------------------------------------------------------------- 1 | LOCAL_PATH := $(call my-dir) 2 | 3 | include $(CLEAR_VARS) 4 | 5 | #LOCAL_CFLAGS += -D_Client_Ecs_ 6 | 7 | LOCAL_CPPFLAGS += -fexceptions 8 | 9 | # c++目录的相对路径 10 | MY_FILES_PATH := $(LOCAL_PATH)/ 11 | 12 | # c++后缀 13 | MY_FILES_SUFFIX := %.cpp %.cc %.cxx 14 | 15 | # 递归遍历目录下的所有的文件 16 | rwildcard=$(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2)) 17 | 18 | # 获取相应的源文件 19 | MY_ALL_FILES := $(foreach src_path,$(MY_FILES_PATH), $(call rwildcard,$(src_path),*.*) ) 20 | MY_ALL_FILES := $(MY_ALL_FILES:$(MY_CPP_PATH)/./%=$(MY_CPP_PATH)%) 21 | MY_SRC_LIST := $(filter $(MY_FILES_SUFFIX),$(MY_ALL_FILES)) 22 | MY_SRC_LIST := $(MY_SRC_LIST:$(LOCAL_PATH)/%=%) 23 | 24 | # 去除字串的重复单词 25 | define uniq = 26 | $(eval seen :=) 27 | $(foreach _,$1,$(if $(filter $_,${seen}),,$(eval seen += $_))) 28 | ${seen} 29 | endef 30 | 31 | # 递归遍历获取所有目录 32 | MY_ALL_DIRS := $(dir $(foreach src_path,$(MY_FILES_PATH), $(call rwildcard,$(src_path),*/) ) ) 33 | MY_ALL_DIRS := $(call uniq,$(MY_ALL_DIRS)) 34 | 35 | # 赋值给NDK编译系统 36 | LOCAL_SRC_FILES := $(MY_SRC_LIST) 37 | LOCAL_C_INCLUDES:= $(LOCAL_PATH)/ 38 | 39 | LOCAL_SHARED_LIBRARIES:= 40 | LOCAL_MODULE:= libXuthus 41 | LOCAL_MODULE_TAGS := optional 42 | LOCAL_LDLIBS += -llog 43 | include $(BUILD_SHARED_LIBRARY) -------------------------------------------------------------------------------- /build/Application.mk: -------------------------------------------------------------------------------- 1 | APP_ABI := armeabi-v7a x86 2 | APP_OPTIM := debug 3 | APP_PLATFORM := android-16 4 | #APP_BUILD_SCRIPT := Android.mk 5 | APP_STL := c++_static 6 | APP_CPPFLAGS += -std=c++17 -fexceptions 7 | APP_CPPFLAGS += -O2 -g -------------------------------------------------------------------------------- /build/DistributionSummary.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Unity-iPhone.ipa 6 | 7 | 8 | architectures 9 | 10 | armv7 11 | arm64 12 | 13 | certificate 14 | 15 | SHA1 16 | 17 | dateExpires 18 | 19 | type 20 | Unknown 21 | 22 | name 23 | cfgame.app 24 | team 25 | 26 | id 27 | AH272BR984 28 | name 29 | xutao rong 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /build/Ecs/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | 2 | cmake_minimum_required(VERSION 3.1) 3 | 4 | project(XECS) 5 | 6 | if ( IOS ) 7 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fembed-bitcode") 8 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fembed-bitcode") 9 | endif () 10 | 11 | option ( GC64 "using gc64" OFF ) 12 | option ( COMPATIBLE_FORMAT "compatible format" OFF ) 13 | 14 | find_path(XECS_PROJECT_DIR NAMES SConstruct 15 | PATHS 16 | ${CMAKE_SOURCE_DIR} 17 | NO_DEFAULT_PATH 18 | ) 19 | 20 | MARK_AS_ADVANCED(XECS_PROJECT_DIR) 21 | 22 | set(CMAKE_CXX_STANDARD 17) 23 | 24 | set(SRC_PATH XEcs) 25 | 26 | set ( LUA_IDSIZE 120 CACHE STRING "gives the maximum size for the description of the source." ) 27 | 28 | 29 | include_directories( 30 | ${CMAKE_SOURCE_DIR} 31 | ${SRC_PATH/ecs/component} 32 | ${SRC_PATH/ecs/system} 33 | ${SRC_PATH/ecs/utility} 34 | ${SRC_PATH/ecs} 35 | ${SRC_PATH/framework} 36 | ${SRC_PATH} 37 | ${SRC_PATH/XClientEcs} 38 | ${CMAKE_CURRENT_BINARY_DIR} 39 | ) 40 | 41 | 42 | file(GLOB_RECURSE CORE_ECS ${SRC_PATH}/ecs/utility/*.cpp) 43 | set ( CORE_CLIENT ${SRC_PATH}/XClientEcs/Xuthus_wrap.cxx ${SRC_PATH}/XSirius.cpp) 44 | 45 | 46 | macro(source_group_by_dir proj_dir source_files) 47 | if(MSVC OR APPLE) 48 | get_filename_component(sgbd_cur_dir ${proj_dir} ABSOLUTE) 49 | foreach(sgbd_file ${${source_files}}) 50 | get_filename_component(sgbd_abs_file ${sgbd_file} ABSOLUTE) 51 | file(RELATIVE_PATH sgbd_fpath ${sgbd_cur_dir} ${sgbd_abs_file}) 52 | string(REGEX REPLACE "\(.*\)/.*" \\1 sgbd_group_name ${sgbd_fpath}) 53 | string(COMPARE EQUAL ${sgbd_fpath} ${sgbd_group_name} sgbd_nogroup) 54 | string(REPLACE "/" "\\" sgbd_group_name ${sgbd_group_name}) 55 | if(sgbd_nogroup) 56 | set(sgbd_group_name "\\") 57 | endif(sgbd_nogroup) 58 | source_group(${sgbd_group_name} FILES ${sgbd_file}) 59 | endforeach(sgbd_file) 60 | endif(MSVC OR APPLE) 61 | endmacro(source_group_by_dir) 62 | 63 | source_group_by_dir(${CMAKE_CURRENT_SOURCE_DIR} CORE_ECS) 64 | source_group_by_dir(${CMAKE_CURRENT_SOURCE_DIR} CORE_CLIENT) 65 | 66 | if (APPLE) 67 | if (IOS) 68 | set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD)") 69 | add_library(Xuthus STATIC 70 | ${CORE_ECS} 71 | ${CORE_CLIENT} 72 | ) 73 | set_xcode_property (Xuthus IPHONEOS_DEPLOYMENT_TARGET "7.0" "all") 74 | else () 75 | set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_64_BIT)") 76 | add_library(Xuthus MODULE 77 | ${CORE_ECS} 78 | ${CORE_CLIENT} 79 | ) 80 | set_target_properties ( Xuthus PROPERTIES BUNDLE TRUE ) 81 | endif () 82 | elseif ("${CMAKE_SYSTEM_NAME}" STREQUAL "Switch") 83 | add_library(Xuthus STATIC 84 | ${CORE_ECS} 85 | ${CORE_CLIENT} 86 | ) 87 | target_compile_options(Xuthus PRIVATE -m64 -mcpu=cortex-a57+fp+simd+crypto+crc -fno-common -fno-short-enums -ffunction-sections -fdata-sections -fPIC -fms-extensions) 88 | else ( ) 89 | add_library(Xuthus SHARED 90 | ${CORE_ECS} 91 | ${CORE_CLIENT} 92 | ) 93 | endif ( ) 94 | 95 | 96 | target_compile_definitions (Xuthus PRIVATE COMPATIBLE_FORMAT) 97 | 98 | if(UINT_ESPECIALLY) 99 | ADD_DEFINITIONS(-DUINT_ESPECIALLY) 100 | endif() 101 | 102 | -------------------------------------------------------------------------------- /build/Ecs/cmake/android.windows.toolchain.cmake: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.6) 2 | 3 | macro(Highlight_Error error_msg) 4 | message("==================") 5 | message("Error: ${error_msg}") 6 | message("==================") 7 | message(FATAL_ERROR "") 8 | endmacro() 9 | 10 | if(NOT DEFINED ENV{ANDROID_NDK}) 11 | Highlight_Error("not defined environment variable %ANDROID_NDK%") 12 | else() 13 | set(ANDROID_NDK $ENV{ANDROID_NDK}) 14 | endif() 15 | file(TO_CMAKE_PATH "${ANDROID_NDK}" ANDROID_NDK) 16 | 17 | if(ANDROID_TOOLCHAIN_NAME AND NOT ANDROID_TOOLCHAIN) 18 | if(ANDROID_TOOLCHAIN_NAME MATCHES "-clang([0-9].[0-9])?$") 19 | set(ANDROID_TOOLCHAIN clang) 20 | elseif(ANDROID_TOOLCHAIN_NAME MATCHES "-[0-9].[0-9]$") 21 | set(ANDROID_TOOLCHAIN gcc) 22 | endif() 23 | endif() 24 | 25 | if(ANDROID_ABI STREQUAL "armeabi-v7a with NEON") 26 | set(ANDROID_ABI armeabi-v7a) 27 | set(ANDROID_ARM_NEON TRUE) 28 | elseif(ANDROID_TOOLCHAIN_NAME AND NOT ANDROID_ABI) 29 | if(ANDROID_TOOLCHAIN_NAME MATCHES "^arm-linux-androideabi-") 30 | set(ANDROID_ABI armeabi-v7a) 31 | elseif(ANDROID_TOOLCHAIN_NAME MATCHES "^aarch64-linux-android-") 32 | set(ANDROID_ABI arm64-v8a) 33 | elseif(ANDROID_TOOLCHAIN_NAME MATCHES "^x86-") 34 | set(ANDROID_ABI x86) 35 | elseif(ANDROID_TOOLCHAIN_NAME MATCHES "^x86_64-") 36 | set(ANDROID_ABI x86_64) 37 | elseif(ANDROID_TOOLCHAIN_NAME MATCHES "^mipsel-linux-android-") 38 | set(ANDROID_ABI mips) 39 | elseif(ANDROID_TOOLCHAIN_NAME MATCHES "^mips64el-linux-android-") 40 | set(ANDROID_ABI mips64) 41 | endif() 42 | endif() 43 | if(ANDROID_NATIVE_API_LEVEL AND NOT ANDROID_PLATFORM) 44 | if(ANDROID_NATIVE_API_LEVEL MATCHES "^android-[0-9]+$") 45 | set(ANDROID_PLATFORM ${ANDROID_NATIVE_API_LEVEL}) 46 | elseif(ANDROID_NATIVE_API_LEVEL MATCHES "^[0-9]+$") 47 | set(ANDROID_PLATFORM android-${ANDROID_NATIVE_API_LEVEL}) 48 | endif() 49 | endif() 50 | if(DEFINED ANDROID_APP_PIE AND NOT DEFINED ANDROID_PIE) 51 | set(ANDROID_PIE "${ANDROID_APP_PIE}") 52 | endif() 53 | if(ANDROID_STL_FORCE_FEATURES AND NOT DEFINED ANDROID_CPP_FEATURES) 54 | set(ANDROID_CPP_FEATURES "rtti exceptions") 55 | endif() 56 | if(DEFINED ANDROID_NO_UNDEFINED AND NOT DEFINED ANDROID_ALLOW_UNDEFINED_SYMBOLS) 57 | if(ANDROID_NO_UNDEFINED) 58 | set(ANDROID_ALLOW_UNDEFINED_SYMBOLS FALSE) 59 | else() 60 | set(ANDROID_ALLOW_UNDEFINED_SYMBOLS TRUE) 61 | endif() 62 | endif() 63 | if(DEFINED ANDROID_SO_UNDEFINED AND NOT DEFINED ANDROID_ALLOW_UNDEFINED_SYMBOLS) 64 | set(ANDROID_ALLOW_UNDEFINED_SYMBOLS "${ANDROID_SO_UNDEFINED}") 65 | endif() 66 | if(DEFINED ANDROID_FORCE_ARM_BUILD AND NOT ANDROID_ARM_MODE) 67 | if(ANDROID_FORCE_ARM_BUILD) 68 | set(ANDROID_ARM_MODE arm) 69 | else() 70 | set(ANDROID_ARM_MODE thumb) 71 | endif() 72 | endif() 73 | if(DEFINED ANDROID_NOEXECSTACK AND NOT DEFINED ANDROID_DISABLE_NO_EXECUTE) 74 | if(ANDROID_NOEXECSTACK) 75 | set(ANDROID_DISABLE_NO_EXECUTE FALSE) 76 | else() 77 | set(ANDROID_DISABLE_NO_EXECUTE TRUE) 78 | endif() 79 | endif() 80 | if(DEFINED ANDROID_RELRO AND NOT DEFINED ANDROID_DISABLE_RELRO) 81 | if(ANDROID_RELRO) 82 | set(ANDROID_DISABLE_RELRO FALSE) 83 | else() 84 | set(ANDROID_DISABLE_RELRO TRUE) 85 | endif() 86 | endif() 87 | if(NDK_CCACHE AND NOT ANDROID_CCACHE) 88 | set(ANDROID_CCACHE "${NDK_CCACHE}") 89 | endif() 90 | 91 | # Default values for configurable variables. 92 | if(NOT ANDROID_TOOLCHAIN) 93 | set(ANDROID_TOOLCHAIN clang) 94 | endif() 95 | if(NOT ANDROID_ABI) 96 | set(ANDROID_ABI armeabi-v7a) 97 | endif() 98 | if(ANDROID_PLATFORM MATCHES "^android-([0-8]|10|11)$") 99 | set(ANDROID_PLATFORM android-9) 100 | elseif(ANDROID_PLATFORM STREQUAL android-20) 101 | set(ANDROID_PLATFORM android-19) 102 | elseif(NOT ANDROID_PLATFORM) 103 | set(ANDROID_PLATFORM android-9) 104 | endif() 105 | string(REPLACE "android-" "" ANDROID_PLATFORM_LEVEL ${ANDROID_PLATFORM}) 106 | if(ANDROID_ABI MATCHES "64(-v8a)?$" AND ANDROID_PLATFORM_LEVEL LESS 21) 107 | set(ANDROID_PLATFORM android-21) 108 | set(ANDROID_PLATFORM_LEVEL 21) 109 | endif() 110 | if(NOT ANDROID_STL) 111 | set(ANDROID_STL gnustl_static) 112 | endif() 113 | if(NOT DEFINED ANDROID_PIE) 114 | if(ANDROID_PLATFORM_LEVEL LESS 16) 115 | set(ANDROID_PIE FALSE) 116 | else() 117 | set(ANDROID_PIE TRUE) 118 | endif() 119 | endif() 120 | if(NOT ANDROID_ARM_MODE) 121 | set(ANDROID_ARM_MODE thumb) 122 | endif() 123 | 124 | # Export configurable variables for the try_compile() command. 125 | set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES 126 | ANDROID_TOOLCHAIN 127 | ANDROID_ABI 128 | ANDROID_PLATFORM 129 | ANDROID_STL 130 | ANDROID_PIE 131 | ANDROID_CPP_FEATURES 132 | ANDROID_ALLOW_UNDEFINED_SYMBOLS 133 | ANDROID_ARM_MODE 134 | ANDROID_ARM_NEON 135 | ANDROID_DISABLE_NO_EXECUTE 136 | ANDROID_DISABLE_RELRO 137 | ANDROID_DISABLE_FORMAT_STRING_CHECKS 138 | ANDROID_CCACHE) 139 | 140 | # Standard cross-compiling stuff. 141 | set(ANDROID TRUE) 142 | set(CMAKE_SYSTEM_NAME Android) 143 | set(CMAKE_SYSTEM_VERSION ${ANDROID_PLATFORM_LEVEL}) 144 | set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 145 | set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 146 | set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 147 | set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) 148 | 149 | # ABI. 150 | set(CMAKE_ANDROID_ARCH_ABI ${ANDROID_ABI}) 151 | if(ANDROID_ABI MATCHES "^armeabi(-v7a)?$") 152 | set(ANDROID_SYSROOT_ABI arm) 153 | set(ANDROID_TOOLCHAIN_NAME arm-linux-androideabi) 154 | set(ANDROID_TOOLCHAIN_ROOT ${ANDROID_TOOLCHAIN_NAME}) 155 | if(ANDROID_ABI STREQUAL armeabi) 156 | set(CMAKE_SYSTEM_PROCESSOR armv5te) 157 | set(ANDROID_LLVM_TRIPLE armv5te-none-linux-androideabi) 158 | elseif(ANDROID_ABI STREQUAL armeabi-v7a) 159 | set(CMAKE_SYSTEM_PROCESSOR armv7-a) 160 | set(ANDROID_LLVM_TRIPLE armv7-none-linux-androideabi) 161 | endif() 162 | elseif(ANDROID_ABI STREQUAL arm64-v8a) 163 | set(ANDROID_SYSROOT_ABI arm64) 164 | set(CMAKE_SYSTEM_PROCESSOR aarch64) 165 | set(ANDROID_TOOLCHAIN_NAME aarch64-linux-android) 166 | set(ANDROID_TOOLCHAIN_ROOT ${ANDROID_TOOLCHAIN_NAME}) 167 | set(ANDROID_LLVM_TRIPLE aarch64-none-linux-android) 168 | elseif(ANDROID_ABI STREQUAL x86) 169 | set(ANDROID_SYSROOT_ABI x86) 170 | set(CMAKE_SYSTEM_PROCESSOR i686) 171 | set(ANDROID_TOOLCHAIN_NAME i686-linux-android) 172 | set(ANDROID_TOOLCHAIN_ROOT ${ANDROID_ABI}) 173 | set(ANDROID_LLVM_TRIPLE i686-none-linux-android) 174 | elseif(ANDROID_ABI STREQUAL x86_64) 175 | set(ANDROID_SYSROOT_ABI x86_64) 176 | set(CMAKE_SYSTEM_PROCESSOR x86_64) 177 | set(ANDROID_TOOLCHAIN_NAME x86_64-linux-android) 178 | set(ANDROID_TOOLCHAIN_ROOT ${ANDROID_ABI}) 179 | set(ANDROID_LLVM_TRIPLE x86_64-none-linux-android) 180 | elseif(ANDROID_ABI STREQUAL mips) 181 | set(ANDROID_SYSROOT_ABI mips) 182 | set(CMAKE_SYSTEM_PROCESSOR mips) 183 | set(ANDROID_TOOLCHAIN_NAME mipsel-linux-android) 184 | set(ANDROID_TOOLCHAIN_ROOT ${ANDROID_TOOLCHAIN_NAME}) 185 | set(ANDROID_LLVM_TRIPLE mipsel-none-linux-android) 186 | elseif(ANDROID_ABI STREQUAL mips64) 187 | set(ANDROID_SYSROOT_ABI mips64) 188 | set(CMAKE_SYSTEM_PROCESSOR mips64) 189 | set(ANDROID_TOOLCHAIN_NAME mips64el-linux-android) 190 | set(ANDROID_TOOLCHAIN_ROOT ${ANDROID_TOOLCHAIN_NAME}) 191 | set(ANDROID_LLVM_TRIPLE mips64el-none-linux-android) 192 | else() 193 | message(FATAL_ERROR "Invalid Android ABI: ${ANDROID_ABI}.") 194 | endif() 195 | 196 | # STL. 197 | set(ANDROID_STL_STATIC_LIBRARIES) 198 | set(ANDROID_STL_SHARED_LIBRARIES) 199 | if(ANDROID_STL STREQUAL system) 200 | set(ANDROID_STL_STATIC_LIBRARIES 201 | supc++) 202 | elseif(ANDROID_STL STREQUAL stlport_static) 203 | set(ANDROID_STL_STATIC_LIBRARIES 204 | stlport_static) 205 | elseif(ANDROID_STL STREQUAL stlport_shared) 206 | set(ANDROID_STL_SHARED_LIBRARIES 207 | stlport_shared) 208 | elseif(ANDROID_STL STREQUAL gnustl_static) 209 | set(ANDROID_STL_STATIC_LIBRARIES 210 | gnustl_static) 211 | elseif(ANDROID_STL STREQUAL gnustl_shared) 212 | set(ANDROID_STL_STATIC_LIBRARIES 213 | supc++) 214 | set(ANDROID_STL_SHARED_LIBRARIES 215 | gnustl_shared) 216 | elseif(ANDROID_STL STREQUAL c++_static) 217 | set(ANDROID_STL_STATIC_LIBRARIES 218 | c++_static 219 | c++abi 220 | unwind 221 | android_support) 222 | elseif(ANDROID_STL STREQUAL c++_shared) 223 | set(ANDROID_STL_STATIC_LIBRARIES 224 | unwind) 225 | set(ANDROID_STL_SHARED_LIBRARIES 226 | c++_shared) 227 | elseif(ANDROID_STL STREQUAL none) 228 | else() 229 | message(FATAL_ERROR "Invalid Android STL: ${ANDROID_STL}.") 230 | endif() 231 | 232 | # Sysroot. 233 | set(CMAKE_SYSROOT "${ANDROID_NDK}/platforms/${ANDROID_PLATFORM}/arch-${ANDROID_SYSROOT_ABI}") 234 | 235 | # Toolchain. 236 | if(CMAKE_HOST_SYSTEM_NAME STREQUAL Linux) 237 | set(ANDROID_HOST_TAG linux-x86_64) 238 | elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin) 239 | set(ANDROID_HOST_TAG darwin-x86_64) 240 | elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Windows) 241 | set(ANDROID_HOST_TAG windows-x86_64) 242 | endif() 243 | set(ANDROID_TOOLCHAIN_ROOT "${ANDROID_NDK}/toolchains/${ANDROID_TOOLCHAIN_ROOT}-4.9/prebuilt/${ANDROID_HOST_TAG}") 244 | set(ANDROID_TOOLCHAIN_PREFIX "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_NAME}-") 245 | if(CMAKE_HOST_SYSTEM_NAME STREQUAL Windows) 246 | set(ANDROID_TOOLCHAIN_SUFFIX .exe) 247 | endif() 248 | if(ANDROID_TOOLCHAIN STREQUAL clang) 249 | set(ANDROID_LLVM_TOOLCHAIN_PREFIX "${ANDROID_NDK}/toolchains/llvm-3.6/prebuilt/${ANDROID_HOST_TAG}/bin/") 250 | set(ANDROID_C_COMPILER "${ANDROID_LLVM_TOOLCHAIN_PREFIX}clang${ANDROID_TOOLCHAIN_SUFFIX}") 251 | set(ANDROID_CXX_COMPILER "${ANDROID_LLVM_TOOLCHAIN_PREFIX}clang++${ANDROID_TOOLCHAIN_SUFFIX}") 252 | # Clang can fail to compile if CMake doesn't correctly supply the target and 253 | # external toolchain, but to do so, CMake needs to already know that the 254 | # compiler is clang. Tell CMake that the compiler is really clang, but don't 255 | # use CMakeForceCompiler, since we still want compile checks. We only want 256 | # to skip the compiler ID detection step. 257 | set(CMAKE_C_COMPILER_ID_RUN TRUE) 258 | set(CMAKE_CXX_COMPILER_ID_RUN TRUE) 259 | set(CMAKE_C_COMPILER_ID Clang) 260 | set(CMAKE_CXX_COMPILER_ID Clang) 261 | set(CMAKE_C_COMPILER_TARGET ${ANDROID_LLVM_TRIPLE}) 262 | set(CMAKE_CXX_COMPILER_TARGET ${ANDROID_LLVM_TRIPLE}) 263 | set(CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN "${ANDROID_TOOLCHAIN_ROOT}") 264 | set(CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN "${ANDROID_TOOLCHAIN_ROOT}") 265 | elseif(ANDROID_TOOLCHAIN STREQUAL gcc) 266 | set(ANDROID_C_COMPILER "${ANDROID_TOOLCHAIN_PREFIX}gcc${ANDROID_TOOLCHAIN_SUFFIX}") 267 | set(ANDROID_CXX_COMPILER "${ANDROID_TOOLCHAIN_PREFIX}g++${ANDROID_TOOLCHAIN_SUFFIX}") 268 | else() 269 | message(FATAL_ERROR "Invalid Android toolchain: ${ANDROID_TOOLCHAIN}.") 270 | endif() 271 | 272 | if(NOT IS_DIRECTORY "${ANDROID_NDK}/platforms/${ANDROID_PLATFORM}") 273 | message("${ANDROID_NDK}/platforms/${ANDROID_PLATFORM}") 274 | message(FATAL_ERROR "Invalid Android platform: ${ANDROID_PLATFORM}.") 275 | elseif(NOT IS_DIRECTORY "${CMAKE_SYSROOT}") 276 | message(FATAL_ERROR "Invalid Android sysroot: ${CMAKE_SYSROOT}.") 277 | endif() 278 | 279 | set(ANDROID_COMPILER_FLAGS) 280 | set(ANDROID_COMPILER_FLAGS_CXX) 281 | set(ANDROID_COMPILER_FLAGS_DEBUG) 282 | set(ANDROID_COMPILER_FLAGS_RELEASE) 283 | set(ANDROID_LINKER_FLAGS) 284 | set(ANDROID_LINKER_FLAGS_EXE) 285 | 286 | # Generic flags. 287 | list(APPEND ANDROID_COMPILER_FLAGS 288 | -g 289 | -DANDROID 290 | -ffunction-sections 291 | -funwind-tables 292 | -fstack-protector-strong 293 | -no-canonical-prefixes) 294 | list(APPEND ANDROID_COMPILER_FLAGS_CXX 295 | -fno-exceptions 296 | -fno-rtti) 297 | list(APPEND ANDROID_LINKER_FLAGS 298 | -Wl,--build-id 299 | -Wl,--warn-shared-textrel 300 | -Wl,--fatal-warnings) 301 | list(APPEND ANDROID_LINKER_FLAGS_EXE 302 | -Wl,--gc-sections 303 | -Wl,-z,nocopyreloc) 304 | 305 | # Debug and release flags. 306 | list(APPEND ANDROID_COMPILER_FLAGS_DEBUG 307 | -O0) 308 | if(ANDROID_ABI MATCHES "^armeabi") 309 | list(APPEND ANDROID_COMPILER_FLAGS_RELEASE 310 | -Os) 311 | else() 312 | list(APPEND ANDROID_COMPILER_FLAGS_RELEASE 313 | -O2) 314 | endif() 315 | list(APPEND ANDROID_COMPILER_FLAGS_RELEASE 316 | -DNDEBUG) 317 | if(ANDROID_TOOLCHAIN STREQUAL clang) 318 | list(APPEND ANDROID_COMPILER_FLAGS_DEBUG 319 | -fno-limit-debug-info) 320 | endif() 321 | 322 | # Toolchain and ABI specific flags. 323 | if(ANDROID_ABI STREQUAL armeabi) 324 | list(APPEND ANDROID_COMPILER_FLAGS 325 | -march=armv5te 326 | -mtune=xscale 327 | -msoft-float) 328 | endif() 329 | if(ANDROID_ABI STREQUAL armeabi-v7a) 330 | list(APPEND ANDROID_COMPILER_FLAGS 331 | -march=armv7-a 332 | -mfloat-abi=softfp 333 | -mfpu=vfpv3-d16) 334 | list(APPEND ANDROID_LINKER_FLAGS 335 | -Wl,--fix-cortex-a8) 336 | endif() 337 | if(ANDROID_ABI MATCHES "^armeabi" AND ANDROID_TOOLCHAIN STREQUAL clang) 338 | # Disable integrated-as for better compatibility. 339 | list(APPEND ANDROID_COMPILER_FLAGS 340 | -fno-integrated-as) 341 | endif() 342 | if(ANDROID_ABI STREQUAL mips AND ANDROID_TOOLCHAIN STREQUAL clang) 343 | list(APPEND ANDROID_COMPILER_FLAGS 344 | -mips32) 345 | endif() 346 | 347 | # STL specific flags. 348 | if(ANDROID_STL STREQUAL system) 349 | set(ANDROID_STL_PREFIX gnu-libstdc++/4.9) 350 | set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES 351 | "${ANDROID_NDK}/sources/cxx-stl/system/include") 352 | elseif(ANDROID_STL MATCHES "^stlport_") 353 | set(ANDROID_STL_PREFIX stlport) 354 | set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES 355 | "${ANDROID_NDK}/sources/cxx-stl/${ANDROID_STL_PREFIX}/stlport" 356 | "${ANDROID_NDK}/sources/cxx-stl/gabi++/include") 357 | elseif(ANDROID_STL MATCHES "^gnustl_") 358 | set(ANDROID_STL_PREFIX gnu-libstdc++/4.9) 359 | set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES 360 | "${ANDROID_NDK}/sources/cxx-stl/${ANDROID_STL_PREFIX}/include" 361 | "${ANDROID_NDK}/sources/cxx-stl/${ANDROID_STL_PREFIX}/libs/${ANDROID_ABI}/include" 362 | "${ANDROID_NDK}/sources/cxx-stl/${ANDROID_STL_PREFIX}/include/backward") 363 | elseif(ANDROID_STL MATCHES "^c\\+\\+_") 364 | set(ANDROID_STL_PREFIX llvm-libc++) 365 | if(ANDROID_ABI MATCHES "^armeabi") 366 | list(APPEND ANDROID_LINKER_FLAGS 367 | -Wl,--exclude-libs,libunwind.a) 368 | else() 369 | list(REMOVE_ITEM ANDROID_STL_STATIC_LIBRARIES 370 | unwind) 371 | endif() 372 | list(APPEND ANDROID_COMPILER_FLAGS_CXX 373 | -std=c++11) 374 | if(ANDROID_TOOLCHAIN STREQUAL gcc) 375 | list(APPEND ANDROID_COMPILER_FLAGS_CXX 376 | -fno-strict-aliasing) 377 | endif() 378 | set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES 379 | "${ANDROID_NDK}/sources/cxx-stl/${ANDROID_STL_PREFIX}/include" 380 | "${ANDROID_NDK}/sources/android/support/include" 381 | "${ANDROID_NDK}/sources/cxx-stl/${ANDROID_STL_PREFIX}abi/include") 382 | endif() 383 | set(ANDROID_CXX_STANDARD_LIBRARIES) 384 | foreach(library ${ANDROID_STL_STATIC_LIBRARIES}) 385 | list(APPEND ANDROID_CXX_STANDARD_LIBRARIES 386 | "${ANDROID_NDK}/sources/cxx-stl/${ANDROID_STL_PREFIX}/libs/${ANDROID_ABI}/lib${library}.a") 387 | endforeach() 388 | foreach(library ${ANDROID_STL_SHARED_LIBRARIES}) 389 | list(APPEND ANDROID_CXX_STANDARD_LIBRARIES 390 | "${ANDROID_NDK}/sources/cxx-stl/${ANDROID_STL_PREFIX}/libs/${ANDROID_ABI}/lib${library}.so") 391 | endforeach() 392 | if(ANDROID_ABI STREQUAL armeabi AND NOT ANDROID_STL MATCHES "^(none|system)$") 393 | list(APPEND ANDROID_CXX_STANDARD_LIBRARIES 394 | -latomic) 395 | endif() 396 | set(CMAKE_C_STANDARD_LIBRARIES_INIT "-lm") 397 | set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}") 398 | if(ANDROID_CXX_STANDARD_LIBRARIES) 399 | string(REPLACE ";" "\" \"" ANDROID_CXX_STANDARD_LIBRARIES "\"${ANDROID_CXX_STANDARD_LIBRARIES}\"") 400 | set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "${CMAKE_CXX_STANDARD_LIBRARIES_INIT} ${ANDROID_CXX_STANDARD_LIBRARIES}") 401 | endif() 402 | 403 | # Configuration specific flags. 404 | if(ANDROID_PIE) 405 | set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) 406 | list(APPEND ANDROID_LINKER_FLAGS_EXE 407 | -pie 408 | -fPIE) 409 | endif() 410 | if(ANDROID_CPP_FEATURES) 411 | separate_arguments(ANDROID_CPP_FEATURES) 412 | foreach(feature ${ANDROID_CPP_FEATURES}) 413 | if(NOT ${feature} MATCHES "^(rtti|exceptions)$") 414 | message(FATAL_ERROR "Invalid Android C++ feature: ${feature}.") 415 | endif() 416 | list(APPEND ANDROID_COMPILER_FLAGS_CXX 417 | -f${feature}) 418 | endforeach() 419 | string(REPLACE ";" " " ANDROID_CPP_FEATURES "${ANDROID_CPP_FEATURES}") 420 | endif() 421 | if(NOT ANDROID_ALLOW_UNDEFINED_SYMBOLS) 422 | list(APPEND ANDROID_LINKER_FLAGS 423 | -Wl,--no-undefined) 424 | endif() 425 | if(ANDROID_ABI MATCHES "armeabi") 426 | if(ANDROID_ARM_MODE STREQUAL thumb) 427 | list(APPEND ANDROID_COMPILER_FLAGS 428 | -mthumb) 429 | elseif(ANDROID_ARM_MODE STREQUAL arm) 430 | list(APPEND ANDROID_COMPILER_FLAGS 431 | -marm) 432 | else() 433 | message(FATAL_ERROR "Invalid Android ARM mode: ${ANDROID_ARM_MODE}.") 434 | endif() 435 | if(ANDROID_ABI STREQUAL armeabi-v7a AND ANDROID_ARM_NEON) 436 | list(APPEND ANDROID_COMPILER_FLAGS 437 | -mfpu=neon) 438 | endif() 439 | endif() 440 | if(ANDROID_DISABLE_NO_EXECUTE) 441 | list(APPEND ANDROID_COMPILER_FLAGS 442 | -Wa,--execstack) 443 | list(APPEND ANDROID_LINKER_FLAGS 444 | -Wl,-z,execstack) 445 | else() 446 | list(APPEND ANDROID_COMPILER_FLAGS 447 | -Wa,--noexecstack) 448 | list(APPEND ANDROID_LINKER_FLAGS 449 | -Wl,-z,noexecstack) 450 | endif() 451 | if(ANDROID_TOOLCHAIN STREQUAL clang) 452 | # CMake automatically forwards all compiler flags to the linker, 453 | # and clang doesn't like having -Wa flags being used for linking. 454 | # To prevent CMake from doing this would require meddling with 455 | # the CMAKE__COMPILE_OBJECT rules, which would get quite messy. 456 | list(APPEND ANDROID_LINKER_FLAGS 457 | -Qunused-arguments) 458 | endif() 459 | if(ANDROID_DISABLE_RELRO) 460 | list(APPEND ANDROID_LINKER_FLAGS 461 | -Wl,-z,norelro -Wl,-z,lazy) 462 | else() 463 | list(APPEND ANDROID_LINKER_FLAGS 464 | -Wl,-z,relro -Wl,-z,now) 465 | endif() 466 | if(ANDROID_DISABLE_FORMAT_STRING_CHECKS) 467 | list(APPEND ANDROID_COMPILER_FLAGS 468 | -Wno-error=format-security) 469 | else() 470 | list(APPEND ANDROID_COMPILER_FLAGS 471 | -Wformat -Werror=format-security) 472 | endif() 473 | 474 | # Convert these lists into strings. 475 | string(REPLACE ";" " " ANDROID_COMPILER_FLAGS "${ANDROID_COMPILER_FLAGS}") 476 | string(REPLACE ";" " " ANDROID_COMPILER_FLAGS_CXX "${ANDROID_COMPILER_FLAGS_CXX}") 477 | string(REPLACE ";" " " ANDROID_COMPILER_FLAGS_DEBUG "${ANDROID_COMPILER_FLAGS_DEBUG}") 478 | string(REPLACE ";" " " ANDROID_COMPILER_FLAGS_RELEASE "${ANDROID_COMPILER_FLAGS_RELEASE}") 479 | string(REPLACE ";" " " ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS}") 480 | string(REPLACE ";" " " ANDROID_LINKER_FLAGS_EXE "${ANDROID_LINKER_FLAGS_EXE}") 481 | 482 | if(ANDROID_CCACHE) 483 | set(CMAKE_C_COMPILER_LAUNCHER "${ANDROID_CCACHE}") 484 | set(CMAKE_CXX_COMPILER_LAUNCHER "${ANDROID_CCACHE}") 485 | endif() 486 | set(CMAKE_C_COMPILER "${ANDROID_C_COMPILER}") 487 | set(CMAKE_CXX_COMPILER "${ANDROID_CXX_COMPILER}") 488 | set(_CMAKE_TOOLCHAIN_PREFIX "${ANDROID_TOOLCHAIN_PREFIX}") 489 | 490 | # Set or retrieve the cached flags. 491 | # This is necessary in case the user sets/changes flags in subsequent 492 | # configures. If we included the Android flags in here, they would get 493 | # overwritten. 494 | set(CMAKE_C_FLAGS "" 495 | CACHE STRING "Flags used by the compiler during all build types.") 496 | set(CMAKE_CXX_FLAGS "" 497 | CACHE STRING "Flags used by the compiler during all build types.") 498 | set(CMAKE_C_FLAGS_DEBUG "" 499 | CACHE STRING "Flags used by the compiler during debug builds.") 500 | set(CMAKE_CXX_FLAGS_DEBUG "" 501 | CACHE STRING "Flags used by the compiler during debug builds.") 502 | set(CMAKE_C_FLAGS_RELEASE "" 503 | CACHE STRING "Flags used by the compiler during release builds.") 504 | set(CMAKE_CXX_FLAGS_RELEASE "" 505 | CACHE STRING "Flags used by the compiler during release builds.") 506 | set(CMAKE_MODULE_LINKER_FLAGS "" 507 | CACHE STRING "Flags used by the linker during the creation of modules.") 508 | set(CMAKE_SHARED_LINKER_FLAGS "" 509 | CACHE STRING "Flags used by the linker during the creation of dll's.") 510 | set(CMAKE_EXE_LINKER_FLAGS "" 511 | CACHE STRING "Flags used by the linker.") 512 | 513 | set(CMAKE_C_FLAGS "${ANDROID_COMPILER_FLAGS} ${CMAKE_C_FLAGS}") 514 | set(CMAKE_CXX_FLAGS "${ANDROID_COMPILER_FLAGS} ${ANDROID_COMPILER_FLAGS_CXX} ${CMAKE_CXX_FLAGS}") 515 | set(CMAKE_C_FLAGS_DEBUG "${ANDROID_COMPILER_FLAGS_DEBUG} ${CMAKE_C_FLAGS_DEBUG}") 516 | set(CMAKE_CXX_FLAGS_DEBUG "${ANDROID_COMPILER_FLAGS_DEBUG} ${CMAKE_CXX_FLAGS_DEBUG}") 517 | set(CMAKE_C_FLAGS_RELEASE "${ANDROID_COMPILER_FLAGS_RELEASE} ${CMAKE_C_FLAGS_RELEASE}") 518 | set(CMAKE_CXX_FLAGS_RELEASE "${ANDROID_COMPILER_FLAGS_RELEASE} ${CMAKE_CXX_FLAGS_RELEASE}") 519 | set(CMAKE_SHARED_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS}") 520 | set(CMAKE_MODULE_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} ${CMAKE_MODULE_LINKER_FLAGS}") 521 | set(CMAKE_EXE_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} ${ANDROID_LINKER_FLAGS_EXE} ${CMAKE_EXE_LINKER_FLAGS}") 522 | 523 | if(CMAKE_C_FLAGS) 524 | message("CMAKE_C_FLAGS = ${CMAKE_C_FlAGS}") 525 | endif() 526 | if(CMAKE_CXX_FLAGS) 527 | message("CMAKE_CXX_FLAGS = ${CMAKE_CXX_FLAGS}") 528 | endif() 529 | if(CMAKE_C_FLAGS_DEBUG) 530 | message("CMAKE_C_FLAGS_DEBUG = ${CMAKE_C_FLAGS_DEBUG}") 531 | endif() 532 | if(CMAKE_CXX_FLAGS_DEBUG) 533 | message("CMAKE_CXX_FLAGS_DEBUG = ${CMAKE_CXX_FLAGS_DEBUG}") 534 | endif() 535 | if(CMAKE_SHARED_LINKER_FLAGS) 536 | message("CMAKE_SHARED_LINKDER_FLAGS = ${CMAKE_SHARED_LINKER_FLAGS}") 537 | endif() 538 | if(CMAKE_MODULE_LINKER_FLAGS) 539 | message("CMAKE_MODULE_LINKER_FLAGS = ${CMAKE_MODULE_LINKER_FLAGS}") 540 | endif() 541 | if(CMAKE_EXE_LINKER_FLAGS) 542 | message("CMAKE_EXE_LINKER_FLAGS = ${CMAKE_EXE_LINKER_FLAGS}") 543 | endif() 544 | 545 | # Compatibility for read-only variables. 546 | # Read-only variables for compatibility with the other toolchain file. 547 | # We'll keep these around for the existing projects that still use them. 548 | # TODO: All of the variables here have equivalents in our standard set of 549 | # configurable variables, so we can remove these once most of our users migrate 550 | # to those variables. 551 | set(ANDROID_NATIVE_API_LEVEL ${ANDROID_PLATFORM_LEVEL}) 552 | if(ANDROID_ALLOW_UNDEFINED_SYMBOLS) 553 | set(ANDROID_SO_UNDEFINED TRUE) 554 | else() 555 | set(ANDROID_NO_UNDEFINED TRUE) 556 | endif() 557 | set(ANDROID_FUNCTION_LEVEL_LINKING TRUE) 558 | set(ANDROID_GOLD_LINKER TRUE) 559 | if(NOT ANDROID_DISABLE_NO_EXECUTE) 560 | set(ANDROID_NOEXECSTACK TRUE) 561 | endif() 562 | if(NOT ANDROID_DISABLE_RELRO) 563 | set(ANDROID_RELRO TRUE) 564 | endif() 565 | if(ANDROID_ARM_MODE STREQUAL arm) 566 | set(ANDROID_FORCE_ARM_BUILD TRUE) 567 | endif() 568 | if(ANDROID_CPP_FEATURES MATCHES "rtti" 569 | AND ANDROID_CPP_FEATURES MATCHES "exceptions") 570 | set(ANDROID_STL_FORCE_FEATURES TRUE) 571 | endif() 572 | if(ANDROID_CCACHE) 573 | set(NDK_CCACHE "${ANDROID_CCACHE}") 574 | endif() 575 | if(ANDROID_TOOLCHAIN STREQUAL clang) 576 | set(ANDROID_TOOLCHAIN_NAME ${ANDROID_TOOLCHAIN_NAME}-clang) 577 | else() 578 | set(ANDROID_TOOLCHAIN_NAME ${ANDROID_TOOLCHAIN_NAME}-4.9) 579 | endif() 580 | set(ANDROID_NDK_HOST_X64 TRUE) 581 | set(ANDROID_NDK_LAYOUT RELEASE) 582 | if(ANDROID_ABI STREQUAL armeabi) 583 | set(ARMEABI TRUE) 584 | elseif(ANDROID_ABI STREQUAL armeabi-v7a) 585 | set(ARMEABI_V7A TRUE) 586 | if(ANDROID_ARM_NEON) 587 | set(NEON TRUE) 588 | endif() 589 | elseif(ANDROID_ABI STREQUAL arm64-v8a) 590 | set(ARM64_V8A TRUE) 591 | elseif(ANDROID_ABI STREQUAL x86) 592 | set(X86 TRUE) 593 | elseif(ANDROID_ABI STREQUAL x86_64) 594 | set(X86_64 TRUE) 595 | elseif(ANDROID_ABI STREQUAL mips) 596 | set(MIPS TRUE) 597 | elseif(ANDROID_ABI STREQUAL MIPS64) 598 | set(MIPS64 TRUE) 599 | endif() 600 | set(ANDROID_NDK_HOST_SYSTEM_NAME ${ANDROID_HOST_TAG}) 601 | set(ANDROID_NDK_ABI_NAME ${ANDROID_ABI}) 602 | set(ANDROID_ARCH_NAME ${ANDROID_SYSROOT_ABI}) 603 | set(ANDROID_SYSROOT "${CMAKE_SYSROOT}") 604 | set(TOOL_OS_SUFFIX ${ANDROID_TOOLCHAIN_SUFFIX}) 605 | if(ANDROID_TOOLCHAIN STREQUAL clang) 606 | set(ANDROID_COMPILER_IS_CLANG TRUE) 607 | endif() 608 | -------------------------------------------------------------------------------- /build/Ecs/cmake/iOS.cmake: -------------------------------------------------------------------------------- 1 | # This file is based off of the Platform/Darwin.cmake and Platform/UnixPaths.cmake 2 | # files which are included with CMake 2.8.4 3 | # It has been altered for iOS development 4 | 5 | # Options: 6 | # 7 | # IOS_PLATFORM = OS (default) or SIMULATOR 8 | # This decides if SDKS will be selected from the iPhoneOS.platform or iPhoneSimulator.platform folders 9 | # OS - the default, used to build for iPhone and iPad physical devices, which have an arm arch. 10 | # SIMULATOR - used to build for the Simulator platforms, which have an x86 arch. 11 | # 12 | # CMAKE_IOS_DEVELOPER_ROOT = automatic(default) or /path/to/platform/Developer folder 13 | # By default this location is automatcially chosen based on the IOS_PLATFORM value above. 14 | # If set manually, it will override the default location and force the user of a particular Developer Platform 15 | # 16 | # CMAKE_IOS_SDK_ROOT = automatic(default) or /path/to/platform/Developer/SDKs/SDK folder 17 | # By default this location is automatcially chosen based on the CMAKE_IOS_DEVELOPER_ROOT value. 18 | # In this case it will always be the most up-to-date SDK found in the CMAKE_IOS_DEVELOPER_ROOT path. 19 | # If set manually, this will force the use of a specific SDK version 20 | 21 | # Macros: 22 | # 23 | # set_xcode_property (TARGET XCODE_PROPERTY XCODE_VALUE) 24 | # A convenience macro for setting xcode specific properties on targets 25 | # example: set_xcode_property (myioslib IPHONEOS_DEPLOYMENT_TARGET "3.1") 26 | # 27 | # find_host_package (PROGRAM ARGS) 28 | # A macro used to find executable programs on the host system, not within the iOS environment. 29 | # Thanks to the android-cmake project for providing the command 30 | 31 | # Standard settings 32 | set (CMAKE_SYSTEM_NAME Darwin) 33 | set (CMAKE_SYSTEM_VERSION 1) 34 | set (UNIX True) 35 | set (APPLE True) 36 | set (IOS True) 37 | 38 | # Required as of cmake 2.8.10 39 | set (CMAKE_OSX_DEPLOYMENT_TARGET "" CACHE STRING "Force unset of the deployment target for iOS" FORCE) 40 | 41 | # Determine the cmake host system version so we know where to find the iOS SDKs 42 | find_program (CMAKE_UNAME uname /bin /usr/bin /usr/local/bin) 43 | if (CMAKE_UNAME) 44 | exec_program(uname ARGS -r OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_VERSION) 45 | string (REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\1" DARWIN_MAJOR_VERSION "${CMAKE_HOST_SYSTEM_VERSION}") 46 | endif (CMAKE_UNAME) 47 | 48 | # Force the compilers to gcc for iOS 49 | #include (CMakeForceCompiler) 50 | #CMAKE_FORCE_C_COMPILER (/usr/bin/clang Apple) 51 | #CMAKE_FORCE_CXX_COMPILER (/usr/bin/clang++ Apple) 52 | #set(CMAKE_AR ar CACHE FILEPATH "" FORCE) 53 | 54 | # Skip the platform compiler checks for cross compiling 55 | set (CMAKE_CXX_COMPILER_WORKS TRUE) 56 | set (CMAKE_C_COMPILER_WORKS TRUE) 57 | 58 | # All iOS/Darwin specific settings - some may be redundant 59 | set (CMAKE_SHARED_LIBRARY_PREFIX "lib") 60 | set (CMAKE_SHARED_LIBRARY_SUFFIX ".dylib") 61 | set (CMAKE_SHARED_MODULE_PREFIX "lib") 62 | set (CMAKE_SHARED_MODULE_SUFFIX ".so") 63 | set (CMAKE_MODULE_EXISTS 1) 64 | set (CMAKE_DL_LIBS "") 65 | 66 | set (CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ") 67 | set (CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ") 68 | set (CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}") 69 | set (CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}") 70 | 71 | # Hidden visibilty is required for cxx on iOS 72 | set (CMAKE_C_FLAGS_INIT "") 73 | set (CMAKE_CXX_FLAGS_INIT "-fvisibility=hidden -fvisibility-inlines-hidden -isysroot ${CMAKE_OSX_SYSROOT}") 74 | 75 | set (CMAKE_C_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}") 76 | set (CMAKE_CXX_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}") 77 | 78 | set (CMAKE_PLATFORM_HAS_INSTALLNAME 1) 79 | set (CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -headerpad_max_install_names") 80 | set (CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -headerpad_max_install_names") 81 | set (CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,") 82 | set (CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,") 83 | set (CMAKE_FIND_LIBRARY_SUFFIXES ".dylib" ".so" ".a") 84 | 85 | # hack: if a new cmake (which uses CMAKE_INSTALL_NAME_TOOL) runs on an old build tree 86 | # (where install_name_tool was hardcoded) and where CMAKE_INSTALL_NAME_TOOL isn't in the cache 87 | # and still cmake didn't fail in CMakeFindBinUtils.cmake (because it isn't rerun) 88 | # hardcode CMAKE_INSTALL_NAME_TOOL here to install_name_tool, so it behaves as it did before, Alex 89 | if (NOT DEFINED CMAKE_INSTALL_NAME_TOOL) 90 | find_program(CMAKE_INSTALL_NAME_TOOL install_name_tool) 91 | endif (NOT DEFINED CMAKE_INSTALL_NAME_TOOL) 92 | 93 | # Setup iOS platform unless specified manually with IOS_PLATFORM 94 | if (NOT DEFINED IOS_PLATFORM) 95 | set (IOS_PLATFORM "OS") 96 | endif (NOT DEFINED IOS_PLATFORM) 97 | set (IOS_PLATFORM ${IOS_PLATFORM} CACHE STRING "Type of iOS Platform") 98 | 99 | # Check the platform selection and setup for developer root 100 | if (${IOS_PLATFORM} STREQUAL "OS") 101 | set (IOS_PLATFORM_LOCATION "iPhoneOS.platform") 102 | 103 | # This causes the installers to properly locate the output libraries 104 | set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphoneos") 105 | elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR") 106 | set (IOS_PLATFORM_LOCATION "iPhoneSimulator.platform") 107 | 108 | # This causes the installers to properly locate the output libraries 109 | set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphonesimulator") 110 | else (${IOS_PLATFORM} STREQUAL "OS") 111 | message (FATAL_ERROR "Unsupported IOS_PLATFORM value selected. Please choose OS or SIMULATOR") 112 | endif (${IOS_PLATFORM} STREQUAL "OS") 113 | 114 | # Setup iOS developer location unless specified manually with CMAKE_IOS_DEVELOPER_ROOT 115 | # Note Xcode 4.3 changed the installation location, choose the most recent one available 116 | set (XCODE_POST_43_ROOT "/Applications/Xcode.app/Contents/Developer/Platforms/${IOS_PLATFORM_LOCATION}/Developer") 117 | set (XCODE_PRE_43_ROOT "/Developer/Platforms/${IOS_PLATFORM_LOCATION}/Developer") 118 | if (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT) 119 | if (EXISTS ${XCODE_POST_43_ROOT}) 120 | set (CMAKE_IOS_DEVELOPER_ROOT ${XCODE_POST_43_ROOT}) 121 | elseif(EXISTS ${XCODE_PRE_43_ROOT}) 122 | set (CMAKE_IOS_DEVELOPER_ROOT ${XCODE_PRE_43_ROOT}) 123 | endif (EXISTS ${XCODE_POST_43_ROOT}) 124 | endif (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT) 125 | set (CMAKE_IOS_DEVELOPER_ROOT ${CMAKE_IOS_DEVELOPER_ROOT} CACHE PATH "Location of iOS Platform") 126 | 127 | # Find and use the most recent iOS sdk unless specified manually with CMAKE_IOS_SDK_ROOT 128 | if (NOT DEFINED CMAKE_IOS_SDK_ROOT) 129 | file (GLOB _CMAKE_IOS_SDKS "${CMAKE_IOS_DEVELOPER_ROOT}/SDKs/*") 130 | if (_CMAKE_IOS_SDKS) 131 | list (SORT _CMAKE_IOS_SDKS) 132 | list (REVERSE _CMAKE_IOS_SDKS) 133 | list (GET _CMAKE_IOS_SDKS 0 CMAKE_IOS_SDK_ROOT) 134 | else (_CMAKE_IOS_SDKS) 135 | message (FATAL_ERROR "No iOS SDK's found in default search path ${CMAKE_IOS_DEVELOPER_ROOT}. Manually set CMAKE_IOS_SDK_ROOT or install the iOS SDK.") 136 | endif (_CMAKE_IOS_SDKS) 137 | message (STATUS "Toolchain using default iOS SDK: ${CMAKE_IOS_SDK_ROOT}") 138 | endif (NOT DEFINED CMAKE_IOS_SDK_ROOT) 139 | set (CMAKE_IOS_SDK_ROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Location of the selected iOS SDK") 140 | 141 | # Set the sysroot default to the most recent SDK 142 | set (CMAKE_OSX_SYSROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Sysroot used for iOS support") 143 | 144 | # set the architecture for iOS 145 | # NOTE: Currently both ARCHS_STANDARD_32_BIT and ARCHS_UNIVERSAL_IPHONE_OS set armv7 only, so set both manually 146 | if (${IOS_PLATFORM} STREQUAL "OS") 147 | set (IOS_ARCH armv7) 148 | else (${IOS_PLATFORM} STREQUAL "OS") 149 | set (IOS_ARCH i386) 150 | endif (${IOS_PLATFORM} STREQUAL "OS") 151 | 152 | set (CMAKE_OSX_ARCHITECTURES ${IOS_ARCH} CACHE STRING "Build architecture for iOS") 153 | 154 | # Set the find root to the iOS developer roots and to user defined paths 155 | set (CMAKE_FIND_ROOT_PATH ${CMAKE_IOS_DEVELOPER_ROOT} ${CMAKE_IOS_SDK_ROOT} ${CMAKE_PREFIX_PATH} CACHE STRING "iOS find search path root") 156 | 157 | # default to searching for frameworks first 158 | set (CMAKE_FIND_FRAMEWORK FIRST) 159 | 160 | # set up the default search directories for frameworks 161 | set (CMAKE_SYSTEM_FRAMEWORK_PATH 162 | ${CMAKE_IOS_SDK_ROOT}/System/Library/Frameworks 163 | ${CMAKE_IOS_SDK_ROOT}/System/Library/PrivateFrameworks 164 | ${CMAKE_IOS_SDK_ROOT}/Developer/Library/Frameworks 165 | ) 166 | 167 | # only search the iOS sdks, not the remainder of the host filesystem 168 | #set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) 169 | #set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 170 | #set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 171 | 172 | 173 | # This little macro lets you set any XCode specific property 174 | macro (set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE) 175 | set_property (TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE}) 176 | endmacro (set_xcode_property) 177 | 178 | 179 | # This macro lets you find executable programs on the host system 180 | macro (find_host_package) 181 | set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 182 | set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER) 183 | set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER) 184 | set (IOS FALSE) 185 | 186 | find_package(${ARGN}) 187 | 188 | set (IOS TRUE) 189 | set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) 190 | set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 191 | set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 192 | endmacro (find_host_package) 193 | 194 | macro(ADD_FRAMEWORK fwname frameworks) 195 | find_library(FRAMEWORK_${fwname} 196 | NAMES ${fwname} 197 | ) 198 | if( ${FRAMEWORK_${fwname}} STREQUAL FRAMEWORK_${fwname}-NOTFOUND) 199 | MESSAGE(ERROR ": Framework ${fwname} not found") 200 | else() 201 | list(APPEND ${frameworks} ${FRAMEWORK_${fwname}}) 202 | MESSAGE(STATUS "Framework ${fwname} found at ${FRAMEWORK_${fwname}}") 203 | endif() 204 | endmacro(ADD_FRAMEWORK) 205 | 206 | # http://stackoverflow.com/questions/14171740/cmake-with-ios-toolchain-cant-find-threads 207 | # http://public.kitware.com/Bug/view.php?id=12288 208 | # Fix for try_compile 209 | SET(CMAKE_MACOSX_BUNDLE YES) 210 | SET(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer") 211 | SET(MACOSX_BUNDLE_GUI_IDENTIFIER "org.racing") 212 | # http://stackoverflow.com/questions/11198878/how-do-you-specify-a-universal-ios-application-when-building-through-cmake 213 | SET(CMAKE_XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2") 214 | -------------------------------------------------------------------------------- /build/Ecs/cmake/ios.toolchain.cmake: -------------------------------------------------------------------------------- 1 | # This file is part of the ios-cmake project. It was retrieved from 2 | # https://github.com/cristeab/ios-cmake.git, which is a fork of 3 | # https://code.google.com/p/ios-cmake/. Which in turn is based off of 4 | # the Platform/Darwin.cmake and Platform/UnixPaths.cmake files which 5 | # are included with CMake 2.8.4 6 | # 7 | # The ios-cmake project is licensed under the new BSD license. 8 | # 9 | # Copyright (c) 2014, Bogdan Cristea and LTE Engineering Software, 10 | # Kitware, Inc., Insight Software Consortium. All rights reserved. 11 | # Redistribution and use in source and binary forms, with or without 12 | # modification, are permitted provided that the following conditions 13 | # are met: 14 | # 1. Redistributions of source code must retain the above copyright 15 | # notice, this list of conditions and the following disclaimer. 16 | # 17 | # 2. Redistributions in binary form must reproduce the above copyright 18 | # notice, this list of conditions and the following disclaimer in the 19 | # documentation and/or other materials provided with the distribution. 20 | # 21 | # 3. Neither the name of the copyright holder nor the names of its 22 | # contributors may be used to endorse or promote products derived from 23 | # this software without specific prior written permission. 24 | # 25 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 26 | # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 27 | # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 28 | # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 29 | # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 30 | # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 31 | # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 32 | # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 33 | # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 34 | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 35 | # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 36 | # POSSIBILITY OF SUCH DAMAGE. 37 | # 38 | # This file is based off of the Platform/Darwin.cmake and 39 | # Platform/UnixPaths.cmake files which are included with CMake 2.8.4 40 | # It has been altered for iOS development. 41 | # 42 | # Updated by Alex Stewart (alexs.mac@gmail.com) 43 | # 44 | # ***************************************************************************** 45 | # Now maintained by Alexander Widerberg (widerbergaren [at] gmail.com) 46 | # under the BSD-3-Clause license 47 | # https://github.com/leetal/ios-cmake 48 | # ***************************************************************************** 49 | # 50 | # INFORMATION / HELP 51 | # 52 | # The following arguments control the behaviour of this toolchain: 53 | # 54 | # PLATFORM: (default "OS") 55 | # OS = Build for iPhoneOS. 56 | # OS64 = Build for arm64 iphoneOS. 57 | # OS64COMBINED = Build for arm64 x86_64 iphoneOS. Combined into FAT STATIC lib (supported on 3.14+ of CMakewith "-G Xcode" argument ONLY) 58 | # SIMULATOR = Build for x86 i386 iphoneOS Simulator. 59 | # SIMULATOR64 = Build for x86_64 iphoneOS Simulator. 60 | # TVOS = Build for arm64 tvOS. 61 | # TVOSCOMBINED = Build for arm64 x86_64 tvOS. Combined into FAT STATIC lib (supported on 3.14+ of CMake with "-G Xcode" argument ONLY) 62 | # SIMULATOR_TVOS = Build for x86_64 tvOS Simulator. 63 | # WATCHOS = Build for armv7k arm64_32 for watchOS. 64 | # WATCHOSCOMBINED = Build for armv7k arm64_32 x86_64 watchOS. Combined into FAT STATIC lib (supported on 3.14+ of CMake with "-G Xcode" argument ONLY) 65 | # SIMULATOR_WATCHOS = Build for x86_64 for watchOS Simulator. 66 | # 67 | # CMAKE_OSX_SYSROOT: Path to the SDK to use. By default this is 68 | # automatically determined from PLATFORM and xcodebuild, but 69 | # can also be manually specified (although this should not be required). 70 | # 71 | # CMAKE_DEVELOPER_ROOT: Path to the Developer directory for the platform 72 | # being compiled for. By default this is automatically determined from 73 | # CMAKE_OSX_SYSROOT, but can also be manually specified (although this should 74 | # not be required). 75 | # 76 | # DEPLOYMENT_TARGET: Minimum SDK version to target. Default 2.0 on watchOS and 9.0 on tvOS+iOS 77 | # 78 | # ENABLE_BITCODE: (1|0) Enables or disables bitcode support. Default 1 (true) 79 | # 80 | # ENABLE_ARC: (1|0) Enables or disables ARC support. Default 1 (true, ARC enabled by default) 81 | # 82 | # ENABLE_VISIBILITY: (1|0) Enables or disables symbol visibility support. Default 0 (false, visibility hidden by default) 83 | # 84 | # ENABLE_STRICT_TRY_COMPILE: (1|0) Enables or disables strict try_compile() on all Check* directives (will run linker 85 | # to actually check if linking is possible). Default 0 (false, will set CMAKE_TRY_COMPILE_TARGET_TYPE to STATIC_LIBRARY) 86 | # 87 | # ARCHS: (armv7 armv7s armv7k arm64 arm64_32 i386 x86_64) If specified, will override the default architectures for the given PLATFORM 88 | # OS = armv7 armv7s arm64 (if applicable) 89 | # OS64 = arm64 (if applicable) 90 | # SIMULATOR = i386 91 | # SIMULATOR64 = x86_64 92 | # TVOS = arm64 93 | # SIMULATOR_TVOS = x86_64 (i386 has since long been deprecated) 94 | # WATCHOS = armv7k arm64_32 (if applicable) 95 | # SIMULATOR_WATCHOS = x86_64 (i386 has since long been deprecated) 96 | # 97 | # This toolchain defines the following variables for use externally: 98 | # 99 | # XCODE_VERSION: Version number (not including Build version) of Xcode detected. 100 | # SDK_VERSION: Version of SDK being used. 101 | # CMAKE_OSX_ARCHITECTURES: Architectures being compiled for (generated from PLATFORM). 102 | # 103 | # This toolchain defines the following macros for use externally: 104 | # 105 | # set_xcode_property (TARGET XCODE_PROPERTY XCODE_VALUE XCODE_VARIANT) 106 | # A convenience macro for setting xcode specific properties on targets. 107 | # Available variants are: All, Release, RelWithDebInfo, Debug, MinSizeRel 108 | # example: set_xcode_property (myioslib IPHONEOS_DEPLOYMENT_TARGET "3.1" "all"). 109 | # 110 | # find_host_package (PROGRAM ARGS) 111 | # A macro used to find executable programs on the host system, not within the 112 | # environment. Thanks to the android-cmake project for providing the 113 | # command. 114 | # 115 | # ******************************** DEPRECATIONS ******************************* 116 | # 117 | # IOS_DEPLOYMENT_TARGET: (Deprecated) Alias to DEPLOYMENT_TARGET 118 | # CMAKE_IOS_DEVELOPER_ROOT: (Deprecated) Alias to CMAKE_DEVELOPER_ROOT 119 | # IOS_PLATFORM: (Deprecated) Alias to PLATFORM 120 | # IOS_ARCH: (Deprecated) Alias to ARCHS 121 | # 122 | # ***************************************************************************** 123 | # 124 | 125 | # Fix for PThread library not in path 126 | set(CMAKE_THREAD_LIBS_INIT "-lpthread") 127 | set(CMAKE_HAVE_THREADS_LIBRARY 1) 128 | set(CMAKE_USE_WIN32_THREADS_INIT 0) 129 | set(CMAKE_USE_PTHREADS_INIT 1) 130 | 131 | # Cache what generator is used 132 | set(USED_CMAKE_GENERATOR "${CMAKE_GENERATOR}" CACHE STRING "Expose CMAKE_GENERATOR" FORCE) 133 | 134 | if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.14") 135 | set(MODERN_CMAKE YES) 136 | message(STATUS "Merging integrated CMake 3.14+ iOS,tvOS,watchOS,macOS toolchain(s) with this toolchain!") 137 | endif() 138 | 139 | # Get the Xcode version being used. 140 | execute_process(COMMAND xcodebuild -version 141 | OUTPUT_VARIABLE XCODE_VERSION 142 | ERROR_QUIET 143 | OUTPUT_STRIP_TRAILING_WHITESPACE) 144 | string(REGEX MATCH "Xcode [0-9\\.]+" XCODE_VERSION "${XCODE_VERSION}") 145 | string(REGEX REPLACE "Xcode ([0-9\\.]+)" "\\1" XCODE_VERSION "${XCODE_VERSION}") 146 | message(STATUS "Building with Xcode version: ${XCODE_VERSION}") 147 | 148 | ######## ALIASES (DEPRECATION WARNINGS) 149 | 150 | if(DEFINED IOS_PLATFORM) 151 | set(PLATFORM ${IOS_PLATFORM}) 152 | message(DEPRECATION "IOS_PLATFORM argument is DEPRECATED. Consider using the new PLATFORM argument instead.") 153 | endif() 154 | 155 | if(DEFINED IOS_DEPLOYMENT_TARGET) 156 | set(DEPLOYMENT_TARGET ${IOS_DEPLOYMENT_TARGET}) 157 | message(DEPRECATION "IOS_DEPLOYMENT_TARGET argument is DEPRECATED. Consider using the new DEPLOYMENT_TARGET argument instead.") 158 | endif() 159 | 160 | if(DEFINED CMAKE_IOS_DEVELOPER_ROOT) 161 | set(CMAKE_DEVELOPER_ROOT ${CMAKE_IOS_DEVELOPER_ROOT}) 162 | message(DEPRECATION "CMAKE_IOS_DEVELOPER_ROOT argument is DEPRECATED. Consider using the new CMAKE_DEVELOPER_ROOT argument instead.") 163 | endif() 164 | 165 | if(DEFINED IOS_ARCH) 166 | set(ARCHS ${IOS_ARCH}) 167 | message(DEPRECATION "IOS_ARCH argument is DEPRECATED. Consider using the new ARCHS argument instead.") 168 | endif() 169 | 170 | ######## END ALIASES 171 | 172 | # Unset the FORCE on cache variables if in try_compile() 173 | set(FORCE_CACHE FORCE) 174 | get_property(_CMAKE_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE) 175 | if(_CMAKE_IN_TRY_COMPILE) 176 | unset(FORCE_CACHE) 177 | endif() 178 | 179 | # Default to building for iPhoneOS if not specified otherwise, and we cannot 180 | # determine the platform from the CMAKE_OSX_ARCHITECTURES variable. The use 181 | # of CMAKE_OSX_ARCHITECTURES is such that try_compile() projects can correctly 182 | # determine the value of PLATFORM from the root project, as 183 | # CMAKE_OSX_ARCHITECTURES is propagated to them by CMake. 184 | if(NOT DEFINED PLATFORM) 185 | if (CMAKE_OSX_ARCHITECTURES) 186 | if(CMAKE_OSX_ARCHITECTURES MATCHES ".*arm.*" AND CMAKE_OSX_SYSROOT MATCHES ".*iphoneos.*") 187 | set(PLATFORM "OS") 188 | elseif(CMAKE_OSX_ARCHITECTURES MATCHES "i386" AND CMAKE_OSX_SYSROOT MATCHES ".*iphonesimulator.*") 189 | set(PLATFORM "SIMULATOR") 190 | elseif(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64" AND CMAKE_OSX_SYSROOT MATCHES ".*iphonesimulator.*") 191 | set(PLATFORM "SIMULATOR64") 192 | elseif(CMAKE_OSX_ARCHITECTURES MATCHES "arm64" AND CMAKE_OSX_SYSROOT MATCHES ".*appletvos.*") 193 | set(PLATFORM "TVOS") 194 | elseif(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64" AND CMAKE_OSX_SYSROOT MATCHES ".*appletvsimulator.*") 195 | set(PLATFORM "SIMULATOR_TVOS") 196 | elseif(CMAKE_OSX_ARCHITECTURES MATCHES ".*armv7k.*" AND CMAKE_OSX_SYSROOT MATCHES ".*watchos.*") 197 | set(PLATFORM "WATCHOS") 198 | elseif(CMAKE_OSX_ARCHITECTURES MATCHES "i386" AND CMAKE_OSX_SYSROOT MATCHES ".*watchsimulator.*") 199 | set(PLATFORM "SIMULATOR_WATCHOS") 200 | endif() 201 | endif() 202 | if (NOT PLATFORM) 203 | set(PLATFORM "OS") 204 | endif() 205 | endif() 206 | 207 | set(PLATFORM_INT "${PLATFORM}" CACHE STRING "Type of platform for which the build targets.") 208 | 209 | # Handle the case where we are targeting iOS and a version above 10.3.4 (32-bit support dropped officially) 210 | if(PLATFORM_INT STREQUAL "OS" AND DEPLOYMENT_TARGET VERSION_GREATER_EQUAL 10.3.4) 211 | set(PLATFORM_INT "OS64") 212 | message(STATUS "Targeting minimum SDK version ${DEPLOYMENT_TARGET}. Dropping 32-bit support.") 213 | elseif(PLATFORM_INT STREQUAL "SIMULATOR" AND DEPLOYMENT_TARGET VERSION_GREATER_EQUAL 10.3.4) 214 | set(PLATFORM_INT "SIMULATOR64") 215 | message(STATUS "Targeting minimum SDK version ${DEPLOYMENT_TARGET}. Dropping 32-bit support.") 216 | endif() 217 | 218 | # Determine the platform name and architectures for use in xcodebuild commands 219 | # from the specified PLATFORM name. 220 | if(PLATFORM_INT STREQUAL "OS") 221 | set(SDK_NAME iphoneos) 222 | if(NOT ARCHS) 223 | set(ARCHS armv7 armv7s arm64) 224 | endif() 225 | elseif(PLATFORM_INT STREQUAL "OS64") 226 | set(SDK_NAME iphoneos) 227 | if(NOT ARCHS) 228 | if (XCODE_VERSION VERSION_GREATER 10.0) 229 | set(ARCHS arm64) # Add arm64e when Apple have fixed the integration issues with it, libarclite_iphoneos.a is currently missung bitcode markers for example 230 | else() 231 | set(ARCHS arm64) 232 | endif() 233 | endif() 234 | elseif(PLATFORM_INT STREQUAL "OS64COMBINED") 235 | set(SDK_NAME iphoneos) 236 | if(MODERN_CMAKE) 237 | if(NOT ARCHS) 238 | if (XCODE_VERSION VERSION_GREATER 10.0) 239 | set(ARCHS arm64 x86_64) # Add arm64e when Apple have fixed the integration issues with it, libarclite_iphoneos.a is currently missung bitcode markers for example 240 | else() 241 | set(ARCHS arm64 x86_64) 242 | endif() 243 | endif() 244 | else() 245 | message(FATAL_ERROR "Please make sure that you are running CMake 3.14+ to make the OS64COMBINED setting work") 246 | endif() 247 | elseif(PLATFORM_INT STREQUAL "SIMULATOR") 248 | set(SDK_NAME iphonesimulator) 249 | if(NOT ARCHS) 250 | set(ARCHS i386) 251 | endif() 252 | message(DEPRECATION "SIMULATOR IS DEPRECATED. Consider using SIMULATOR64 instead.") 253 | elseif(PLATFORM_INT STREQUAL "SIMULATOR64") 254 | set(SDK_NAME iphonesimulator) 255 | if(NOT ARCHS) 256 | set(ARCHS x86_64) 257 | endif() 258 | elseif(PLATFORM_INT STREQUAL "TVOS") 259 | set(SDK_NAME appletvos) 260 | if(NOT ARCHS) 261 | set(ARCHS arm64) 262 | endif() 263 | elseif (PLATFORM_INT STREQUAL "TVOSCOMBINED") 264 | set(SDK_NAME appletvos) 265 | if(MODERN_CMAKE) 266 | if(NOT ARCHS) 267 | set(ARCHS arm64 x86_64) 268 | endif() 269 | else() 270 | message(FATAL_ERROR "Please make sure that you are running CMake 3.14+ to make the TVOSCOMBINED setting work") 271 | endif() 272 | elseif(PLATFORM_INT STREQUAL "SIMULATOR_TVOS") 273 | set(SDK_NAME appletvsimulator) 274 | if(NOT ARCHS) 275 | set(ARCHS x86_64) 276 | endif() 277 | elseif(PLATFORM_INT STREQUAL "WATCHOS") 278 | set(SDK_NAME watchos) 279 | if(NOT ARCHS) 280 | if (XCODE_VERSION VERSION_GREATER 10.0) 281 | set(ARCHS armv7k arm64_32) 282 | else() 283 | set(ARCHS armv7k) 284 | endif() 285 | endif() 286 | elseif(PLATFORM_INT STREQUAL "WATCHOSCOMBINED") 287 | set(SDK_NAME watchos) 288 | if(MODERN_CMAKE) 289 | if(NOT ARCHS) 290 | if (XCODE_VERSION VERSION_GREATER 10.0) 291 | set(ARCHS armv7k arm64_32 i386) 292 | else() 293 | set(ARCHS armv7k i386) 294 | endif() 295 | endif() 296 | else() 297 | message(FATAL_ERROR "Please make sure that you are running CMake 3.14+ to make the WATCHOSCOMBINED setting work") 298 | endif() 299 | elseif(PLATFORM_INT STREQUAL "SIMULATOR_WATCHOS") 300 | set(SDK_NAME watchsimulator) 301 | if(NOT ARCHS) 302 | set(ARCHS i386) 303 | endif() 304 | else() 305 | message(FATAL_ERROR "Invalid PLATFORM: ${PLATFORM_INT}") 306 | endif() 307 | message(STATUS "Configuring ${SDK_NAME} build for platform: ${PLATFORM_INT}, architecture(s): ${ARCHS}") 308 | 309 | if(MODERN_CMAKE AND PLATFORM_INT MATCHES ".*COMBINED" AND NOT USED_CMAKE_GENERATOR MATCHES "Xcode") 310 | message(FATAL_ERROR "The COMBINED options only work with Xcode generator, -G Xcode") 311 | endif() 312 | 313 | # If user did not specify the SDK root to use, then query xcodebuild for it. 314 | execute_process(COMMAND xcodebuild -version -sdk ${SDK_NAME} Path 315 | OUTPUT_VARIABLE CMAKE_OSX_SYSROOT_INT 316 | ERROR_QUIET 317 | OUTPUT_STRIP_TRAILING_WHITESPACE) 318 | if (NOT DEFINED CMAKE_OSX_SYSROOT_INT AND NOT DEFINED CMAKE_OSX_SYSROOT) 319 | message(SEND_ERROR "Please make sure that Xcode is installed and that the toolchain" 320 | "is pointing to the correct path. Please run:" 321 | "sudo xcode-select -s /Applications/Xcode.app/Contents/Developer" 322 | "and see if that fixes the problem for you.") 323 | message(FATAL_ERROR "Invalid CMAKE_OSX_SYSROOT: ${CMAKE_OSX_SYSROOT} " 324 | "does not exist.") 325 | elseif(DEFINED CMAKE_OSX_SYSROOT) 326 | message(STATUS "Using SDK: ${CMAKE_OSX_SYSROOT} for platform: ${PLATFORM_INT} when checking compatibility") 327 | elseif(DEFINED CMAKE_OSX_SYSROOT_INT) 328 | message(STATUS "Using SDK: ${CMAKE_OSX_SYSROOT_INT} for platform: ${PLATFORM_INT}") 329 | set(CMAKE_OSX_SYSROOT "${CMAKE_OSX_SYSROOT_INT}" CACHE INTERNAL "") 330 | endif() 331 | 332 | # Set Xcode property for SDKROOT as well if Xcode generator is used 333 | if(USED_CMAKE_GENERATOR MATCHES "Xcode") 334 | set(CMAKE_OSX_SYSROOT "${SDK_NAME}" CACHE INTERNAL "") 335 | if(NOT DEFINED CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM) 336 | set(CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM 123456789A CACHE INTERNAL "") 337 | endif() 338 | endif() 339 | 340 | # Specify minimum version of deployment target. 341 | if(NOT DEFINED DEPLOYMENT_TARGET) 342 | if (PLATFORM_INT STREQUAL "WATCHOS" OR PLATFORM_INT STREQUAL "SIMULATOR_WATCHOS") 343 | # Unless specified, SDK version 2.0 is used by default as minimum target version (watchOS). 344 | set(DEPLOYMENT_TARGET "2.0" 345 | CACHE STRING "Minimum SDK version to build for." ) 346 | else() 347 | # Unless specified, SDK version 9.0 is used by default as minimum target version (iOS, tvOS). 348 | set(DEPLOYMENT_TARGET "9.0" 349 | CACHE STRING "Minimum SDK version to build for." ) 350 | endif() 351 | message(STATUS "Using the default min-version since DEPLOYMENT_TARGET not provided!") 352 | endif() 353 | # Use bitcode or not 354 | if(NOT DEFINED ENABLE_BITCODE AND NOT ARCHS MATCHES "((^|;|, )(i386|x86_64))+") 355 | # Unless specified, enable bitcode support by default 356 | message(STATUS "Enabling bitcode support by default. ENABLE_BITCODE not provided!") 357 | set(ENABLE_BITCODE TRUE) 358 | elseif(NOT DEFINED ENABLE_BITCODE) 359 | message(STATUS "Disabling bitcode support by default on simulators. ENABLE_BITCODE not provided for override!") 360 | set(ENABLE_BITCODE FALSE) 361 | endif() 362 | set(ENABLE_BITCODE_INT ${ENABLE_BITCODE} CACHE BOOL "Whether or not to enable bitcode" ${FORCE_CACHE}) 363 | # Use ARC or not 364 | if(NOT DEFINED ENABLE_ARC) 365 | # Unless specified, enable ARC support by default 366 | set(ENABLE_ARC TRUE) 367 | message(STATUS "Enabling ARC support by default. ENABLE_ARC not provided!") 368 | endif() 369 | set(ENABLE_ARC_INT ${ENABLE_ARC} CACHE BOOL "Whether or not to enable ARC" ${FORCE_CACHE}) 370 | # Use hidden visibility or not 371 | if(NOT DEFINED ENABLE_VISIBILITY) 372 | # Unless specified, disable symbols visibility by default 373 | set(ENABLE_VISIBILITY FALSE) 374 | message(STATUS "Hiding symbols visibility by default. ENABLE_VISIBILITY not provided!") 375 | endif() 376 | set(ENABLE_VISIBILITY_INT ${ENABLE_VISIBILITY} CACHE BOOL "Whether or not to hide symbols (-fvisibility=hidden)" ${FORCE_CACHE}) 377 | # Set strict compiler checks or not 378 | if(NOT DEFINED ENABLE_STRICT_TRY_COMPILE) 379 | # Unless specified, disable strict try_compile() 380 | set(ENABLE_STRICT_TRY_COMPILE FALSE) 381 | message(STATUS "Using NON-strict compiler checks by default. ENABLE_STRICT_TRY_COMPILE not provided!") 382 | endif() 383 | set(ENABLE_STRICT_TRY_COMPILE_INT ${ENABLE_STRICT_TRY_COMPILE} CACHE BOOL "Whether or not to use strict compiler checks" ${FORCE_CACHE}) 384 | # Get the SDK version information. 385 | execute_process(COMMAND xcodebuild -sdk ${CMAKE_OSX_SYSROOT} -version SDKVersion 386 | OUTPUT_VARIABLE SDK_VERSION 387 | ERROR_QUIET 388 | OUTPUT_STRIP_TRAILING_WHITESPACE) 389 | 390 | # Find the Developer root for the specific iOS platform being compiled for 391 | # from CMAKE_OSX_SYSROOT. Should be ../../ from SDK specified in 392 | # CMAKE_OSX_SYSROOT. There does not appear to be a direct way to obtain 393 | # this information from xcrun or xcodebuild. 394 | if (NOT DEFINED CMAKE_DEVELOPER_ROOT AND NOT USED_CMAKE_GENERATOR MATCHES "Xcode") 395 | get_filename_component(PLATFORM_SDK_DIR ${CMAKE_OSX_SYSROOT} PATH) 396 | get_filename_component(CMAKE_DEVELOPER_ROOT ${PLATFORM_SDK_DIR} PATH) 397 | 398 | if (NOT DEFINED CMAKE_DEVELOPER_ROOT) 399 | message(FATAL_ERROR "Invalid CMAKE_DEVELOPER_ROOT: " 400 | "${CMAKE_DEVELOPER_ROOT} does not exist.") 401 | endif() 402 | endif() 403 | # Find the C & C++ compilers for the specified SDK. 404 | if(NOT CMAKE_C_COMPILER) 405 | execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT} -find clang 406 | OUTPUT_VARIABLE CMAKE_C_COMPILER 407 | ERROR_QUIET 408 | OUTPUT_STRIP_TRAILING_WHITESPACE) 409 | message(STATUS "Using C compiler: ${CMAKE_C_COMPILER}") 410 | endif() 411 | if(NOT CMAKE_CXX_COMPILER) 412 | execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT} -find clang++ 413 | OUTPUT_VARIABLE CMAKE_CXX_COMPILER 414 | ERROR_QUIET 415 | OUTPUT_STRIP_TRAILING_WHITESPACE) 416 | message(STATUS "Using CXX compiler: ${CMAKE_CXX_COMPILER}") 417 | endif() 418 | # Find (Apple's) libtool. 419 | execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT} -find libtool 420 | OUTPUT_VARIABLE BUILD_LIBTOOL 421 | ERROR_QUIET 422 | OUTPUT_STRIP_TRAILING_WHITESPACE) 423 | message(STATUS "Using libtool: ${BUILD_LIBTOOL}") 424 | # Configure libtool to be used instead of ar + ranlib to build static libraries. 425 | # This is required on Xcode 7+, but should also work on previous versions of 426 | # Xcode. 427 | set(CMAKE_C_CREATE_STATIC_LIBRARY 428 | "${BUILD_LIBTOOL} -static -o ") 429 | set(CMAKE_CXX_CREATE_STATIC_LIBRARY 430 | "${BUILD_LIBTOOL} -static -o ") 431 | # Find the toolchain's provided install_name_tool if none is found on the host 432 | if(NOT CMAKE_INSTALL_NAME_TOOL) 433 | execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT} -find install_name_tool 434 | OUTPUT_VARIABLE CMAKE_INSTALL_NAME_TOOL_INT 435 | ERROR_QUIET 436 | OUTPUT_STRIP_TRAILING_WHITESPACE) 437 | set(CMAKE_INSTALL_NAME_TOOL ${CMAKE_INSTALL_NAME_TOOL_INT} CACHE STRING "" ${FORCE_CACHE}) 438 | message(STATUS "Using install_name_tool: ${CMAKE_INSTALL_NAME_TOOL}") 439 | endif() 440 | # Get the version of Darwin (OS X) of the host. 441 | execute_process(COMMAND uname -r 442 | OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_VERSION 443 | ERROR_QUIET 444 | OUTPUT_STRIP_TRAILING_WHITESPACE) 445 | # CMake 3.14+ support building for iOS, watchOS and tvOS out of the box. 446 | if(MODERN_CMAKE) 447 | if(SDK_NAME MATCHES "iphone") 448 | set(CMAKE_SYSTEM_NAME iOS CACHE INTERNAL "" ${FORCE_CACHE}) 449 | elseif(SDK_NAME MATCHES "appletv") 450 | set(CMAKE_SYSTEM_NAME tvOS CACHE INTERNAL "" ${FORCE_CACHE}) 451 | elseif(SDK_NAME MATCHES "watch") 452 | set(CMAKE_SYSTEM_NAME watchOS CACHE INTERNAL "" ${FORCE_CACHE}) 453 | endif() 454 | 455 | # Provide flags for a combined FAT library build on newer CMake versions 456 | if(PLATFORM_INT MATCHES ".*COMBINED") 457 | set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH NO CACHE INTERNAL "" ${FORCE_CACHE}) 458 | set(CMAKE_IOS_INSTALL_COMBINED YES CACHE INTERNAL "" ${FORCE_CACHE}) 459 | message(STATUS "Will combine built (static) artifacts into FAT lib...") 460 | endif() 461 | else() 462 | # Legacy code path prior to CMake 3.14 463 | set(CMAKE_SYSTEM_NAME Darwin CACHE INTERNAL "" ${FORCE_CACHE}) 464 | endif() 465 | # Standard settings. 466 | set(CMAKE_SYSTEM_VERSION ${SDK_VERSION} CACHE INTERNAL "") 467 | set(UNIX TRUE CACHE BOOL "") 468 | set(APPLE TRUE CACHE BOOL "") 469 | set(IOS TRUE CACHE BOOL "") 470 | set(CMAKE_AR ar CACHE FILEPATH "" FORCE) 471 | set(CMAKE_RANLIB ranlib CACHE FILEPATH "" FORCE) 472 | set(CMAKE_STRIP strip CACHE FILEPATH "" FORCE) 473 | # Set the architectures for which to build. 474 | set(CMAKE_OSX_ARCHITECTURES ${ARCHS} CACHE STRING "Build architecture for iOS") 475 | # Change the type of target generated for try_compile() so it'll work when cross-compiling, weak compiler checks 476 | if(ENABLE_STRICT_TRY_COMPILE_INT) 477 | message(STATUS "Using strict compiler checks (default in CMake).") 478 | else() 479 | set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) 480 | endif() 481 | # All iOS/Darwin specific settings - some may be redundant. 482 | set(CMAKE_SHARED_LIBRARY_PREFIX "lib") 483 | set(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib") 484 | set(CMAKE_SHARED_MODULE_PREFIX "lib") 485 | set(CMAKE_SHARED_MODULE_SUFFIX ".so") 486 | set(CMAKE_C_COMPILER_ABI ELF) 487 | set(CMAKE_CXX_COMPILER_ABI ELF) 488 | set(CMAKE_C_HAS_ISYSROOT 1) 489 | set(CMAKE_CXX_HAS_ISYSROOT 1) 490 | set(CMAKE_MODULE_EXISTS 1) 491 | set(CMAKE_DL_LIBS "") 492 | set(CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ") 493 | set(CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ") 494 | set(CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}") 495 | set(CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}") 496 | 497 | if(ARCHS MATCHES "((^|;|, )(arm64|arm64e|x86_64))+") 498 | set(CMAKE_C_SIZEOF_DATA_PTR 8) 499 | set(CMAKE_CXX_SIZEOF_DATA_PTR 8) 500 | if(ARCHS MATCHES "((^|;|, )(arm64|arm64e))+") 501 | set(CMAKE_SYSTEM_PROCESSOR "aarch64") 502 | else() 503 | set(CMAKE_SYSTEM_PROCESSOR "x86_64") 504 | endif() 505 | message(STATUS "Using a data_ptr size of 8") 506 | else() 507 | set(CMAKE_C_SIZEOF_DATA_PTR 4) 508 | set(CMAKE_CXX_SIZEOF_DATA_PTR 4) 509 | set(CMAKE_SYSTEM_PROCESSOR "arm") 510 | message(STATUS "Using a data_ptr size of 4") 511 | endif() 512 | 513 | message(STATUS "Building for minimum ${SDK_NAME} version: ${DEPLOYMENT_TARGET}" 514 | " (SDK version: ${SDK_VERSION})") 515 | # Note that only Xcode 7+ supports the newer more specific: 516 | # -m${SDK_NAME}-version-min flags, older versions of Xcode use: 517 | # -m(ios/ios-simulator)-version-min instead. 518 | if(PLATFORM_INT STREQUAL "OS" OR PLATFORM_INT STREQUAL "OS64") 519 | if(XCODE_VERSION VERSION_LESS 7.0) 520 | set(SDK_NAME_VERSION_FLAGS 521 | "-mios-version-min=${DEPLOYMENT_TARGET}") 522 | else() 523 | # Xcode 7.0+ uses flags we can build directly from SDK_NAME. 524 | set(SDK_NAME_VERSION_FLAGS 525 | "-m${SDK_NAME}-version-min=${DEPLOYMENT_TARGET}") 526 | endif() 527 | elseif(PLATFORM_INT STREQUAL "TVOS") 528 | set(SDK_NAME_VERSION_FLAGS 529 | "-mtvos-version-min=${DEPLOYMENT_TARGET}") 530 | elseif(PLATFORM_INT STREQUAL "SIMULATOR_TVOS") 531 | set(SDK_NAME_VERSION_FLAGS 532 | "-mtvos-simulator-version-min=${DEPLOYMENT_TARGET}") 533 | elseif(PLATFORM_INT STREQUAL "WATCHOS") 534 | set(SDK_NAME_VERSION_FLAGS 535 | "-mwatchos-version-min=${DEPLOYMENT_TARGET}") 536 | elseif(PLATFORM_INT STREQUAL "SIMULATOR_WATCHOS") 537 | set(SDK_NAME_VERSION_FLAGS 538 | "-mwatchos-simulator-version-min=${DEPLOYMENT_TARGET}") 539 | else() 540 | # SIMULATOR or SIMULATOR64 both use -mios-simulator-version-min. 541 | set(SDK_NAME_VERSION_FLAGS 542 | "-mios-simulator-version-min=${DEPLOYMENT_TARGET}") 543 | endif() 544 | message(STATUS "Version flags set to: ${SDK_NAME_VERSION_FLAGS}") 545 | set(CMAKE_OSX_DEPLOYMENT_TARGET ${DEPLOYMENT_TARGET} CACHE STRING 546 | "Set CMake deployment target" ${FORCE_CACHE}) 547 | 548 | if(ENABLE_BITCODE_INT) 549 | set(BITCODE "-fembed-bitcode") 550 | set(CMAKE_XCODE_ATTRIBUTE_BITCODE_GENERATION_MODE bitcode CACHE INTERNAL "") 551 | message(STATUS "Enabling bitcode support.") 552 | else() 553 | set(BITCODE "") 554 | set(CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE NO CACHE INTERNAL "") 555 | message(STATUS "Disabling bitcode support.") 556 | endif() 557 | 558 | if(ENABLE_ARC_INT) 559 | set(FOBJC_ARC "-fobjc-arc") 560 | set(CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES CACHE INTERNAL "") 561 | message(STATUS "Enabling ARC support.") 562 | else() 563 | set(FOBJC_ARC "-fno-objc-arc") 564 | set(CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC NO CACHE INTERNAL "") 565 | message(STATUS "Disabling ARC support.") 566 | endif() 567 | 568 | if(NOT ENABLE_VISIBILITY_INT) 569 | set(VISIBILITY "-fvisibility=hidden") 570 | set(CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN YES CACHE INTERNAL "") 571 | message(STATUS "Hiding symbols (-fvisibility=hidden).") 572 | else() 573 | set(VISIBILITY "") 574 | set(CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN NO CACHE INTERNAL "") 575 | endif() 576 | 577 | #Check if Xcode generator is used, since that will handle these flags automagically 578 | if(USED_CMAKE_GENERATOR MATCHES "Xcode") 579 | message(STATUS "Not setting any manual command-line buildflags, since Xcode is selected as generator.") 580 | else() 581 | set(CMAKE_C_FLAGS 582 | "${SDK_NAME_VERSION_FLAGS} ${BITCODE} -fobjc-abi-version=2 ${FOBJC_ARC} ${CMAKE_C_FLAGS}") 583 | # Hidden visibilty is required for C++ on iOS. 584 | set(CMAKE_CXX_FLAGS 585 | "${SDK_NAME_VERSION_FLAGS} ${BITCODE} ${VISIBILITY} -fvisibility-inlines-hidden -fobjc-abi-version=2 ${FOBJC_ARC} ${CMAKE_CXX_FLAGS}") 586 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} -O0 -g ${CMAKE_CXX_FLAGS_DEBUG}") 587 | set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS} -DNDEBUG -Os -ffast-math ${CMAKE_CXX_FLAGS_MINSIZEREL}") 588 | set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS} -DNDEBUG -O2 -g -ffast-math ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") 589 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -DNDEBUG -O3 -ffast-math ${CMAKE_CXX_FLAGS_RELEASE}") 590 | set(CMAKE_C_LINK_FLAGS "${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}") 591 | set(CMAKE_CXX_LINK_FLAGS "${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}") 592 | 593 | # In order to ensure that the updated compiler flags are used in try_compile() 594 | # tests, we have to forcibly set them in the CMake cache, not merely set them 595 | # in the local scope. 596 | list(APPEND VARS_TO_FORCE_IN_CACHE 597 | CMAKE_C_FLAGS 598 | CMAKE_CXX_FLAGS 599 | CMAKE_CXX_FLAGS_DEBUG 600 | CMAKE_CXX_FLAGS_RELWITHDEBINFO 601 | CMAKE_CXX_FLAGS_MINSIZEREL 602 | CMAKE_CXX_FLAGS_RELEASE 603 | CMAKE_C_LINK_FLAGS 604 | CMAKE_CXX_LINK_FLAGS) 605 | foreach(VAR_TO_FORCE ${VARS_TO_FORCE_IN_CACHE}) 606 | set(${VAR_TO_FORCE} "${${VAR_TO_FORCE}}" CACHE STRING "") 607 | endforeach() 608 | endif() 609 | 610 | set(CMAKE_PLATFORM_HAS_INSTALLNAME 1) 611 | set(CMAKE_SHARED_LINKER_FLAGS "-rpath @executable_path/Frameworks -rpath @loader_path/Frameworks") 612 | set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -Wl,-headerpad_max_install_names") 613 | set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -Wl,-headerpad_max_install_names") 614 | set(CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,") 615 | set(CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,") 616 | set(CMAKE_FIND_LIBRARY_SUFFIXES ".tbd" ".dylib" ".so" ".a") 617 | set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-install_name") 618 | 619 | # Set the find root to the iOS developer roots and to user defined paths. 620 | set(CMAKE_FIND_ROOT_PATH ${CMAKE_OSX_SYSROOT_INT} ${CMAKE_PREFIX_PATH} CACHE STRING "Root path that will be prepended 621 | to all search paths") 622 | # Default to searching for frameworks first. 623 | set(CMAKE_FIND_FRAMEWORK FIRST) 624 | # Set up the default search directories for frameworks. 625 | set(CMAKE_FRAMEWORK_PATH 626 | ${CMAKE_DEVELOPER_ROOT}/Library/PrivateFrameworks 627 | ${CMAKE_OSX_SYSROOT_INT}/System/Library/Frameworks 628 | ${CMAKE_FRAMEWORK_PATH} CACHE STRING "Frameworks search paths" ${FORCE_CACHE}) 629 | 630 | # By default, search both the specified iOS SDK and the remainder of the host filesystem. 631 | if(NOT CMAKE_FIND_ROOT_PATH_MODE_PROGRAM) 632 | set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH CACHE STRING "" ${FORCE_CACHE}) 633 | endif() 634 | if(NOT CMAKE_FIND_ROOT_PATH_MODE_LIBRARY) 635 | set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY CACHE STRING "" ${FORCE_CACHE}) 636 | endif() 637 | if(NOT CMAKE_FIND_ROOT_PATH_MODE_INCLUDE) 638 | set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY CACHE STRING "" ${FORCE_CACHE}) 639 | endif() 640 | if(NOT CMAKE_FIND_ROOT_PATH_MODE_PACKAGE) 641 | set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY CACHE STRING "" ${FORCE_CACHE}) 642 | endif() 643 | 644 | # 645 | # Some helper-macros below to simplify and beautify the CMakeFile 646 | # 647 | 648 | # This little macro lets you set any Xcode specific property. 649 | macro(set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE XCODE_RELVERSION) 650 | set(XCODE_RELVERSION_I "${XCODE_RELVERSION}") 651 | if(XCODE_RELVERSION_I STREQUAL "All") 652 | set_property(TARGET ${TARGET} PROPERTY 653 | XCODE_ATTRIBUTE_${XCODE_PROPERTY} "${XCODE_VALUE}") 654 | else() 655 | set_property(TARGET ${TARGET} PROPERTY 656 | XCODE_ATTRIBUTE_${XCODE_PROPERTY}[variant=${XCODE_RELVERSION_I}] "${XCODE_VALUE}") 657 | endif() 658 | endmacro(set_xcode_property) 659 | # This macro lets you find executable programs on the host system. 660 | macro(find_host_package) 661 | set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 662 | set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER) 663 | set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER) 664 | set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE NEVER) 665 | set(IOS FALSE) 666 | find_package(${ARGN}) 667 | set(IOS TRUE) 668 | set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH) 669 | set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) 670 | set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH) 671 | set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH) 672 | endmacro(find_host_package) 673 | -------------------------------------------------------------------------------- /build/Ecs/generate_ios.sh: -------------------------------------------------------------------------------- 1 | # MIT License 2 | 3 | # Copyright (c) 2019 huailiang 4 | 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | 12 | # The above copyright notice and this permission notice shall be included in all 13 | # copies or substantial portions of the Software. 14 | 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | # SOFTWARE. 22 | 23 | rm -f XEcs/CMakeLists.txt 24 | rm -rf build_ios 25 | mkdir -p build_ios && cd build_ios 26 | cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/iOS.cmake -GXcode ../ 27 | cd .. 28 | cmake --build build_ios --config Release 29 | mkdir -p Plugins/iOS/ 30 | cp build_ios/Release-iphoneos/libXuthus.a Plugins/iOS/libXuthus.a -------------------------------------------------------------------------------- /build/Ecs/generate_osx.sh: -------------------------------------------------------------------------------- 1 | 2 | # MIT License 3 | 4 | # Copyright (c) 2019 huailiang 5 | 6 | # Permission is hereby granted, free of charge, to any person obtaining a copy 7 | # of this software and associated documentation files (the "Software"), to deal 8 | # in the Software without restriction, including without limitation the rights 9 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | # copies of the Software, and to permit persons to whom the Software is 11 | # furnished to do so, subject to the following conditions: 12 | 13 | # The above copyright notice and this permission notice shall be included in all 14 | # copies or substantial portions of the Software. 15 | 16 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | # SOFTWARE. 23 | 24 | rm -f XEcs/CMakeLists.txt 25 | rm -rf build_osx 26 | mkdir -p build_osx && cd build_osx 27 | cmake -GXcode ../ 28 | cd .. 29 | cmake --build build_osx --config Release 30 | mkdir -p Plugins/Xuthus.bundle/Contents/MacOS/ 31 | cp build_osx/Release/Xuthus.bundle/Contents/MacOS/Xuthus Plugins/Xuthus.bundle/Contents/MacOS/Xuthus 32 | 33 | -------------------------------------------------------------------------------- /build/ExportOptions-tf.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | destination 6 | export 7 | method 8 | app-store 9 | provisioningProfiles 10 | 11 | com.pwrd.luoqi 12 | luoqiDis 13 | 14 | signingCertificate 15 | B025D4BE74561A80410EA77D6A8211BB12C31889 16 | signingStyle 17 | manual 18 | stripSwiftSymbols 19 | 20 | teamID 21 | RPQM55T9QE 22 | uploadSymbols 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /build/ExportOptions.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | compileBitcode 6 | 7 | destination 8 | export 9 | method 10 | development 11 | provisioningProfiles 12 | 13 | com.ningyunet.cfgame 14 | cfgame 15 | 16 | signingCertificate 17 | iPhone Developer 18 | signingStyle 19 | manual 20 | stripSwiftSymbols 21 | 22 | teamID 23 | AH272BR984 24 | thinning 25 | <none> 26 | 27 | 28 | -------------------------------------------------------------------------------- /build/accelerator.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | 4 | # ============================================== 5 | # git operation 6 | # Author: Huailiang.Peng 7 | # ============================================== 8 | 9 | 10 | cd /Applications/Unity2019/accelerator 11 | 12 | echo -e "\n开始清理accelerator环境" 13 | 14 | launchctl unload unity-accelerator.plist 15 | 16 | echo "accelerator 启动中..." 17 | 18 | launchctl load unity-accelerator.plist 19 | 20 | 21 | echo "accelerator 启动完毕, 链接: http://10.253.48.151:8090/dashboard" 22 | 23 | echo -e "\n当前Unity相关进程:" 24 | 25 | launchctl list | grep com.unity -------------------------------------------------------------------------------- /build/build_android.sh: -------------------------------------------------------------------------------- 1 | # ============================================== 2 | # This tool is for Create iOS test ipa 3 | # ---------------------------------------------- 4 | # Auth: Huailiang.Peng 5 | # Data: 2019.08.26 6 | # ============================================== 7 | #!/bin/sh -ilex 8 | 9 | 10 | echo -e "打包参数: \n - uid: "${uid}" \n - 分支: "${branch}" \n - 编译宏: "${macro}" \n - 登录服: "${loginserver}"\n" 11 | 12 | #游戏工程目录# 13 | PROJPATH=/Users/penghuailiang/Documents/projects/op_and 14 | 15 | TARGET_PRE=cfgame.apk 16 | 17 | TARGET=android_${uid}_${branch}.apk 18 | 19 | cd `dirname $0` 20 | 21 | sh clean_bundle.sh ${PROJPATH}/OPProject 22 | 23 | sh git.sh ${PROJPATH} 24 | 25 | sh build_android_ecs.sh ${PROJPATH}/OPProject 26 | 27 | # sh zip_filter.sh ${PROJPATH}/OPProject 28 | 29 | cd ${PROJPATH}/OPProject/Android/ 30 | 31 | rm -rf *.apk 32 | 33 | echo ${branch}"-"${uid}>${PROJPATH}/OPProject/Assets/Resources/packinfo.txt 34 | 35 | echo $macro>${PROJPATH}/OPProject/Shell/macro.txt 36 | 37 | echo $loginserver>${PROJPATH}/OPProject/Assets/Resources/loginserver.txt 38 | 39 | $UNITY2019 -quit -batchmode -projectPath $PROJPATH/OPProject -logFile /tmp/android_debug_${uid}.log -executeMethod JenkinsBuild.BuildAndroid 40 | 41 | if [ $? -ne 0 ]; then 42 | echo "打包失败" 43 | cd `dirname $0` 44 | sh build_log.sh android_debug_${uid}.log ${PROJPATH}/OPProject 45 | exit 1 46 | fi 47 | 48 | cd ${PROJPATH}/OPProject/Android/ 49 | 50 | mv ${TARGET_PRE} ${TARGET} || { echo "not found build apk, Sorry!"; cd `dirname $0`; sh build_log.sh android_debug_${uid}.log ${PROJPATH}/OPProject; exit 1; } 51 | 52 | cd `dirname $0` 53 | 54 | sh upload.sh ${PROJPATH}/OPProject ${TARGET} 55 | 56 | sh qrcode.sh ${TARGET} 57 | 58 | sh build_log.sh android_debug_${uid}.log ${PROJPATH}/OPProject 59 | 60 | -------------------------------------------------------------------------------- /build/build_android_ecs.sh: -------------------------------------------------------------------------------- 1 | # ============================================== 2 | # This tool is for Create android ecs .so 3 | # ---------------------------------------------- 4 | # Auth: Huailiang.Peng 5 | # Data: 2019.12.25 6 | # ============================================== 7 | #!/bin/bash -ilex 8 | 9 | 10 | 11 | # 外部需要传 主工程的路径+Unity Project Name 12 | if [ $# != 1 ] ; then 13 | echo "git -- 参数个数不对" 14 | exit 1; 15 | fi 16 | 17 | NDKBUILD=/Users/penghuailiang/Documents/software/eclipse/android-ndk-r20b/ndk-build 18 | 19 | ECSPATH=/Users/penghuailiang/Documents/projects/jni 20 | 21 | 22 | cd ${ECSPATH} 23 | 24 | 25 | git prune 26 | 27 | git remote prune origin 28 | 29 | git fetch -p 30 | 31 | git clean -dfq 32 | 33 | git checkout -q . 34 | 35 | SHA=`cat ${1}/Shell/EcsGitSHA.txt` 36 | 37 | git checkout ${SHA} 38 | 39 | # if [[ ${SHA} = "master" ]]; then 40 | # #statements 41 | # git pull 42 | # fi 43 | 44 | # SHA可能是分支名 也可能是git节点, 45 | # 如果名字长度<16, 就代表是分支名, 这时候使用Gitpull去merge到最新节点 46 | # Git 的节点长度是40 47 | if [[ ${#SHA} -lt 16 ]]; then 48 | git pull 49 | fi 50 | 51 | echo " " # blank line 52 | echo "当前编译ecs节点: " 53 | 54 | git log -1 55 | 56 | cp ~/Documents/shells/Android.mk . 57 | 58 | cp ~/Documents/shells/Application.mk . 59 | 60 | rm -rf XEcs/XClientEcs/swigwin-4.0.0 61 | 62 | $NDKBUILD clean 63 | 64 | $NDKBUILD > ecs_{uid}.txt 65 | 66 | echo ${1} 67 | 68 | cp ../libs/armeabi-v7a/libXuthus.so ${1}/Assets/Plugins/Android/libs/armeabi-v7a/ 69 | 70 | cp ../libs/x86/libXuthus.so ${1}/Assets/Plugins/Android/libs/x86/ 71 | 72 | echo "编译ecs结束" 73 | echo " " # blank line 74 | -------------------------------------------------------------------------------- /build/build_dll.sh: -------------------------------------------------------------------------------- 1 | # ============================================== 2 | # 用来生成 dll 3 | # Author: Huailiang.Peng 4 | # ---------------------------------------------- 5 | #!/bin/sh -ilex 6 | 7 | echo "编译参数 uid is:"${uid}" branch is:"${branch}" Configuration:"${Configuration} 8 | 9 | #mono steup dir# 10 | XBUILD_PATH=/Applications/Unity/MonoDevelop.app/Contents/Frameworks/Mono.framework/Versions/Current/bin/xbuild 11 | 12 | #游戏代码目录# 13 | SRC_PATH=/Users/penghuailiang/Documents/projects/LQClientSrc 14 | 15 | TARGET=dll_${uid}_${branch}.zip 16 | 17 | cd `dirname $0` 18 | 19 | sh git.sh ${SRC_PATH} 20 | 21 | 22 | TARGET_DLL_PATH=/Library/WebServer/Documents/dll/ 23 | 24 | MSBuild=/Library/Frameworks/Mono.framework/Versions/Current/Commands/MSBuild 25 | 26 | CONFIG="Debug" 27 | 28 | if [ "$Configuration"x = "Release"x ]; then 29 | 30 | CONFIG="Release" 31 | 32 | fi 33 | 34 | echo ${CONFIG} 35 | 36 | cd ${SRC_PATH}/client/CFClient 37 | 38 | $MSBuild CFClient.sln /t:Rebuild /p:TargetFrameworkVersion=v4.0 /p:Configuration=${CONFIG} /p:PostBuildEvent="" /p:TargetFrameworkProfile="Client" 39 | 40 | 41 | # #最终没有文件生成,说明编译失败 42 | if [ ! -f "${SRC_PATH}/client/CFClient/CFClient/bin/${CONFIG}/CFClient.dll" ];then 43 | echo "error xbuild compile. Please Check ${SRC_PATH}" 44 | exit 1; 45 | fi 46 | 47 | echo "生成dll成功" 48 | 49 | cd ${SRC_PATH}/client/CFClient/CFClient/bin/ 50 | 51 | cd ${CONFIG} 52 | 53 | rm -rf UnityEngine.dll | rm -rf UnityEngine.Timeline.dll | rm -rf enum2int.dll | rm -rf protobuf-lib.dll | rm -rf *.pdb 54 | 55 | cd ../ 56 | 57 | zip -qr ${TARGET} ${CONFIG}/ || { echo "not found build package, Sorry!"; exit 1; } 58 | 59 | mv ${TARGET} /Library/WebServer/Documents/dll/${TARGET} 60 | 61 | echo "上传完毕,点击链接下载:http://10.253.48.151/dll/"${TARGET} -------------------------------------------------------------------------------- /build/build_ios.sh: -------------------------------------------------------------------------------- 1 | # ============================================== 2 | # This tool is for Create iOS test ipa 3 | # ---------------------------------------------- 4 | # Auth: Huailiang.Peng 5 | # Data: 2019.08.26 6 | # ============================================== 7 | #!/bin/sh 8 | 9 | #游戏工程目录# 10 | PROJPATH=/Users/penghuailiang/Documents/projects/op_ios 11 | 12 | PACK_PATH=/Users/penghuailiang/Documents/projects/op_ios/OPProject/IOS/cfgame 13 | 14 | PLIST_PATH=/Users/penghuailiang/Documents/shells/ExportOptions.plist 15 | 16 | CODE_SIGN_IDENTITY="iPhone Developer: xutao rong (DK7RY25K26)" 17 | 18 | PROVISIONING_PROFILE_NAME="cfgame" 19 | 20 | TARGET=ios_${uid}_${branch}.ipa 21 | 22 | #-----------Config-----------# 23 | 24 | echo -e "打包参数: \n - uid: "${uid}" \n - 分支: "${branch}" \n - 编译宏: "${macro}" \n - 登录服: "${loginserver}" \n" 25 | 26 | cd `dirname $0` 27 | 28 | sh clean_bundle.sh ${PROJPATH}/OPProject 29 | 30 | sh -e git.sh ${PROJPATH} 31 | 32 | sh -e build_ios_ecs.sh ${PROJPATH}/OPProject 33 | 34 | cd ${PROJPATH}/OPProject 35 | 36 | # -p 后面跟的是密码,各机器可能不一样,要修改 37 | security unlock-keychain -p 111111 ~/Library/Keychains/login.keychain 38 | 39 | security set-keychain-setting -t 14400 -l ~/Library/Keychains/login.keychain 40 | 41 | 42 | ### build xcode proj ### 43 | 44 | rm -rf $PACK_PATH 45 | 46 | echo ${branch}"-"${uid}>${PROJPATH}/OPProject/Assets/Resources/packinfo.txt 47 | 48 | echo $macro>${PROJPATH}/OPProject/Shell/macro.txt 49 | 50 | echo $loginserver>${PROJPATH}/OPProject/Assets/Resources/loginserver.txt 51 | 52 | echo "Unity开始导出资源" 53 | 54 | $UNITY2019 -projectPath $PROJPATH/OPProject -logFile /tmp/ios_debug_${uid}.log -executeMethod JenkinsBuild.BuildIOS -quit -batchmode -nographics 55 | 56 | cd $PACK_PATH || { echo "build xcode proj failed, error log:"; cd `dirname $0`; sh build_log.sh ios_debug_${uid}.log ${PROJPATH}/OPProject; exit 1; } 57 | 58 | rm -rf *.ipa 59 | 60 | rm -rf *.xcarchive 61 | 62 | # xcodebuild clean -quiet 63 | rm -rf ~/Library/Developer/Xcode/DerivedData/* 64 | 65 | echo "xcodebuild archive" 66 | 67 | xcodebuild archive -quiet -project Unity-iPhone.xcodeproj \ 68 | -scheme Unity-iPhone \ 69 | -archivePath Unity-iPhone.xcarchive \ 70 | DWARF_DSYM_FOLDER_PATH=$(PWD) \ 71 | CODE_SIGN_STYLE="Manual" \ 72 | CODE_SIGN_IDENTITY="$CODE_SIGN_IDENTITY" \ 73 | # PROVISIONING_PROFILE_SPECIFIER="$PROVISIONING_PROFILE_NAME" 74 | 75 | #xcode8 or xcode8 earlier 76 | #xcodebuild -exportArchive -archivePath Unity-iPhone.xcarchive -exportPath ${PACK_PATH}/longzhigu_ios_${uid}_${branch}.ipa -exportFormat ipa CODE_SIGN_IDENTITY=$CODE_SIGN_IDENTITY -exportProvisioningProfile "$PROVISIONING_PROFILE_NAME" 77 | 78 | #xcode9 and later 79 | xcodebuild -quiet -exportArchive -archivePath Unity-iPhone.xcarchive -exportPath ${PACK_PATH}/ipa -exportOptionsPlist ${PLIST_PATH} 80 | 81 | OUTPUT=${PACK_PATH}/ipa 82 | 83 | if [ ! -d "$OUTPUT" ]; then 84 | echo "not found build folfer, sorry" 85 | sh build_log.sh ios_debug_${uid}.log ${PROJPATH}/OPProject 86 | exit 1 87 | fi 88 | 89 | cd ipa 90 | 91 | mv Unity-iPhone.ipa ${TARGET} 92 | 93 | cd `dirname $0` 94 | 95 | sh symbol.sh ${PROJPATH}/OPProject 96 | 97 | sh upload.sh ${PROJPATH}/OPProject ${TARGET} 98 | 99 | sh build_log.sh ios_debug_${uid}.log ${PROJPATH}/OPProject 100 | -------------------------------------------------------------------------------- /build/build_ios_batch.sh: -------------------------------------------------------------------------------- 1 | # ============================================== 2 | # This tool is for Create iOS test ipa 3 | # ---------------------------------------------- 4 | # Author: Huailiang.Peng 5 | # Data: 2018.05.28 6 | # Func: 批量自动打包 7 | # 从commits文件按行读取提交sha值 在每个节点出包 8 | # ============================================== 9 | 10 | #!/bin/sh 11 | 12 | export PROJPATH=/Users/penghuailiang/Documents/projects/CFDemoRes 13 | 14 | export PACK_PATH=/Users/penghuailiang/Documents/projects/CFDemoRes/CFDemoProject/IOS/cfgame 15 | 16 | export PLIST_PATH=/Users/penghuailiang/Documents/shells/ExportOptions.plist 17 | 18 | export CODE_SIGN_IDENTITY="iPhone Distribution: Shanghai Jiang You Information Technology Company Limited" 19 | 20 | export PROVISIONING_PROFILE_NAME="JoyYouUniversal" 21 | 22 | export macro="FMOD_LIVEUPDATE" 23 | 24 | 25 | cat commits | while read line 26 | do 27 | sh build_ios_sha.sh ${line} 28 | echo "*********************" 29 | done 30 | -------------------------------------------------------------------------------- /build/build_ios_ecs.sh: -------------------------------------------------------------------------------- 1 | # ============================================== 2 | # This tool is for Create iOS & OSX c++ library 3 | # ---------------------------------------------- 4 | # Auth: Huailiang.Peng 5 | # Data: 2019.12.11 6 | # ============================================== 7 | #!/bin/sh 8 | 9 | 10 | # 外部需要传 主工程的路径+Unity Project Name 11 | if [ $# != 1 ] ; then 12 | echo "git -- 参数个数不对" 13 | exit 1; 14 | fi 15 | 16 | ECSPATH=/Users/penghuailiang/Documents/projects/XEcs 17 | 18 | 19 | 20 | cd ${ECSPATH} 21 | 22 | git prune 23 | 24 | git remote prune origin 25 | 26 | git fetch -p 27 | 28 | git clean -dfq 29 | 30 | git checkout -q . 31 | 32 | SHA=`cat ${1}/Shell/EcsGitSHA.txt` 33 | 34 | git checkout ${SHA} 35 | 36 | # if [[ ${SHA} = "master" ]]; then 37 | # #statements 38 | # git pull 39 | # fi 40 | 41 | # SHA可能是分支名 也可能是git节点, 42 | # 如果名字长度<16, 就代表是分支名, 这时候使用Gitpull去merge到最新节点 43 | # Git 的节点长度是40 44 | if [[ ${#SHA} -lt 16 ]]; then 45 | git pull 46 | fi 47 | 48 | echo " " # blank line 49 | echo "当前编译ecs节点: " 50 | 51 | git log -1 52 | 53 | sh generate_ios.sh > ecs_${uid}.txt 54 | 55 | rm -f ${1}/Assets/Plugins/iOS/libXuthus.a 56 | 57 | if [ ! -d "${1}/Assets/Plugins/iOS/" ];then 58 | 59 | mkdir ${1}/Assets/Plugins/iOS/ 60 | 61 | fi 62 | 63 | mv Plugins/iOS/libXuthus.a ${1}/Assets/Plugins/iOS/ 64 | 65 | mv ecs_${uid}.txt /Library/WebServer/Documents/ecs 66 | 67 | echo "ecs日志:http://10.253.48.151/ecs/ecs_${uid}.txt" 68 | echo " " # blank line 69 | -------------------------------------------------------------------------------- /build/build_ios_native.sh: -------------------------------------------------------------------------------- 1 | # ============================================== 2 | # This tool is for Create iOS & OSX c++ library 3 | # ---------------------------------------------- 4 | # Auth: Huailiang.Peng 5 | # Data: 2019.12.11 6 | # ============================================== 7 | #!/bin/sh 8 | 9 | 10 | ECSPATH=/Users/penghuailiang/Documents/projects/XEcs 11 | 12 | echo -e "\n打包参数:\n uid:"${uid}" \n Git at:"${sha}" \n" 13 | 14 | PACKAGE=ecs_${uid}.zip 15 | 16 | 17 | function todo_make_log(){ 18 | 19 | mv ecs_osx_${uid}.log /Library/WebServer/Documents/ecs 20 | 21 | mv ecs_ios_${uid}.log /Library/WebServer/Documents/ecs 22 | 23 | echo "osx编译日志: http://10.253.48.151/ecs/ecs_osx_${uid}.log" 24 | 25 | echo "ios编译日志: http://10.253.48.151/ecs/ecs_ios_${uid}.log" 26 | } 27 | 28 | function todo_exec_git(){ 29 | 30 | git prune 31 | 32 | git remote prune origin 33 | 34 | git fetch -p 35 | 36 | git clean -dfq 37 | 38 | git checkout -q . 39 | 40 | git checkout ${sha} 41 | 42 | git log -1 43 | } 44 | 45 | cd ${ECSPATH} 46 | 47 | todo_exec_git 48 | 49 | rm -rf Plugins/ 50 | 51 | echo -e "\nNative Compile OSX..." 52 | 53 | sh generate_osx.sh > ecs_osx_${uid}.log 54 | 55 | echo -e "\nNative Compile IOS..." 56 | 57 | sh generate_ios.sh > ecs_ios_${uid}.log 58 | 59 | 60 | if [ ! -f "Plugins/iOS/libXuthus.a" ];then 61 | 62 | echo "native build failed" 63 | 64 | todo_make_log 65 | 66 | exit 2 # 打包失败 退出标记为2 67 | 68 | else 69 | echo -e "\nNative Compile Success\n" 70 | 71 | zip -qr ${PACKAGE} Plugins 72 | 73 | mv ${PACKAGE} /Library/WebServer/Documents/ecs 74 | 75 | echo "点击链接下载:http://10.253.48.151/ecs/${PACKAGE}" 76 | 77 | todo_make_log 78 | 79 | fi 80 | 81 | 82 | -------------------------------------------------------------------------------- /build/build_ios_sha.sh: -------------------------------------------------------------------------------- 1 | # ============================================== 2 | # This tool is for Create windows zip 3 | # ---------------------------------------------- 4 | # Auth: Huailiang.Peng 5 | # Data: 2019.08.26 6 | # ============================================== 7 | #!/bin/bash 8 | 9 | #游戏工程目录# 10 | PROJPATH=/Users/penghuailiang/Documents/projects/op_ios 11 | 12 | PACK_PATH=/Users/penghuailiang/Documents/projects/op_ios/OPProject/IOS/cfgame 13 | 14 | PLIST_PATH=/Users/penghuailiang/Documents/shells/ExportOptions.plist 15 | 16 | CODE_SIGN_IDENTITY="iPhone Developer: xutao rong (DK7RY25K26)" 17 | 18 | PROVISIONING_PROFILE_NAME="cfgame" 19 | 20 | TARGET=ios_${uid}_${SHA}.ipa 21 | 22 | # echo "打包参数 uid is:"${uid}" sha is:"${SHA}" clean:"${clean}" macro:"${macro} 23 | echo -e "打包参数: \n - uid: "${uid}" \n - 节点: "${SHA}" \n - 编译宏: "${macro}" \n - 登录服: "${loginserver}" \n" 24 | 25 | 26 | cd `dirname $0` 27 | 28 | sh clean_bundle.sh ${PROJPATH}/OPProject 29 | 30 | sh git_tag.sh ${PROJPATH} ${SHA} 31 | 32 | sh -e build_ios_ecs.sh ${PROJPATH}/OPProject 33 | 34 | cd ${PROJPATH}/OPProject 35 | 36 | # -p 后面跟的是密码,各机器可能不一样,要修改 37 | security unlock-keychain -p 111111 ~/Library/Keychains/login.keychain 38 | 39 | security set-keychain-setting -t 14400 -l ~/Library/Keychains/login.keychain 40 | 41 | 42 | ### build xcode proj ### 43 | 44 | rm -rf $PACK_PATH 45 | 46 | echo ${SHA}"-"${uid}>${PROJPATH}/OPProject/Assets/Resources/packinfo.txt 47 | 48 | echo $macro>${PROJPATH}/OPProject/Shell/macro.txt 49 | 50 | echo $loginserver>${PROJPATH}/OPProject/Assets/Resources/loginserver.txt 51 | 52 | echo "Unity开始导出资源" 53 | 54 | $UNITY2019 -projectPath $PROJPATH/OPProject -logFile /tmp/ios_debug_${uid}.log -executeMethod JenkinsBuild.BuildIOS -quit -batchmode -nographics 55 | 56 | cd $PACK_PATH || { echo "build xcode proj failed, error log:"; cd `dirname $0`; sh build_log.sh ios_debug_${uid}.log ${PROJPATH}/OPProject; exit 1; } 57 | 58 | rm -rf *.ipa 59 | 60 | rm -rf *.xcarchive 61 | 62 | # xcodebuild clean -quiet 63 | rm -rf ~/Library/Developer/Xcode/DerivedData/* 64 | 65 | echo "xcodebuild archive" 66 | 67 | xcodebuild archive -quiet -project Unity-iPhone.xcodeproj \ 68 | -scheme Unity-iPhone \ 69 | -archivePath Unity-iPhone.xcarchive \ 70 | DWARF_DSYM_FOLDER_PATH=$(PWD) \ 71 | CODE_SIGN_STYLE="Manual" \ 72 | CODE_SIGN_IDENTITY="$CODE_SIGN_IDENTITY" \ 73 | PROVISIONING_PROFILE_SPECIFIER="$PROVISIONING_PROFILE_NAME" 74 | 75 | 76 | #xcode9 and later 77 | xcodebuild -quiet -exportArchive -archivePath Unity-iPhone.xcarchive -exportPath ${PACK_PATH}/ipa -exportOptionsPlist ${PLIST_PATH} 78 | 79 | OUTPUT=${PACK_PATH}/ipa 80 | 81 | if [ ! -d "$OUTPUT" ]; then 82 | echo "not found build folfer, sorry" 83 | sh build_log.sh ios_debug_${uid}.log ${PROJPATH}/OPProject 84 | exit 1 85 | fi 86 | 87 | cd ipa 88 | 89 | mv Unity-iPhone.ipa ${TARGET} 90 | 91 | cd `dirname $0` 92 | 93 | sh symbol.sh ${PROJPATH}/OPProject 94 | 95 | sh upload.sh ${PROJPATH}/OPProject ${TARGET} 96 | 97 | sh build_log.sh ios_debug_${uid}.log ${PROJPATH}/OPProject 98 | -------------------------------------------------------------------------------- /build/build_ios_test.sh: -------------------------------------------------------------------------------- 1 | # ============================================== 2 | # This tool is for Create iOS test ipa 3 | # ---------------------------------------------- 4 | # Author: Huailiang.Peng 5 | # Data: 2016.05.25 6 | # ============================================== 7 | #!/bin/sh 8 | 9 | 10 | export branch=OB 11 | export uid=10000001 12 | export email="" 13 | export macro="FMOD_LIVEUPDATE" 14 | 15 | export PROJPATH=/Users/penghuailiang/Documents/projects/CFDemoRes 16 | 17 | export PACK_PATH=/Users/penghuailiang/Documents/projects/CFDemoRes/CFDemoProject/IOS/cfgame 18 | 19 | export PLIST_PATH=/Users/penghuailiang/Documents/shells/ExportOptions.plist 20 | 21 | export CODE_SIGN_IDENTITY="iPhone Distribution: Shanghai Jiang You Information Technology Company Limited" 22 | 23 | export PROVISIONING_PROFILE_NAME="JoyYouUniversal" 24 | 25 | 26 | # uid获取当前时间 27 | uid=$(date +"%Y%m%d%H%M%S") 28 | 29 | read -p "请输入分支名:" branch 30 | 31 | echo ${uid}" branch"${branch} 32 | 33 | sh build_ios.sh -------------------------------------------------------------------------------- /build/build_log.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # ============================================== 4 | # 用来上传日志到web服务器 5 | # Author: Huailiang.Peng 6 | # ---------------------------------------------- 7 | # arg1: Unity日志名 8 | # arg2: 工程路径 9 | # arg3: 10 | # ============================================== 11 | 12 | 13 | #如果传过来的参数不对 向上抛出异常 14 | if [ $# != 2 ] ; then 15 | echo "参数不对" 16 | exit 1; 17 | fi 18 | 19 | cd /tmp 20 | 21 | cp ${1} /Library/WebServer/Documents/buildlog/${1} 22 | 23 | echo "Unity 日志:http://10.253.48.151/buildlog/"${1} 24 | 25 | cd ${2}/Assets 26 | 27 | cp BuildLog.txt /Library/WebServer/Documents/buildlog/buildlog_${uid}.txt 28 | 29 | echo "Bundle 日志: http://10.253.48.151/buildlog/buildlog_"${uid}.txt 30 | 31 | -------------------------------------------------------------------------------- /build/build_tf.sh: -------------------------------------------------------------------------------- 1 | 2 | # ============================================== 3 | # Make testflight's configution on ios 4 | # ---------------------------------------------- 5 | # Author: Huailiang.Peng 6 | # Data: 2020.03.13 7 | # ============================================== 8 | #!/bin/bash 9 | 10 | PROJPATH=/Users/penghuailiang/Documents/projects/op_ios 11 | 12 | PACK_PATH=/Users/penghuailiang/Documents/projects/op_ios/OPProject/IOS/cfgame 13 | 14 | PLIST_PATH=/Users/penghuailiang/Documents/shells/ExportOptions-tf.plist 15 | 16 | PBX=${PACK_PATH}/Unity-iPhone.xcodeproj/project.pbxproj 17 | 18 | PLIST=${PACK_PATH}/Info.plist 19 | 20 | echo $PBX 21 | 22 | CODE_SIGN_IDENTITY="iPhone Distribution: Beijing Perfect World Software Technology Development Co., Ltd. (RPQM55T9QE)" 23 | 24 | PROVISIONING_PROFILE_NAME="luoqiDis" 25 | 26 | TARGET=ios__${version}__${build}.ipa 27 | 28 | 29 | if [[ ! -f ${PBX} ]]; then 30 | #statements 31 | echo "not found xcodeproj" 32 | exit 101 33 | fi 34 | 35 | echo "打包参数 version is:"${version}" build is:"${build} 36 | 37 | # -p 后面跟的是密码,各机器可能不一样,要修改 38 | security unlock-keychain -p 111111 ~/Library/Keychains/login.keychain 39 | 40 | security set-keychain-setting -t 14400 -l ~/Library/Keychains/login.keychain 41 | 42 | sed -i "" "s/com.ningyunet.cfgame/com.pwrd.luoqi/g" ${PBX} 43 | 44 | sed -i "" "s/CURRENT_PROJECT_VERSION = 0.0.0/CURRENT_PROJECT_VERSION = ${build}/g" ${PBX} 45 | 46 | sed -i "" "s/MARKETING_VERSION = 0.0.0/MARKETING_VERSION = ${version}/g" ${PBX} 47 | 48 | /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier com.pwrd.luoqi" ${PLIST} 49 | 50 | /usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${build}" ${PLIST} 51 | 52 | /usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${version}" ${PLIST} 53 | 54 | /usr/libexec/PlistBuddy -c "Set :objects:29B97313FDCFA39411CA2CEA:attributes:TargetAttributes:1D6058900D05DD3D006BFB54:SystemCapabilities:com.apple.Push:enabled 1" ${PBX} 55 | 56 | cd $PACK_PATH 57 | 58 | rm -rf *.ipa 59 | 60 | rm -rf *.xcarchive 61 | 62 | echo "xcodebuild clean" 63 | 64 | xcodebuild clean -quiet 65 | rm -rf ~/Library/Developer/Xcode/DerivedData/* 66 | 67 | echo "xcodebuild archive" 68 | 69 | xcodebuild archive -quiet -project Unity-iPhone.xcodeproj \ 70 | -scheme Unity-iPhone \ 71 | -archivePath Unity-iPhone.xcarchive \ 72 | DWARF_DSYM_FOLDER_PATH=$(PWD) \ 73 | CODE_SIGN_STYLE="Manual" \ 74 | CODE_SIGN_IDENTITY="$CODE_SIGN_IDENTITY" \ 75 | PROVISIONING_PROFILE_SPECIFIER="$PROVISIONING_PROFILE_NAME" 76 | 77 | echo "++++++++++++++ xcodebuild export +++++++++++++++++++" 78 | 79 | #xcode9 and later 80 | xcodebuild -quiet -exportArchive -archivePath Unity-iPhone.xcarchive -exportPath ${PACK_PATH}/ipa -exportOptionsPlist ${PLIST_PATH} 81 | 82 | OUTPUT=${PACK_PATH}/ipa 83 | 84 | if [ ! -d "$OUTPUT" ]; then 85 | echo "not found build folfer, sorry" 86 | sh build_log.sh ios_${version}_${build}.log ${PROJPATH}/OPProject 87 | exit 1 88 | fi 89 | 90 | cd ipa 91 | 92 | if [ ! -f Unity-iPhone.ipa ]; then 93 | #statements 94 | echo "not found ipa builded" 95 | exit 2 96 | fi 97 | 98 | mv Unity-iPhone.ipa ${TARGET} 99 | 100 | cd `dirname $0` 101 | 102 | sh upload.sh ${PROJPATH}/OPProject ${TARGET} 103 | -------------------------------------------------------------------------------- /build/build_upr.sh: -------------------------------------------------------------------------------- 1 | # ============================================== 2 | # Unity官方UPR资源性能分析工具 3 | # ---------------------------------------------- 4 | # Author: Huailiang.Peng 5 | # Data: 2020.11.09 6 | # ============================================== 7 | #!/bin/sh 8 | 9 | 10 | #游戏工程目录# 11 | PROJPATH=/Users/penghuailiang/Documents/projects/op_ios/OPProject 12 | 13 | PLUGINPATH=/Users/penghuailiang/Documents/kms 14 | 15 | PROJECTID=0ce7ba3f-c402-4527-8f35-827a0412a399 16 | 17 | 18 | echo "开始资源检测" 19 | 20 | cd ${PLUGINPATH} 21 | 22 | # ./unity-asset-checker/assetcheck --project=${PROJPATH} --projectId=${PROJECTID} 23 | 24 | # echo "代码分析" 25 | 26 | # ./unity-asset-checker/assetcheck code-analyze --project=${PROJPATH} --projectId=${PROJECTID} 27 | 28 | echo "AssetBundle冗余分析" 29 | 30 | ./unity-asset-checker/assetcheck abcheck --project=${PROJPATH}/Assets/StreamingAssets --projectId=${PROJECTID} 31 | -------------------------------------------------------------------------------- /build/build_windows.sh: -------------------------------------------------------------------------------- 1 | # ============================================== 2 | # This tool is for Create windows zip 3 | # ---------------------------------------------- 4 | # Auth: Huailiang.Peng 5 | # Data: 2019.08.26 6 | # ============================================== 7 | #!/bin/bash 8 | 9 | 10 | echo -e "打包参数: \n - uid: "${uid}" \n - 分支: "${branch}" \n - 编译宏: "${macro}" \n" 11 | 12 | #游戏工程目录# 13 | PROJPATH=/Users/penghuailiang/Documents/projects/op_win 14 | 15 | TARGET=win32_${uid}_${branch}.zip 16 | 17 | cd `dirname $0` 18 | 19 | sh clean_bundle.sh ${PROJPATH}/OPProject 20 | 21 | sh git.sh ${PROJPATH} 22 | 23 | # sh xbuild2dll.sh ${PROJPATH}/OPProject/Assets/Lib 24 | 25 | echo ${branch}"-"${uid}>${PROJPATH}/OPProject/Assets/Resources/packinfo.txt 26 | 27 | cd ${PROJPATH}/OPProject/Win32/ 28 | 29 | rm -rf *.exe 30 | 31 | rm -rf *_Data 32 | 33 | echo $macro>${PROJPATH}/OPProject/Shell/macro.txt 34 | 35 | $UNITY2019 -quit -batchmode -projectPath ${PROJPATH}/OPProject -logFile /tmp/win_debug_${uid}.log -executeMethod JenkinsBuild.BuildWin32 36 | 37 | if [ $? -ne 0 ]; then 38 | echo "打包失败" 39 | cd `dirname $0` 40 | sh build_log.sh win_debug_${uid}.log ${PROJPATH}/OPProject 41 | exit 1 42 | fi 43 | 44 | cd ${PROJPATH}/OPProject 45 | 46 | rm -rf *.zip 47 | 48 | zip -qr ${TARGET} Win32/ || { echo "not found build package, Sorry!"; cd `dirname $0`; sh build_log.sh win_debug_${uid}.log ${PROJPATH}/OPProject; exit 1; } 49 | 50 | echo -e "zip finish\n" 51 | 52 | cd `dirname $0` 53 | 54 | sh upload.sh ${PROJPATH}/OPProject ${TARGET} 55 | 56 | # sh sendmail.sh ${TARGET} 57 | 58 | sh build_log.sh win_debug_${uid}.log ${PROJPATH}/OPProject 59 | -------------------------------------------------------------------------------- /build/build_windows_sha.sh: -------------------------------------------------------------------------------- 1 | # ============================================== 2 | # This tool is for Create windows zip 3 | # ---------------------------------------------- 4 | # Auth: Huailiang.Peng 5 | # Data: 2019.08.26 6 | # ============================================== 7 | #!/bin/bash 8 | 9 | echo "打包参数 uid is:"${uid}" sha is:"${SHA}" macro:"${macro} 10 | 11 | #游戏工程目录# 12 | PROJPATH=/Users/penghuailiang/Documents/projects/op_win 13 | 14 | TARGET=win32_${uid}_${SHA}.zip 15 | 16 | cd `dirname $0` 17 | 18 | sh clean_bundle.sh ${PROJPATH} 19 | 20 | sh git_tag.sh ${PROJPATH} ${SHA} 21 | 22 | echo ${SHA}"-"${uid}>${PROJPATH}/OPProject/Assets/Resources/packinfo.txt 23 | 24 | cd ${PROJPATH}/OPProject/Win32/ 25 | 26 | rm -rf *.exe 27 | 28 | rm -rf *_Data 29 | 30 | echo $macro>${PROJPATH}/OPProject/Shell/macro.txt 31 | 32 | $UNITY2019 -quit -batchmode -projectPath ${PROJPATH}/OPProject -logFile /tmp/win_debug_${uid}.log -executeMethod JenkinsBuild.BuildWin32 33 | 34 | if [ $? -ne 0 ]; then 35 | echo "打包失败" 36 | cd `dirname $0` 37 | sh build_log.sh win_debug_${uid}.log ${PROJPATH}/OPProject 38 | exit 1 39 | fi 40 | 41 | cd ${PROJPATH}/OPProject 42 | 43 | rm -rf *.zip 44 | 45 | zip -qr ${TARGET} Win32/ || { echo "not found build package, Sorry!"; cd `dirname $0`; sh build_log.sh win_debug_${uid}.log ${PROJPATH}/OPProject; exit 1; } 46 | 47 | echo -e "zip finish\n" 48 | 49 | cd `dirname $0` 50 | 51 | sh upload.sh ${PROJPATH}/OPProject ${TARGET} 52 | 53 | sh build_log.sh win_debug_${uid}.log ${PROJPATH}/OPProject 54 | -------------------------------------------------------------------------------- /build/clean_bundle.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | 4 | # ============================================== 5 | # clean bundle 6 | # Author: Huailiang.Peng 7 | # ---------------------------------------------- 8 | # 清掉之后, build bundle 不再基于增量, 打包时间会变长 9 | # ============================================== 10 | 11 | if [ $# != 1 ] ; then 12 | echo "clean bundle.sh -- 参数个数不对" 13 | exit 1; 14 | fi 15 | 16 | # if [ ${clean} = "true" ]; then 17 | cd ${1}/Assets/StreamingAssets/ 18 | rm -rf Bundles/ 19 | echo "清理bundle缓存完毕" 20 | cd ${1} 21 | # fi 22 | -------------------------------------------------------------------------------- /build/commits: -------------------------------------------------------------------------------- 1 | 32fccedefe7e14a9c963005dec09f54bcf69b862 2 | e7d6f54ef3ccb9b535a4fadd1c93117d60eb612d 3 | b0921e386ca2f3e1bf04731f90366d568a0f2e2d -------------------------------------------------------------------------------- /build/disk_clean.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # ============================================== 4 | # 清理磁盘上包体、日志等 5 | # Author: Huailiang.Peng 6 | # ---------------------------------------------- 7 | # ============================================== 8 | 9 | 10 | echo "delete file before: "${day} 11 | 12 | PROJPATH=/Library/WebServer/Documents 13 | 14 | cd ${PROJPATH} 15 | 16 | 17 | function clean() 18 | { 19 | echo "开始清理"${1} 20 | 21 | cd ${PROJPATH}/${1} 22 | 23 | # pwd 24 | 25 | find . -mtime +${day} | xargs ls -al 26 | 27 | find . -mtime +${day} | xargs rm -rf 28 | 29 | echo -e "清理"${1}"完毕\n" 30 | } 31 | 32 | clean ecs 33 | 34 | clean pac 35 | 36 | clean buildlog 37 | 38 | clean qrimg 39 | 40 | clean symbol 41 | 42 | echo "目前磁盘信息:" 43 | 44 | df -hl -------------------------------------------------------------------------------- /build/envinfo.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | 4 | # ============================================== 5 | # git operation 6 | # Author: Huailiang.Peng 7 | # ============================================== 8 | 9 | PACK_PATH=/Library/WebServer/Documents/pac/ 10 | 11 | traverse_dir() 12 | { 13 | filepath=$1 14 | ext=$2 15 | for file in `ls -a $filepath` 16 | do 17 | if [ -d ${filepath}/$file ] 18 | then 19 | if [[ $file != '.' && $file != '..' ]] 20 | then 21 | #递归 22 | traverse_dir ${filepath}/$file ${ext} 23 | fi 24 | else 25 | #调用查找指定后缀文件 26 | check_suffix ${filepath} $file ${ext} 27 | fi 28 | done 29 | } 30 | 31 | 32 | ##获取后缀为txt或ini的文件 33 | check_suffix() 34 | { 35 | file=${2} 36 | ext=${3} 37 | if [ "${file##*.}"x = ${ext}x ] || [ "${file##*.}"x = "ini"x ];then 38 | echo "http://10.253.48.151/pac/"${file} 39 | fi 40 | } 41 | 42 | echo -e "\n当前磁盘信息:" 43 | 44 | df -hl 45 | 46 | echo -e "\n当前进程信息:" 47 | 48 | launchctl list | grep com. 49 | 50 | 51 | echo -e "\nAndroid包列表:" 52 | 53 | traverse_dir ${PACK_PATH} "apk" 54 | 55 | 56 | echo -e "\niOS包列表:" 57 | 58 | traverse_dir ${PACK_PATH} "ipa" -------------------------------------------------------------------------------- /build/get_xcode_proj.sh: -------------------------------------------------------------------------------- 1 | # ============================================== 2 | # This tool is obtain the lastest xcode proj for debug 3 | # ---------------------------------------------- 4 | # Auth: Huailiang.Peng 5 | # Data: 2019.01.08 6 | # ============================================== 7 | #!/bin/bash 8 | 9 | 10 | #游戏工程目录# 11 | PROJPATH=/Users/penghuailiang/Documents/projects/op_ios/OPProject/IOS 12 | 13 | TARGET=xcode_proj.zip 14 | 15 | cd /Library/WebServer/Documents/xcode/ 16 | 17 | rm *.zip 18 | 19 | cd ${PROJPATH} 20 | 21 | cd cfgame 22 | 23 | echo "正在预处理,删除build生成的信息" 24 | 25 | rm -rf *.dSYM 26 | 27 | rm -rf build/ 28 | 29 | rm -rf ipa/ 30 | 31 | cd ../ 32 | 33 | echo "预处理完毕,正在生成zip包 稍后" 34 | 35 | zip -qr ${TARGET} cfgame/ || { echo "not found xcode_proj, Sorry!"; exit 1; } 36 | 37 | mv ${TARGET} /Library/WebServer/Documents/xcode/ 38 | 39 | echo "上传完毕,点击链接下载:http://10.253.48.151/xcode/"${TARGET} 40 | 41 | -------------------------------------------------------------------------------- /build/git.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | 4 | # ============================================== 5 | # git operation 6 | # Author: Huailiang.Peng 7 | # ---------------------------------------------- 8 | # arg1: workspace 9 | # ============================================== 10 | 11 | 12 | if [ $# != 1 ] ; then 13 | echo "git -- 参数个数不对" 14 | exit 1; 15 | fi 16 | 17 | cd ${1} 18 | 19 | git prune 20 | 21 | git remote prune origin 22 | 23 | git fetch -p 24 | 25 | git clean -dfq 26 | 27 | git checkout -q . 28 | 29 | git checkout -q ${branch} 30 | 31 | git pull -q 32 | 33 | echo " " # blank line 34 | echo "当前打包git节点:" 35 | 36 | git log -1 37 | 38 | echo " " # blank line 39 | -------------------------------------------------------------------------------- /build/git_tag.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | 4 | # ============================================== 5 | # git operation 6 | # 切到某个节点 传过来的是commit的sha值 7 | # Author: Huailiang.Peng 8 | # ---------------------------------------------- 9 | # arg1: workspace 10 | # arg2: commit-id 11 | # ============================================== 12 | 13 | 14 | if [ $# != 2 ] ; then 15 | echo "git -- 参数个数不对" 16 | exit 1; 17 | fi 18 | 19 | echo "git 开始清理本地环境..." 20 | 21 | cd ${1} 22 | 23 | git prune 24 | 25 | git fetch -p 26 | 27 | git clean -dfq 28 | 29 | git checkout -q . 30 | 31 | git checkout ${2} 32 | 33 | git log -1 34 | 35 | -------------------------------------------------------------------------------- /build/mailformat: -------------------------------------------------------------------------------- 1 | 你好: 2 | 3 | 我们很高兴通知你,你在Jenkins上打的包已经完成。 4 | 5 | 下载链接:http://10.253.48.151/pac/packname 6 | 7 | 系统邮件不用回复,祝工作顺利! 8 | 9 | -------------------------------------------------------------------------------- /build/operation.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @Author: penghuailiang 4 | # @Date : 10/23/19 5 | 6 | 7 | """ 8 | python jenkins api 9 | 10 | run command on terminal at first: 11 | 12 | sudo pip3 install python-jenkins 13 | """ 14 | 15 | import jenkins 16 | import time 17 | 18 | 19 | def connect(url, user, password): 20 | """ 21 | 连接服务器 22 | :param url: jenkins server 23 | :param user: 用户名 24 | :param password: 密码 25 | :return: 26 | """ 27 | jks = jenkins.Jenkins(url, username=user, password=password) 28 | user = jks.get_whoami() 29 | version = jks.get_version() 30 | print(version, user['fullName']) 31 | return jks 32 | 33 | 34 | def jenkins_job_info(jks): 35 | """ 36 | 获取所有job信息 37 | :param jks: Jenkins 38 | :return: 39 | """ 40 | print("jobs count:", jks.jobs_count()) 41 | jobs = jks.get_jobs() 42 | for idx, job in enumerate(jobs): 43 | print("{0} {1} {2}".format(idx, job['fullname'], job['url'])) 44 | return jobs 45 | 46 | 47 | def jenkins_plugin_info(jks): 48 | """ 49 | 获取插件信息 50 | :param jks: jenkins 51 | :return: 52 | """ 53 | plugins = jks.get_plugins() 54 | print(plugins) 55 | 56 | 57 | def jenkins_build(jks, job_name, macro): 58 | """ 59 | 开始build 60 | """ 61 | uid = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) 62 | jks.build_job(job_name, parameters={'uid': uid, 'branch': 'master', 'macro': macro, 'clean': False}) 63 | 64 | 65 | def jenkins_build_info(jks, job_name): 66 | """ 67 | 获取build信息 68 | :param jks: jenkins 69 | :param job_name: job名字 70 | :return: 71 | """ 72 | last_build_number = jks.get_job_info(job_name)['lastCompletedBuild']['number'] 73 | build_info = jks.get_build_info(job_name, last_build_number) 74 | print("build info:\n", build_info) 75 | 76 | 77 | if __name__ == '__main__': 78 | server = connect('http://10.253.48.151:8080', 'admin', 'admin') 79 | if server is not None: 80 | jobs = jenkins_job_info(server) 81 | idx = input("input job index(0-{0}):\n".format(len(jobs))) 82 | 83 | try: 84 | job = jobs[int(idx)]["fullname"] 85 | print("current job is: {0}".format(job)) 86 | jenkins_build(server, job, 'FMOD_LIVEUPDATE;UNITY_POST_PROCESSING_STACK_V2;CINEMACHINE_TIMELINE') 87 | jenkins_build_info(server, job) 88 | except Exception as e: 89 | print("error ", e) 90 | raise 91 | -------------------------------------------------------------------------------- /build/qrcode.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | 4 | # ============================================== 5 | # 用来生成二维码图片 6 | # Author: Huailiang.Peng 7 | # arg1: 包名 8 | # ============================================== 9 | 10 | #如果传过来的参数不对 向上抛出异常 11 | if [ $# != 1 ] ; then 12 | echo "参数不对" 13 | exit 1; 14 | fi 15 | 16 | EXT=`echo ${1: -3}` 17 | 18 | plat=3 19 | 20 | name="win_"${uid}"_"${branch} 21 | 22 | if [ ${EXT} = "apk" ];then 23 | name="android_"${uid}"_"${branch} 24 | plat=1 25 | elif [[ ${EXT} = "ipa" ]]; then 26 | name="ios_"${uid}"_"${branch} 27 | plat=2 28 | fi 29 | 30 | cd /Library/WebServer/Documents/ 31 | 32 | /usr/bin/php generateQR.php ${name} ${plat} 33 | 34 | echo "二维码地址:http://10.253.48.151/qrimg/"${name}".png" 35 | -------------------------------------------------------------------------------- /build/sendmail.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | 4 | # ============================================== 5 | # 用来发送邮件 6 | # Author: Huailiang.Peng 7 | # ---------------------------------------------- 8 | # arg1: 下载链接 9 | # ============================================== 10 | 11 | 12 | if [ $# != 1 ] ; then 13 | echo "mail -- 参数个数不对" 14 | exit 1; 15 | fi 16 | 17 | root=/Users/penghuailiang/Documents/shells 18 | 19 | if [ -n "${email}" ]; then 20 | 21 | cd ${root} 22 | 23 | cp mailformat mailformat2 24 | 25 | sed -i "" "s/packname/"${1}"/g" mailformat2 26 | 27 | cat mailformat2 | mail -s "Jenkins通知" ${email} 28 | 29 | rm -rf mailformat2 30 | 31 | echo "邮件已发送至:"${email} 32 | 33 | fi -------------------------------------------------------------------------------- /build/symbol.sh: -------------------------------------------------------------------------------- 1 | # ============================================== 2 | # 用来将符号表上传到bugly服务器 3 | # Author: Huailiang.Peng 4 | # 5 | # arg1 参数需要将对应的unity项目地址传进 6 | # ---------------------------------------------- 7 | #!/bin/sh 8 | 9 | if [ $# != 1 ] ; then 10 | echo "symbol -- 参数个数不对" 11 | exit 1; 12 | fi 13 | 14 | echo "开始处理符号表" 15 | 16 | 17 | VERSION=${branch}"-"${uid} 18 | 19 | cd ${1}/Mods/buglySymboliOS/ 20 | 21 | rm -rf *.zip 22 | 23 | # unity2019.2 or older 24 | # TARGET=cfgame.app.dSYM 25 | 26 | # unity2019.3 later 27 | TARGET=UnityFramework.framework.dSYM 28 | 29 | BUGLY_KEY=eafbe557-8de5-4451-af90-a8070b70ddc0 30 | 31 | BUGLY_ID=95e714f5db 32 | 33 | dSYM=${1}/IOS/cfgame/${TARGET} 34 | 35 | echo ${dSYM} 36 | 37 | if [ -d "${dSYM}" ]; then 38 | 39 | cp -rf ${dSYM} ./ 40 | 41 | java -jar buglySymboliOS.jar -i ${TARGET} -u -id ${BUGLY_ID} -key ${BUGLY_KEY} -package com.ningyunet.cfgame -version ${VERSION} 42 | 43 | sh zip_dsym.sh 44 | 45 | # 主要是用来备份(手动上传),因为有时候上传失败 46 | cp *.zip /Library/WebServer/Documents/symbol/ 47 | 48 | # 自动生成一个配置文件和相关链接 49 | files=`ls *.zip` 50 | for item in $files 51 | do 52 | filename=${item%.*} 53 | echo ${VERSION}>${filename}.txt 54 | cp ${filename}.txt /Library/WebServer/Documents/symbol/ 55 | echo "符号表文件:http://10.253.48.151/symbol/"${filename}.zip 56 | done 57 | 58 | else 59 | 60 | echo "******** not found buglySymboliOS export **********" 61 | 62 | fi -------------------------------------------------------------------------------- /build/timer.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Label 6 | com.pwrd.build 7 | Program 8 | /Users/penghuailiang/Documents/shells/timerjob.sh 9 | ProgramArguments 10 | 11 | 12 | OB_New 13 | 10.253.17.49:25001 14 | 15 | StandardErrorPath 16 | /tmp/run-err.log 17 | StandardInPath 18 | /tmp/run-in.log 19 | StandardOutPath 20 | /tmp/run-out.log 21 | StartCalendarInterval 22 | 23 | Minute 24 | 1 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /build/timer.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # ============================================== 4 | # 定时触发任务 timer 5 | # https://my.oschina.net/shede333/blog/470377 6 | # 7 | # plist 放置: ~/Library/LaunchAgents 由用户自己定义的任务项 8 | # 查看进程是否开启: launchctl list | grep com.pwrd 9 | # ============================================== 10 | 11 | echo "参数 branch: "${branch}" loginserver: "${loginserver} 12 | 13 | 14 | cd `dirname $0` 15 | 16 | # 强制关闭服务 17 | launchctl unload timer.plist 18 | 19 | /usr/libexec/PlistBuddy -c "Set :ProgramArguments:1 ${branch}" timer.plist 20 | 21 | /usr/libexec/PlistBuddy -c "Set :ProgramArguments:2 ${loginserver}" timer.plist 22 | 23 | # 开启服务 24 | launchctl load timer.plist 25 | 26 | launchctl list | grep com.pwrd 27 | 28 | -------------------------------------------------------------------------------- /build/timerjob.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # ============================================== 4 | # 定时触发任务 timer 5 | # https://my.oschina.net/shede333/blog/470377 6 | # 7 | # plist 放置: ~/Library/LaunchAgents 由用户自己定义的任务项 8 | # 生成日志目录 /tmp/run-out.log 9 | # plist里的参数 arg1: branch arg2: loginserver 10 | # ============================================== 11 | 12 | echo "参数个数: "$# 13 | 14 | time=$(date "+%H%M%S") 15 | 16 | branch=${1} 17 | 18 | loginserver=${2} 19 | 20 | echo "timer job branch:"${1}"loginserver: "${2}"current time: "${time} 21 | 22 | CRUMB=$(curl -s 'http://admin:dd77a8398f73b706a001855afa7cb581@127.0.0.1:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)') 23 | 24 | function ontriger() 25 | { 26 | echo "triger: "${1}" crumb:"${CRUMB} 27 | curl -v -X POST -H ${CRUMB} -H 'Content-Type: application/json' --user admin:admin http://127.0.0.1:8080/job/${1}/buildWithParameters?branch=${branch}\&clean=true\&token=abc123\&loginserver=${loginserver} 28 | } 29 | 30 | if [[ ${time} > 030000 ]]; then 31 | if [[ ${time} < 040000 ]]; then 32 | ontriger "航海王-IOS" 33 | elif [[ ${time} < 050000 ]]; then 34 | ontriger "航海王-Android" 35 | elif [[ ${time} < 060000 ]]; then 36 | ontriger "航海王-Win" 37 | fi 38 | fi 39 | -------------------------------------------------------------------------------- /build/upload.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | 4 | # ============================================== 5 | # 用来上传包到web服务器 6 | # Author: Huailiang.Peng 7 | # ---------------------------------------------- 8 | # arg1: Unity工程的路径 9 | # arg2: 包名 10 | # ============================================== 11 | 12 | # echo "project path: "$1" package: "${2} 13 | 14 | #如果传过来的参数不对 向上抛出异常 15 | if [ $# != 2 ] ; then 16 | echo "参数不对" 17 | exit 1; 18 | fi 19 | 20 | echo "打包完成,开始上传web服务器..." 21 | 22 | cd $1 23 | 24 | EXT=`echo ${2: -3}` 25 | 26 | # echo ${EXT} 27 | 28 | if [ ${EXT} = "apk" ];then 29 | cd Android 30 | elif [[ ${EXT} = "ipa" ]]; then 31 | #statements 32 | cd IOS/cfgame/ipa 33 | fi 34 | 35 | mv ${2} /Library/WebServer/Documents/pac/${2} 36 | 37 | echo "上传完毕,点击链接下载:http://10.253.48.151/pac/"${2} 38 | -------------------------------------------------------------------------------- /build/xbuild2dll.sh: -------------------------------------------------------------------------------- 1 | # ============================================== 2 | # 用来生成 dll 3 | # Author: Huailiang.Peng 4 | # ---------------------------------------------- 5 | #!/bin/sh 6 | 7 | 8 | if [ $# != 1 ] ; then 9 | echo "zip -- 参数个数不对, 需要传入Unity工程路径" 10 | exit 1; 11 | fi 12 | 13 | XBUILD_PATH=/Applications/Unity/MonoDevelop.app/Contents/Frameworks/Mono.framework/Versions/Current/bin/xbuild 14 | 15 | SRC_PATH=/Users/penghuailiang/Documents/projects/OPSrc 16 | 17 | MSBuild=/Library/Frameworks/Mono.framework/Versions/Current/Commands/MSBuild 18 | 19 | sh git.sh ${SRC_PATH} 20 | 21 | TARGET_DLL_PATH=${1}/Assets/Lib 22 | 23 | cd ${SRC_PATH}/client/CFClient 24 | 25 | $MSBuild CFClient.sln /t:Clean 26 | 27 | echo "clean success" 28 | 29 | $MSBuild CFClient.sln /t:Rebuild /p:TargetFrameworkVersion=v4.6 /p:Configuration=${Configuration} /p:PostBuildEvent="" 30 | 31 | echo "compile dll success" 32 | 33 | #最终没有文件生成,说明编译失败 34 | if [ ! -f "${SRC_PATH}/client/CFClient/CFClient/bin/${Configuration}/CFClient.dll" ];then 35 | echo "error xbuild compile. Please Check ${SRC_PATH}" 36 | exit 1; 37 | fi 38 | 39 | cp -f ${SRC_PATH}/client/CFClient/CFClient/bin/${Configuration}/CFClient.dll ${TARGET_DLL_PATH}/ 40 | 41 | cp -f ${SRC_PATH}/client/CFClient/CFClient/bin/${Configuration}/CFUtilPoolLib.dll ${TARGET_DLL_PATH}/ 42 | 43 | echo "生成Release dll成功" 44 | -------------------------------------------------------------------------------- /build/zip_filter.sh: -------------------------------------------------------------------------------- 1 | # =================================================================== 2 | # 针对 特定资源 文件夹进行压缩操作 3 | # 1. 根据zip.txt将对应的文件夹zip压缩 4 | # 2. 将bundleres/table里的lua用到的表格copy到streamingassets目录 并zip打包 5 | # -------------------------------------------------------------------- 6 | # Auth: Huailiang.Peng 7 | # Data: 2019.12.09 8 | # ==================================================================== 9 | #!/bin/bash 10 | 11 | if [ $# != 1 ] ; then 12 | echo "zip -- 参数个数不对" 13 | exit 1; 14 | fi 15 | 16 | function todo_zip_dir(){ 17 | cd ${1} 18 | # 删除所有.meta 19 | find . -name "*.meta" | xargs rm -r 20 | cd .. 21 | # compress ${1} 22 | zip -qr ${1}.zip ${1} 23 | # 删除就文件夹 24 | rm -rf ${1} 25 | } 26 | 27 | function todo_zip_table(){ 28 | # 根据lua生成的代码自动生成copy对应的表格bytes 29 | 30 | FOLDER=${1}/Assets/StreamingAssets/lua/table 31 | files=$(ls $FOLDER) 32 | cd ${1}/Assets/StreamingAssets 33 | rm -rf table 34 | mkdir table 35 | cd .. 36 | for file in $files 37 | do 38 | # 将file的后缀.lua.txt去掉 39 | name=${file//.lua.txt/} 40 | 41 | if [[ $name == *.meta ]]; then 42 | continue 43 | fi 44 | 45 | if [ ${name}x != "table"x ]; then 46 | # copy bundle res目录下生成的bytes到streamingassets目录 47 | cp BundleRes/Table/${name}.bytes StreamingAssets/table/ 48 | fi 49 | done 50 | 51 | cd StreamingAssets 52 | zip -qr table.zip table 53 | rm -rf table/ 54 | } 55 | 56 | todo_zip_table ${1} 57 | 58 | cd ${1} 59 | 60 | cd Assets/StreamingAssets/ 61 | 62 | for line in `cat ${1}/Shell/zip.txt` 63 | do 64 | todo_zip_dir ${line} 65 | done 66 | -------------------------------------------------------------------------------- /build_ab/buildab.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | UNITY_PATH=/Applications/Unity/Unity5.app/Contents/MacOS/Unity 4 | 5 | PROJECT_Android=/Users/dn/Documents/patch_android 6 | 7 | PROJECT_Ios=/Users/dn/Documents/patch_ios 8 | 9 | Shelll_Path=/Library/WebServer/Documents/dn 10 | 11 | nmacro="APOLLO;GAMESIR;BROADCAST" 12 | 13 | target_branch=release_jenkins #release-res 14 | 15 | 16 | function gitopt() { 17 | git clean -dfq 18 | git checkout . 19 | git fetch -p 20 | git checkout ${target_branch} 21 | git pull -q 22 | git log -1 23 | } 24 | 25 | ######################### androids ########################### 26 | 27 | echo "****************** android **********************" 28 | 29 | echo "android git 还原环境,拉到最新" 30 | 31 | cd ${PROJECT_Android} 32 | 33 | gitopt 34 | 35 | 36 | echo "\n开始生成Android 补丁,请耐心等待..." 37 | 38 | $UNITY_PATH -quit -batchmode -projectPath ${PROJECT_Android}"/XProject" -logFile /tmp/patch_and_abbuild.log -executeMethod XBundlePresent.JenkinsPatch 39 | 40 | if [ $? -ne 0 ];then 41 | echo "error Build android ab " | cat /tmp/patch_and_abbuild.log 42 | exit 2 43 | fi 44 | 45 | if [ -f "${PROJECT_Android}/XProject/Shell/Error.Log" ];then 46 | echo "error occur, as list:" 47 | cat ${PROJECT_Android}/XProject/Shell/Error.Log 48 | exit 1 49 | fi 50 | 51 | echo "Android 补丁生成完毕, android 测试服上传开始..." 52 | 53 | sh ${Shelll_Path}/upload.sh "android" 1 54 | 55 | echo "\n\n" 56 | 57 | 58 | ######################### ios ########################### 59 | 60 | echo "******************* ios ***********************" 61 | 62 | echo "iOS git 还原环境,拉到最新" 63 | 64 | cd ${PROJECT_Ios} 65 | 66 | gitopt 67 | 68 | 69 | echo "\n开始生成iOS补丁,请耐心等待..." 70 | 71 | $UNITY_PATH -quit -batchmode -projectPath ${PROJECT_Ios}"/XProject" -logFile /tmp/patch_ios_abbuild.log -executeMethod XBundlePresent.JenkinsPatch 72 | 73 | if [ $? -ne 0 ];then 74 | echo "error Build android ab " | cat /tmp/patch_ios_prebuild.log 75 | exit 2 76 | fi 77 | 78 | if [ -f "${PROJECT_Ios}/XProject/Shell/Error.Log" ];then 79 | echo "error occur, as list:" 80 | cat ${PROJECT_Ios}/XProject/Shell/Error.Log 81 | exit 1 82 | fi 83 | 84 | echo "iOS 补丁生成完毕, ios 测试服上传开始..." 85 | 86 | sh ${Shelll_Path}/upload.sh "ios" 1 87 | 88 | echo "上传全部完成,请 QA 验收-- 如果中间有回退操作,请等待 cdn同步" 89 | 90 | echo "\n\n*******************************************" 91 | 92 | -------------------------------------------------------------------------------- /build_ab/db.php: -------------------------------------------------------------------------------- 1 | query($sql_db)) 23 | { 24 | echo "Database created"; 25 | // mysql_select_db("dn", $con); 26 | // mysql_query($sql_tb,$con); 27 | $con->query($sql_tb); 28 | } 29 | else 30 | { 31 | echo "Error creating database: " . mysql_error(); 32 | } 33 | } 34 | 35 | public static function insert($op,$t) 36 | { 37 | $user=$_COOKIE["name"]; 38 | $con=new mysqli("127.0.0.1","root","123u123u","dn"); 39 | if(!$con) die("could not connect:".mysql_error()); 40 | // mysqli_select_db("dn", $con); 41 | $arr = array('pull git','build bundle',"push official and improve version",'reset option' ); 42 | $sql = "INSERT INTO record (Name, log, Des, Stamp, Opt) VALUES ('".$user."', '".$t."', '".$arr[$op-1]."', now(),".$op.")"; 43 | $con->query($sql); 44 | $con->close(); 45 | } 46 | 47 | public static function regist() 48 | { 49 | $user=$_COOKIE["name"]; 50 | $pawd=$_COOKIE["pawd"]; 51 | $con = new mysqli("127.0.0.1","root","123u123u","dn"); 52 | if(!$con) die("could not connect:".mysql_error()); 53 | // mysqli_select_db("dn", $con); 54 | $sql = "INSERT INTO user (Name, ltime) VALUES ('".$user."', now())"; 55 | $con->query($sql); 56 | $con->close(); 57 | } 58 | 59 | 60 | public static function exist($name) 61 | { 62 | $rst=0; 63 | $con = new mysqli("127.0.0.1","root","123u123u","dn"); 64 | if(!$con) die("could not connect:".mysql_error()); 65 | // mysqli_select_db("dn", $con); 66 | $sql="select * from user where name = '".$name."'"; 67 | $rest=$con->query($sql); 68 | if(mysqli_num_rows($rest)) $rst=1; 69 | $con->close(); 70 | return $rst; 71 | } 72 | 73 | 74 | public static function update($name) 75 | { 76 | $con = new mysqli("127.0.0.1","root","123u123u","dn"); 77 | if(!$con) die("could not connect:".mysql_error()); 78 | mysqli_select_db($con,"dn"); 79 | $sql="update user set ltime = now() where name = '".$name."'"; 80 | // $rest=mysql_query($sql,$con); 81 | $con->query($sql); 82 | $con->close(); 83 | } 84 | 85 | 86 | public static function log($op,$log) 87 | { 88 | $user=$_COOKIE["name"]; 89 | $con=mysqli_connect("127.0.0.1","root","123u123u","dn"); 90 | if(!$con) die("could not connect:".mysql_error()); 91 | mysqli_select_db("dn", $con); 92 | $sql = "INSERT INTO log (name, log, Stamp, Opt) VALUES ('".$user."', '".$log."', now(),".$op.")"; 93 | // mysql_query($sql,$con); 94 | $con->query($sql); 95 | $con->close(); 96 | } 97 | 98 | public static function getstate() 99 | { 100 | $con=mysqli_connect("127.0.0.1","root","123u123u"); 101 | if(!$con) die("could not connect:".mysql_error()); 102 | mysqli_select_db("dn", $con); 103 | $sql = "select * from status"; 104 | // $result = mysql_query($sql,$con); 105 | $result = $con->query($sql); 106 | $con->close(); 107 | return $result; 108 | } 109 | 110 | //if $op=0 clear 111 | public static function setstate($op) 112 | { 113 | $sql="truncate table status"; 114 | $user=$_COOKIE["name"]; 115 | $con=mysqli_connect("127.0.0.1","root","123u123u","dn"); 116 | if(!$con) die("could not connect:".mysql_error()); 117 | mysqli_select_db($con, "dn"); 118 | $con->query($sql); 119 | // mysql_query($sql,$con); 120 | if($op!=0) 121 | { 122 | $sql = "INSERT INTO status (name, step) VALUES ('".$user."', ".$op.")"; 123 | // mysql_query($sql,$con); 124 | $con->query($sql); 125 | } 126 | $con->close(); 127 | } 128 | 129 | } 130 | 131 | 132 | ?> -------------------------------------------------------------------------------- /build_ab/db.sql: -------------------------------------------------------------------------------- 1 | -- phpMyAdmin SQL Dump 2 | -- version 4.7.7 3 | -- https://www.phpmyadmin.net/ 4 | -- 5 | -- Host: 127.0.0.1 6 | -- Generation Time: 2018-02-01 06:12:31 7 | -- 服务器版本: 5.7.11 8 | -- PHP Version: 5.6.30 9 | 10 | SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; 11 | SET AUTOCOMMIT = 0; 12 | START TRANSACTION; 13 | SET time_zone = "+00:00"; 14 | 15 | 16 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; 17 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; 18 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; 19 | /*!40101 SET NAMES utf8mb4 */; 20 | 21 | -- 22 | -- Database: `dn` 23 | -- 24 | CREATE DATABASE IF NOT EXISTS `dn` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; 25 | USE `dn`; 26 | 27 | -- -------------------------------------------------------- 28 | 29 | -- 30 | -- 表的结构 `record` 31 | -- 32 | 33 | CREATE TABLE `record` ( 34 | `Name` varchar(15) DEFAULT NULL, 35 | `Des` varchar(100) DEFAULT NULL, 36 | `Stamp` datetime DEFAULT NULL, 37 | `Opt` int(11) DEFAULT NULL, 38 | `log` varchar(34) NOT NULL 39 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 40 | 41 | -- 42 | -- 转存表中的数据 `record` 43 | -- 44 | 45 | INSERT INTO `record` (`Name`, `Des`, `Stamp`, `Opt`, `log`) VALUES 46 | ('alexpeng', 'push official and improve version', '2018-01-31 09:33:27', 3, '1517362407'), 47 | ('alexpeng', 'push official and improve version', '2018-01-31 09:35:43', 3, '1517362543'), 48 | ('alexpeng', 'push official and improve version', '2018-01-31 09:49:14', 3, '1517363354'), 49 | ('alexpeng', 'push official and improve version', '2018-01-31 09:52:38', 3, '1517363558'), 50 | ('alexpeng', 'push official and improve version', '2018-01-31 09:53:13', 3, '1517363593'), 51 | ('alexpeng', 'push official and improve version', '2018-01-31 09:56:24', 3, '1517363784'), 52 | ('alexpeng', 'push official and improve version', '2018-01-31 09:59:34', 3, '1517363974'), 53 | ('alexpeng', 'push official and improve version', '2018-01-31 10:08:24', 3, '1517364504'), 54 | ('alexpeng', 'push official and improve version', '2018-01-31 10:12:50', 3, '1517364770'), 55 | ('alexpeng', 'push official and improve version', '2018-01-31 10:17:09', 3, '1517365029'), 56 | ('alexpeng', 'build bundle', '2018-01-31 10:20:50', 2, '1517365250'), 57 | ('alexpeng', 'push official and improve version', '2018-01-31 10:31:00', 3, '1517365860'), 58 | ('alexpeng', 'reset option', '2018-01-31 10:49:09', 4, '1517366949'), 59 | ('alexpeng', 'reset option', '2018-01-31 10:51:30', 4, '1517367090'), 60 | ('alexpeng', 'pull git', '2018-01-31 10:51:57', 1, '1517367117'), 61 | ('alexpeng', 'build bundle', '2018-01-31 10:52:41', 2, '1517367161'), 62 | ('alexpeng', 'push official and improve version', '2018-01-31 10:59:18', 3, '1517367558'), 63 | ('alexpeng', 'reset option', '2018-01-31 11:05:28', 4, '1517367928'), 64 | ('alexpeng', 'pull git', '2018-01-31 11:06:33', 1, '1517367993'), 65 | ('alexpeng', 'pull git', '2018-01-31 11:08:00', 1, '1517368080'), 66 | ('alexpeng', 'pull git', '2018-01-31 11:13:01', 1, '1517368381'), 67 | ('alexpeng', 'pull git', '2018-01-31 11:13:04', 1, '1517368384'), 68 | ('alexpeng', 'reset option', '2018-01-31 11:13:16', 4, '1517368396'), 69 | ('alexpeng', 'pull git', '2018-01-31 11:18:13', 1, '1517368693'), 70 | ('alexpeng', 'reset option', '2018-01-31 11:18:35', 4, '1517368715'), 71 | ('alexpeng', 'pull git', '2018-01-31 11:18:52', 1, '1517368732'), 72 | ('alexpeng', 'pull git', '2018-01-31 11:20:20', 1, '1517368820'), 73 | ('alexpeng', 'pull git', '2018-01-31 11:20:54', 1, '1517368854'), 74 | ('alexpeng', 'pull git', '2018-01-31 11:24:08', 1, '1517369048'), 75 | ('alexpeng', 'pull git', '2018-01-31 11:24:18', 1, '1517369058'), 76 | ('alexpeng', 'pull git', '2018-01-31 11:28:59', 1, '1517369339'), 77 | ('alexpeng', 'pull git', '2018-01-31 11:29:18', 1, '1517369358'), 78 | ('alexpeng', 'pull git', '2018-01-31 11:29:39', 1, '1517369379'), 79 | ('alexpeng', 'pull git', '2018-01-31 11:36:34', 1, '1517369794'), 80 | ('alexpeng', 'pull git', '2018-01-31 11:37:09', 1, '1517369829'), 81 | ('alexpeng', 'pull git', '2018-01-31 11:38:05', 1, '1517369885'), 82 | ('alexpeng', 'build bundle', '2018-01-31 11:38:35', 2, '1517369915'), 83 | ('alexpeng', 'pull git', '2018-01-31 11:38:55', 1, '1517369935'), 84 | ('alexpeng', 'pull git', '2018-01-31 11:42:55', 1, '1517370175'), 85 | ('alexpeng', 'pull git', '2018-01-31 11:47:57', 1, '1517370477'), 86 | ('alexpeng', 'pull git', '2018-01-31 11:48:45', 1, '1517370525'), 87 | ('alexpeng', 'pull git', '2018-01-31 11:50:45', 1, '1517370645'), 88 | ('alexpeng', 'pull git', '2018-01-31 11:52:09', 1, '1517370729'), 89 | ('alexpeng', 'pull git', '2018-01-31 11:54:15', 1, '1517370855'), 90 | ('alexpeng', 'pull git', '2018-01-31 11:55:39', 1, '1517370939'), 91 | ('alexpeng', 'pull git', '2018-01-31 11:56:45', 1, '1517371005'), 92 | ('alexpeng', 'pull git', '2018-01-31 11:57:39', 1, '1517371059'), 93 | ('alexpeng', 'pull git', '2018-01-31 11:58:09', 1, '1517371089'), 94 | ('alexpeng', 'pull git', '2018-01-31 12:05:51', 1, '1517371551'), 95 | ('alexpeng', 'pull git', '2018-01-31 12:08:57', 1, '1517371737'), 96 | ('alexpeng', 'pull git', '2018-01-31 12:11:20', 1, '1517371880'), 97 | ('alexpeng', 'pull git', '2018-01-31 12:11:55', 1, '1517371915'), 98 | ('alexpeng', 'pull git', '2018-01-31 12:16:04', 1, '1517372164'), 99 | ('alexpeng', 'pull git', '2018-01-31 12:18:14', 1, '1517372294'), 100 | ('alexpeng', 'pull git', '2018-01-31 12:19:57', 1, '1517372397'), 101 | ('alexpeng', 'pull git', '2018-01-31 12:21:13', 1, '1517372473'), 102 | ('alexpeng', 'pull git', '2018-01-31 12:21:35', 1, '1517372495'), 103 | ('alexpeng', 'pull git', '2018-01-31 12:23:22', 1, '1517372602'), 104 | ('alexpeng', 'pull git', '2018-01-31 12:29:35', 1, '1517372975'), 105 | ('alexpeng', 'pull git', '2018-01-31 12:30:07', 1, '1517373007'), 106 | ('alexpeng', 'pull git', '2018-01-31 12:33:05', 1, '1517373185'), 107 | ('alexpeng', 'pull git', '2018-01-31 12:34:44', 1, '1517373284'), 108 | ('alexpeng', 'pull git', '2018-01-31 12:35:07', 1, '1517373307'), 109 | ('alexpeng', 'build bundle', '2018-01-31 12:35:40', 2, '1517373340'), 110 | ('alexpeng', 'push official and improve version', '2018-01-31 12:42:03', 3, '1517373723'), 111 | ('alexpeng', 'push official and improve version', '2018-01-31 12:44:39', 3, '1517373879'), 112 | ('alexpeng', 'build bundle', '2018-01-31 12:52:26', 2, '1517374346'), 113 | ('alexpeng', 'push official and improve version', '2018-01-31 12:55:26', 3, '1517374526'), 114 | ('alexpeng', 'reset option', '2018-01-31 12:56:54', 4, '1517374614'), 115 | ('alexpeng', 'pull git', '2018-01-31 12:59:24', 1, '1517374764'), 116 | ('alexpeng', 'build bundle', '2018-01-31 13:00:02', 2, '1517374802'), 117 | ('alexpeng', 'push official and improve version', '2018-01-31 13:03:59', 3, '1517375039'), 118 | ('alexpeng', 'reset option', '2018-01-31 13:12:27', 4, '1517375547'), 119 | ('alexpeng', 'reset option', '2018-01-31 13:29:30', 4, '1517376570'), 120 | ('alexpeng', 'reset option', '2018-01-31 13:37:56', 4, '1517377076'), 121 | ('alexpeng', 'reset option', '2018-01-31 13:38:40', 4, '1517377120'), 122 | ('alexpeng', 'reset option', '2018-01-31 13:39:33', 4, '1517377173'), 123 | ('alexpeng', 'reset option', '2018-01-31 13:40:27', 4, '1517377227'), 124 | ('alexpeng', 'reset option', '2018-01-31 13:44:36', 4, '1517377476'), 125 | ('alexpeng', 'reset option', '2018-01-31 14:13:53', 4, '1517379233'), 126 | ('alexpeng', 'reset option', '2018-01-31 14:16:53', 4, '1517379413'), 127 | ('alexpeng', 'reset option', '2018-01-31 14:17:54', 4, '1517379474'), 128 | ('alexpeng', 'pull git', '2018-01-31 14:29:32', 1, '1517380172'), 129 | ('alexpeng', 'pull git', '2018-01-31 14:31:07', 1, '1517380267'), 130 | ('alexpeng', 'pull git', '2018-01-31 14:32:59', 1, '1517380379'), 131 | ('alexpeng', 'build bundle', '2018-01-31 14:33:36', 2, '1517380416'), 132 | ('alexpeng', 'reset option', '2018-01-31 14:37:06', 4, '1517380626'), 133 | ('alexpeng', 'pull git', '2018-01-31 14:37:27', 1, '1517380647'), 134 | ('alexpeng', 'build bundle', '2018-01-31 14:38:25', 2, '1517380705'), 135 | ('alexpeng', 'push official and improve version', '2018-01-31 14:41:35', 3, '1517380895'), 136 | ('alexpeng', 'reset option', '2018-01-31 14:43:42', 4, '1517381022'), 137 | ('alexpeng', 'pull git', '2018-01-31 15:06:02', 1, '1517382362'), 138 | ('alexpeng', 'pull git', '2018-01-31 15:06:33', 1, '1517382393'), 139 | ('alexpeng', 'pull git', '2018-01-31 16:05:20', 1, '1517385920'), 140 | ('alexpeng', 'pull git', '2018-01-31 16:06:03', 1, '1517385963'), 141 | ('alexpeng', 'pull git', '2018-01-31 16:09:10', 1, '1517386150'), 142 | ('alexpeng', 'pull git', '2018-01-31 16:12:44', 1, '1517386364'), 143 | ('bnmjtzma', 'pull git', '2018-01-31 16:16:13', 1, '1517386572'), 144 | ('bnmjtzma', 'pull git', '2018-01-31 16:17:29', 1, '1517386649'), 145 | ('bnmjtzma', 'build bundle', '2018-01-31 16:18:36', 2, '1517386716'), 146 | ('bnmjtzma', 'reset option', '2018-01-31 16:23:23', 4, '1517387003'), 147 | ('alexpeng', 'pull git', '2018-01-31 16:33:33', 1, '1517387613'), 148 | ('alexpeng', 'build bundle', '2018-01-31 16:34:12', 2, '1517387652'), 149 | ('alexpeng', 'pull git', '2018-01-31 16:43:45', 1, '1517388225'), 150 | ('alexpeng', 'build bundle', '2018-01-31 16:44:31', 2, '1517388271'), 151 | ('alexpeng', 'reset option', '2018-01-31 16:50:01', 4, '1517388601'), 152 | ('alexpeng', 'pull git', '2018-01-31 16:50:51', 1, '1517388651'), 153 | ('alexpeng', 'build bundle', '2018-01-31 16:53:49', 2, '1517388829'), 154 | ('alexpeng', 'reset option', '2018-01-31 17:00:32', 4, '1517389232'), 155 | ('alexpeng', 'pull git', '2018-01-31 17:01:01', 1, '1517389261'), 156 | ('alexpeng', 'build bundle', '2018-01-31 17:01:28', 2, '1517389288'), 157 | ('alexpeng', 'build bundle', '2018-01-31 17:07:51', 2, '1517389671'), 158 | ('alexpeng', 'push official and improve version', '2018-01-31 17:10:36', 3, '1517389836'), 159 | ('alexpeng', 'reset option', '2018-01-31 17:14:56', 4, '1517390096'), 160 | ('alexpeng', 'reset option', '2018-01-31 17:23:03', 4, '1517390583'), 161 | ('alexpeng', 'pull git', '2018-01-31 17:46:15', 1, '1517391975'), 162 | ('alexpeng', 'pull git', '2018-02-01 11:11:09', 1, '1517454669'), 163 | ('alexpeng', 'pull git', '2018-02-01 11:13:36', 1, '1517454816'), 164 | ('alexpeng', 'build bundle', '2018-02-01 11:14:25', 2, '1517454865'), 165 | ('alexpeng', 'push official and improve version', '2018-02-01 11:22:48', 3, '1517455368'), 166 | ('alexpeng', 'pull git', '2018-02-01 11:39:42', 1, '1517456382'), 167 | ('alexpeng', 'build bundle', '2018-02-01 11:40:32', 2, '1517456432'), 168 | ('alexpeng', 'build bundle', '2018-02-01 11:42:15', 2, '1517456535'), 169 | ('alexpeng', 'push official and improve version', '2018-02-01 11:46:25', 3, '1517456785'), 170 | ('alexpeng', 'reset option', '2018-02-01 12:25:08', 4, '1517459108'), 171 | ('alexpeng', 'reset option', '2018-02-01 12:26:00', 4, '1517459160'), 172 | ('alexpeng', 'reset option', '2018-02-01 12:26:22', 4, '1517459182'), 173 | ('alexpeng', 'reset option', '2018-02-01 12:26:51', 4, '1517459211'), 174 | ('alexpeng', 'reset option', '2018-02-01 12:27:29', 4, '1517459249'), 175 | ('alexpeng', 'reset option', '2018-02-01 12:27:53', 4, '1517459273'), 176 | ('alexpeng', 'pull git', '2018-02-01 12:31:11', 1, '1517459471'), 177 | ('alexpeng', 'build bundle', '2018-02-01 12:31:42', 2, '1517459502'), 178 | ('alexpeng', 'push official and improve version', '2018-02-01 12:45:05', 3, '1517460305'), 179 | ('alexpeng', 'pull git', '2018-02-01 13:48:27', 1, '1517464107'), 180 | ('alexpeng', 'reset option', '2018-02-01 13:48:57', 4, '1517464137'), 181 | ('alexpeng', 'pull git', '2018-02-01 13:59:45', 1, '1517464785'), 182 | ('alexpeng', 'reset option', '2018-02-01 14:00:12', 4, '1517464812'); 183 | 184 | -- -------------------------------------------------------- 185 | 186 | -- 187 | -- 表的结构 `status` 188 | -- 189 | 190 | CREATE TABLE `status` ( 191 | `name` varchar(15) NOT NULL, 192 | `step` int(11) NOT NULL 193 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 194 | 195 | -- -------------------------------------------------------- 196 | 197 | -- 198 | -- 表的结构 `user` 199 | -- 200 | 201 | CREATE TABLE `user` ( 202 | `name` varchar(25) NOT NULL, 203 | `ltime` datetime DEFAULT NULL 204 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 205 | 206 | -- 207 | -- 转存表中的数据 `user` 208 | -- 209 | 210 | INSERT INTO `user` (`name`, `ltime`) VALUES 211 | ('alexpeng', '2018-02-01 13:59:43'), 212 | ('bnmjtzma', '2018-01-31 16:14:37'), 213 | ('iteevohe', '2018-01-31 17:53:01'), 214 | ('paulluo', '2018-01-27 14:21:00'); 215 | 216 | -- 217 | -- Indexes for dumped tables 218 | -- 219 | 220 | -- 221 | -- Indexes for table `user` 222 | -- 223 | ALTER TABLE `user` 224 | ADD PRIMARY KEY (`name`), 225 | ADD UNIQUE KEY `name` (`name`); 226 | COMMIT; 227 | 228 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; 229 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; 230 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; 231 | -------------------------------------------------------------------------------- /build_ab/do_buildab.sh: -------------------------------------------------------------------------------- 1 | # ============================================ 2 | #This tool is for reset inactive with php 3 | # ---------------------------------------------- 4 | # Author: Huailiang.Peng 5 | # Data: 2018.01.24 6 | # ============================================== 7 | #!/bin/sh 8 | 9 | ############################################## 10 | 11 | # -p 后面跟的是密码,各机器可能不一样,要修改 12 | security unlock-keychain -p 123u123u ~/Library/Keychains/login.keychain 13 | 14 | security set-keychain-setting -t 10800 -l ~/Library/Keychains/login.keychain 15 | 16 | sudo sh buildab.sh >log.txt -------------------------------------------------------------------------------- /build_ab/do_gitop.sh: -------------------------------------------------------------------------------- 1 | # ============================================ 2 | #This tool is for git opration inactive with php 3 | # ---------------------------------------------- 4 | # Author: Huailiang.Peng 5 | # Data: 2018.01.23 6 | # ============================================== 7 | #!/bin/sh 8 | 9 | # -p 后面跟的是密码,各机器可能不一样,要修改 10 | 11 | #security unlock-keychain -p 123u123u ~/Library/Keychains/login.keychain 12 | 13 | #security set-keychain-setting -t 10800 -l ~/Library/Keychains/login.keychain 14 | 15 | sudo sh gitop.sh >log.txt 16 | 17 | 18 | -------------------------------------------------------------------------------- /build_ab/do_reset.sh: -------------------------------------------------------------------------------- 1 | # ============================================ 2 | #This tool is for reset inactive with php 3 | # ---------------------------------------------- 4 | # Author: Huailiang.Peng 5 | # Data: 2018.01.24 6 | # ============================================== 7 | #!/bin/sh 8 | 9 | # -p 后面跟的是密码,各机器可能不一样,要修改 10 | security unlock-keychain -p 123u123u ~/Library/Keychains/login.keychain 11 | 12 | security set-keychain-setting -t 10800 -l ~/Library/Keychains/login.keychain 13 | 14 | sudo sh reset.sh >log.txt -------------------------------------------------------------------------------- /build_ab/do_uploadofficial.sh: -------------------------------------------------------------------------------- 1 | # ============================================ 2 | #This tool is for reset inactive with php 3 | # ---------------------------------------------- 4 | # Author: Huailiang.Peng 5 | # Data: 2018.01.24 6 | # ============================================== 7 | #!/bin/sh 8 | 9 | # -p 后面跟的是密码,各机器可能不一样,要修改 10 | security unlock-keychain -p 123u123u ~/Library/Keychains/login.keychain 11 | 12 | security set-keychain-setting -t 10800 -l ~/Library/Keychains/login.keychain 13 | 14 | sudo sh uploadofficial.sh >log.txt -------------------------------------------------------------------------------- /build_ab/gitop.sh: -------------------------------------------------------------------------------- 1 | # ============================================ 2 | #This tool is for git opration inactive with php 3 | # ---------------------------------------------- 4 | # Author: Huailiang.Peng 5 | # Data: 2018.01.23 6 | # ============================================== 7 | #!/bin/sh -x 8 | 9 | 10 | PROJECT_RES=/Users/dn/Documents/patch_res 11 | 12 | PROJECT_SRC=/Users/dn/Documents/src 13 | 14 | UNITY_PATH=/Applications/Unity/Unity5.app/Contents/MacOS/Unity 15 | 16 | ################ res ################### 17 | 18 | echo "开始清理本地环境,拉取最新,合线" 19 | 20 | #全局配置 21 | git config --global credential.helper store 22 | git config --global merge.ours.driver true 23 | 24 | function gitoption() { 25 | git clean -dfq 26 | git reset --hard HEAD^ 27 | echo "** switch branch ob **" 28 | git checkout OB 29 | git pull -q 30 | echo "** switch branch release **" 31 | git checkout $1 32 | git pull -q 33 | git log -1 34 | git merge OB -m "dn-version shell merge from OB" 35 | if [ $? -ne 0 ];then 36 | echo "error merge src" 37 | exit 1 38 | fi 39 | git push 40 | echo "\n" 41 | } 42 | 43 | #下面两行是正式版本用 先注释掉 44 | #cd ${PROJECT_RES} && echo "********** res *********" && gitoption release-res 45 | #cd ${PROJECT_SRC} && echo "********** src *********" && gitoption release-src 46 | 47 | #测试代码 48 | cd ${PROJECT_RES} && git clean -dfq && git reset --hard && git checkout release_jenkins && git pull -q && git log -1 49 | 50 | echo "git 操作结束\n" 51 | 52 | echo "开始统计文件变更列表,请耐心等待..." 53 | 54 | #call unity interface 55 | $UNITY_PATH -quit -batchmode -projectPath ${PROJECT_RES}"/XProject" -logFile /tmp/dn_patch_patch.log -executeMethod XBundlePresent.JenkinsFetchList 56 | 57 | if [ -f "${PROJECT_RES}/XProject/Shell/Error.Log" ];then 58 | echo "error occur, as list:" 59 | cat ${PROJECT_RES}/XProject/Shell/Error.Log 60 | exit 1 61 | fi 62 | 63 | echo "文件更改列表:" 64 | 65 | cat ${PROJECT_RES}/XProject/Shell/UpdateList.Log 66 | 67 | echo "\n\n****************************" 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /build_ab/log.php: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 龙之谷-日志查询系统 9 | 10 |
"; 12 | $con=mysql_connect("127.0.0.1","root","123u123u"); 13 | if(!$con) die("could not connect:".mysql_error()); 14 | mysql_select_db("dn", $con); 15 | $sql="select * from record order by Stamp desc limit 30"; 16 | $rest=mysql_query($sql,$con); 17 | echo ""; 18 | echo ""; 19 | $index = 1; 20 | while($row = mysql_fetch_array($rest)) 21 | { 22 | echo ""; 23 | echo ""; 24 | echo ""; 25 | echo ""; 26 | echo ""; 27 | echo ""; 28 | echo ""; 29 | $index=$index+1; 30 | } 31 | mysql_close($con); 32 | 33 | ?> 34 | 35 | 36 | -------------------------------------------------------------------------------- /build_ab/log.txt: -------------------------------------------------------------------------------- 1 | ****************** android ********************** 2 | android git 还原环境,拉到最新 3 | Your branch is behind 'origin/release_jenkins' by 5 commits, and can be fast-forwarded. 4 | (use "git pull" to update your local branch) 5 | commit e795e213c0de7d39334a7b27da079c6e1b42df50 6 | Author: alexpeng 7 | Date: Fri Feb 2 15:53:12 2018 +0800 8 | 9 | [ob+7] update 1.10011.1 10 | 11 | 开始生成Android 补丁,请耐心等待... 12 | Android 补丁生成完毕, android 测试服上传开始... 13 | channel:android type:1 14 | 上传开始,version:1.10011.1 15 | cdn/image.lzgjx.qq.com/QATest/Patch/Live/Android 16 | 正在上传: Android manifest... 17 | 开始上传对应的资源文件夹 18 | 上传成功 19 | 20 | 21 | 22 | ******************* ios *********************** 23 | iOS git 还原环境,拉到最新 24 | Your branch is behind 'origin/release_jenkins' by 4 commits, and can be fast-forwarded. 25 | (use "git pull" to update your local branch) 26 | commit e795e213c0de7d39334a7b27da079c6e1b42df50 27 | Author: alexpeng 28 | Date: Fri Feb 2 15:53:12 2018 +0800 29 | 30 | [ob+7] update 1.10011.1 31 | 32 | 开始生成iOS补丁,请耐心等待... 33 | iOS 补丁生成完毕, ios 测试服上传开始... 34 | channel:ios type:1 35 | 上传开始,version:1.10011.1 36 | cdn/image.lzgjx.qq.com/QATest/Patch/Live/IOS 37 | 正在上传: IOS manifest... 38 | 开始上传对应的资源文件夹 39 | 上传成功 40 | 上传全部完成,请 QA 验收-- 如果中间有回退操作,请等待 cdn同步 41 | 42 | 43 | ******************************************* 44 | -------------------------------------------------------------------------------- /build_ab/login.html: -------------------------------------------------------------------------------- 1 |  6 | 7 | 8 | 龙之谷-线上AB打包系统 9 | 10 | 11 | 12 | 龙之谷补丁登录系统 13 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /build_ab/loglist.php: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 龙之谷-日志查询系统 9 | 10 | 日志".$id.":

"; 17 | $txt = file_get_contents($log); 18 | $txt = preg_replace('/\n|\r\r/', '
', $txt); 19 | echo $txt; 20 | } 21 | elseif ($index==1) 22 | { 23 | # code... 24 | echo "日志正在生成,请等待当前步骤完成"; 25 | } 26 | else 27 | { 28 | echo "对不起,你查询的日志不存在!"; 29 | } 30 | 31 | ?> 32 | 33 | 34 | -------------------------------------------------------------------------------- /build_ab/logmv.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | 4 | cd /Library/WebServer/Documents 5 | 6 | mv *.log dn/log/ -------------------------------------------------------------------------------- /build_ab/main.php: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 龙之谷-AB打包系统 10 | 11 | 12 | auth == false) 26 | // { 27 | // echo "对不起,用户名不存在或者密码不正确"; 28 | // return; 29 | // } 30 | 31 | require_once('./db.php'); 32 | $query=DB::exist($_POST["name"]); 33 | if($query==0) 34 | { 35 | echo "对不起,你没有相关的权限"; 36 | return; 37 | } 38 | else 39 | { 40 | setcookie("name",$_POST["name"],time()+360000); 41 | setcookie("pawd",$_POST["pawd"],time()+360000); 42 | ob_end_flush(); 43 | DB::update($_POST["name"]); 44 | echo "欢迎使用线上 ab打包系统    说明文档

"; 45 | 46 | } 47 | 48 | ?> 49 | 50 | 174 | 175 |
176 | 177 | 178 | 179 | 180 |
181 |
182 | 183 | 184 |

185 | 186 | 187 | 188 | 189 | onload(".$row['step'].",'".$row['name']."');"; 194 | } 195 | ?> 196 | 197 | -------------------------------------------------------------------------------- /build_ab/ob2release.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | #用法 3 | echo "Usage: $0 " 4 | 5 | #全局配置 6 | git config --global credential.helper store 7 | git config --global merge.ours.driver true 8 | 9 | #接收参数 10 | GIT_PATH="$1" 11 | RELEASE_BRANCH="$2" 12 | MERGE_BRANCH="$3" 13 | 14 | echo 切目录到$GIT_PATH 15 | cd $GIT_PATH 16 | 17 | echo 合并分支${MERGE_BRANCH} 18 | git merge origin/${MERGE_BRANCH} -m "Merge branch ${MERGE_BRANCH} into ${RELEASE_BRANCH}" 19 | 20 | if [ $? -ne 0 ];then 21 | echo "error merge ${MERGE_BRANCH} to ${RELEASE_BRANCH}" 22 | exit 1 23 | fi 24 | 25 | #echo 提交分支${RELEASE_BRANCH} 26 | #git push origin ${RELEASE_BRANCH} 27 | 28 | if [ $? -ne 0 ];then 29 | echo "error push ${RELEASE_BRANCH}" 30 | exit 1 31 | fi 32 | -------------------------------------------------------------------------------- /build_ab/read.html: -------------------------------------------------------------------------------- 1 |  2 |
 3 | 
 4 | 龙之谷打补丁说明文档:
 5 | 
 6 | 1. 请严格按照步骤顺序执行,不要跨步操作
 7 | 
 8 | 2. 如果执行了前两步,可以回退。如果执行了第三步,不可以回退(需要提升版本号)
 9 | 
10 | 3. 每一步如果顺利执行完,都会看到***的结束行,否则就意味着中间步骤出错了(自检或者需要程序猿介入)
11 | 
12 | 4. 只有加过权限的人才能进入该系统 默认对陌生人关闭,超级管理员网站请点击这里
13 | 
14 | 5. 查看日志记录,请点击这里
15 | 
16 | 点击第一个按钮:
17 | 	Git 清干净本地环境 
18 | 	Git OB拉最新 Release拉最新 OB->Release(Merge)
19 | 	统计和上个版本tag之间的文件变更,等待主管确认
20 | 
21 | 点击第二个按钮:
22 | 	开始Build Bundle
23 | 	上传ab到qa测试服,等待qa测试
24 | 
25 | 点击第三个按钮:
26 | 	上传ab到正式服
27 | 	提升版本号
28 | 	至此,你可以告知服务器同学和腾讯运营了
29 | 
30 | 点击第四个按钮:
31 | 	回退本地操作(git), 如果你点击了第三个按钮,版本号会提升 否则就没有
32 | 
33 | 点击第五个按钮:
34 | 	日志系统 记录用户名、按钮id、时间戳、相关log信息
35 | 	日志系统是从数据库抓取最近三十条记录
36 | 	日志列表第一个链接如果是空,说明当前当做还在进行,进行完了日志就生成了
37 | 
38 | 
39 | 联系作者:penghuailiang@126.com
40 | 
41 | -------------------------------------------------------------------------------- /build_ab/readme.md: -------------------------------------------------------------------------------- 1 | 2 | 龙之谷打补丁说明文档: 3 | 4 | 1. 请严格按照步骤顺序执行,不要跨步操作 5 | 6 | 2. 如果执行了前两步,可以回退。如果执行了第三步,不可以回退(需要提升版本号) 7 | 8 | 3. 每一步如果顺利执行完,都会看到"*****"的结束行,否则就意味着中间步骤出错了(自检或者需要程序猿介入) 9 | 10 | 4. 只有加过权限的人才能进入该系统 默认对陌生人关闭,超级管理员网站请点击这里 11 | 12 | 5. 查看日志记录,请点击这里 13 | 14 | 点击第一个按钮: 15 | Git 清干净本地环境 16 | Git OB拉最新 Release拉最新 OB->Release(Merge) 17 | 统计和上个版本tag之间的文件变更,等待主管确认 18 | 19 | 点击第二个按钮: 20 | 开始Build Bundle 21 | 上传ab到qa测试服,等待qa测试 22 | 23 | 点击第三个按钮: 24 | 上传ab到正式服 25 | 提升版本号 26 | 至此,你可以告知服务器同学和腾讯运营了 27 | 28 | 点击第四个按钮: 29 | 回退本地操作(git), 如果你点击了第三个按钮,版本号会提升 否则就没有 30 | 31 | 点击第五个按钮: 32 | 日志系统 记录用户名、按钮id、时间戳、相关log信息 33 | 日志系统是从数据库抓取最近三十条记录 34 | 日志列表第一个链接如果是空,说明当前当做还在进行,进行完了日志就生成了 35 | 36 | 37 | 联系作者:penghuailiang@126.com 38 | -------------------------------------------------------------------------------- /build_ab/reset.sh: -------------------------------------------------------------------------------- 1 | # ============================================ 2 | #This tool is for reset inactive with php 3 | # ---------------------------------------------- 4 | # Author: Huailiang.Peng 5 | # Data: 2018.01.24 6 | # ============================================== 7 | #!/bin/sh 8 | 9 | PROJECT_RES=/Users/dn/Documents/patch_res 10 | 11 | PROJECT_SRC=/Users/dn/Documents/patch_src 12 | 13 | PROJECT_Android=/Users/dn/Documents/patch_android/XProject 14 | 15 | PROJECT_Ios=/Users/dn/Documents/patch_android/XProject 16 | 17 | echo "stat reset res option" 18 | 19 | cd ${PROJECT_RES} 20 | 21 | git add . 22 | 23 | git reset --hard 24 | 25 | echo "res current status:" 26 | 27 | git log -1 28 | 29 | echo "git cleanup finish\n\n" 30 | 31 | ############################################ 32 | 33 | echo "start reset src option" 34 | 35 | cd ${PROJECT_SRC} 36 | 37 | git add . 38 | 39 | git reset --hard 40 | 41 | git status -s . 42 | 43 | echo "src current status" 44 | 45 | git log -1 46 | 47 | echo "clean src finish\n\n" 48 | 49 | 50 | ################################################ 51 | 52 | echo "start reset android env" 53 | 54 | cd ${PROJECT_Android} 55 | 56 | git add . 57 | 58 | git reset --hard 59 | 60 | git status -s . 61 | 62 | echo "android env current status:" 63 | 64 | git log -1 65 | 66 | echo "reset android env finish\n\n" 67 | 68 | 69 | ############################################## 70 | 71 | echo 'start reset ios env' 72 | 73 | cd ${PROJECT_Ios} 74 | 75 | git add . 76 | 77 | git reset --hard 78 | 79 | git status -s . 80 | 81 | echo "ios evn current status:" 82 | 83 | git log -1 84 | 85 | echo "reset ios env finish" 86 | 87 | echo "\n\n*************************************" 88 | -------------------------------------------------------------------------------- /build_ab/server.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /build_ab/shell.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | "; 5 | 6 | echo shell_exec("sh ./test.sh"); 7 | 8 | echo "
finish" 9 | ?> 10 | -------------------------------------------------------------------------------- /build_ab/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huailiang/batch_build/939c85c8f37a57d9634572e9a94786f3463719b5/build_ab/spinner.gif -------------------------------------------------------------------------------- /build_ab/style.css: -------------------------------------------------------------------------------- 1 | 2 | .btn { display: inline-block; *display: inline; *zoom: 1; padding: 4px 10px 4px; margin-bottom: 0; font-size: 13px; line-height: 18px; color: #333333; text-align: center;text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); vertical-align: middle; background-color: #f5f5f5; background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); background-image: linear-gradient(top, #ffffff, #e6e6e6); background-repeat: repeat-x; filter: progid:dximagetransform.microsoft.gradient(startColorstr=#ffffff, endColorstr=#e6e6e6, GradientType=0); border-color: #e6e6e6 #e6e6e6 #e6e6e6; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); border: 1px solid #e6e6e6; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); cursor: pointer; *margin-left: .3em; } 3 | .btn:hover, .btn:active, .btn.active, .btn.disabled, .btn[disabled] { background-color: #e6e6e6; } 4 | .btn-large { padding: 9px 14px; font-size: 15px; line-height: normal; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } 5 | .btn:hover { color: #333333; text-decoration: none; background-color: #e6e6e6; background-position: 0 -15px; -webkit-transition: background-position 0.1s linear; -moz-transition: background-position 0.1s linear; -ms-transition: background-position 0.1s linear; -o-transition: background-position 0.1s linear; transition: background-position 0.1s linear; } 6 | .btn-primary, .btn-primary:hover { text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); color: #ffffff; } 7 | .btn-primary.active { color: rgba(255, 255, 255, 0.75); } 8 | .btn-primary { background-color: #4a77d4; background-image: -moz-linear-gradient(top, #6eb6de, #4a77d4); background-image: -ms-linear-gradient(top, #6eb6de, #4a77d4); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#6eb6de), to(#4a77d4)); background-image: -webkit-linear-gradient(top, #6eb6de, #4a77d4); background-image: -o-linear-gradient(top, #6eb6de, #4a77d4); background-image: linear-gradient(top, #6eb6de, #4a77d4); background-repeat: repeat-x; filter: progid:dximagetransform.microsoft.gradient(startColorstr=#6eb6de, endColorstr=#4a77d4, GradientType=0); border: 1px solid #3762bc; text-shadow: 1px 1px 1px rgba(0,0,0,0.4); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.5); } 9 | .btn-primary:hover, .btn-primary:active, .btn-primary.active, .btn-primary.disabled, .btn-primary[disabled] { filter: none; background-color: #4a77d4; } 10 | .btn-block { width: 100%; display:block; } 11 | 12 | * { -webkit-box-sizing:border-box; -moz-box-sizing:border-box; -ms-box-sizing:border-box; -o-box-sizing:border-box; box-sizing:border-box; } 13 | 14 | html { width: 100%; height:100%; overflow:hidden; } 15 | 16 | .login { 17 | position: absolute; 18 | top: 50%; 19 | left: 50%; 20 | margin: -150px 0 0 -150px; 21 | width:300px; 22 | height:300px; 23 | } 24 | 25 | .login h1 { color: #fff; text-shadow: 0 0 10px rgba(0,0,0,0.3); letter-spacing:1px; text-align:center; } 26 | 27 | input { 28 | width: 100%; 29 | margin-bottom: 10px; 30 | background: rgba(0,0,0,0.3); 31 | border: none; 32 | outline: none; 33 | padding: 10px; 34 | font-size: 13px; 35 | color: #fff; 36 | text-shadow: 1px 1px 1px rgba(0,0,0,0.3); 37 | border: 1px solid rgba(0,0,0,0.3); 38 | border-radius: 4px; 39 | box-shadow: inset 0 -5px 45px rgba(100,100,100,0.2), 0 1px 1px rgba(255,255,255,0.2); 40 | -webkit-transition: box-shadow .5s ease; 41 | -moz-transition: box-shadow .5s ease; 42 | -o-transition: box-shadow .5s ease; 43 | -ms-transition: box-shadow .5s ease; 44 | transition: box-shadow .5s ease; 45 | } 46 | input:focus { box-shadow: inset 0 -5px 45px rgba(100,100,100,0.4), 0 1px 1px rgba(255,255,255,0.2); } -------------------------------------------------------------------------------- /build_ab/test.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | "; 7 | echo exec('whoami'); 8 | echo "
"; 9 | echo shell_exec("sh test.sh"); 10 | echo "
finish"; 11 | ?> 12 | 13 | 14 | -------------------------------------------------------------------------------- /build_ab/test.sh: -------------------------------------------------------------------------------- 1 | # ============================================ 2 | #This tool is for test inactive with php 3 | # ---------------------------------------------- 4 | # Author: Huailiang.Peng 5 | # Data: 2018.01.23 6 | # ============================================== 7 | #!/bin/sh 8 | 9 | 10 | UNITY_PATH=/Applications/Unity/Unity5.app/Contents/MacOS/Unity 11 | 12 | PROJECT_RES=/Users/dn/Documents/patch_res 13 | 14 | echo "this is shell test" 15 | 16 | 17 | cd ${PROJECT_RES} 18 | 19 | git pull 20 | 21 | git log -1 22 | 23 | # for ((i=1; i<=2; i++)) 24 | # do 25 | # echo "hello with "${i} 26 | # done 27 | 28 | 29 | # echo "hello world!">/Library/WebServer/Documents/dn/Build.txt 30 | 31 | # cd /Library/WebServer/Documents/dn/ 32 | 33 | # ls -al 34 | 35 | 36 | $UNITY_PATH -quit -batchmode -projectPath ${PROJECT_RES}"/XProject" -logFile /tmp/dn_patch.log -executeMethod XBundlePresent.TestGit 37 | 38 | echo "finish" 39 | 40 | -------------------------------------------------------------------------------- /build_ab/upload.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | #android or ios 4 | CHANNEL="$1" 5 | #测试服=1 正式服=2 6 | TYPE="$2" 7 | 8 | echo "channel:"${CHANNEL}" type:"${TYPE} 9 | 10 | SUB="Android" 11 | BRAN="QATest" 12 | 13 | PROJECT_PATH=/Users/dn/Documents/patch_android/XProject 14 | 15 | if [ ${CHANNEL} == "ios" ];then 16 | SUB="IOS" 17 | PROJECT_PATH=/Users/dn/Documents/patch_ios/XProject 18 | fi 19 | 20 | if [ ${TYPE} == 2 ];then 21 | BRAN="Official" 22 | fi 23 | 24 | VERSION=`cat ${PROJECT_PATH}/Shell/next-version.txt` 25 | 26 | if [ "${VERSION}" = "" ];then 27 | echo "error, not find version.bytes" 28 | exit 4 29 | fi 30 | 31 | 32 | echo "上传开始,version:"${VERSION} 33 | 34 | cd ${PROJECT_PATH}/Assets/Bundle/${SUB} 35 | 36 | # upload the manifest at first 37 | 38 | #/usr/local/bin/lftp ftp.swift.qq.com -u fworks_889 -p 9052 --password NE@d216drAg << EOF 39 | /usr/local/bin/lftp -u dn,up.dn.123u 42.62.51.126 << EOF 40 | 41 | echo cdn/image.lzgjx.qq.com/${BRAN}/Patch/Live/${SUB} 42 | 43 | cd cdn/image.lzgjx.qq.com/${BRAN}/Patch/Live/${SUB} 44 | 45 | echo "正在上传: "${SUB}" manifest..." 46 | 47 | put manifest.${VERSION}.assetbundle 48 | 49 | put manifest.${VERSION}.assetbundle || { echo "upload manifest failed!"; exit 1; } 50 | 51 | bye 52 | 53 | EOF 54 | 55 | # then upload directory 56 | if [ -d ${VERSION} ];then 57 | 58 | cd ${VERSION} 59 | 60 | #/usr/local/bin/lftp ftp.swift.qq.com -u fworks_889 -p 9052 --password NE@d216drAg << EOF 61 | /usr/local/bin/lftp -u dn,up.dn.123u 42.62.51.126 << EOF 62 | 63 | cd cdn/image.lzgjx.qq.com/${BRAN}/Patch/Live/${SUB} 64 | 65 | echo "开始上传对应的资源文件夹" 66 | 67 | mkdir ${VERSION} 68 | 69 | mirror -R ./ ${VERSION} || { echo "upload failed!"; exit 1; } 70 | 71 | bye 72 | 73 | EOF 74 | 75 | else 76 | 77 | echo "没有检测到图片等非文本资源相关的更新" 78 | 79 | fi 80 | 81 | echo "上传成功" 82 | 83 | 84 | -------------------------------------------------------------------------------- /build_ab/uploadofficial.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | 4 | UNITY_PATH=/Applications/Unity/Unity5.app/Contents/MacOS/Unity 5 | 6 | PROJECT_Android=/Users/dn/Documents/patch_android/XProject 7 | 8 | PROJECT_Ios=/Users/dn/Documents/patch_ios/XProject 9 | 10 | Shelll_Path=/Library/WebServer/Documents/dn 11 | 12 | sh ${Shelll_Path}/upload.sh "android" 2 13 | 14 | echo "开始提升版本号" 15 | 16 | $UNITY_PATH -quit -batchmode -projectPath ${PROJECT_Android} -logFile /tmp/dn_and_patch.log -executeMethod XBundlePresent.JenkinsPush 17 | 18 | if [ -f "${PROJECT_Android}/Shell/Error.Log" ];then 19 | echo "error occur, as list:" 20 | cat ${PROJECT_Android}/Shell/Error.Log 21 | exit 1 22 | fi 23 | 24 | 25 | echo "Android 操作结束\n\n" 26 | 27 | ######################### ios ########################### 28 | 29 | sh ${Shelll_Path}/upload.sh "ios" 2 30 | 31 | echo "开始提升版本号" 32 | 33 | cd {PROJECT_Ios} 34 | 35 | cd ../ 36 | 37 | git pull 38 | 39 | $UNITY_PATH -quit -batchmode -projectPath ${PROJECT_Ios} -logFile /tmp/dn_ios_patch.log -executeMethod XBundlePresent.JenkinsPush 40 | 41 | if [ -f "${PROJECT_Ios}/Shell/Error.Log" ];then 42 | echo "error occur, as list:" 43 | cat ${PROJECT_Ios}/Shell/Error.Log 44 | exit 1 45 | fi 46 | 47 | echo "ios 操作结束" 48 | 49 | echo "\n\n*********************************" -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | 2 | # Batch Build 3 | 4 | 此项目包含两部分内容: 5 | 6 | - 出包脚本 build目录 7 | 8 | - 出补丁脚本 build_ab目录 9 | 10 | 11 | Jenkins出包脚本: 12 | 13 | unity 支持以batch的模式打包,需要c#测预留好接口,Shell可以直接调用c#接口用以出包 14 | 15 | 如何安装jenkins, 可以参考作者的一篇文章: https://penghuailiang.gitee.io/blog/2018/autopublish/ 16 | 17 | 进入build目录,shell脚本说明: 18 | 19 | - build_android.sh 用以出android包,生成apk 20 | - build_ios.sh 用以出ios包,生成ipa 需要配置和脚本里对应的证书 21 | - build_windows.sh 用以生成windows包,生成zip 22 | - build_ios_batch.sh 可以指定git某个节点,生成ios包 23 | - git.sh git切分支,清理本地环境,拉取最新 24 | - git_tag.sh git清理环境,切到制定节点,跟分支无关 25 | - qrcode.sh 用以生成二维码下载链接,如果是ios平台,需要相关企业证书和搭建支持items-services协议的环境 26 | - sendmail.sh 打包生成后,给打包人发送邮件 27 | - upload.sh 上传包体到本地web服务器,同时生成下载链接,作者在本地mac上搭建了一个apache服务器 28 | - xbuild2dll.sh 将代码编程dll, 需要本地安装了MonoDeveloper 29 | - symbol.sh 用来将符号表上传到bugly服务器 ios 30 | - mailformat 邮件内容格式 31 | 32 | 33 | jenkins 支持脚本的方式调用(区别网页): 34 | 35 | 安装python-jenkins 36 | 37 | ```sh 38 | sudo pip3 install python-jenkins 39 | ``` 40 | 41 | - operation.py 展示了如何获取jenkins的信息, 并通过脚本触发job, 通过这样的操作就可以写定时器远程自动触发, 生成独有的uid等 42 | 43 | 想获取更多关于python-jenkins 可以访问 https://python-jenkins.readthedocs.io/en/latest/ 44 | 45 | 46 | 打补丁说明文档: 47 | 48 | 进入build_ab目录: 49 | 50 | 51 | 1. 请严格按照步骤顺序执行,不要跨步操作 52 | 53 | 2. 如果执行了前两步,可以回退。如果执行了第三步,不可以回退(需要提升版本号) 54 | 55 | 3. 每一步如果顺利执行完,都会看到"*****"的结束行,否则就意味着中间步骤出错了(自检或者需要程序猿介入) 56 | 57 | 4. 只有加过权限的人才能进入该系统 默认对陌生人关闭,超级管理员网站请点击这里 58 | 59 | 5. 查看日志记录,请点击这里 60 | 61 | 点击第一个按钮: 62 | Git 清干净本地环境 63 | Git OB拉最新 Release拉最新 OB->Release(Merge) 64 | 统计和上个版本tag之间的文件变更,等待主管确认 65 | 66 | 点击第二个按钮: 67 | 开始Build Bundle 68 | 上传ab到qa测试服,等待qa测试 69 | 70 | 点击第三个按钮: 71 | 上传ab到正式服 72 | 提升版本号 73 | 至此,你可以告知服务器同学和腾讯运营了 74 | 75 | 点击第四个按钮: 76 | 回退本地操作(git), 如果你点击了第三个按钮,版本号会提升 否则就没有 77 | 78 | 点击第五个按钮: 79 | 日志系统 记录用户名、按钮id、时间戳、相关log信息 80 | 日志系统是从数据库抓取最近三十条记录 81 | 日志列表第一个链接如果是空,说明当前当做还在进行,进行完了日志就生成了 82 | 83 | 84 | 联系作者:peng_huailiang@qq.com 85 | --------------------------------------------------------------------------------
序列 用户名 操作按钮 操作时间 日志ID
".$index."".$row["Name"]."".$row["Opt"]."".$row["Stamp"]."".$row["log"]."