summaryrefslogtreecommitdiff
path: root/source/core/slang-cpp-compiler.h
blob: 644d3d85b5b9170ea9b7e56daee531312874e9bc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#ifndef SLANG_CPP_COMPILER_H
#define SLANG_CPP_COMPILER_H

#include "slang-common.h"
#include "slang-string.h"

namespace Slang
{

class CPPCompiler
{
public:
    enum class Type
    {
        VisualStudio,
        GCC,
        Clang,
    };

    struct Version
    {
        Type type;      ///< The compiler type
        Int major;      ///< The major version number
        Int minor;      ///< The minor version number
    };
};

struct CPPCompileOptions
{
    enum class OptimizationLevel
    {
        Normal,             ///< Normal optimization
        Debug,              ///< General has no optimizations
    };

    enum DebugInfoType
    {
        None,               ///< Binary has no debug information
        Maximum,            ///< Has maximum debug information
        Normal,             ///< Has normal debug information
    };
    enum TargetType
    {
        Executable,         ///< Produce an executable
        SharedLibrary,      ///< Produce a shared library object/dll 
        Object,             ///< Produce an object file
    };

    struct Define
    {
        String nameWithSig;             ///< If macro takes parameters include in brackets
        String value;
    };

    OptimizationLevel optimizationLevel = OptimizationLevel::Debug;
    DebugInfoType debugInfoType = DebugInfoType::Normal;
    TargetType targetType = TargetType::Executable;

    String modulePath;      ///< The path/name of the output module. Should not have the extension, as that will be added for each of the target types

    List<Define> defines;

    List<String> sourceFiles;

    List<String> includePaths;
    List<String> libraryPaths;
};

}

#endif