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.


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