Beispiel #1
0
    def build_linux(self):
        if not self._platforms.is_linux_active():
            return

        #if not cocos.os_is_linux():
        #    raise cocos.CCPluginError("Please build on linux")

        project_dir = self._project.get_project_dir()
        cfg_obj = self._platforms.get_current_config()
        if cfg_obj.cmake_path is not None:
            cmakefile_dir = os.path.join(project_dir, cfg_obj.cmake_path)
        else:
            cmakefile_dir = project_dir
            if self._project._is_lua_project():
                cmakefile_dir = os.path.join(project_dir, 'frameworks')

        # get the project name
        if cfg_obj.project_name is not None:
            self.project_name = cfg_obj.project_name
        else:
            f = open(os.path.join(cmakefile_dir, 'CMakeLists.txt'), 'r')
            for line in f.readlines():
                if "set(APP_NAME " in line:
                    self.project_name = re.search('APP_NAME ([^\)]+)\)', line).group(1)
                    break

        if cfg_obj.build_dir is not None:
            build_dir = os.path.join(project_dir, cfg_obj.build_dir)
        else:
            build_dir = os.path.join(project_dir, 'linux-build')

        if not os.path.exists(build_dir):
            os.makedirs(build_dir)

        with cocos.pushd(build_dir):
            self._run_cmd('cmake %s' % os.path.relpath(cmakefile_dir, build_dir))

        with cocos.pushd(build_dir):
            self._run_cmd('make -j%s' % self._jobs)

        # move file
        output_dir = self._output_dir

        if os.path.exists(output_dir):
            shutil.rmtree(output_dir)
        os.makedirs(output_dir)

        if cfg_obj.build_result_dir is not None:
            result_dir = os.path.join(build_dir, 'bin', cfg_obj.build_result_dir)
        else:
            result_dir = os.path.join(build_dir, 'bin')
        cocos.copy_files_in_dir(result_dir, output_dir)

        self.run_root = output_dir

        if self._no_res:
            res_dir = os.path.join(output_dir, "Resources")
            self._remove_res(res_dir)

        cocos.Logging.info('Build successed!')
    def build_linux(self):
        if not self._platforms.is_linux_active():
            return

        #if not cocos.os_is_linux():
        #    raise cocos.CCPluginError("Please build on linux")

        project_dir = self._project.get_project_dir()
        cfg_obj = self._platforms.get_current_config()
        if cfg_obj.cmake_path is not None:
            cmakefile_dir = os.path.join(project_dir, cfg_obj.cmake_path)
        else:
            cmakefile_dir = project_dir
            if self._project._is_lua_project():
                cmakefile_dir = os.path.join(project_dir, 'frameworks')

        # get the project name
        if cfg_obj.project_name is not None:
            self.project_name = cfg_obj.project_name
        else:
            f = open(os.path.join(cmakefile_dir, 'CMakeLists.txt'), 'r')
            for line in f.readlines():
                if "set(APP_NAME " in line:
                    self.project_name = re.search('APP_NAME ([^\)]+)\)',
                                                  line).group(1)
                    break

        if cfg_obj.build_dir is not None:
            build_dir = os.path.join(project_dir, cfg_obj.build_dir)
        else:
            build_dir = os.path.join(project_dir, 'linux-build')

        if not os.path.exists(build_dir):
            os.makedirs(build_dir)

        with cocos.pushd(build_dir):
            self._run_cmd('cmake %s' %
                          os.path.relpath(cmakefile_dir, build_dir))

        with cocos.pushd(build_dir):
            self._run_cmd('make -j%s' % self._jobs)

        # move file
        output_dir = self._output_dir

        if os.path.exists(output_dir):
            shutil.rmtree(output_dir)
        os.makedirs(output_dir)

        if cfg_obj.build_result_dir is not None:
            result_dir = os.path.join(build_dir, 'bin',
                                      cfg_obj.build_result_dir)
        else:
            result_dir = os.path.join(build_dir, 'bin')
        cocos.copy_files_in_dir(result_dir, output_dir)

        self.run_root = output_dir

        if self._no_res:
            res_dir = os.path.join(output_dir, "Resources")
            self._remove_res(res_dir)

        if self._project._is_script_project() and self._compile_script:
            cocos.Logging.warning(
                "Warning: Now script compiling is not supported for linux.")

        cocos.Logging.info('Build successed!')
    def build(self, platform):
        if self._platforms.is_android_active():
            self.build_android()
            return

        self.check_platform(platform)

        project_dir = self._project.get_project_dir()
        cfg_obj = self._platforms.get_current_config()
        if cfg_obj.cmake_path is not None:
            cmakefile_dir = os.path.join(project_dir, cfg_obj.cmake_path)
        else:
            cmakefile_dir = project_dir

        # get the project name
        if cfg_obj.project_name is not None:
            self.project_name = cfg_obj.project_name
        else:
            f = open(os.path.join(cmakefile_dir, 'CMakeLists.txt'), 'r')
            regexp_set_app_name = re.compile(r'\s*set\s*\(\s*APP_NAME',
                                             re.IGNORECASE)
            for line in f.readlines():
                if regexp_set_app_name.search(line):
                    self.project_name = re.search('APP_NAME ([^\)]+)\)', line,
                                                  re.IGNORECASE).group(1)
                    break
            if hasattr(self, 'project_name') == False:
                raise cocos.CCPluginError(
                    "Couldn't find APP_NAME in CMakeLists.txt")

        if cfg_obj.build_dir is not None:
            build_dir = os.path.join(project_dir, cfg_obj.build_dir)
        else:
            build_dir = os.path.join(project_dir, '%s-build' % platform)

        if not os.path.exists(build_dir):
            os.makedirs(build_dir)

        # compile codes
        build_mode = 'Debug' if self._is_debug_mode() else 'Release'
        with cocos.pushd(build_dir):
            # iOS need to generate Xcode project file first
            if platform == 'ios':
                engine_dir = self.get_engine_dir()
                self._run_cmd(
                    'cmake %s -GXcode -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=%s'
                    %
                    (os.path.relpath(cmakefile_dir, build_dir), self._use_sdk))
            elif platform == 'mac':
                self._run_cmd('cmake -GXcode %s' %
                              os.path.relpath(cmakefile_dir, build_dir))
            elif platform == "win32":
                ret = utils.get_newest_devenv(self.vs_version)
                if ret is not None:
                    ver_num = int(float(ret[2]))
                    generator = self.CMAKE_VS_GENERATOR_MAP[str(ver_num)]
                    if generator is not None:
                        if ver_num >= 16:
                            # for vs2019 x64 is the default target
                            self._run_cmd(
                                'cmake %s -G "%s" -A win32' % (os.path.relpath(
                                    cmakefile_dir, build_dir), generator))
                        else:
                            self._run_cmd(
                                'cmake %s -G "%s"' % (os.path.relpath(
                                    cmakefile_dir, build_dir), generator))
                    else:
                        cocos.Logging.warning(
                            MultiLanguage.get_string(
                                "COMPILE_VS_VERSION_NOT_REGISTER") % (ret[2]))
                        self._run_cmd(
                            'cmake %s' %
                            os.path.relpath(cmakefile_dir, build_dir))
                else:
                    cocos.Logging.warning(
                        MultiLanguage.get_string("COMPILE_VS_VERSION"))
                    self._run_cmd('cmake %s' %
                                  os.path.relpath(cmakefile_dir, build_dir))
            else:
                self._run_cmd('cmake %s' %
                              os.path.relpath(cmakefile_dir, build_dir))

            self._run_cmd('cmake --build . --config %s' % build_mode)

        # move file
        output_dir = self._output_dir

        if os.path.exists(output_dir):
            shutil.rmtree(output_dir)
        os.makedirs(output_dir)

        if cfg_obj.build_result_dir is not None:
            result_dir = os.path.join(build_dir, 'bin',
                                      cfg_obj.build_result_dir,
                                      self.project_name)
        else:
            result_dir = os.path.join(build_dir, 'bin', self.project_name)

        if os.path.exists(os.path.join(result_dir, build_mode)):
            result_dir = os.path.join(result_dir, build_mode)

        cocos.copy_files_in_dir(result_dir, output_dir)

        self.run_root = output_dir

        # set application path and application name
        if platform == 'mac' or platform == 'ios':
            self.app_path = os.path.join(output_dir,
                                         self.project_name + '.app')
        else:
            self.app_path = output_dir

        self.app_name = self.project_name
        if platform == 'win32':
            self.app_name = self.app_name + '.exe'

        script_resource_path = os.path.join(self.app_path, 'src')
        if platform == 'mac':
            script_resource_path = os.path.join(self.app_path,
                                                'Contents/Resources/src')

        cocos.Logging.info(
            MultiLanguage.get_string('COMPILE_INFO_BUILD_SUCCEED'))