mirror of
				https://github.com/Klipper3d/klipper.git
				synced 2025-10-31 02:15:52 +01:00 
			
		
		
		
	chelper: Rework check for building C code
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
		| @@ -178,31 +178,26 @@ defs_all = [ | ||||
|     defs_kin_winch, defs_kin_extruder, defs_kin_shaper, | ||||
| ] | ||||
|  | ||||
| # Update filenames to an absolute path | ||||
| def get_abs_files(srcdir, filelist): | ||||
|     return [os.path.join(srcdir, fname) for fname in filelist] | ||||
|  | ||||
| # Return the list of file modification times | ||||
| def get_mtimes(srcdir, filelist): | ||||
| def get_mtimes(filelist): | ||||
|     out = [] | ||||
|     for filename in filelist: | ||||
|         pathname = os.path.join(srcdir, filename) | ||||
|         try: | ||||
|             t = os.path.getmtime(pathname) | ||||
|             t = os.path.getmtime(filename) | ||||
|         except os.error: | ||||
|             continue | ||||
|         out.append(t) | ||||
|     return out | ||||
|  | ||||
| # Check if the code needs to be compiled | ||||
| def check_build_code(srcdir, target, sources, cmd, other_files=[]): | ||||
|     src_times = get_mtimes(srcdir, sources + other_files + [__file__]) | ||||
|     obj_times = get_mtimes(srcdir, [target]) | ||||
|     if not obj_times or max(src_times) > min(obj_times): | ||||
|         logging.info("Building C code module %s", target) | ||||
|         srcfiles = [os.path.join(srcdir, fname) for fname in sources] | ||||
|         destlib = os.path.join(srcdir, target) | ||||
|         res = os.system(cmd % (destlib, ' '.join(srcfiles))) | ||||
|         if res: | ||||
|             msg = "Unable to build C code module (error=%s)" % (res,) | ||||
|             logging.error(msg) | ||||
|             raise Exception(msg) | ||||
| def check_build_code(sources, target): | ||||
|     src_times = get_mtimes(sources) | ||||
|     obj_times = get_mtimes([target]) | ||||
|     return not obj_times or max(src_times) > min(obj_times) | ||||
|  | ||||
| def check_gcc_option(option): | ||||
|     cmd = "%s %s -S -o /dev/null -xc /dev/null > /dev/null 2>&1" % ( | ||||
| @@ -219,15 +214,20 @@ def get_ffi(): | ||||
|     global FFI_main, FFI_lib, pyhelper_logging_callback | ||||
|     if FFI_lib is None: | ||||
|         srcdir = os.path.dirname(os.path.realpath(__file__)) | ||||
|         if check_gcc_option(SSE_FLAGS): | ||||
|             cmd = "%s %s %s" % (GCC_CMD, SSE_FLAGS, COMPILE_ARGS) | ||||
|         else: | ||||
|             cmd = "%s %s" % (GCC_CMD, COMPILE_ARGS) | ||||
|         check_build_code(srcdir, DEST_LIB, SOURCE_FILES, cmd, OTHER_FILES) | ||||
|         srcfiles = get_abs_files(srcdir, SOURCE_FILES) | ||||
|         ofiles = get_abs_files(srcdir, OTHER_FILES) | ||||
|         destlib = get_abs_files(srcdir, [DEST_LIB])[0] | ||||
|         if check_build_code(srcfiles+ofiles+[__file__], destlib): | ||||
|             if check_gcc_option(SSE_FLAGS): | ||||
|                 cmd = "%s %s %s" % (GCC_CMD, SSE_FLAGS, COMPILE_ARGS) | ||||
|             else: | ||||
|                 cmd = "%s %s" % (GCC_CMD, COMPILE_ARGS) | ||||
|             logging.info("Building C code module %s", DEST_LIB) | ||||
|             os.system(cmd % (destlib, ' '.join(srcfiles))) | ||||
|         FFI_main = cffi.FFI() | ||||
|         for d in defs_all: | ||||
|             FFI_main.cdef(d) | ||||
|         FFI_lib = FFI_main.dlopen(os.path.join(srcdir, DEST_LIB)) | ||||
|         FFI_lib = FFI_main.dlopen(destlib) | ||||
|         # Setup error logging | ||||
|         def logging_callback(msg): | ||||
|             logging.error(FFI_main.string(msg)) | ||||
| @@ -250,7 +250,11 @@ HC_CMD = "sudo %s/hub-ctrl -h 0 -P 2 -p %d" | ||||
| def run_hub_ctrl(enable_power): | ||||
|     srcdir = os.path.dirname(os.path.realpath(__file__)) | ||||
|     hubdir = os.path.join(srcdir, HC_SOURCE_DIR) | ||||
|     check_build_code(hubdir, HC_TARGET, HC_SOURCE_FILES, HC_COMPILE_CMD) | ||||
|     srcfiles = get_abs_files(hubdir, HC_SOURCE_FILES) | ||||
|     destlib = get_abs_files(hubdir, [HC_TARGET])[0] | ||||
|     if check_build_code(srcfiles, destlib): | ||||
|         logging.info("Building C code module %s", HC_TARGET) | ||||
|         os.system(HC_COMPILE_CMD % (destlib, ' '.join(srcfiles))) | ||||
|     os.system(HC_CMD % (hubdir, enable_power)) | ||||
|  | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user