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.


Enhancements to text mode console clients
[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                         v3_devfile_shadow \
59
60 NONDEFAULT_EXECS = v3_cons_tc  # needs to have termkey installed
61
62
63
64
65 #
66 # Things that have been built elsewhere - just for reference here
67 #
68 PRECOMPILED_EXECS = x0vncserver
69
70 COPIED_EXECS = v3_x0vncserver v3_x0gui
71
72 #
73 # Libraries that we need to build
74 #
75 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
76
77 BUILD_EXECS = $(BASE_EXECS) $(EXAMPLE_EXECS) $(EXPERIMENTAL_EXECS) 
78 BUILD_LIBS = $(LIBS)
79
80
81 CFILES = $(BUILD_EXECS:%=%.c) $(BUILD_LIBS:lib%.a=%.c) 
82
83 ifeq ($(STATIC),1)
84   CFLAGS += -static 
85 endif
86
87 CFLAGS += -I../linux_module -I../palacios/include/
88
89 CC = gcc -g
90 AR = ar
91
92 all: $(BUILD_EXECS) $(BUILD_LIBS) $(COPIED_EXECS)
93
94
95 libv3_ctrl.a : v3_ctrl.c v3_ctrl.h
96         $(CC) $(CFLAGS) -I../linux_module -c v3_ctrl.c
97         $(AR) ruv libv3_ctrl.a v3_ctrl.o
98         rm -rf v3_ctrl.o 
99
100 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 
101         $(CC) $(CFLAGS) -I../linux_module -fPIC -c v3_io_chan.c
102         $(CC) $(CFLAGS) -I../linux_module -fPIC -c v3_user_host_dev.c
103         $(CC) -shared -o $@ v3_io_chan.o v3_user_host_dev.o
104         -echo "Attempting install into system paths"
105         -cp $@ /usr/lib64/
106         -cp v3_io_chan.h /usr/include/
107 #
108 # JSON library for use in some tools
109 #
110 libjson.a : cJSON.c cJSON.h
111         $(CC) $(CFLAGS) -c cJSON.c
112         $(AR) ruv libjson.a cJSON.o
113         rm -rf cJSON.o
114 #
115 # Most tools compile in a straightforward way
116 #
117 % :: %.c v3_ctrl.h libv3_ctrl.a
118         $(CC) $(CFLAGS) $< -lv3_ctrl -L. -o $@
119
120
121 #
122 # Console support requires curses
123 #
124 ifeq ($(STATIC),1)
125   CURSES_CFLAGS = -DNCURSES_STATIC
126   CURSES_LIBS = -lcurses                           
127 else
128   CURSES_CFLAGS = 
129   CURSES_LIBS = -lcurses 
130 endif
131
132 v3_cons: v3_cons.c
133         $(CC) $(CFLAGS) $(CURSES_CFLAGS) $< $(CURSES_LIBS) -o $@
134
135 v3_cons_sc: v3_cons_sc.c
136         $(CC) $(CFLAGS) $(CURSES_CFLAGS) $< $(CURSES_LIBS) -o $@
137
138 v3_cons_tc: v3_cons_tc.c
139         $(CC) $(CFLAGS) $(CURSES_CFLAGS) $< $(CURSES_LIBS) -L. -ltermkey -lcurses -o $@
140
141
142 v3_create: v3_create.c ezxml.c libv3_ctrl.a 
143         $(CC) $(CFLAGS) $^ -lv3_ctrl -L. -o $@
144
145
146
147 #
148 # User host devices include a library and some examples
149 #
150 libv3_user_host_dev.a : v3_user_host_dev.c v3_user_host_dev.h v3_ctrl.h
151         $(CC) $(CFLAGS) -I../linux_module -c v3_user_host_dev.c 
152         $(AR) ruv libv3_user_host_dev.a v3_user_host_dev.o
153         rm -f v3_user_host_dev.o
154
155 v3_user_host_dev_example : v3_user_host_dev_example.c libv3_user_host_dev.a
156         $(CC) $(CFLAGS) $< -I../linux_module -L. -lv3_user_host_dev -o $@
157
158 v3_os_debug : v3_os_debug.c libv3_user_host_dev.a
159         $(CC) $(CFLAGS) $< -I../linux_module -L. -lv3_user_host_dev -o $@
160
161 #
162 # Guarded module registration for GEARS
163 #
164 v3_register_gm: v3_register_gm.c libjson.a libv3_ctrl.a v3_ctrl.h
165         $(CC) $(CFLAGS) $< -L. -lv3_ctrl -ljson -lm -o $@
166
167 #
168 # User keyed stream support includes a library and examples
169 #
170 #
171 libv3_user_keyed_stream.a :: v3_user_keyed_stream.c v3_user_keyed_stream.h v3_ctrl.h
172         $(CC) $(CFLAGS) -I../linux_module -c v3_user_keyed_stream.c 
173         $(AR) ruv libv3_user_keyed_stream.a v3_user_keyed_stream.o
174         rm -f v3_user_keyed_stream.o
175
176
177 v3_user_keyed_stream_example : v3_user_keyed_stream_example.c libv3_user_keyed_stream.a
178         $(CC) $(CFLAGS) $< -I../linux_module -L. -lv3_user_keyed_stream -o $@
179
180 v3_user_keyed_stream_file : v3_user_keyed_stream_file.c libv3_user_keyed_stream.a
181         $(CC) $(CFLAGS) $< -I../linux_module -L. -lv3_user_keyed_stream -o $@
182
183
184 # guest memory access by mmap 
185 # guest memory reference tracking via mem_track interface
186 # examples
187 #
188 libv3_guest_mem.a : v3_guest_mem.c v3_guest_mem.h v3_ctrl.h
189         $(CC) $(CFLAGS) -c v3_guest_mem.c 
190         $(AR) ruv libv3_guest_mem.a v3_guest_mem.o
191         rm -f v3_guest_mem.o
192
193 v3_guest_mem_access : v3_guest_mem_access.c libv3_guest_mem.a libv3_ctrl.a
194         $(CC) $(CFLAGS) $< -L. -lv3_guest_mem -lv3_ctrl -o $@
195
196 v3_guest_mem_track : v3_guest_mem_track.c libv3_guest_mem.a libv3_ctrl.a
197         $(CC) $(CFLAGS) $< -L. -lv3_guest_mem -lv3_ctrl -o $@
198
199
200 # Use this for shadow process
201 v3_devfile_shadow : v3_devfile_shadow.c libv3_guest_mem.a libv3_ctrl.a
202         $(CC) $(CFLAGS) $< -L. -lv3_guest_mem -lv3_ctrl -o $@
203
204 #
205 # User DVFS control includse a library and a caller
206 #
207 libv3_user_dvfs.a : v3_user_dvfs.c v3_user_dvfs.h v3_ctrl.h
208         $(CC) $(CFLAGS) -I../linux_module -c v3_user_dvfs.c 
209         $(AR) ruv libv3_user_dvfs.a v3_user_dvfs.o
210         rm -f v3_user_dvfs.o
211
212 v3_dvfs : v3_dvfs.c libv3_user_dvfs.a libv3_ctrl.a
213         $(CC) $(CFLAGS) $< -I../linux_module -L. -lv3_user_dvfs -lv3_ctrl -o $@
214
215
216 #
217 # FB (Graphics Console) user interface library (needed for VNC access
218 #  to GC - also wraps mouse and keyboard event delivery)
219 libv3_fb.a : v3_fb.c v3_fb.h
220         $(CC) $(CFLAGS) -I../linux_module -c v3_fb.c
221         $(AR) ruv libv3_fb.a v3_fb.o
222         rm -rf v3_fb.o 
223
224
225
226 #
227 # VNC support is compiled separately
228 #
229 v3_x0vncserver : 
230         @if [ -e x0vncserver ] ; \
231         then \
232                 cp x0vncserver v3_x0vncserver ; \
233         else \
234                 echo "In order to use v3_vncclient/server you must have" ; \
235                 echo "previously built or received palacios/linux_usr/x0vncserver" ; \
236                 echo "To learn more about this, look in palacios/linux_usr/vnc"; \
237         fi;
238
239 #
240 # GUI is compiled separately
241 #
242 v3_x0gui : 
243         @if [ -e gui/Palacios ] ; \
244         then \
245                 cp gui/Palacios v3_x0gui ; \
246         else \
247                 echo "In order to use v3_gui (the graphical interface)" ;\
248                 echo "you must first cd to palacios/linux_usr/gui" ;\
249                 echo "and compile it according to the README given there";\
250         fi;
251
252 #
253 # Cleanup and dependency builds are automated
254 #
255 clean:
256         rm -f $(BUILD_EXECS) $(BUILD_LIBS) $(COPIED_EXECS)
257
258 depend:
259         $(CC) -MM $(CFILES) -I../linux_module > .dependencies
260