Quem tem um PC, sabe que praticamente qualquer dispositivo atualmente esta conectado na USB.
Os dispositivos USB são cada vez mais populares, por sua praticidade e simplicidade.
O desenvolvimento e integração no linux, sempre foi um caminho tortuoso, neste post estarei desvendando um pouco de como funciona o desenvolvimento e o caminho a ser traçado.
O projeto libusb, é uma lib desenvolvida em C, para Linux, ela permite utilizar o protocolo USB da versão 1.0 até a 3.1.
CEF é o anacrônico de Chromium Embedded Framework, é uma interface para o Chromium em outras aplicações.
Estaremos tratando aqui, como realizar a instalação deste frame work.
Existem dois caminhos para realizar tal feito, o primeiro e mais complicado é através do procedimento de compilação total, o segundo é através da baixa dos binários já montados.
Compilação total
O Passo a passo que se segue foi tirado em pesquisa da web e consta entre outros links:
Rode o script, em ./code/chromium_git/chromium/src/cef/
cd ./code/chromium_git/chromium/src/cef/
./cef_create_projects.sh
Passo 9
Gera o binario com Debug usando Ninja
cd ~/code/chromium_git/chromium/src
ninja -C out/Debug_GN_x64 cefclient cefsimple ceftests chrome_sandbox
Caso queira versão final, substitua a palavra Debug por Release.
Passo 10
Configure o Linux SUID Caixa de areia, se voce esta usando um kernel antigo, versão inferior a 3.8.
# This environment variable should be set at all times.
export CHROME_DEVEL_SANDBOX=/usr/local/sbin/chrome-devel-sandbox
# This command only needs to be run a single time.
cd ~/code/chromium_git/chromium/src
sudo BUILDTYPE=Debug_GN_x64 ./build/update-linux-sandbox.sh
Passo 11
Rode o cefclient, cefsimple e ou ceftests. Note que o cefclient somente compilará se voce estiver usando um parametro nao root, no passo 7.
cd ~/code/chromium_git/chromium/src
./out/Debug_GN_x64/cefclient
Instalação através de Baixa de Binários
Neste processo não há de fato a compilação, apenas a etapa de linkagem dos binários.
Este é o processo que recomendo, pois além de ser mais rápido é mais fácil e dá menos problema na hora da instalação.
Passo 1 – Baixa dos Binários
O primeiro passo é baixar os binários através do site abaixo:
Nele existem diversas distribuições que podem ser vistas, é importante observar qual será o alvo da sua instalação. Para não baixar a distribuição errada, e eventualmente ter problemas com isso.
Lembrando que não é possível compilar um linux 32 com uma distribuição 64, pois a lib terá problemas na linkagem do mesmo. Então sempre escolha a versão que coincide com seu sistema operacional.
Caso não saiba qual é sua distribuição, recomendo, que use o comando,
uname -a
Conforme figura abaixo, podemos ver que meu linux é 64 bits, desta forma recomenda-se o uso da lib 64 bits.
Desta forma seguiremos, com o padrão, conforme passado:
Agora baixe o binário, e instale na sua maquina linux descompactado.
Renomeie o arquivo para apenas cef, conforme figura abaixo.
Apenas para elucidar, estou usando o samba, que permite eu acessar as pastas do linux na minha maquina windows. Isso facilita a edição dos fontes.
Passo 2 – Preparação e Dependências.
Entre no linux pela console, entrando na pasta do cef. Digite o seguinte comando:
cmake .
Preparação para o make, onde irá peparar o makefile
Se não houver problemas de dependências, ele irá estar pronto para linkagem.
Caso dê problema, consulte a documentação, no link abaixo:
Ninja é um pequeno conjunto de ferramentas, desenvolvido por Evan Martin, um empregado da Google. Ninja foi usado em diversas construções de aplicações.
Entre suas vantagens estão a facilidade de montagem de aplicação, a velocidade e rapidez.
Outra vantagem é a capacidade de construir aplicações em multiplos SOs. (Windows, Linux, MacOS).
Iremos apresentar um pequeno projeto construído com NINJA.
O srvOuve é um projeto que visa integrar o CMU sphinx, estaremos construindo uma build com ninja.
Primeiramente precisamos criar o arquivo CMakeLists.txt , que fará a magica acontecer.
Criamos o arquivo conforme aparece no fragmento abaixo:
cmake_minimum_required (VERSION 3.8)
#Define o projeto
project(srvOuve VERSION 1.0)
#Diretorios de Include
include_directories( "/usr/local/include/pocketsphinx"
"/usr/local/include/sphinxbase"
)
set(CMAKE_CXX_STANDARD 14)
add_executable(srvOuve ouve.cpp)
Agora precisaremos dizer ao sistema para gerar os arquivos do ninja, para tanto chamamos o cmake, conforme a sintaxe abaixo:
$ cmake -G Ninja
Execução na console
Com este passo o cmake criará dois arquivos:
build.ninja – Este arquivo contem as configurações de compilação (build)
O build.ninja conterá as regras de construção da aplicação.
# CMAKE generated file: DO NOT EDIT!
# Generated by "Ninja" Generator, CMake Version 3.10
# This file contains all the build statements describing the
# compilation DAG.
# =============================================================================
# Write statements declared in CMakeLists.txt:
#
# Which is the root file.
# =============================================================================
# =============================================================================
# Project: srvOuve
# Configuration:
# =============================================================================
#############################################
# Minimal version of Ninja required by this file
ninja_required_version = 1.5
# =============================================================================
# Include auxiliary files.
#############################################
# Include rules file.
include rules.ninja
#############################################
# Utility command for rebuild_cache
build CMakeFiles/rebuild_cache.util: CUSTOM_COMMAND
COMMAND = cd /home/maurinsoft/projetos/srvOuve/srv && /usr/bin/cmake -H/home/maurinsoft/projetos/srvOuve/srv -B/home/maurinsoft/projetos/srvOuve/srv
DESC = Running CMake to regenerate build system...
pool = console
restat = 1
build rebuild_cache: phony CMakeFiles/rebuild_cache.util
# =============================================================================
# Object build statements for EXECUTABLE target srvOuve
#############################################
# Order-only phony target for srvOuve
build cmake_object_order_depends_target_srvOuve: phony
build CMakeFiles/srvOuve.dir/ouve.cpp.o: CXX_COMPILER__srvOuve ouve.cpp || cmake_object_order_depends_target_srvOuve
DEP_FILE = CMakeFiles/srvOuve.dir/ouve.cpp.o.d
FLAGS = -std=gnu++14
INCLUDES = -I/usr/local/include/pocketsphinx -I/usr/local/include/sphinxbase
OBJECT_DIR = CMakeFiles/srvOuve.dir
OBJECT_FILE_DIR = CMakeFiles/srvOuve.dir
# =============================================================================
# Link build statements for EXECUTABLE target srvOuve
#############################################
# Link the executable srvOuve
build srvOuve: CXX_EXECUTABLE_LINKER__srvOuve CMakeFiles/srvOuve.dir/ouve.cpp.o
OBJECT_DIR = CMakeFiles/srvOuve.dir
POST_BUILD = :
PRE_LINK = :
TARGET_FILE = srvOuve
TARGET_PDB = srvOuve.dbg
#############################################
# Utility command for edit_cache
build CMakeFiles/edit_cache.util: CUSTOM_COMMAND
COMMAND = cd /home/maurinsoft/projetos/srvOuve/srv && /usr/bin/cmake-gui -H/home/maurinsoft/projetos/srvOuve/srv -B/home/maurinsoft/projetos/srvOuve/srv
DESC = Running CMake cache editor...
pool = console
restat = 1
build edit_cache: phony CMakeFiles/edit_cache.util
# =============================================================================
# Target aliases.
# =============================================================================
# Folder targets.
# =============================================================================
# =============================================================================
# Built-in targets
#############################################
# The main all target.
build all: phony srvOuve
#############################################
# Make the all target the default.
default all
#############################################
# Re-run CMake if any of its inputs changed.
build build.ninja: RERUN_CMAKE | /usr/share/cmake-3.10/Modules/CMakeCInformation.cmake /usr/share/cmake-3.10/Modules/CMakeCXXInformation.cmake /usr/share/cmake-3.10/Modules/CMakeCommonLanguageInclude.cmake /usr/share/cmake-3.10/Modules/CMakeGenericSystem.cmake /usr/share/cmake-3.10/Modules/CMakeLanguageInformation.cmake /usr/share/cmake-3.10/Modules/CMakeSystemSpecificInformation.cmake /usr/share/cmake-3.10/Modules/CMakeSystemSpecificInitialize.cmake /usr/share/cmake-3.10/Modules/Compiler/CMakeCommonCompilerMacros.cmake /usr/share/cmake-3.10/Modules/Compiler/GNU-C.cmake /usr/share/cmake-3.10/Modules/Compiler/GNU-CXX.cmake /usr/share/cmake-3.10/Modules/Compiler/GNU.cmake /usr/share/cmake-3.10/Modules/Platform/Linux-GNU-C.cmake /usr/share/cmake-3.10/Modules/Platform/Linux-GNU-CXX.cmake /usr/share/cmake-3.10/Modules/Platform/Linux-GNU.cmake /usr/share/cmake-3.10/Modules/Platform/Linux.cmake /usr/share/cmake-3.10/Modules/Platform/UnixPaths.cmake CMakeCache.txt CMakeFiles/3.10.2/CMakeCCompiler.cmake CMakeFiles/3.10.2/CMakeCXXCompiler.cmake CMakeFiles/3.10.2/CMakeSystem.cmake CMakeLists.txt
pool = console
#############################################
# A missing CMake input file is not an error.
build /usr/share/cmake-3.10/Modules/CMakeCInformation.cmake /usr/share/cmake-3.10/Modules/CMakeCXXInformation.cmake /usr/share/cmake-3.10/Modules/CMakeCommonLanguageInclude.cmake /usr/share/cmake-3.10/Modules/CMakeGenericSystem.cmake /usr/share/cmake-3.10/Modules/CMakeLanguageInformation.cmake /usr/share/cmake-3.10/Modules/CMakeSystemSpecificInformation.cmake /usr/share/cmake-3.10/Modules/CMakeSystemSpecificInitialize.cmake /usr/share/cmake-3.10/Modules/Compiler/CMakeCommonCompilerMacros.cmake /usr/share/cmake-3.10/Modules/Compiler/GNU-C.cmake /usr/share/cmake-3.10/Modules/Compiler/GNU-CXX.cmake /usr/share/cmake-3.10/Modules/Compiler/GNU.cmake /usr/share/cmake-3.10/Modules/Platform/Linux-GNU-C.cmake /usr/share/cmake-3.10/Modules/Platform/Linux-GNU-CXX.cmake /usr/share/cmake-3.10/Modules/Platform/Linux-GNU.cmake /usr/share/cmake-3.10/Modules/Platform/Linux.cmake /usr/share/cmake-3.10/Modules/Platform/UnixPaths.cmake CMakeCache.txt CMakeFiles/3.10.2/CMakeCCompiler.cmake CMakeFiles/3.10.2/CMakeCXXCompiler.cmake CMakeFiles/3.10.2/CMakeSystem.cmake CMakeLists.txt: phony
#############################################
# Clean all the built files.
build clean: CLEAN
#############################################
# Print all primary targets available.
build help: HELP
O cmake tambem cria o arquivo rules.ninja, responsável pelas regras de compilação.
# CMAKE generated file: DO NOT EDIT!
# Generated by "Ninja" Generator, CMake Version 3.10
# This file contains all the rules used to get the outputs files
# built from the input files.
# It is included in the main 'build.ninja'.
# =============================================================================
# Project: srvOuve
# Configuration:
# =============================================================================
# =============================================================================
#############################################
# Rule for running custom commands.
rule CUSTOM_COMMAND
command = $COMMAND
description = $DESC
#############################################
# Rule for compiling CXX files.
rule CXX_COMPILER__srvOuve
depfile = $DEP_FILE
deps = gcc
command = /usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in
description = Building CXX object $out
#############################################
# Rule for linking CXX executable.
rule CXX_EXECUTABLE_LINKER__srvOuve
command = $PRE_LINK && /usr/bin/c++ $FLAGS $LINK_FLAGS $in -o $TARGET_FILE $LINK_PATH $LINK_LIBRARIES && $POST_BUILD
description = Linking CXX executable $TARGET_FILE
restat = $RESTAT
#############################################
# Rule for re-running cmake.
rule RERUN_CMAKE
command = /usr/bin/cmake -H/home/maurinsoft/projetos/srvOuve/srv -B/home/maurinsoft/projetos/srvOuve/srv
description = Re-running CMake...
generator = 1
#############################################
# Rule for cleaning all built files.
rule CLEAN
command = /usr/bin/ninja -t clean
description = Cleaning all built files...
#############################################
# Rule for printing all primary targets available.
rule HELP
command = /usr/bin/ninja -t targets
description = All primary targets available:
Para processar o ninja precisamos fazer uma pequena mudança, alterar as extensões de .c para .cpp, para que o sistema identifique que se trata de compilador C.
Incluindo dependências
Para incluir diretorios para Include, basta incluir a linha