mirror of
				https://github.com/SuperBFG7/ympd
				synced 2025-10-31 13:53:00 +00:00 
			
		
		
		
	added mkdata.pl generator for cross-compiling, fixes #31
This commit is contained in:
		| @@ -32,13 +32,18 @@ file(GLOB RESOURCES | ||||
| 	htdocs/index.html | ||||
| ) | ||||
|  | ||||
| add_executable(mkdata htdocs/mkdata.c) | ||||
| if(CMAKE_CROSSCOMPILING) | ||||
| 	set(MKDATA_EXE ${PROJECT_SOURCE_DIR}/htdocs/mkdata.pl) | ||||
| else() | ||||
| 	set(MKDATA_EXE $<TARGET_FILE:mkdata>) | ||||
| 	set(MKDATA_TARGET mkdata) | ||||
| 	add_executable(mkdata htdocs/mkdata.c) | ||||
| endif() | ||||
|  | ||||
| add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/assets.c | ||||
| 	COMMAND ${MKDATA_EXE} ${RESOURCES} > ${PROJECT_BINARY_DIR}/assets.c | ||||
| 	WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} | ||||
|     DEPENDS ${RESOURCES} mkdata | ||||
| 	DEPENDS ${RESOURCES} ${MKDATA_TARGET} | ||||
| ) | ||||
|  | ||||
| set(SOURCES | ||||
|   | ||||
							
								
								
									
										65
									
								
								htdocs/mkdata.pl
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										65
									
								
								htdocs/mkdata.pl
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,65 @@ | ||||
| #!/usr/bin/perl | ||||
| # This program is used to embed arbitrary data into a C binary. It takes | ||||
| # a list of files as an input, and produces a .c data file that contains | ||||
| # contents of all these files as collection of char arrays. | ||||
| # | ||||
| # Usage: perl <this_file> <file1> [file2, ...] > embedded_data.c | ||||
|  | ||||
| use File::Basename; | ||||
|  | ||||
| %mimetypes = ( | ||||
|   js => 'application/javascript', | ||||
|   css => 'text/css', | ||||
|   ico => 'image/vnd.microsoft.icon', | ||||
|   woff => 'application/font-woff', | ||||
|   ttf => 'application/x-font-ttf', | ||||
|   eot => 'application/octet-stream', | ||||
|   svg => 'image/svg+xml', | ||||
|   html => 'text/html' | ||||
| ); | ||||
|  | ||||
| foreach my $i (0 .. $#ARGV) { | ||||
|   open FD, '<:raw', $ARGV[$i] or die "Cannot open $ARGV[$i]: $!\n"; | ||||
|   printf("static const unsigned char v%d[] = {", $i); | ||||
|   my $byte; | ||||
|   my $j = 0; | ||||
|   while (read(FD, $byte, 1)) { | ||||
|     if (($j % 12) == 0) { | ||||
|       print "\n"; | ||||
|     } | ||||
|     printf ' %#04x,', ord($byte); | ||||
|     $j++; | ||||
|   } | ||||
|   print " 0x00\n};\n"; | ||||
|   close FD; | ||||
| } | ||||
|  | ||||
| print <<EOS; | ||||
| #include <stddef.h> | ||||
| #include <string.h> | ||||
| #include <sys/types.h> | ||||
| #include "src/http_server.h" | ||||
|  | ||||
| static const struct embedded_file embedded_files[] = { | ||||
| EOS | ||||
|  | ||||
| foreach my $i (0 .. $#ARGV) { | ||||
|   my ($ext) = $ARGV[$i] =~ /([^.]+)$/; | ||||
|   my $mime = $mimetypes{$ext}; | ||||
|   $ARGV[$i] =~ s/htdocs//; | ||||
|   print "  {\"$ARGV[$i]\", v$i, \"$mime\", sizeof(v$i) - 1},\n"; | ||||
| } | ||||
|  | ||||
| print <<EOS; | ||||
|   {NULL, NULL, NULL, 0} | ||||
| }; | ||||
|  | ||||
| const struct embedded_file *find_embedded_file(const char *name) { | ||||
|   const struct embedded_file *p; | ||||
|   for (p = embedded_files; p->name != NULL; p++) | ||||
|     if (!strcmp(p->name, name)) | ||||
|       return p; | ||||
|   return NULL; | ||||
| } | ||||
|  | ||||
| EOS | ||||
		Reference in New Issue
	
	Block a user
	 Andrew Karpow
					Andrew Karpow