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.


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