def check_environment_variable(var): ''' Checking the environment variable, if found then return it's value, else raise error ''' try: value = ExtendEnv.get_extend_env_value(var) if value is None: value = os.environ[var] except Exception: raise CCPluginError( MultiLanguage.get_string('COCOS_ERROR_ENV_NOT_DEFINED_FMT', var), CCPluginError.ERROR_ENV_VAR_NOT_FOUND) return value
def compile_android(self): # build .so for android CONSOLE_PATH = "tools/cocos2d-console/bin" ANDROID_A_PATH = "frameworks/runtime-src/proj.android/obj/local" android_out_dir = os.path.join(self.lib_dir, "android") engine_dir = self.repo_x console_dir = os.path.join(engine_dir, CONSOLE_PATH) if cocos.os_is_win32(): cmd_path = os.path.join(console_dir, "cocos.bat") else: cmd_path = os.path.join(console_dir, "cocos") # build the simulator project proj_path = os.path.join(engine_dir, 'tools/simulator') build_cmd = "%s compile -s %s -p android --ndk-mode %s --app-abi %s" % ( cmd_path, proj_path, self.mode, self.app_abi) env_param = ExtendEnv.get_extend_env_str() if env_param and len(env_param) > 0: build_cmd += (' --env "%s"' % env_param) self._run_cmd(build_cmd) # copy .a to prebuilt dir obj_dir = os.path.join(proj_path, ANDROID_A_PATH) copy_cfg = { "from": obj_dir, "to": android_out_dir, "include": ["*.a$"] } cocos.copy_files_with_config(copy_cfg, obj_dir, android_out_dir) if not self.disable_strip: # strip the android libs ndk_root = cocos.check_environment_variable("NDK_ROOT") if cocos.os_is_win32(): if cocos.os_is_32bit_windows(): check_bits = ["", "-x86_64"] else: check_bits = ["-x86_64", ""] sys_folder_name = "windows" for bit_str in check_bits: check_folder_name = "windows%s" % bit_str check_path = os.path.join( ndk_root, "toolchains/arm-linux-androideabi-4.8/prebuilt/%s" % check_folder_name) if os.path.isdir(check_path): sys_folder_name = check_folder_name break elif cocos.os_is_mac(): sys_folder_name = "darwin-x86_64" else: sys_folder_name = "linux-x86_64" # set strip execute file name if cocos.os_is_win32(): strip_execute_name = "strip.exe" else: strip_execute_name = "strip" # strip arm libs strip_cmd_path = os.path.join( ndk_root, "toolchains/arm-linux-androideabi-4.8/prebuilt/%s/arm-linux-androideabi/bin/%s" % (sys_folder_name, strip_execute_name)) if os.path.exists(strip_cmd_path): armlibs = ["armeabi", "armeabi-v7a"] for fold in armlibs: self.trip_libs(strip_cmd_path, os.path.join(android_out_dir, fold)) # strip x86 libs strip_cmd_path = os.path.join( ndk_root, "toolchains/x86-4.8/prebuilt/%s/i686-linux-android/bin/%s" % (sys_folder_name, strip_execute_name)) if os.path.exists(strip_cmd_path) and os.path.exists( os.path.join(android_out_dir, "x86")): self.trip_libs(strip_cmd_path, os.path.join(android_out_dir, 'x86'))
MultiLanguage.set_language(sys.argv[idx + 1]) # remove the argument '--ol' & the value sys.argv.pop(idx) sys.argv.pop(idx) # Parse the extend environment variables env_arg = '--env' if env_arg in sys.argv: idx = sys.argv.index(env_arg) if idx == (len(sys.argv) - 1): Logging.error(MultiLanguage.get_string('COCOS_ERROR_ENV_NO_VALUE')) sys.exit(CCPluginError.ERROR_WRONG_ARGS) # add extend environment variables ExtendEnv.parse_extend_env(sys.argv[idx + 1]) # remove the argument '--env' & the value sys.argv.pop(idx) sys.argv.pop(idx) if not _check_python_version(): DataStatistic.terminate_stat() sys.exit(CCPluginError.ERROR_TOOLS_NOT_FOUND) parser = Cocos2dIniParser() plugins_path = parser.get_plugins_path() sys.path.append(plugins_path) if len(sys.argv) == 1 or sys.argv[1] in ('-h', '--help'): help()
def compile_android(self): # build .so for android CONSOLE_PATH = "tools/cocos2d-console/bin" ANDROID_A_PATH = "frameworks/runtime-src/proj.android/obj/local" if self.use_studio is not None: ANDROID_A_PATH = "frameworks/runtime-src/proj.android-studio/app/build/intermediates/ndkBuild/" + self.mode + "/obj/local" android_out_dir = os.path.join(self.lib_dir, "android") engine_dir = self.repo_x console_dir = os.path.join(engine_dir, CONSOLE_PATH) cocos_py_path = os.path.join(console_dir, 'cocos.py') # build the simulator project proj_path = os.path.join(engine_dir, 'tools/simulator') python_path = cocos.check_environment_variable('COCOS_PYTHON_HOME', raise_error=False) if python_path is None: python_path = 'python' else: python_path = os.path.join(python_path, 'python') build_cmd = "\"%s\" \"%s\" compile -s %s -p android --ndk-mode %s --app-abi %s -m %s" % ( python_path, cocos_py_path, proj_path, self.mode, self.app_abi, self.mode) if self.android_platform is not None: build_cmd += ' --ap %s' % self.android_platform if self.use_studio is not None: build_cmd += ' --android-studio' env_param = ExtendEnv.get_extend_env_str() if env_param and len(env_param) > 0: build_cmd += (' --env "%s"' % env_param) self._run_cmd(build_cmd) # copy .a to prebuilt dir obj_dir = os.path.join(proj_path, ANDROID_A_PATH) copy_cfg = { "from": obj_dir, "to": android_out_dir, "include": ["*.a$"] } cocos.copy_files_with_config(copy_cfg, obj_dir, android_out_dir) if not self.disable_strip: # strip the android libs ndk_root = cocos.check_environment_variable("NDK_ROOT") if cocos.os_is_win32(): if cocos.os_is_32bit_windows(): check_bits = ["", "-x86_64"] else: check_bits = ["-x86_64", ""] sys_folder_name = "windows" for bit_str in check_bits: check_folder_name = "windows%s" % bit_str check_path = os.path.join( ndk_root, "toolchains/arm-linux-androideabi-4.9/prebuilt/%s" % check_folder_name) if os.path.isdir(check_path): sys_folder_name = check_folder_name break elif cocos.os_is_mac(): sys_folder_name = "darwin-x86_64" else: sys_folder_name = "linux-x86_64" # set strip execute file name if cocos.os_is_win32(): strip_execute_name = "strip.exe" else: strip_execute_name = "strip" # strip arm libs strip_cmd_path = os.path.join( ndk_root, "toolchains/arm-linux-androideabi-4.9/prebuilt/%s/arm-linux-androideabi/bin/%s" % (sys_folder_name, strip_execute_name)) if os.path.exists(strip_cmd_path): armlibs = ["armeabi", "armeabi-v7a"] for fold in armlibs: self.trip_libs(strip_cmd_path, os.path.join(android_out_dir, fold)) else: raise Exception("(%s) wasn't found." % strip_cmd_path) # strip arm64-v8a libs strip_cmd_path = os.path.join( ndk_root, "toolchains/aarch64-linux-android-4.9/prebuilt/%s/aarch64-linux-android/bin/%s" % (sys_folder_name, strip_execute_name)) if os.path.exists(strip_cmd_path): if os.path.exists(os.path.join(android_out_dir, "arm64-v8a")): self.trip_libs(strip_cmd_path, os.path.join(android_out_dir, 'arm64-v8a')) else: raise Exception("(%s) wasn't found." % strip_cmd_path) # strip x86 libs strip_cmd_path = os.path.join( ndk_root, "toolchains/x86-4.9/prebuilt/%s/i686-linux-android/bin/%s" % (sys_folder_name, strip_execute_name)) if os.path.exists(strip_cmd_path): if os.path.exists(os.path.join(android_out_dir, "x86")): self.trip_libs(strip_cmd_path, os.path.join(android_out_dir, 'x86')) else: raise Exception("(%s) wasn't found." % strip_cmd_path)