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.


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