- Timestamp:
- Sep 14, 2020, 6:36:03 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub_riscv/trunk/app_iothub_client/kendryte/incbin.h
r453 r458 11 11 #include <limits.h> 12 12 13 # define INCBIN_ALIGNMENT_INDEX 713 # define INCBIN_ALIGNMENT_INDEX 8 14 14 15 15 /* Lookup table of (1 << n) where `n' is `INCBIN_ALIGNMENT_INDEX' */ … … 22 22 #define INCBIN_ALIGN_SHIFT_6 64 23 23 #define INCBIN_ALIGN_SHIFT_7 128 24 #define INCBIN_ALIGN_SHIFT_8 256 24 25 25 26 /* Actual alignment value */ 26 27 #define INCBIN_ALIGNMENT \ 27 28 29 28 INCBIN_CONCATENATE( \ 29 INCBIN_CONCATENATE(INCBIN_ALIGN_SHIFT, _), \ 30 INCBIN_ALIGNMENT_INDEX) 30 31 31 32 /* Stringize */ 32 33 #define INCBIN_STR(X) \ 33 34 #X 34 35 #define INCBIN_STRINGIZE(X) \ 35 36 INCBIN_STR(X) 36 37 /* Concatenate */ 37 38 #define INCBIN_CAT(X, Y) \ 38 39 X ## Y 39 40 #define INCBIN_CONCATENATE(X, Y) \ 40 41 INCBIN_CAT(X, Y) 41 42 /* Deferred macro expansion */ 42 43 #define INCBIN_EVAL(X) \ 43 44 X 44 45 #define INCBIN_INVOKE(N, ...) \ 45 46 INCBIN_EVAL(N(__VA_ARGS__)) 46 47 47 48 /* Green Hills uses a different directive for including binary data */ … … 54 55 #ifndef _MSC_VER 55 56 # define INCBIN_ALIGN \ 56 57 __attribute__((aligned(INCBIN_ALIGNMENT))) 57 58 #else 58 59 # define INCBIN_ALIGN __declspec(align(INCBIN_ALIGNMENT)) … … 60 61 61 62 #if defined(__arm__) || /* GNU C and RealView */ \ 62 63 63 defined(__arm) || /* Diab */ \ 64 defined(_ARM) /* ImageCraft */ 64 65 # define INCBIN_ARM 65 66 #endif … … 93 94 #if defined(__APPLE__) 94 95 /* The directives are different for Apple branded compilers */ 95 # define INCBIN_SECTION ". data\n"96 # define INCBIN_SECTION ".rodata\n" 96 97 # define INCBIN_GLOBAL(NAME) ".globl " INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME "\n" 97 98 # define INCBIN_INT ".long " … … 100 101 # define INCBIN_TYPE(...) 101 102 #else 102 # define INCBIN_SECTION ".section . data\n"103 # define INCBIN_SECTION ".section .rodata\n" 103 104 # define INCBIN_GLOBAL(NAME) ".global " INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME "\n" 104 105 # define INCBIN_INT ".int " … … 199 200 /* Style lookup: returning identifier */ 200 201 #define INCBIN_STYLE_IDENT(TYPE) \ 201 202 203 204 205 202 INCBIN_CONCATENATE( \ 203 INCBIN_STYLE_, \ 204 INCBIN_CONCATENATE( \ 205 INCBIN_EVAL(INCBIN_STYLE), \ 206 INCBIN_CONCATENATE(_, TYPE))) 206 207 207 208 /* Style lookup: returning string literal */ 208 209 #define INCBIN_STYLE_STRING(TYPE) \ 209 210 210 INCBIN_STRINGIZE( \ 211 INCBIN_STYLE_IDENT(TYPE)) \ 211 212 212 213 /* Generate the global labels by indirectly invoking the macro with our style 213 214 * type and concatenating the name against them. */ 214 215 #define INCBIN_GLOBAL_LABELS(NAME, TYPE) \ 215 216 217 218 219 220 221 222 223 224 225 226 227 228 216 INCBIN_INVOKE( \ 217 INCBIN_GLOBAL, \ 218 INCBIN_CONCATENATE( \ 219 NAME, \ 220 INCBIN_INVOKE( \ 221 INCBIN_STYLE_IDENT, \ 222 TYPE))) \ 223 INCBIN_INVOKE( \ 224 INCBIN_TYPE, \ 225 INCBIN_CONCATENATE( \ 226 NAME, \ 227 INCBIN_INVOKE( \ 228 INCBIN_STYLE_IDENT, \ 229 TYPE))) 229 230 230 231 /** … … 249 250 */ 250 251 #define INCBIN_EXTERN(NAME) \ 251 252 253 254 255 256 257 258 259 260 261 262 252 INCBIN_EXTERNAL INCBIN_ALIGN unsigned char \ 253 INCBIN_CONCATENATE( \ 254 INCBIN_CONCATENATE(INCBIN_PREFIX, NAME), \ 255 INCBIN_STYLE_IDENT(DATA))[]; \ 256 INCBIN_EXTERNAL INCBIN_ALIGN unsigned char * \ 257 INCBIN_CONCATENATE( \ 258 INCBIN_CONCATENATE(INCBIN_PREFIX, NAME), \ 259 INCBIN_STYLE_IDENT(END)); \ 260 INCBIN_EXTERNAL unsigned int \ 261 INCBIN_CONCATENATE( \ 262 INCBIN_CONCATENATE(INCBIN_PREFIX, NAME), \ 263 INCBIN_STYLE_IDENT(SIZE)) 263 264 264 265 /** … … 291 292 #ifdef _MSC_VER 292 293 #define INCBIN(NAME, FILENAME) \ 293 294 INCBIN_EXTERN(NAME) 294 295 #else 295 296 #define INCBIN(NAME, FILENAME) \ 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 #endif 314 #endif 297 __asm__(INCBIN_SECTION \ 298 INCBIN_GLOBAL_LABELS(NAME, DATA) \ 299 INCBIN_ALIGN_HOST \ 300 INCBIN_MANGLE INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME INCBIN_STYLE_STRING(DATA) ":\n" \ 301 INCBIN_MACRO " \"" FILENAME "\"\n" \ 302 INCBIN_GLOBAL_LABELS(NAME, END) \ 303 INCBIN_ALIGN_BYTE \ 304 INCBIN_MANGLE INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME INCBIN_STYLE_STRING(END) ":\n" \ 305 INCBIN_BYTE "1\n" \ 306 INCBIN_GLOBAL_LABELS(NAME, SIZE) \ 307 INCBIN_ALIGN_HOST \ 308 INCBIN_MANGLE INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME INCBIN_STYLE_STRING(SIZE) ":\n" \ 309 INCBIN_INT INCBIN_MANGLE INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME INCBIN_STYLE_STRING(END) " - " \ 310 INCBIN_MANGLE INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME INCBIN_STYLE_STRING(DATA) "\n" \ 311 ); \ 312 INCBIN_EXTERN(NAME) 313 314 #endif 315 #endif
Note:
See TracChangeset
for help on using the changeset viewer.