Use prusaslicer_add_cmake_project on each cmake deps project
replace avrdude conf generation from C to CMake code
This commit is contained in:
parent
500c667d7a
commit
85a7a3d5c5
89
cmake/modules/bin2h.cmake
Normal file
89
cmake/modules/bin2h.cmake
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
# 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()
|
@ -77,22 +77,16 @@ elseif (MINGW)
|
|||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_executable(avrdude-conf-gen conf-generate.cpp)
|
include(bin2h)
|
||||||
|
|
||||||
# Config file embedding
|
bin2h(
|
||||||
add_custom_command(
|
SOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/avrdude-slic3r.conf
|
||||||
DEPENDS avrdude-conf-gen ${CMAKE_CURRENT_SOURCE_DIR}/avrdude-slic3r.conf
|
VARIABLE_NAME avrdude_slic3r_conf
|
||||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/avrdude-slic3r.conf.h
|
HEADER_FILE ${CMAKE_CURRENT_BINARY_DIR}/avrdude-slic3r.conf.h
|
||||||
COMMAND $<TARGET_FILE:avrdude-conf-gen> avrdude-slic3r.conf avrdude_slic3r_conf ${CMAKE_CURRENT_BINARY_DIR}/avrdude-slic3r.conf.h
|
ADD_WARNING_TEXT
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
||||||
)
|
|
||||||
|
|
||||||
add_custom_target(gen_conf_h
|
|
||||||
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/avrdude-slic3r.conf.h
|
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library(avrdude STATIC ${AVRDUDE_SOURCES})
|
add_library(avrdude STATIC ${AVRDUDE_SOURCES})
|
||||||
add_dependencies(avrdude gen_conf_h)
|
|
||||||
|
|
||||||
add_executable(avrdude-slic3r main-standalone.cpp)
|
add_executable(avrdude-slic3r main-standalone.cpp)
|
||||||
target_link_libraries(avrdude-slic3r avrdude)
|
target_link_libraries(avrdude-slic3r avrdude)
|
||||||
|
@ -363,7 +363,7 @@ int read_config_builtin()
|
|||||||
|
|
||||||
// Note: Can't use yy_scan_buffer, it's buggy (?), leads to fread from a null FILE*
|
// Note: Can't use yy_scan_buffer, it's buggy (?), leads to fread from a null FILE*
|
||||||
// and so unfortunatelly we have to use the copying variant here
|
// and so unfortunatelly we have to use the copying variant here
|
||||||
YY_BUFFER_STATE buffer = yy_scan_bytes((const char *)avrdude_slic3r_conf, avrdude_slic3r_conf_size);
|
YY_BUFFER_STATE buffer = yy_scan_bytes((const char *)avrdude_slic3r_conf, avrdude_slic3r_conf_SIZE);
|
||||||
if (buffer == NULL) {
|
if (buffer == NULL) {
|
||||||
avrdude_message(MSG_INFO, "%s: read_config_builtin: Failed to initialize parsing buffer\n", progname);
|
avrdude_message(MSG_INFO, "%s: read_config_builtin: Failed to initialize parsing buffer\n", progname);
|
||||||
return -1;
|
return -1;
|
||||||
|
Loading…
Reference in New Issue
Block a user