PothosUtilGenerateSIMDDispatchers.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. // Copyright (c) 2020 Nicholas Corgan
  2. // SPDX-License-Identifier: BSL-1.0
  3. #include "PothosUtil.hpp"
  4. #include <Pothos/Plugin.hpp>
  5. #include <Pothos/Proxy.hpp>
  6. #include <Poco/File.h>
  7. #include <Poco/StringTokenizer.h>
  8. #include <fstream>
  9. #include <iostream>
  10. #include <string>
  11. #include <vector>
  12. /***********************************************************************
  13. * Generate a C++ header with SIMD dispatchers for a given Pothos module
  14. **********************************************************************/
  15. void PothosUtilBase::generateSIMDDispatchers(const std::string&, const std::string& jsonPath)
  16. {
  17. auto env = Pothos::ProxyEnvironment::make("managed");
  18. auto simdDispatcher = env->findProxy("Pothos/Util/SIMDDispatcher");
  19. const auto simdArchesStr = this->config().getString("simdArches");
  20. const auto outputFilePath = this->config().getString("outputFile");
  21. Poco::StringTokenizer simdArchesTokenizer(simdArchesStr, ",", Poco::StringTokenizer::TOK_TRIM);
  22. std::vector<std::string> simdArches(simdArchesTokenizer.begin(), simdArchesTokenizer.end());
  23. const auto fileSize = Poco::File(jsonPath).getSize();
  24. std::ifstream ifile(jsonPath.c_str(), std::ios::in);
  25. std::string jsonInput;
  26. jsonInput.resize(fileSize);
  27. ifile.read((char*)jsonInput.data(), fileSize);
  28. const auto outputHeaderString = simdDispatcher.call<std::string>("generateAndDumpHeader", jsonInput, simdArches);
  29. std::ofstream ofile(outputFilePath.c_str(), std::ios::out);
  30. ofile << outputHeaderString;
  31. }