Unreal Engine
Grupo: Alessandro Caetano e Simião Carvalho
Introdução
editarFinalidade
editarEsse plano tem como finalidade definir a Gerência de Configuração durante a manutenção e evolução do Software Unreal Engine. Através das diretrizes aqui definidas será gerênciadas as configurações e mudanças ao longo desse projeto.
Visão Geral
editarA Unreal Engine é um motor de jogo e um conjunto de ferramentas de propósito geral capaz de abstrair o desenvolvimento de jogos na comunicação de componentes pré desenvolvidos.
Seu núcleo é escrito em C++ e é suportado a exportação para diversas plataformas como Microsoft Windows, Linux e Mac OS X em computadores pessoais, e os consoles Dreamcast, Xbox, Xbox 360, Xbox One,PlayStation 2, PlayStation 3,Playstation 4 e Wii.
Lançado em 1998 nasceu com o propósito de atender à grandes empresas no desenvolvimento de jogos AAA, foi se popularizando ao longo dos anos até em 2015 apesar de não ser um software livre (Licensa) ter seu código aberto.
Escopo
editarComo objetivo desse trabalho é visado a automatização na instalaçao da Unreal Engine em plataformas linux, tendo como produtos:
- Pacote RPM (Red Hat, Fedora, CentOS)
- Pacote DEBIAN (Debian, Ubuntu, Mint)
O Programa de Gerenciamento de Configuração
editarFerramentas, Ambiente e Infra-estrutura
editarFerramenta | Descriçao | Versão |
---|---|---|
Vagrant | Ferramenta de virtualização de ambiente | 1.8.1 |
Git | Controle de versão | 2.8.0 |
RPMbuild | Ferramenta para construção de pacotes .rpm | |
RPMdevtools | Scripts de suporte ao empacotamento .rpm | |
Build-essential | Informações de pactoes essenciais ao empacotamento .deb | |
Devscripts | Scripts de suporte ao empacotamento .deb | |
Debhelper | Conjunto de ferramentas para automação de tarefas de empacotamento .deb | |
GNU Make | Programa de geração de executável a partir do código-fonte | 4.1 |
Clang | Interface para o compilador LLVM para C/C++/Objective-C/Objective-C++ | 3.5 |
Mono | Provê os softwares necessários para desenvolvimento .NET | 3.x |
Qt | Framework multiplataforma para desenvolvimento de interfaces gráficas em C++ | 4.5.0 |
Contribuições
editarComo iremos contribuir
editar- Scripts para automatizacao da criacao de um pacote RPM.
- Scripts para automatizacao da criacao de um pacote Deb.
- Uma Vagrantfile com o ambiente configurado e com a Unreal Engine compilada e rodando.
- Merge Request para o Upstream do repositorio da Unreal Engine.
- Durante o projeto, e trabalhado em um fork do repositorio upstream da Unreal Engine, que pode ser acessado no endereco: https://github.com/EpicGames/UnrealEngine
Cronograma
editarAtividade | Data Estimada |
---|---|
Preparar Ambiente | 29/04 |
Listar as Dependencias | 06/05 |
Compilar a Unreal Engine | 13/05 |
Verificar se as Dependencias estao Empacotadas | 20/05 |
Empacotar as Dependencias | 27/05 |
Gerar Pacote RPM da Unreal Engine | 03/06 |
Gerar Pacote Deb da Unreal Engine | 10/06 |
Documentar a Utilizacao do Pacote | 13/06 |
Realizar um merge request para o upstream | 17/06 |
Empacotamento RPM
editarConfiguração de Ambiente
editarPara a criação do pacote RPM contamos com a experiência do grupo e o tutorial disponibilizado na wiki da disciplina. Para começar, criamos uma máquina virtual utilizando o VirtualBox do CentOs7, para criarmos o Vagrantfile (arquivo de configuração do Vagrant) foi utilizado, o seguinte comando:
vagrant init centos/7 && vagrant up --provider virtualbox
O Vagrantfile gerado foi editado para permitir que as máquinas tenham 6Gb de memória RAM e 4 CPU's para a realização da build, o nosso Vagrantfile pode ser visto abaixo:
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(2) do |config|
config.vm.box = "centos/7"
config.vm.provider "virtualbox" do |v|
v.memory = 6144
v.cpus = 4
end
end
Logo após, configuramos o ambiente para o empacotamento com os pacotes necessários:
sudo yum install rpmbuild rpmdevtools git vim yum-utils
sudo yum groupinstall Compatibility Libraries Development Tools Graphics Creation Tools Office Suite and Productivity
Com isto temos o ambiente do CentOs minimamente preparado, agora devemos fazer os passos necessários para a construção da UnrealEngine, já que este software requer que algumas versões bem específicas de alguns pacotes sejam instalados, para a realização destas instalações o primeiro passo é instalar o nux e o habilitar o respositório do epel-release no seu sistema:
sudo yum install epel-release
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
Logo após adicionamos o repositório do JKnife, um dos contribuidores do projeto UnrealEngine, para a nossa lista de repositórios:
wget http://copr.fedoraproject.org/coprs/jknife/ue4deps/repo/epel-7/jknife-ue4deps-epel-7.repo
sudo cp jknife-ue4deps-epel-7.repo /etc/yum.repos.d/jknife-ue4deps-epel-7.repo
O últimos passo é adicionar o repositório e a chave GPG do mono no nosso sistema:
sudo rpm --import "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"
sudo yum-config-manager --add-repo http://download.mono-project.com/repo/centos/
Agora realizamos a instalação dos dependencias de build:
sudo yum install mono-core mono-devel dos2unix cmake gtk3-devel clang
Agora podemos clonar o repositório com o código oficial da UnrealEngine:
git clone https://github.com/EpicGames/UnrealEngine -b release
Procedimentos de empacotamento
editarCriamos o tarball do código da UnrealEngine:
cd UnrealEngine
git archive --format=tar.gz --prefix=unrealengine-<versao>-<release>/ <branch/tag> > unrealengine-<versao>-<release>.tar.gz
Desta forma o tarball foi criado, agora precisamos criar a estrutura necessária para o empacotamento:
rpmdev-setuptree
Este comando irá criar a seguinte estrutura de pastas na sua home:
├── rpmbuild
├── BUILD
├── BUILDROOT
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS
Agora temos que copiar o tarball para a pasta SOURCES dentro da estrutura de diretórios previamente criada:
cp UnrealEngine/unrealengine-<versao>-<release>.tar.gz rpmbuild/SOURCES
E criarmos o arquivo spec dentro da pasta SPECS:
touch rpmbuild/SPECS/unrealengine.spec
Para o empacotamento da UnrealEngine o specfile ficou da seguitne forma:
%define debug_package %{nil}
Name: UnrealEngine
Version: 4.11.2
Release: 1
Summary: UnrealEngine
Group: Application/Tools
License: Unreal Engine License
URL: https://unrealengine.com
Source0: %{name}-%{version}.tar.gz
BuildRequires: libstdc++ libstdc++-devel libstdc++-static libicu libicu-devel mono-core mono-devel dos2unix cmake gcc-c++ gtk3-devel clang qt qt-creator
Requires: icu libicu-devel libicu qt qt-creator
%description
Unreal Engine 4 is a complete suite of game development tools made by game developers, for game developers. From 2D mobile games to console blockbusters and VR, Unreal Engine 4 gives you everything you need to start, ship, grow and stand out from the crowd.
%prep
#Initial setup and removing previous builds
%setup -q
%build
#Checking dependencies for linux (Excluding Windows)
./Setup.sh
#Changing AutomationTools versions
find Engine/Source/Programs/AutomationTool -name "*Automation.csproj" -exec sed -i "s/ToolsVersion=\"11.0\"/ToolsVersion=\"4.0\"/g" "{}" \;
#Generating Makefiles
./GenerateProjectFiles.sh
#Compiling libs and generating binaries
make UE4Client SlateViewer ShaderCompileWorker UnrealLightmass UnrealPak UE4Editor
%install
#Creating installation folders
mkdir -p %{buildroot}%{_bindir}
mkdir -p %{buildroot}%{_libdir}/UnrealEngine
#Installing necessary libs on usr/lib/UnrealEngine
find %{_builddir}/UnrealEngine-4.11.2 -regex "\S*\/Engine\/Binaries\/Linux\/lib\S*" -exec install -m644 {} %{buildroot}%{_libdir}/UnrealEngine \;
find %{_builddir}/UnrealEngine-4.11.2 -regex "\S*\/ThirdParty\/ICU\/\S*\/Linux\S*\/\S*.so.53" -exec install -m644 {} %{buildroot}%{_libdir}/UnrealEngine \;
install -m644 %{_builddir}/UnrealEngine-4.11.2/Engine/Source/ThirdParty/nvTextureTools/nvTextureTools-2.0.8/lib/Linux/x86_64-unknown-linux-gnu/* %{buildroot}%{_libdir}/UnrealEngine
#exporting new library paths
mkdir -p %{buildroot}%{_sysconfdir}/ld.so.conf.d/
cat > %{buildroot}%{_sysconfdir}/ld.so.conf.d/UnrealEngine-x86_64.conf << EOF
%{_libdir}/UnrealEngine
EOF
#Installing binaries with execute permissions
install -m755 %{_builddir}/UnrealEngine-4.11.2/Engine/Binaries/Linux/UE4Editor %{buildroot}%{_bindir}
install -m755 %{_builddir}/UnrealEngine-4.11.2/Engine/Binaries/Linux/SlateViewer %{buildroot}%{_bindir}
install -m755 %{_builddir}/UnrealEngine-4.11.2/Engine/Binaries/Linux/ShaderCompileWorker %{buildroot}%{_bindir}
install -m755 %{_builddir}/UnrealEngine-4.11.2/Engine/Binaries/Linux/UnrealLightmass %{buildroot}%{_bindir}
install -m755 %{_builddir}/UnrealEngine-4.11.2/Engine/Binaries/Linux/UnrealPak %{buildroot}%{_bindir}
install -m755 %{_builddir}/UnrealEngine-4.11.2/Engine/Binaries/Linux/UE4Client %{buildroot}%{_bindir}
%post
%{_sbindir}/ldconfig
%files
#Creating doc files
%doc
#Locations for binary files
%{_bindir}/UE4Editor
%{_bindir}/SlateViewer
%{_bindir}/ShaderCompileWorker
%{_bindir}/UnrealLightmass
%{_bindir}/UnrealPak
%{_bindir}/UE4Client
#Location for lib files
%{_sysconfdir}/ld.so.conf.d/UnrealEngine-x86_64.conf
%{_libdir}
%changelog
Neste script são feitos os seguintes passos:
- Baixadas todas as dependencias de build.
- Gerados os Makefiles para sua distribuição.
- O código fonte é compilado.
- Os binários são copiados para /usr/bin/ .
- As bibliotecas são copiadas para /usr/lib/UnrealEngine
- Um novo path para as bibliotecas é adicionado em /etc/ld.so.conf.d/ que vai adicionar a pasta em /usr/lib/UnrealEngine no path para seu sistema.
O pacote é gerado com o comando:
rpmbuild -ba SPECS/unrealengine.spec
O processo de compilar e gerar o pacote leva em torno de 5 a 6 horas no meu computador (Intel(R) Core(TM) i7-3630QM CPU @ 2.40GHz, 8Gb RAM DDR3), então caso esteja demorando não se assuste e vá tomar um café.Depois que a mensagem de sucesso aparecer, podemos instalar o pacote com:
sudo yum install rpmbuild/RPMS/unrealengine-4.11.2-1.rpm
Para utilizar o editor da engine chamar no terminal:
UE4Editor