Some updated to librarizing

This commit is contained in:
2020-01-12 14:07:33 -05:00
parent a0e89e76e3
commit ab888f913b
5 changed files with 39 additions and 27 deletions

View File

@@ -10,7 +10,7 @@ generate_arduino_library(checkm8_arduino_libhostshield)
set(checkm8_arduino_BOARD uno) set(checkm8_arduino_BOARD uno)
set(checkm8_arduino_HDRS include/User_Setup.h include/Usb.h) set(checkm8_arduino_HDRS include/User_Setup.h include/Usb.h)
set(checkm8_arduino_LIBS checkm8_arduino_libhostshield) set(checkm8_arduino_LIBS checkm8_arduino_libhostshield)
set(checkm8_arduino_SKETCH src/checkm8_arduino.ino) set(checkm8_arduino_SKETCH checkm8_arduino.ino)
set(checkm8_arduino_PROGRAMMER avrispmkii) set(checkm8_arduino_PROGRAMMER avrispmkii)
set(checkm8_arduino_PORT /dev/ttyACM0) set(checkm8_arduino_PORT /dev/ttyACM0)

View File

@@ -1,5 +1,5 @@
#include "../include/User_Setup.h" #include "include/User_Setup.h"
#include "../include/Usb.h" #include "include/Usb.h"
#include "checkm8_config.h" #include "checkm8_config.h"
#include "ard_protocol.h" #include "ard_protocol.h"

View File

@@ -20,13 +20,10 @@ endforeach(NAME)
add_subdirectory(pl) add_subdirectory(pl)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib) file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
add_custom_target(libpayload_sources # TODO: somehow only pass names that need to be udpated? add_custom_command(OUTPUT ${PL_SRC_LONG}
DEPENDS ${PL_TARGETS} DEPENDS ${PL_TARGETS}
BYPRODUCTS ${PL_SRC_LONG} COMMAND python3 ${CMAKE_CURRENT_LIST_DIR}/scripts/librarize.py
COMMENT "running librarizer" ${CMAKE_CURRENT_BINARY_DIR}/pl/bin
COMMAND python3 ${CMAKE_CURRENT_LIST_DIR}/scripts/librarize.py ${CMAKE_CURRENT_BINARY_DIR}/lib)
${CMAKE_CURRENT_BINARY_DIR}/pl/bin
${CMAKE_CURRENT_BINARY_DIR}/lib)
add_library(payload ${PL_SRC_LONG}) add_library(payload ${PL_SRC_LONG})
add_dependencies(payload libpayload_sources)

View File

@@ -13,11 +13,10 @@ set(CMAKE_C_FLAGS "-nostdlib -O")
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin)
foreach(PL ${PL_NAMES_SHORT}) foreach(PL ${PL_NAMES_SHORT})
add_executable(payload_${PL} src/${PL}.c) add_executable(payload_${PL} src/${PL}.c)
add_custom_command(TARGET payload_${PL} POST_BUILD add_custom_command(TARGET payload_${PL} POST_BUILD
BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/bin/payload_${PL}.bin BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/bin/payload_${PL}.bin
COMMENT "objcopying ${PL}" COMMAND ${CMAKE_OBJCOPY}
COMMAND ${CMAKE_OBJCOPY} ARGS -O binary -j .text -j .payload_text -j .payload_data
ARGS -O binary -j .text -j .payload_text -j .payload_data ${CMAKE_CURRENT_BINARY_DIR}/payload_${PL}
${CMAKE_CURRENT_BINARY_DIR}/payload_${PL} ${CMAKE_CURRENT_BINARY_DIR}/bin/payload_${PL}.bin)
${CMAKE_CURRENT_BINARY_DIR}/bin/payload_${PL}.bin)
endforeach(PL) endforeach(PL)

View File

@@ -1,9 +1,10 @@
import sys import sys
from collections import defaultdict
import os import os
from collections import defaultdict
from operator import eq
if __name__ == '__main__': if __name__ == '__main__':
print('ffffffffffffffffff')
if len(sys.argv) < 3: if len(sys.argv) < 3:
print('Usage: librarize.py [bin names ...] [lib dir]') print('Usage: librarize.py [bin names ...] [lib dir]')
exit(1) exit(1)
@@ -38,18 +39,33 @@ if __name__ == '__main__':
for i, b in enumerate(fbytes): for i, b in enumerate(fbytes):
if i % 16 == 0: if i % 16 == 0:
source_lines[payload_name].append('\n\t\t') source_lines[payload_name][-1] += '\n'
source_lines[payload_name].append('\t\t')
source_lines[payload_name][-1] += '0x%02x, ' % b source_lines[payload_name][-1] += '0x%02x, ' % b
if i == len(fbytes) - 1:
source_lines[payload_name][-1] += '\n'
source_lines[payload_name].append('\n\t};\n') source_lines[payload_name].append('\t};\n')
header_lines.append('\n') header_lines.append('\n')
header_lines.append('#endif //CHECKM8_TOOL_LIBPAYLOAD_H\n') header_lines.append('#endif //CHECKM8_TOOL_LIBPAYLOAD_H\n')
with open(lib_dir + '/libpayload.h', 'w+') as f: files_updated = False
f.writelines(header_lines)
for sname, lines in source_lines.items(): for sname, lines in source_lines.items():
with open(lib_dir + '/' + sname + '.c', 'w+') as f: sfname = lib_dir + '/' + sname + '.c'
f.writelines(lines)
if os.path.exists(sfname):
with open(sfname, 'r') as f:
old_lines = f.readlines()
if all(map(eq, lines, old_lines)):
continue
with open(sfname, 'w+') as f:
files_updated = True
f.writelines(lines)
if files_updated:
with open(lib_dir + '/libpayload.h', 'w+') as f:
f.writelines(header_lines)