Unreal Engine
Grupo: Alessandro Caetano e Simião Carvalho
Introdução
[editar | editar código-fonte]Finalidade
[editar | editar código-fonte]Esse 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
[editar | editar código-fonte]A 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
[editar | editar código-fonte]Como 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
[editar | editar código-fonte]Ferramentas, Ambiente e Infra-estrutura
[editar | editar código-fonte]Ferramenta | 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
[editar | editar código-fonte]Como iremos contribuir
[editar | editar código-fonte]- 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
[editar | editar código-fonte]Atividade | 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
[editar | editar código-fonte]Configuração de Ambiente
[editar | editar código-fonte]Para 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
[editar | editar código-fonte]Criamos 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