sw:vec_iree: Fix float_to_str function for non-springbok build

Create a new cache function to link springbok.cpp to executables without
the simprint dependency.

Change-Id: I350f9ede4447451da2028efa0710a499e0bfeb7a
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9c41392..5128e42 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,7 +13,7 @@
 )
 
 set(BUILD_RV64_LINUX OFF CACHE BOOL "Build RISC-V 64-bit Linux target (default: OFF)")
-set(BUILD_INTERNAL_MODELS OFF CACHE BOOL "Build applications from internal models (default: OFF")
+set(BUILD_INTERNAL_MODELS OFF CACHE BOOL "Build applications from internal models (default: OFF)")
 
 # Use nano spec header and libraries.
 if(NOT ${BUILD_RV64_LINUX})
@@ -32,7 +32,6 @@
 add_link_options("LINKER:--defsym=__stack_size__=${STACK_SIZE}")
 set(SPRINGBOK_LINKER_SCRIPT "$ENV{ROOTDIR}/sw/vec/springbok/matcha.ld" CACHE PATH "Springbok linker script path (default: matcha.ld)")
 set(BUILD_WITH_SPRINGBOK ON CACHE BOOL "Build the target with springbok BSP (default: ON)")
-add_subdirectory($ENV{ROOTDIR}/sw/vec/springbok springbok)
 
 #-------------------------------------------------------------------------------
 # IREE-specific settings
@@ -57,13 +56,23 @@
   add_definitions(-DIREE_USER_CONFIG_H="${SPRINGBOK_CONFIG_HEADER}")
 endif()
 
-# Springbok BSP-related setting
+# The project does a cmake hack here -- at the executable linkage stage, we
+# append the logging library (and springbok BSP). Any logging library update
+# (libspringbok.a or libnative_log.a) only gets rebuilt during executable
+# linkage, but not during library compilation.
+#
+# However, an explicit include path gets added here across all targets so the
+# header files can be found during compilation.
 if(${BUILD_WITH_SPRINGBOK})
+  # Springbok BSP-related setting
+  add_subdirectory($ENV{ROOTDIR}/sw/vec/springbok springbok)
   include(riscv_springbok)
   include_directories($ENV{ROOTDIR}/sw/vec/springbok/include)
 else()
-  # Add the LOG_X springbok macros with fprintf.
-  include_directories(native_log_include)
+  # Add the springbok printout support.
+  add_subdirectory(native_log)
+  include(riscv_native_log)
+  include_directories(native_log)
 endif()
 
 # Build IREE runtime libraries.
diff --git a/cmake/riscv_native_log.cmake b/cmake/riscv_native_log.cmake
new file mode 100644
index 0000000..5e6fd1a
--- /dev/null
+++ b/cmake/riscv_native_log.cmake
@@ -0,0 +1,17 @@
+# A native log support to be compatible with springbok simprint
+#
+# Connect the logging library with the executables
+
+if(NOT TARGET native_log)
+  message(FATAL_ERROR "Please include native_log target first")
+endif()
+
+function(add_executable executable)
+  cmake_parse_arguments(AE "ALIAS;IMPORTED" "" "" ${ARGN})
+  if(AE_ALIAS OR AE_IMPORTED)
+    _add_executable(${executable} ${ARGN})
+  else()
+    _add_executable(${executable} ${ARGN})
+    target_link_libraries(${executable} PRIVATE native_log)
+  endif()
+endfunction()
diff --git a/native_log/CMakeLists.txt b/native_log/CMakeLists.txt
new file mode 100644
index 0000000..0c6cbb8
--- /dev/null
+++ b/native_log/CMakeLists.txt
@@ -0,0 +1,23 @@
+add_library(native_log STATIC)
+
+target_sources(native_log
+  PRIVATE
+    springbok.h
+    "$ENV{ROOTDIR}/sw/vec/springbok/springbok.cpp"
+)
+
+target_include_directories(native_log
+ PUBLIC
+   "${CMAKE_CURRENT_SOURCE_DIR}"
+)
+
+target_compile_options(native_log
+  PRIVATE
+    "-Wall"
+)
+
+set_target_properties(
+  native_log
+  PROPERTIES
+  LINKER_LANGUAGE C
+)
diff --git a/native_log_include/springbok.h b/native_log/springbok.h
similarity index 79%
rename from native_log_include/springbok.h
rename to native_log/springbok.h
index b6ac85c..6872908 100644
--- a/native_log_include/springbok.h
+++ b/native_log/springbok.h
@@ -10,4 +10,12 @@
 #define LOG_WARN(msg, args...) fprintf(stdout, "[WARN] " msg "\n", ##args)
 #define LOG_ERROR(msg, args...) fprintf(stderr, "[ERROR] " msg "\n", ##args)
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+int float_to_str(const int len, char *buffer, const float value);
+#ifdef __cplusplus
+}
+#endif
+
 #endif  // SPRINGBOK_H