blob: f035ff67b1aeaadcdd10605372ffb6cb2e1bddfa [file] [log] [blame]
Jim Cownie33f7b242014-04-09 15:40:23 +00001//===----------------------------------------------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.txt for details.
7//
8//===----------------------------------------------------------------------===//
9
10
11#ifndef OFFLOAD_ENV_H_INCLUDED
12#define OFFLOAD_ENV_H_INCLUDED
13
14#include <list>
15
16// data structure and routines to parse MIC user environment and pass to MIC
17
18enum MicEnvVarKind
19{
20 c_no_mic, // not MIC env var
21 c_mic_var, // for <mic-prefix>_<var>
22 c_mic_card_var, // for <mic-prefix>_<card-number>_<var>
23 c_mic_card_env // for <mic-prefix>_<card-number>_ENV
24};
25
26struct MicEnvVar {
27public:
28 MicEnvVar() : prefix(0) {}
29 ~MicEnvVar();
30
31 void analyze_env_var(char *env_var_string);
32 char** create_environ_for_card(int card_num);
33 MicEnvVarKind get_env_var_kind(
34 char *env_var_string,
35 int *card_number,
36 char **env_var_name,
37 int *env_var_name_length,
38 char **env_var_def
39 );
40 void add_env_var(
41 int card_number,
42 char *env_var_name,
43 int env_var_name_length,
44 char *env_var_def
45 );
46
47 void set_prefix(const char *pref) {
48 prefix = (pref && *pref != '\0') ? pref : 0;
49 }
50
51 struct VarValue {
52 public:
53 char* env_var;
54 int length;
55 char* env_var_value;
56
57 VarValue(char* var, int ln, char* value)
58 {
59 env_var = var;
60 length = ln;
61 env_var_value = value;
62 }
63 ~VarValue();
64 };
65
66 struct CardEnvVars {
67 public:
68
69 int card_number;
70 std::list<struct VarValue*> env_vars;
71
72 CardEnvVars() { card_number = any_card; }
73 CardEnvVars(int num) { card_number = num; }
74 ~CardEnvVars();
75
76 void add_new_env_var(int number, char *env_var, int length,
77 char *env_var_value);
78 VarValue* find_var(char* env_var_name, int env_var_name_length);
79 };
80 static const int any_card;
81
82private:
83 void mic_parse_env_var_list(int card_number, char *env_var_def);
84 CardEnvVars* get_card(int number);
85
86 const char *prefix;
87 std::list<struct CardEnvVars *> card_spec_list;
88 CardEnvVars common_vars;
89};
90
91#endif // OFFLOAD_ENV_H_INCLUDED