Академический Документы
Профессиональный Документы
Культура Документы
Tanker.io Conan
@theodelrieu
contribution
2
Made by Tanker.io team
First things first
Tanker.io Conan
@theodelrieu
contribution
3
Made by Tanker.io team
You said Tanker?
High performance
7
Made by Tanker.io team
Decisions, decisions
High performance
8
Made by Tanker.io team
Wait, w00t!?
9
Made by Tanker.io team
Wait, w00t!?
Decentralized
Open Source Python
package manager
11
Made by Tanker.io team
Conan 101: Package Management
$ conan create
Store package
Run recipe
locally
13
Made by Tanker.io team
Conan 101: Creating packages
$ conan create
Store package
Run recipe
locally
$ conan upload
Find local Upload to
package server
14
Made by Tanker.io team
Conan 101: First recipe
class ArithmeticConan(ConanFile):
name = "arithmetic"
version = "0.1"
15
Made by Tanker.io team
Conan 101: First recipe
class ArithmeticConan(ConanFile):
name = "arithmetic"
version = "0.1"
settings = "os", "arch", "build_type", "compiler"
16
Made by Tanker.io team
Conan 101: First recipe
class ArithmeticConan(ConanFile):
name = "arithmetic"
version = "0.1"
settings = "os", "arch", "build_type", "compiler
def source(self):
url = "https://github.com/theodelrieu/FOSDEM2018-arithmetic"
self.run("git clone %s arithmetic" % url)
17
Made by Tanker.io team
Conan 101: First recipe
class ArithmeticConan(ConanFile):
def build(self):
cmake = CMake(self)
cmake.configure(source_dir=”arithmetic”)
cmake.build()
cmake.install()
18
Made by Tanker.io team
Conan 101: First recipe
class ArithmeticConan(ConanFile):
def build(self):
cmake = CMake(self)
cmake.configure(source_dir=”arithmetic”)
cmake.build()
cmake.install()
def package_info(self):
self.cpp_info.libs = ["arithmetic"]
19
Made by Tanker.io team
Conan 101: Consuming packages
$ conan install
20
Made by Tanker.io team
Conan 101: Consuming packages
conanfile.txt
[requires]
arithmetic/0.1@theo/stable
21
Made by Tanker.io team
Conan 101: Consuming packages
conanfile.txt
[requires]
arithmetic/0.1@theo/stable
[generators]
cmake
22
Made by Tanker.io team
Conan 101: Consuming packages
cmake_minimum_required(VERSION 3.0)
project(Calculator)
find_package(Arithmetic)
add_executable(calculator src/main.cpp)
target_link_libraries(calculator Arithmetic::Arithmetic)
23
Made by Tanker.io team
Conan 101: Consuming packages
cmake_minimum_required(VERSION 3.0)
project(Calculator)
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
find_package(Arithmetic)
add_executable(calculator src/main.cpp)
target_link_libraries(calculator Arithmetic::Arithmetic)
24
Made by Tanker.io team
Conan 101: Consuming packages
cmake_minimum_required(VERSION 3.0)
project(Calculator)
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup(TARGETS)
add_executable(calculator src/main.cpp)
target_link_libraries(calculator CONAN_PKG::arithmetic)
25
Made by Tanker.io team
Conan 101
DEMO
26
Made by Tanker.io team
Conan 101: Change settings
27
Made by Tanker.io team
Conan 101: Profiles
28
Made by Tanker.io team
Conan 101: Profiles
[settings]
os=Linux
arch=x86_64
compiler=clang
compiler.version=5.0
compiler.libcxx=libstdc++11
build_type=Debug
29
Made by Tanker.io team
Conan 101: Profiles
30
Made by Tanker.io team
Conan 101: Package Management
Prerequisites:
Standalone New
Android NDK
Android Toolchain Conan Profile
32
Made by Tanker.io team
Conan & Android: Build requirements
PackageA
RECIPE
self.env_info.FOO=”bar”
33
Made by Tanker.io team
Conan & Android: Build requirements
build_requires
PackageA PackageB
RECIPE
self.env_info.FOO=”bar”
34
Made by Tanker.io team
Conan & Android: Build requirements
build_requires
PackageA PackageB
RECIPE ENV
35
Made by Tanker.io team
Conan & Android: Build requirements
build_requires
PackageA PackageB
RECIPE ENV
RECIPE RECIPE
self.cpp_info.sysroot=/bar self.deps_cpp_info.sysroot=/bar
36
Made by Tanker.io team
Conan & Android: Setting up the Toolchain
build_requires Standalone
Android NDK
Android Toolchain
37
Made by Tanker.io team
Conan & Android: Setting up the Toolchain
build_requires Standalone
Android NDK
Android Toolchain
build_requires
Arithmetic
38
Made by Tanker.io team
Conan & Android
Android profile
[settings]
os=Android
arch=armv8
os.api_level=21
compiler=clang
compiler.version=5
compiler.libcxx=libc++
build_type=Release
39
Made by Tanker.io team
Conan & Android
Android profile
[settings]
os=Android
arch=armv8
os.api_level=21
compiler=clang
compiler.version=5
compiler.libcxx=libc++
build_type=Release
os_build=Linux
arch_build=x86_64
40
Made by Tanker.io team
Conan & Android: NDK recipe
class AndroidNDKConan(ConanFile):
name = "android-ndk"
version = "r16"
41
Made by Tanker.io team
Conan & Android: NDK recipe
class AndroidNDKConan(ConanFile):
name = "android-ndk"
version = "r16"
settings = "os_build", "arch_build"
42
Made by Tanker.io team
Conan & Android: NDK recipe
class AndroidNDKConan(ConanFile):
name = "android-ndk"
version = "r16"
settings = "os_build", "arch_build"
def source(self):
tools.download(url, NDK_URL)
tools.unzip("ndk.zip", keep_permissions=True)
os.unlink("ndk.zip")
Made by Tanker.io team
Conan & Android: NDK recipe
class AndroidNDKConan(ConanFile):
def package(self):
self.copy("*", src="android-ndk-r16")
class AndroidNDKConan(ConanFile):
def package(self):
self.copy("*", src="android-ndk-r16")
def package_info(self):
tools_folder = path.join(self.package_folder, "build/tools")
self.env_info.PATH.append(tools_folder)
class AndroidToolchainConan(ConanFile):
name = "android-toolchain"
version = "r16"
class AndroidToolchainConan(ConanFile):
name = "android-toolchain"
version = "r16"
settings = "os_build", "arch_build"
class AndroidToolchainConan(ConanFile):
name = "android-toolchain"
version = "r16"
settings = "os_build", "arch_build"
build_requires = "android-ndk/r16@theo/stable"
class AndroidToolchainConan(ConanFile):
name = "android-toolchain"
version = "r16"
settings = "os_build", "arch_build"
build_requires = "android-ndk/r16@theo/stable"
def build(self):
command = "make-standalone-toolchain.sh %s"
self.run(command % MAKE_TOOLCHAIN_ARGS)
Made by Tanker.io team
Conan & Android: Standalone Toolchain recipe
class AndroidToolchainConan(ConanFile):
def package_info(self):
sysroot_folder = path.join(self.package_folder, "sysroot")
self.cpp_info.sysroot = sysroot_folder
[settings]
os=Android
arch=armv8
# etc, etc...
[build_requires]
android-toolchain/r16@theo/stable
51
Made by Tanker.io team
Conan & Android
FINAL DEMO
52
Made by Tanker.io team
Thank you!
tanker.io conan.io
tanker.io/docs github.com/conan-io