1 //===-- HostInfo.h ----------------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef lldb_Host_HostInfo_h_
10 #define lldb_Host_HostInfo_h_
11 
12 /// \class HostInfo HostInfo.h "lldb/Host/HostInfo.h"
13 /// A class that provides host computer information.
14 ///
15 /// HostInfo is a class that answers information about the host operating
16 /// system.  Note that HostInfo is NOT intended to be used to manipulate or
17 /// control the operating system.
18 ///
19 /// HostInfo is implemented in an OS-specific class (for example
20 /// HostInfoWindows) in a separate file, and then typedefed to HostInfo here.
21 /// Users of the class reference it as HostInfo::method().
22 ///
23 /// Not all hosts provide the same functionality.  It is important that
24 /// methods only be implemented at the lowest level at which they make sense.
25 /// It should be up to the clients of the class to ensure that they not
26 /// attempt to call a method which doesn't make sense for a particular
27 /// platform.  For example, when implementing a method that only makes sense
28 /// on a posix-compliant system, implement it on HostInfoPosix, and not on
29 /// HostInfoBase with a default implementation.  This way, users of HostInfo
30 /// are required to think about the implications of calling a particular
31 /// method and if used in a context where the method doesn't make sense, will
32 /// generate a compiler error.
33 ///
34 
35 #if defined(_WIN32)
36 #include "lldb/Host/windows/HostInfoWindows.h"
37 #define HOST_INFO_TYPE HostInfoWindows
38 #elif defined(__linux__)
39 #if defined(__ANDROID__)
40 #include "lldb/Host/android/HostInfoAndroid.h"
41 #define HOST_INFO_TYPE HostInfoAndroid
42 #else
43 #include "lldb/Host/linux/HostInfoLinux.h"
44 #define HOST_INFO_TYPE HostInfoLinux
45 #endif
46 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
47 #include "lldb/Host/freebsd/HostInfoFreeBSD.h"
48 #define HOST_INFO_TYPE HostInfoFreeBSD
49 #elif defined(__NetBSD__)
50 #include "lldb/Host/netbsd/HostInfoNetBSD.h"
51 #define HOST_INFO_TYPE HostInfoNetBSD
52 #elif defined(__OpenBSD__)
53 #include "lldb/Host/openbsd/HostInfoOpenBSD.h"
54 #define HOST_INFO_TYPE HostInfoOpenBSD
55 #elif defined(__APPLE__)
56 #include "lldb/Host/macosx/HostInfoMacOSX.h"
57 #define HOST_INFO_TYPE HostInfoMacOSX
58 #else
59 #include "lldb/Host/posix/HostInfoPosix.h"
60 #define HOST_INFO_TYPE HostInfoPosix
61 #endif
62 
63 namespace lldb_private {
64 typedef HOST_INFO_TYPE HostInfo;
65 }
66 
67 #undef HOST_INFO_TYPE
68 
69 #endif
70