diff --git a/c8_arduino/CMakeLists.txt b/c8_arduino/CMakeLists.txt index 78c2f7d..f738247 100644 --- a/c8_arduino/CMakeLists.txt +++ b/c8_arduino/CMakeLists.txt @@ -10,7 +10,7 @@ generate_arduino_library(checkm8_arduino_libhostshield) set(checkm8_arduino_BOARD uno) set(checkm8_arduino_HDRS include/User_Setup.h include/Usb.h) 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_PORT /dev/ttyACM0) diff --git a/c8_arduino/src/checkm8_arduino.ino b/c8_arduino/checkm8_arduino.ino similarity index 99% rename from c8_arduino/src/checkm8_arduino.ino rename to c8_arduino/checkm8_arduino.ino index 72647ba..33a3851 100644 --- a/c8_arduino/src/checkm8_arduino.ino +++ b/c8_arduino/checkm8_arduino.ino @@ -1,5 +1,5 @@ -#include "../include/User_Setup.h" -#include "../include/Usb.h" +#include "include/User_Setup.h" +#include "include/Usb.h" #include "checkm8_config.h" #include "ard_protocol.h" diff --git a/c8_libpayload/CMakeLists.txt b/c8_libpayload/CMakeLists.txt index 8e23baa..a0ad897 100644 --- a/c8_libpayload/CMakeLists.txt +++ b/c8_libpayload/CMakeLists.txt @@ -20,13 +20,10 @@ endforeach(NAME) add_subdirectory(pl) file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib) -add_custom_target(libpayload_sources # TODO: somehow only pass names that need to be udpated? - DEPENDS ${PL_TARGETS} - BYPRODUCTS ${PL_SRC_LONG} - COMMENT "running librarizer" - COMMAND python3 ${CMAKE_CURRENT_LIST_DIR}/scripts/librarize.py - ${CMAKE_CURRENT_BINARY_DIR}/pl/bin - ${CMAKE_CURRENT_BINARY_DIR}/lib) +add_custom_command(OUTPUT ${PL_SRC_LONG} + DEPENDS ${PL_TARGETS} + COMMAND python3 ${CMAKE_CURRENT_LIST_DIR}/scripts/librarize.py + ${CMAKE_CURRENT_BINARY_DIR}/pl/bin + ${CMAKE_CURRENT_BINARY_DIR}/lib) add_library(payload ${PL_SRC_LONG}) -add_dependencies(payload libpayload_sources) \ No newline at end of file diff --git a/c8_libpayload/pl/CMakeLists.txt b/c8_libpayload/pl/CMakeLists.txt index 3bc4353..43f6468 100644 --- a/c8_libpayload/pl/CMakeLists.txt +++ b/c8_libpayload/pl/CMakeLists.txt @@ -13,11 +13,10 @@ set(CMAKE_C_FLAGS "-nostdlib -O") file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) foreach(PL ${PL_NAMES_SHORT}) add_executable(payload_${PL} src/${PL}.c) - add_custom_command(TARGET payload_${PL} POST_BUILD - BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/bin/payload_${PL}.bin - COMMENT "objcopying ${PL}" - COMMAND ${CMAKE_OBJCOPY} - ARGS -O binary -j .text -j .payload_text -j .payload_data - ${CMAKE_CURRENT_BINARY_DIR}/payload_${PL} - ${CMAKE_CURRENT_BINARY_DIR}/bin/payload_${PL}.bin) + add_custom_command(TARGET payload_${PL} POST_BUILD + BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/bin/payload_${PL}.bin + COMMAND ${CMAKE_OBJCOPY} + ARGS -O binary -j .text -j .payload_text -j .payload_data + ${CMAKE_CURRENT_BINARY_DIR}/payload_${PL} + ${CMAKE_CURRENT_BINARY_DIR}/bin/payload_${PL}.bin) endforeach(PL) \ No newline at end of file diff --git a/c8_libpayload/scripts/librarize.py b/c8_libpayload/scripts/librarize.py index 72a80ba..1008d94 100644 --- a/c8_libpayload/scripts/librarize.py +++ b/c8_libpayload/scripts/librarize.py @@ -1,9 +1,10 @@ import sys -from collections import defaultdict import os +from collections import defaultdict +from operator import eq + if __name__ == '__main__': - print('ffffffffffffffffff') if len(sys.argv) < 3: print('Usage: librarize.py [bin names ...] [lib dir]') exit(1) @@ -38,18 +39,33 @@ if __name__ == '__main__': for i, b in enumerate(fbytes): 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 + 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('#endif //CHECKM8_TOOL_LIBPAYLOAD_H\n') - with open(lib_dir + '/libpayload.h', 'w+') as f: - f.writelines(header_lines) - + files_updated = False for sname, lines in source_lines.items(): - with open(lib_dir + '/' + sname + '.c', 'w+') as f: - f.writelines(lines) \ No newline at end of file + sfname = lib_dir + '/' + sname + '.c' + + 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) \ No newline at end of file