Edit

kc3-lang/angle/src/common/system_utils.h

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2019-10-20 21:44:36
    Hash : f939cb63
    Message : Revert "Reland "Add more test_utils functions."" This reverts commit 7923e234bc458eda5936b8cb4f09fa19e28c0452. Reason for revert: Fails compilation on rollers: [2097/6048] SOLINK ./lib_angle_unittests__library.cr.so FAILED: lib_angle_unittests__library.cr.so lib_angle_unittests__library.cr.so.TOC lib.unstripped/lib_angle_unittests__library.cr.so python "../../build/toolchain/gcc_solink_wrapper.py" --readelf="../../third_party/android_ndk/toolch...(too long) ld.lld: error: undefined symbol: glCreateShader >>> referenced by shader_utils.cpp >>> angle_util_static/shader_utils.o:(CompileShader(unsigned int, char const*)) in archive obj/third_party/angle/libangle_util_static.a ld.lld: error: undefined symbol: glShaderSource Original change's description: > Reland "Add more test_utils functions." > > This is a reland of 5fcfcea4a9379633a83a67fc1d94938cb31f2a9c > > Re-land uses static linking with angle_util. The root cause > of the CFI error wasn't solved. Static linking works around > the problem by not using any export rules. > > Original change's description: > > Add more test_utils functions. > > > > Includes methods for creating temporary files, deleting files, and > > reading files into a string. Also renames GetPathSeparator to mention > > it's only used for environment variables. Includes a new virtual type > > angle::Process that will be used to implement cross-platform async > > Process launching for tests. Also includes a way to specify a custom > > crash handler callback. > > > > Also adds a few unit tests for the new functionality. They are disabled > > on Android because the functions are not needed by the new test runner. > > > > Bug: angleproject:3162 > > Change-Id: I3e2c2e9837608884c98379fa0f78c9ffbe158d73 > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1821940 > > Commit-Queue: Jamie Madill <jmadill@chromium.org> > > Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> > > Bug: chromium:1015810 > Bug: angleproject:3162 > Change-Id: I6a2c1e7b585a13ca846759f32da0777c00d7f7e6 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1869541 > Commit-Queue: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Jamie Madill <jmadill@chromium.org> TBR=ynovikov@chromium.org,jonahr@google.com,jmadill@chromium.org Change-Id: I975b2214411906cb981bffa04fa50e0a65ff8b4e No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: chromium:1015810, angleproject:3162 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1870811 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>

  • src/common/system_utils.h
  • //
    // Copyright 2014 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    
    // system_utils.h: declaration of OS-specific utility functions
    
    #ifndef COMMON_SYSTEM_UTILS_H_
    #define COMMON_SYSTEM_UTILS_H_
    
    #include "common/Optional.h"
    #include "common/angleutils.h"
    
    namespace angle
    {
    std::string GetExecutablePath();
    std::string GetExecutableDirectory();
    const char *GetSharedLibraryExtension();
    Optional<std::string> GetCWD();
    bool SetCWD(const char *dirName);
    bool SetEnvironmentVar(const char *variableName, const char *value);
    bool UnsetEnvironmentVar(const char *variableName);
    std::string GetEnvironmentVar(const char *variableName);
    const char *GetPathSeparator();
    bool PrependPathToEnvironmentVar(const char *variableName, const char *path);
    bool IsDirectory(const char *filename);
    
    // Get absolute time in seconds.  Use this function to get an absolute time with an unknown origin.
    double GetCurrentTime();
    
    // Run an application and get the output.  Gets a nullptr-terminated set of args to execute the
    // application with, and returns the stdout and stderr outputs as well as the exit code.
    //
    // Pass nullptr for stdoutOut/stderrOut if you don't need to capture. exitCodeOut is required.
    //
    // Returns false if it fails to actually execute the application.
    bool RunApp(const std::vector<const char *> &args,
                std::string *stdoutOut,
                std::string *stderrOut,
                int *exitCodeOut);
    
    class Library : angle::NonCopyable
    {
      public:
        virtual ~Library() {}
        virtual void *getSymbol(const char *symbolName) = 0;
        virtual void *getNative() const                 = 0;
    
        template <typename FuncT>
        void getAs(const char *symbolName, FuncT *funcOut)
        {
            *funcOut = reinterpret_cast<FuncT>(getSymbol(symbolName));
        }
    };
    
    // Use SYSTEM_DIR to bypass loading ANGLE libraries with the same name as system DLLS
    // (e.g. opengl32.dll)
    enum class SearchType
    {
        ApplicationDir,
        SystemDir
    };
    
    Library *OpenSharedLibrary(const char *libraryName, SearchType searchType);
    
    // Returns true if the process is currently being debugged.
    bool IsDebuggerAttached();
    
    // Calls system APIs to break into the debugger.
    void BreakDebugger();
    }  // namespace angle
    
    #endif  // COMMON_SYSTEM_UTILS_H_