]> git.tdb.fi Git - builder.git/blob - source/androidtools.h
Track Android API levels with a bitmask
[builder.git] / source / androidtools.h
1 #ifndef ANDROIDTOOLS_H_
2 #define ANDROIDTOOLS_H_
3
4 #include <cstdint>
5 #include <msp/fs/path.h>
6 #include "toolchain.h"
7
8 class Architecture;
9 class Builder;
10
11 class AndroidDevKit
12 {
13 protected:
14         Builder &builder;
15         Msp::FS::Path root;
16         /* Needs refactoring if API levels go over 63.  At present rate this will
17         take decades to occur. */
18         uint64_t supported_api_levels;
19
20         AndroidDevKit(Builder &, const std::string &, const Msp::FS::Path & = Msp::FS::Path());
21         ~AndroidDevKit() { }
22
23 public:
24         const Msp::FS::Path &get_root_dir() const { return root; }
25         uint64_t get_supported_api_levels() const { return supported_api_levels; }
26         void select_api_level(unsigned);
27 protected:
28         virtual void init_api_level(unsigned) = 0;
29 };
30
31 class AndroidSdk: public AndroidDevKit
32 {
33 private:
34         Msp::FS::Path build_tools_dir;
35         // TODO use a FileTarget for the jar
36         Msp::FS::Path platform_jar;
37
38 public:
39         AndroidSdk(Builder &);
40
41 private:
42         void find_build_tools_dir();
43         void init_api_level(unsigned) override;
44
45 public:
46         const Msp::FS::Path &get_build_tools_dir() const { return build_tools_dir; }
47         const Msp::FS::Path &get_platform_jar() const { return platform_jar; }
48 };
49
50 class AndroidNdk: public AndroidDevKit
51 {
52 private:
53         const Architecture &architecture;
54         Msp::FS::Path bin_dir;
55         Msp::FS::Path common_sysroot;
56         Msp::FS::Path platform_sysroot;
57
58 public:
59         AndroidNdk(Builder &, const Architecture &, const AndroidSdk &);
60 private:
61         static Msp::FS::Path create_default_path(const AndroidSdk &);
62
63         void find_toolchain_dir();
64         void init_api_level(unsigned) override;
65
66 public:
67         const Msp::FS::Path &get_bin_dir() const { return bin_dir; }
68         const Msp::FS::Path &get_common_sysroot() const { return common_sysroot; }
69         const Msp::FS::Path &get_platform_sysroot() const { return platform_sysroot; }
70 };
71
72
73 class AndroidTools: public Toolchain
74 {
75 private:
76         AndroidSdk sdk;
77         AndroidNdk ndk;
78
79 public:
80         AndroidTools(Builder &, const Architecture &);
81 };
82
83 #endif