Fix the usage of command line arguments for reference_model

- Users have to specify the --test_desc filename argument for using
  reference_model
- Update the initTestDesc function to allow users to use pure
  command line arguments to specify all test descriptions
- Backported a partial path fix for desc.json from the following
  - https://review.mlplatform.org/c/tosa/reference_model/+/10831

Signed-off-by: Jerry Ge <jerry.ge@arm.com>
Change-Id: Ia23d4ba550aace6c3cd202e21bc8fbe6e0be1cf0
diff --git a/reference_model/src/main.cpp b/reference_model/src/main.cpp
index 3b84ff8..a0b97c1 100644
--- a/reference_model/src/main.cpp
+++ b/reference_model/src/main.cpp
@@ -1,5 +1,5 @@
 
-// Copyright (c) 2020-2023, ARM Limited.
+// Copyright (c) 2020-2024, ARM Limited.
 //
 //    Licensed under the Apache License, Version 2.0 (the "License");
 //    you may not use this file except in compliance with the License.
@@ -573,14 +573,30 @@
     }
     else
     {
-        WARNING("Cannot open input file: %s", g_func_config.test_desc.c_str());
-        return 1;
+        // Users can also specify description info using command line arguments
+        // If they miss any info from command line AND no test_desc is provided,
+        // return error code
+        if (g_func_config.tosa_file.empty() || g_func_config.ifm_name.empty() || g_func_config.ifm_file.empty() ||
+            g_func_config.ofm_name.empty() || g_func_config.ofm_file.empty())
+        {
+            WARNING("Cannot open input file: %s", g_func_config.test_desc.c_str());
+            return 1;
+        }
     }
 
     // Overwrite flatbuffer_dir/output_dir with dirname(g_func_config.test_desc) if it's not specified.
     if (g_func_config.flatbuffer_dir.empty() || g_func_config.output_dir.empty())
     {
-        std::string test_dir = g_func_config.test_desc.substr(0, g_func_config.test_desc.find_last_of("/\\"));
+        auto slash_pos = g_func_config.test_desc.find_last_of("/\\");
+        std::string test_dir;
+        if (slash_pos != std::string::npos)
+        {
+            test_dir = g_func_config.test_desc.substr(0, slash_pos);
+        }
+        else
+        {
+            test_dir = std::string(".");
+        }
         if (g_func_config.flatbuffer_dir.empty())
         {
             g_func_config.flatbuffer_dir = test_dir;