Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Linux user-space tools for memory tracking functionality
[palacios.git] / linux_usr / Makefile
1 #
2 # Build Static or Dynamic versions of the control utilities
3 #
4 #
5
6 # define this at the command-line or here
7 # to get dynamically linked versions
8 STATIC = 0
9
10 #
11 # Executables that implement core functionality
12 #
13 BASE_EXECS =    v3_mem \
14                 v3_mem_reset \
15                 v3_create \
16                 v3_create_bind \
17                 v3_free  \
18                 v3_launch \
19                 v3_stop   \
20                 v3_pause  \
21                 v3_continue \
22                 v3_core_move \
23                 v3_mem_move \
24                 v3_load \
25                 v3_save \
26                 v3_cons \
27                 v3_cons_sc \
28                 v3_stream \
29                 v3_monitor \
30                 v3_hypercall \
31                 v3_debug \
32                 v3_send \
33                 v3_receive \
34                 v3_pci \
35                 v3_guest_mem_access \
36                 v3_guest_mem_track
37
38
39 #
40 # Examples
41 #
42 EXAMPLE_EXECS = v3_user_host_dev_example \
43                 v3_os_debug \
44                 v3_user_keyed_stream_example \
45                 v3_user_keyed_stream_file \
46
47 #
48 # Currently experimental things
49 #
50 EXPERIMENTAL_EXECS =    v3_simulate  \
51                         v3_inject_ecc_scrubber_mce  \
52                         v3_top_inject \
53                         v3_env_inject \
54                         v3_syscall \
55                         v3_register_gm
56
57
58
59
60 #
61 # Things that have been built elsewhere - just for reference here
62 #
63 PRECOMPILED_EXECS = x0vncserver
64
65 COPIED_EXECS = v3_x0vncserver v3_x0gui
66
67 #
68 # Libraries that we need to build
69 #
70 LIBS = libv3_user_host_dev.a libv3_user_keyed_stream.a libv3_ctrl.a libv3_guest_mem.a libv3_fb.a
71
72 BUILD_EXECS = $(BASE_EXECS) $(EXAMPLE_EXECS) $(EXPERIMENTAL_EXECS) 
73 BUILD_LIBS = $(LIBS)
74
75
76 CFILES = $(BUILD_EXECS:%=%.c) $(BUILD_LIBS:lib%.a=%.c) 
77
78 ifeq ($(STATIC),1)
79   CFLAGS += -static 
80 endif
81
82 CFLAGS += -I../linux_module -I../palacios/include/
83
84 CC = gcc -g
85 AR = ar
86
87 all: $(BUILD_EXECS) $(BUILD_LIBS) $(COPIED_EXECS)
88
89
90 libv3_ctrl.a : v3_ctrl.c v3_ctrl.h
91         $(CC) $(CFLAGS) -I../linux_module -c v3_ctrl.c
92         $(AR) ruv libv3_ctrl.a v3_ctrl.o
93         rm -rf v3_ctrl.o 
94
95 #
96 # JSON library for use in some tools
97 #
98 libjson.a : cJSON.c cJSON.h
99         $(CC) $(CFLAGS) -c cJSON.c
100         $(AR) ruv libjson.a cJSON.o
101         rm -rf cJSON.o
102 #
103 # Most tools compile in a straightforward way
104 #
105 % :: %.c v3_ctrl.h libv3_ctrl.a
106         $(CC) $(CFLAGS) $< -lv3_ctrl -L. -o $@
107
108
109 #
110 # Console support requires curses
111 #
112 ifeq ($(STATIC),1)
113   CURSES_CFLAGS = -DNCURSES_STATIC
114   CURSES_LIBS = -lcurses                           
115 else
116   CURSES_CFLAGS = 
117   CURSES_LIBS = -lcurses 
118 endif
119
120 v3_cons: v3_cons.c
121         $(CC) $(CFLAGS) $(CURSES_CFLAGS) $< $(CURSES_LIBS) -o $@
122
123 v3_cons_sc: v3_cons_sc.c
124         $(CC) $(CFLAGS) $(CURSES_CFLAGS) $< $(CURSES_LIBS) -o $@
125
126 v3_create: v3_create.c ezxml.c libv3_ctrl.a 
127         $(CC) $(CFLAGS) $^ -lv3_ctrl -L. -o $@
128
129
130
131 #
132 # User host devices include a library and some examples
133 #
134 libv3_user_host_dev.a : v3_user_host_dev.c v3_user_host_dev.h v3_ctrl.h
135         $(CC) $(CFLAGS) -I../linux_module -c v3_user_host_dev.c 
136         $(AR) ruv libv3_user_host_dev.a v3_user_host_dev.o
137         rm -f v3_user_host_dev.o
138
139 v3_user_host_dev_example : v3_user_host_dev_example.c libv3_user_host_dev.a
140         $(CC) $(CFLAGS) $< -I../linux_module -L. -lv3_user_host_dev -o $@
141
142 v3_os_debug : v3_os_debug.c libv3_user_host_dev.a
143         $(CC) $(CFLAGS) $< -I../linux_module -L. -lv3_user_host_dev -o $@
144
145 #
146 # Guarded module registration for GEARS
147 #
148 v3_register_gm: v3_register_gm.c libjson.a libv3_ctrl.a v3_ctrl.h
149         $(CC) $(CFLAGS) $< -L. -lm -lv3_ctrl -ljson -o $@
150
151 #
152 # User keyed stream support includes a library and examples
153 #
154 #
155 libv3_user_keyed_stream.a :: v3_user_keyed_stream.c v3_user_keyed_stream.h v3_ctrl.h
156         $(CC) $(CFLAGS) -I../linux_module -c v3_user_keyed_stream.c 
157         $(AR) ruv libv3_user_keyed_stream.a v3_user_keyed_stream.o
158         rm -f v3_user_keyed_stream.o
159
160
161 v3_user_keyed_stream_example : v3_user_keyed_stream_example.c libv3_user_keyed_stream.a
162         $(CC) $(CFLAGS) $< -I../linux_module -L. -lv3_user_keyed_stream -o $@
163
164 v3_user_keyed_stream_file : v3_user_keyed_stream_file.c libv3_user_keyed_stream.a
165         $(CC) $(CFLAGS) $< -I../linux_module -L. -lv3_user_keyed_stream -o $@
166
167
168 # guest memory access by mmap 
169 # guest memory reference tracking via mem_track interface
170 # examples
171 #
172 libv3_guest_mem.a : v3_guest_mem.c v3_guest_mem.h v3_ctrl.h
173         $(CC) $(CFLAGS) -c v3_guest_mem.c 
174         $(AR) ruv libv3_guest_mem.a v3_guest_mem.o
175         rm -f v3_guest_mem.o
176
177 v3_guest_mem_access : v3_guest_mem_access.c libv3_guest_mem.a libv3_ctrl.a
178         $(CC) $(CFLAGS) $< -L. -lv3_guest_mem -lv3_ctrl -o $@
179
180 v3_guest_mem_track : v3_guest_mem_track.c libv3_guest_mem.a libv3_ctrl.a
181         $(CC) $(CFLAGS) $< -L. -lv3_guest_mem -lv3_ctrl -o $@
182
183
184 #
185 # FB (Graphics Console) user interface library (needed for VNC access
186 #  to GC - also wraps mouse and keyboard event delivery)
187 libv3_fb.a : v3_fb.c v3_fb.h
188         $(CC) $(CFLAGS) -I../linux_module -c v3_fb.c
189         $(AR) ruv libv3_fb.a v3_fb.o
190         rm -rf v3_fb.o 
191
192
193
194 #
195 # VNC support is compiled separately
196 #
197 v3_x0vncserver : 
198         @if [ -a x0vncserver ] ; \
199         then \
200                 cp x0vncserver v3_x0vncserver ; \
201         else \
202                 echo "In order to use v3_vncclient/server you must have" ; \
203                 echo "previously built or received palacios/linux_usr/x0vncserver" ; \
204                 echo "To learn more about this, look in palacios/linux_usr/vnc"; \
205         fi;
206
207 #
208 # GUI is compiled separately
209 #
210 v3_x0gui : 
211         @if [ -a gui/Palacios ] ; \
212         then \
213                 cp gui/Palacios v3_x0gui ; \
214         else \
215                 echo "In order to use v3_gui (the graphical interface)" ;\
216                 echo "you must first cd to palacios/linux_usr/gui" ;\
217                 echo "and compile it according to the README given there";\
218         fi;
219
220 #
221 # Cleanup and dependency builds are automated
222 #
223 clean:
224         rm -f $(BUILD_EXECS) $(BUILD_LIBS) $(COPIED_EXECS)
225
226 depend:
227         $(CC) -MM $(CFILES) -I../linux_module > .dependencies
228