3#ifndef __NUITKA_BLOBS_H__
4#define __NUITKA_BLOBS_H__
17#if defined(_NUITKA_CONSTANTS_FROM_INCBIN) || defined(_NUITKA_CONSTANTS_FROM_C23_EMBED)
20#define NUITKA_CONSTANTS_EXTERN_C_START extern "C" {
21#define NUITKA_CONSTANTS_EXTERN_C_END }
23#define NUITKA_CONSTANTS_EXTERN_C_START
24#define NUITKA_CONSTANTS_EXTERN_C_END
27#define NUITKA_DECLARE_CONSTANT_BLOB(blob_name, blob_camel_name, modifier, res_id) \
28 NUITKA_CONSTANTS_EXTERN_C_START \
29 extern unsigned modifier char *get##blob_camel_name##Data(void); \
30 NUITKA_CONSTANTS_EXTERN_C_END
32#elif defined(_NUITKA_CONSTANTS_FROM_RESOURCE)
37#define NUITKA_CONSTANTS_EXTERN_C_START extern "C" {
38#define NUITKA_CONSTANTS_EXTERN_C_END }
40#define NUITKA_CONSTANTS_EXTERN_C_START
41#define NUITKA_CONSTANTS_EXTERN_C_END
45#define _NUITKA_GET_RESOURCE_HANDLE() NULL
47extern HMODULE getDllModuleHandle(
void);
48#define _NUITKA_GET_RESOURCE_HANDLE() getDllModuleHandle()
51#define NUITKA_DECLARE_CONSTANT_BLOB(blob_name, blob_camel_name, modifier, res_id) \
52 NUITKA_CONSTANTS_EXTERN_C_START \
53 static inline unsigned modifier char *get##blob_camel_name##Data(void) { \
54 HMODULE handle = _NUITKA_GET_RESOURCE_HANDLE(); \
55 HRSRC hRes = FindResource(handle, MAKEINTRESOURCE(res_id), RT_RCDATA); \
56 if (unlikely(hRes == NULL)) { \
59 HGLOBAL hData = LoadResource(handle, hRes); \
60 if (unlikely(hData == NULL)) { \
63 return (unsigned modifier char *)LockResource(hData); \
65 NUITKA_CONSTANTS_EXTERN_C_END
67#elif defined(_NUITKA_CONSTANTS_FROM_MACOS_SECTION)
71#include <mach-o/dyld.h>
72#include <mach-o/getsect.h>
73#include <mach-o/ldsyms.h>
77#define mach_header_arch mach_header_64
79#define mach_header_arch mach_header
83#define NUITKA_CONSTANTS_EXTERN_C_START extern "C" {
84#define NUITKA_CONSTANTS_EXTERN_C_END }
86#define NUITKA_CONSTANTS_EXTERN_C_START
87#define NUITKA_CONSTANTS_EXTERN_C_END
91static inline const struct mach_header_arch *_getNuitkaMachHeader(
void) {
93 return &_mh_execute_header;
96 int res = dladdr((
void *)_getNuitkaMachHeader, &where);
99 char const *dll_filename = where.dli_fname;
100 unsigned long image_count = _dyld_image_count();
102 for (
unsigned long i = 0; i < image_count; i++) {
103 struct mach_header const *header = _dyld_get_image_header(i);
104 if (header == NULL) {
107 if (strcmp(dll_filename, _dyld_get_image_name(i)) == 0) {
108 return (
const struct mach_header_arch *)header;
115#define NUITKA_DECLARE_CONSTANT_BLOB(blob_name, blob_camel_name, modifier, res_id) \
116 NUITKA_CONSTANTS_EXTERN_C_START \
117 static inline unsigned modifier char *get##blob_camel_name##Data(void) { \
118 const struct mach_header_arch *header = _getNuitkaMachHeader(); \
119 unsigned long size; \
120 return (unsigned modifier char *)getsectiondata(header, #blob_name, #blob_name, &size); \
122 NUITKA_CONSTANTS_EXTERN_C_END
127#define NUITKA_CONSTANTS_EXTERN_C_START extern "C" {
128#define NUITKA_CONSTANTS_EXTERN_C_END }
130#define NUITKA_CONSTANTS_EXTERN_C_START
131#define NUITKA_CONSTANTS_EXTERN_C_END
134#define NUITKA_DECLARE_CONSTANT_BLOB(blob_name, blob_camel_name, modifier, res_id) \
135 NUITKA_CONSTANTS_EXTERN_C_START \
136 extern modifier unsigned char blob_name##_data[]; \
137 NUITKA_CONSTANTS_EXTERN_C_END \
138 static inline unsigned modifier char *get##blob_camel_name##Data(void) { \
139 return (unsigned modifier char *)(blob_name##_data); \