1abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton//===-- OptionGroupPlatform.h -----------------------------------*- C++ -*-===//
2abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton//
3abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton//                     The LLVM Compiler Infrastructure
4abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton//
5abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton// This file is distributed under the University of Illinois Open Source
6abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton// License. See LICENSE.TXT for details.
7abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton//
8abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton//===----------------------------------------------------------------------===//
9abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
10abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton#ifndef liblldb_OptionGroupPlatform_h_
11abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton#define liblldb_OptionGroupPlatform_h_
12abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
13abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton// C Includes
14abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton// C++ Includes
15abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton// Other libraries and framework includes
16abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton// Project includes
17604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton#include "lldb/Core/ConstString.h"
18abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton#include "lldb/Interpreter/Options.h"
19abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
20abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Claytonnamespace lldb_private {
21abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
22abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton//-------------------------------------------------------------------------
23abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton// PlatformOptionGroup
24abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton//
25abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton// Make platform options available to any commands that need the settings.
26abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton//-------------------------------------------------------------------------
27abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Claytonclass OptionGroupPlatform : public OptionGroup
28abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton{
29abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Claytonpublic:
30abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
31abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    OptionGroupPlatform (bool include_platform_option) :
32abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton        OptionGroup(),
33abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton        m_platform_name (),
34604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton        m_sdk_sysroot (),
35abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton        m_os_version_major (UINT32_MAX),
36abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton        m_os_version_minor (UINT32_MAX),
37abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton        m_os_version_update (UINT32_MAX),
38abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton        m_include_platform_option (include_platform_option)
39abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    {
40abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    }
41abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
42abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    virtual
43abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    ~OptionGroupPlatform ()
44abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    {
45abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    }
46abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
47abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    virtual uint32_t
48abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    GetNumDefinitions ();
49abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
50abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    virtual const OptionDefinition*
51abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    GetDefinitions ();
52abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
53abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    virtual Error
54abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    SetOptionValue (CommandInterpreter &interpreter,
55abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton                    uint32_t option_idx,
56abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton                    const char *option_value);
57abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
58abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    virtual void
59abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    OptionParsingStarting (CommandInterpreter &interpreter);
60abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
61abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    lldb::PlatformSP
62b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton    CreatePlatformWithOptions (CommandInterpreter &interpreter,
63b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton                               const ArchSpec &arch,
64abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton                               bool make_selected,
65b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton                               Error& error,
66b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton                               ArchSpec &platform_arch) const;
67abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
68abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    bool
69abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    PlatformWasSpecified () const
70abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    {
71abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton        return !m_platform_name.empty();
72abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    }
73abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
74abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    void
75abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    SetPlatformName (const char *platform_name)
76abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    {
77abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton        if (platform_name && platform_name[0])
78abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton            m_platform_name.assign (platform_name);
79abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton        else
80abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton            m_platform_name.clear();
81abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    }
82604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton
83604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton    const ConstString &
84604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton    GetSDKRootDirectory () const
85604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton    {
86604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton        return m_sdk_sysroot;
87604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton    }
88604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton
89604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton    void
90604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton    SetSDKRootDirectory (const ConstString &sdk_root_directory)
91604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton    {
92604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton        m_sdk_sysroot = sdk_root_directory;
93604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton    }
94604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton
95604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton    const ConstString &
96604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton    GetSDKBuild () const
97604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton    {
98604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton        return m_sdk_build;
99604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton    }
100604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton
101604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton    void
102604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton    SetSDKBuild (const ConstString &sdk_build)
103604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton    {
104604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton        m_sdk_build = sdk_build;
105604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton    }
106604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton
107abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
108abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Claytonprotected:
109abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    std::string m_platform_name;
110604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton    ConstString m_sdk_sysroot;
111604f0d336f0d9390a0405022ef660ae922ef29bfGreg Clayton    ConstString m_sdk_build;
112abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    uint32_t m_os_version_major;
113abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    uint32_t m_os_version_minor;
114abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    uint32_t m_os_version_update;
115abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    bool m_include_platform_option;
116abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton};
117abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
118abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton} // namespace lldb_private
119abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
120abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton#endif  // liblldb_OptionGroupPlatform_h_
121