mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 12:11:15 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			89 lines
		
	
	
		
			No EOL
		
	
	
		
			3.9 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			No EOL
		
	
	
		
			3.9 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
| # Source: https://gist.github.com/sivachandran/3a0de157dccef822a230#file-bin2h-cmake
 | |
| # Added modifications to suit prusaslicer
 | |
| include(CMakeParseArguments)
 | |
| 
 | |
| # Function to wrap a given string into multiple lines at the given column position.
 | |
| # Parameters:
 | |
| #   VARIABLE    - The name of the CMake variable holding the string.
 | |
| #   AT_COLUMN   - The column position at which string will be wrapped.
 | |
| function(WRAP_STRING)
 | |
|     set(oneValueArgs VARIABLE AT_COLUMN)
 | |
|     cmake_parse_arguments(WRAP_STRING "${options}" "${oneValueArgs}" "" ${ARGN})
 | |
| 
 | |
|     string(LENGTH ${${WRAP_STRING_VARIABLE}} stringLength)
 | |
|     math(EXPR offset "0")
 | |
| 
 | |
|     while(stringLength GREATER 0)
 | |
| 
 | |
|         if(stringLength GREATER ${WRAP_STRING_AT_COLUMN})
 | |
|             math(EXPR length "${WRAP_STRING_AT_COLUMN}")
 | |
|         else()
 | |
|             math(EXPR length "${stringLength}")
 | |
|         endif()
 | |
| 
 | |
|         string(SUBSTRING ${${WRAP_STRING_VARIABLE}} ${offset} ${length} line)
 | |
|         set(lines "${lines}\n${line}")
 | |
| 
 | |
|         math(EXPR stringLength "${stringLength} - ${length}")
 | |
|         math(EXPR offset "${offset} + ${length}")
 | |
|     endwhile()
 | |
| 
 | |
|     set(${WRAP_STRING_VARIABLE} "${lines}" PARENT_SCOPE)
 | |
| endfunction()
 | |
| 
 | |
| # Function to embed contents of a file as byte array in C/C++ header file(.h). The header file
 | |
| # will contain a byte array and integer variable holding the size of the array.
 | |
| # Parameters
 | |
| #   SOURCE_FILE     - The path of source file whose contents will be embedded in the header file.
 | |
| #   VARIABLE_NAME   - The name of the variable for the byte array. The string "_SIZE" will be append
 | |
| #                     to this name and will be used a variable name for size variable.
 | |
| #   HEADER_FILE     - The path of header file.
 | |
| #   APPEND          - If specified appends to the header file instead of overwriting it
 | |
| #   NULL_TERMINATE  - If specified a null byte(zero) will be append to the byte array. This will be
 | |
| #                     useful if the source file is a text file and we want to use the file contents
 | |
| #                     as string. But the size variable holds size of the byte array without this
 | |
| #                     null byte.
 | |
| # Usage:
 | |
| #   bin2h(SOURCE_FILE "Logo.png" HEADER_FILE "Logo.h" VARIABLE_NAME "LOGO_PNG")
 | |
| function(BIN2H)
 | |
|     set(options APPEND NULL_TERMINATE ADD_WARNING_TEXT)
 | |
|     set(oneValueArgs SOURCE_FILE VARIABLE_NAME HEADER_FILE)
 | |
|     cmake_parse_arguments(BIN2H "${options}" "${oneValueArgs}" "" ${ARGN})
 | |
| 
 | |
|     # reads source file contents as hex string
 | |
|     file(READ ${BIN2H_SOURCE_FILE} hexString HEX)
 | |
|     string(LENGTH ${hexString} hexStringLength)
 | |
| 
 | |
|     # appends null byte if asked
 | |
|     if(BIN2H_NULL_TERMINATE)
 | |
|         set(hexString "${hexString}00")
 | |
|     endif()
 | |
| 
 | |
|     # wraps the hex string into multiple lines at column 32(i.e. 16 bytes per line)
 | |
|     wrap_string(VARIABLE hexString AT_COLUMN 32)
 | |
|     math(EXPR arraySize "${hexStringLength} / 2")
 | |
| 
 | |
|     # adds '0x' prefix and comma suffix before and after every byte respectively
 | |
|     string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1, " arrayValues ${hexString})
 | |
|     # removes trailing comma
 | |
|     string(REGEX REPLACE ", $" "" arrayValues ${arrayValues})
 | |
| 
 | |
|     # converts the variable name into proper C identifier
 | |
|     string(MAKE_C_IDENTIFIER "${BIN2H_VARIABLE_NAME}" BIN2H_VARIABLE_NAME)
 | |
|     # string(TOUPPER "${BIN2H_VARIABLE_NAME}" BIN2H_VARIABLE_NAME)
 | |
| 
 | |
|     # declares byte array and the length variables
 | |
|     set(arrayDefinition "const unsigned char ${BIN2H_VARIABLE_NAME}[] = { ${arrayValues} };")
 | |
|     set(arraySizeDefinition "const size_t ${BIN2H_VARIABLE_NAME}_SIZE = ${arraySize};")
 | |
|     set(warnTxt "")
 | |
|     if (BIN2H_ADD_WARNING_TEXT)
 | |
|         set(warnTxt "/* WARN: This file is auto-generated from ${BIN2H_SOURCE_FILE} */\n")
 | |
|     endif ()
 | |
| 
 | |
|     set(declarations "${warnTxt}${arrayDefinition}\n\n${arraySizeDefinition}\n\n")
 | |
|     if(BIN2H_APPEND)
 | |
|         file(APPEND ${BIN2H_HEADER_FILE} "${declarations}")
 | |
|     else()
 | |
|         file(WRITE ${BIN2H_HEADER_FILE} "${declarations}")
 | |
|     endif()
 | |
| endfunction() | 
