25 const std::string& type =
"");
34 std::vector<uint8_t>
build()
const;
40 std::string nak_version_req_;
41 std::string entrypoint_;
42 std::vector<std::string> entrypoint_args_;
43 std::vector<std::string> env_vars_;
44 std::vector<std::string> lib_dirs_;
45 std::vector<std::string> asset_dirs_;
46 std::vector<std::string> asset_exports_;
47 std::vector<std::string> filesystem_permissions_;
48 std::vector<std::string> network_permissions_;
49 std::string description_;
52 std::string homepage_;
67 #define NAH_MANIFEST_SECTION \
68 __attribute__((used)) \
69 __attribute__((section("__NAH,__manifest"))) \
70 __attribute__((aligned(16)))
71#elif defined(__linux__) || defined(__unix__)
72 #define NAH_MANIFEST_SECTION \
73 __attribute__((used)) \
74 __attribute__((section(".nah_manifest"))) \
75 __attribute__((aligned(16)))
77 #pragma section(".nah", read)
78 #define NAH_MANIFEST_SECTION \
79 __declspec(allocate(".nah"))
81 #define NAH_MANIFEST_SECTION
89#define NAH_APP_MANIFEST(builder) \
91 static const auto _nah_manifest_data = (builder); \
92 NAH_MANIFEST_SECTION \
93 static const uint8_t _nah_manifest[sizeof(_nah_manifest_data)] = {}; \
97 [[gnu::constructor]] \
98 void _init_manifest() { \
99 auto data = (builder); \
100 std::memcpy(const_cast<uint8_t*>(_nah_manifest), data.data(), data.size()); \
106#define NAH_EMBED_MANIFEST(bytes, size) \
107 NAH_MANIFEST_SECTION \
108 static const uint8_t _nah_manifest_data[size] = bytes
ManifestBuilder & author(const std::string &value)
ManifestBuilder & id(const std::string &value)
ManifestBuilder & filesystem_permission(const std::string &value)
ManifestBuilder & entrypoint_arg(const std::string &value)
ManifestBuilder & network_permission(const std::string &value)
ManifestBuilder & entrypoint(const std::string &value)
ManifestBuilder & asset_export(const std::string &id, const std::string &path, const std::string &type="")
ManifestBuilder & license(const std::string &value)
ManifestBuilder & asset_dir(const std::string &value)
std::vector< uint8_t > build() const
ManifestBuilder & lib_dir(const std::string &value)
ManifestBuilder & version(const std::string &value)
ManifestBuilder & nak_version_req(const std::string &value)
ManifestBuilder & env(const std::string &key, const std::string &value)
ManifestBuilder & nak_id(const std::string &value)
ManifestBuilder & description(const std::string &value)
ManifestBuilder & homepage(const std::string &value)
ManifestBuilder manifest()