armv8: Improve readability of register restoration code
[barrelfish] / platforms / Hakefile
1 --------------------------------------------------------------------------
2 -- Copyright (c) 2015-2016, 2019 ETH Zurich.
3 -- All rights reserved.
4 --
5 -- This file is distributed under the terms in the attached LICENSE file.
6 -- If you do not find this file, copies can be found by writing to:
7 -- ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
8 --
9 -- Hakefile for /platforms/
10 --
11 --------------------------------------------------------------------------
12
13 let bin_rcce_lu = [ "/sbin/" ++ f | f <- [
14                         "rcce_lu_A1",
15                         "rcce_lu_A2",
16                         "rcce_lu_A4",
17                         "rcce_lu_A8",
18                         "rcce_lu_A16",
19                         "rcce_lu_A32",
20                         "rcce_lu_A64" ]]
21
22     bin_rcce_bt = [ "/sbin/" ++ f | f <- [
23                         "rcce_bt_A1",
24                         "rcce_bt_A4",
25                         "rcce_bt_A9",
26                         "rcce_bt_A16",
27                         "rcce_bt_A25",
28                         "rcce_bt_A36" ]]
29
30     tests_common = [ "/sbin/" ++ f | f <- [
31                         "fputest",
32                         "hellotest",
33                         "idctest",
34                         "memtest",
35                         "nkmtest_all",
36                         "nkmtest_map_unmap",
37                         "nkmtest_modify_flags",
38                         "nkmtest_map_offset",
39                         "nkmtest_vnode_inherit",
40                         "nkmtest_vnode_inherit_no_delete",
41                         "schedtest",
42                         "test_retype",
43                         "test_rootcn_resize",
44                         "test_create_l1l2_cnodes",
45                         "test_remote_retype",
46                         "test_remote_delete",
47                         "test_remote_revoke",
48                         "testerror",
49                         "yield_test",
50                         "skb_cap_storage"
51                     ] ]
52
53     tests_x86 = [ "/sbin/" ++ f | f <- [
54                         "tests/luatest",
55                         "tests/numatest" ] ] ++ tests_common
56
57     tests_x86_64 = [ "/sbin/" ++ f | f <- [
58                         "arrakis_hellotest",
59                         "ata_rw28_test",
60                         "bomp_cpu_bound",
61                         "bomp_cpu_bound_progress",
62                         "bomp_sync",
63                         "bomp_sync_progress",
64                         "bomp_test",
65                         "bulk_shm",
66                         "cryptotest",
67                         "fread_test",
68                         "fscanf_test",
69                         "mdbtest_addr_zero",
70                         "mdbtest_range_query",
71                         "mem_affinity",
72                         "memtest_pmap_array",
73                         "memtest_pmap_array_mcn",
74                         "memtest_pmap_list",
75                         "memtest_pmap_list_mcn",
76                         "multihoptest",
77                         "net-test",
78                         "net_openport_test",
79                         "nkmtest_invalid_mappings",
80                         "perfmontest",
81                         "phoenix_kmeans",
82                         "socketpipetest",
83                         "spantest",
84                         "spin",
85                         "testconcurrent",
86                         "testdesc",
87                         "testdesc-child",
88                         "tests/cxxtest",
89                         "tests/ep_basic",
90                         "tests/dma_test",
91                         "tests/tftpclient",
92                         "tests/xphi_nameservice_test",
93                         "thcidctest",
94                         "thcminitest",
95                         "thctest",
96                         "timer_test",
97                         "tlstest",
98                         "tweedtest",
99                         "xcorecap",
100                         "xcorecapserv" ] ] ++ tests_x86
101
102
103     tests_k1om = [ "/sbin/" ++ f | f <- [
104                         "tests/dma_test",
105                         "tests/xeon_phi_inter",
106                         "tests/xeon_phi_test",
107                         "tests/xphi_nameservice_test" ] ] ++ tests_x86
108
109     bench_common = [ "/sbin/" ++ f | f <- [
110                         "channel_cost_bench",
111                         "flounder_stubs_buffer_bench",
112                         "flounder_stubs_empty_bench",
113                         "flounder_stubs_payload_bench",
114                         "xcorecapbench" ]]
115
116     bench_x86 =  [ "/sbin/" ++ f | f <- [
117                       "multihop_latency_bench",
118                       "net_openport_test",
119                       "perfmontest",
120                       "thc_v_flounder_empty",
121                       "timer_test",
122                       "udp_throughput",
123                       "ump_exchange",
124                       "ump_latency",
125                       "ump_latency_cache",
126                       "ump_receive",
127                       "ump_send",
128                       "ump_throughput" ]]
129
130     bench_x86_64 = bench_x86 ++ bin_rcce_bt ++ bin_rcce_lu ++
131                    [ "/sbin/" ++ f | f <- [
132                         "ahci_bench",
133                         "apicdrift_bench",
134                         "benchmarks/bomp_mm",
135                         "benchmarks/dma_bench",
136                         "benchmarks/vspace_map",
137                         "benchmarks/xomp_share",
138                         "benchmarks/xomp_spawn",
139                         "benchmarks/xomp_work",
140                         "benchmarks/xphi_ump_bench",
141                         "bomp_benchmark_cg",
142                         "bomp_benchmark_ft",
143                         "bomp_benchmark_is",
144                         "bulk_transfer_passthrough",
145                         "bulkbench",
146                         "bulkbench_micro_echo",
147                         "bulkbench_micro_rtt",
148                         "bulkbench_micro_throughput",
149                         "cowbench",
150                         "distops_standalone_runner",
151                         "bench_delete_foreign_copy",
152                         "bench_delete_last_copy",
153                         "bench_delete_last_copy_remote",
154                         "bench_delete_cnode_last_copy",
155                         "bench_delete_cnode_last_copy_2",
156                         "bench_delete_local_copy",
157                         "bench_revoke_no_remote",
158                         "bench_revoke_no_remote_standalone",
159                         "bench_revoke_remote_copy",
160                         "bench_revoke_with_remote_copies",
161                         "bench_retype_no_remote",
162                         "bench_retype_w_local_descendants",
163                         "bench_retype_with_remote_copies",
164                         "bench_noop",
165                         "bench_noop_invocation",
166                         "elb_app",
167                         "elb_app_tcp",
168                         "lrpc_bench",
169                         "mdb_bench_noparent",
170                         "mdb_bench_linkedlist",
171                         "netthroughput",
172                         "phases_bench",
173                         "phases_scale_bench",
174                         "placement_bench",
175                         "rcce_pingpong",
176                         "shared_mem_clock_bench",
177                         "tsc_bench" ]]
178
179     bench_k1om = [ "/sbin/" ++ f | f <- [
180                         "benchmarks/bomp_mm",
181                         "benchmarks/dma_bench",
182                         "benchmarks/xomp_share",
183                         "benchmarks/xomp_spawn",
184                         "benchmarks/xomp_work",
185                         "benchmarks/xphi_ump_bench",
186                         "benchmarks/xphi_xump_bench" ] ] ++ bench_x86
187
188     -- Example program modules
189     modules_xmpl = [ "/sbin/" ++ f | f <- [
190         --"examples/xmpl-call-response",
191         "examples/xmpl-cow",
192         "examples/xmpl-hello",
193         --"examples/xmpl-msg",
194         --"examples/xmpl-rpc_msg",
195         --"examples/xmpl-rpc_rpc",
196         "examples/xmpl-span",
197         "examples/xmpl-spawn",
198         "examples/xmpl-thc-binding",
199         --"examples/xmpl-thc-lang",
200         "examples/xmpl-thread",
201         "examples/xmpl-thread-min",
202         "examples/xmpl-trace" ] ]
203
204     -- Default list of modules to build/install for all enabled architectures
205     modules_common = [ "/sbin/" ++ f | f <- [
206                           "init",
207                           "skb",
208                           "spawnd",
209                           "proc_mgmt",
210                           "startd",
211                           "mem_serv",
212                           "monitor",
213                           "ramfsd" ]]
214
215     -- List of modules that are arch-independent and always built
216     modules_generic = [
217         "/eclipseclp_ramfs.cpio.gz",
218         "/skb_ramfs.cpio.gz" ]
219
220     -- x86_64-specific modules to build by default
221     -- this should shrink as targets are ported and move into the generic list above
222     modules_x86_64  = [ "/sbin/" ++ f | f <- [
223                            "elver",
224                            "cpu",
225                            "acpi",
226                            "ahcid",
227                            "angler",
228                            "arrakismon",
229                            "bcached",
230                            "bench",
231                            "bfscope",
232                            "bfscope_nfs",
233                            "block_server",
234                            "block_server_client",
235                            "boot_perfmon",
236                            "bs_user",
237                            "bulk_shm",
238                            "corectrl",
239                            "datagatherer",
240                            "dma_mgr",
241                            "e1000n",
242                            "e10k",
243                            "echoserver",
244                            "fbdemo",
245                            "fish",
246                            "hpet",
247                            "hwmodel/offload",
248                            "ioat_dma",
249                            "iommu",
250                            "kaluga",
251                            "lo_queue",
252                            "lpc_kbd",
253                            "lpc_timer",
254                            "lshw",
255                            "mem_serv_dist",
256                            "netd",
257                            "NGD_mng",
258                            "pci",
259                            "routing_setup",
260                            "rtl8029",
261                            "serial_pc16550d",
262                            "sfn5122f",
263                            "slideshow",
264                            "vbe",
265                            "virtio_blk",
266                            "virtio_blk_host",
267                            "vmkitmon",
268                            "vnode_map_test",
269                            "webserver",
270                            "xeon_phi",
271                            "hpet",
272                            "xeon_phi_mgr",
273                            "mlx4",
274                            "net_sockets_server"
275                            ]] ++ modules_common
276
277     -- the following are broken in the newidc system
278     modules_x86_64_broken  = [ "/sbin/" ++ f | f <- [
279                                   "barriers",
280                                   "ipi_bench",
281                                   "ring_barriers",
282                                   "ssf_bcast",
283                                   "lamport_bcast" ]]
284
285
286     modules_k1om = [ "/sbin/" ++ f | f <- [
287                         "weever",
288                         "cpu",
289                         "xeon_phi",
290                         "hwmodel/offload",
291                         "corectrl" ] ] ++ modules_common
292
293     -- ARMv7-a Pandaboard modules
294     pandaModules = [ "/sbin/" ++ f | f <- [
295                         "cpu_omap44xx",
296                         "init",
297                         "mem_serv",
298                         "monitor",
299                         "proc_mgmt",
300                         "ramfsd",
301                         "spawnd",
302                         "startd",
303                         "skb",
304                         "memtest",
305                         "kaluga",
306                         "fish",
307                         "sdmatest",
308                         "sdma_bench",
309                         "bulk_sdma",
310                         "usb_manager",
311                         "usb_keyboard",
312                         "serial_omap44xx",
313                         "serial_kernel",
314                         "angler",
315                         "corectrl",
316                         "driverdomain",
317                         "driverdomain_pl390",
318                         "int_route"
319                         ] ]
320
321     -- ARMv7-A modules for Versatile Express EMM board (GEM5, qemu)
322     vExpressEMMModules_A15 = [ "/sbin/" ++ f | f <- [
323                                "cpu_a15ve",
324                                "init",
325                                "kaluga",
326                                "mem_serv",
327                                "monitor",
328                                "proc_mgmt",
329                                "ramfsd",
330                                "spawnd",
331                                "startd",
332                                "corectrl",
333                                "skb",
334                                "angler",
335                                "fish",
336                                "memtest",
337                                "serial_kernel",
338                                "serial_pl011",
339                                "driverdomain",
340                                "driverdomain_pl390",
341                                "int_route"
342                                ] ]
343
344     -- ARMv7-A modules for Versatile Express EMM board (FVP)
345     vExpressEMMModules_A9 = [ "/sbin/" ++ f | f <- [
346                               "cpu_a9ve",
347                               "init",
348                               "kaluga",
349                               "mem_serv",
350                               "monitor",
351                               "proc_mgmt",
352                               "ramfsd",
353                               "serial_kernel",
354                               "serial_pl011",
355                               "spawnd",
356                               "startd",
357                               "corectrl",
358                               "skb",
359                               "angler",
360                               "fish",
361                               "memtest"
362                               ] ]
363
364     -- ARMv7-A modules for the Xilinx Zynq7000
365     zynq7Modules = [ "/sbin/" ++ f | f <- [
366                      "cpu_zynq7",
367                      "init",
368                      "kaluga",
369                      "mem_serv",
370                      "monitor",
371                      "proc_mgmt",
372                      "ramfsd",
373                      "spawnd",
374                      "startd",
375                      "corectrl",
376                      "skb",
377                      "angler",
378                      "fish",
379                      "memtest"
380                      ] ]
381
382
383     -- ARMv8 modules for running under QEMU
384     armv8_modules= [ "/sbin/" ++ f | f <- [
385                        "init",
386                        "mem_serv",
387                        "monitor",
388                        "proc_mgmt",
389                        "ramfsd",
390                        "spawnd",
391                        "startd",
392                        "corectrl",
393                        "skb",
394                        "pci",
395                        "memtest",
396                        "int_route",
397                        "serial_kernel",
398                        "serial_lpuart",
399                        "pl390_dist",
400                        "fish",
401                        "angler",
402                        "kaluga",
403                        "acpi"
404                        ] ]
405
406
407   in
408  [
409    --
410    -- Rules to build assorted platforms
411    --
412
413     platform "X86_64_Basic" [ "x86_64" ]
414       ([ ("x86_64", f) | f <- modules_x86_64 ]
415        ++
416        [ ("",       f) | f <- modules_generic])
417       "Basic 64-bit x86 PC build",
418
419     platform "X86_64_Benchmarks" [ "x86_64" ]
420       ([ ("x86_64", f) | f <- modules_x86_64 ++ bench_x86_64]
421        ++
422        [ ("",       f) | f <- modules_generic])
423       "64-bit x86 PC build with benchmarks",
424
425     platform "X86_64_Full" [ "x86_64" ]
426       ([ ("x86_64", f) | f <- modules_x86_64 ++ bench_x86_64 ++ tests_x86_64 ++ modules_xmpl ]
427        ++
428        [ ("",       f) | f <- modules_generic])
429       "64-bit x86 PC build with benchmarks and test suites",
430
431     platform "K1OM_Basic" [ "k1om" ]
432       ([ ("k1om", f) | f <- modules_k1om ]
433        ++
434        [ ("",       f) | f <- modules_generic])
435       "Basic Xeon Phi build",
436
437     platform "K1OM_Benchmarks" [ "k1om" ]
438       ([ ("k1om", f) | f <- modules_k1om ++ bench_k1om]
439        ++
440        [ ("",       f) | f <- modules_generic])
441       "Xeon Phi build with benchmarks",
442
443     platform "K1OM_Full" [ "k1om" ]
444       ([ ("k1om", f) | f <- modules_k1om ++ bench_k1om ++ tests_k1om ]
445        ++
446        [ ("",       f) | f <- modules_generic])
447       "Xeon Phi build with benchmarks and test suites",
448
449     platform "ARMV7_Basic" [ "armv7" ]
450       ([ ("armv7", f) | f <- pandaModules ]
451        ++
452        [ ("",       f) | f <- modules_generic])
453       "Basic ARMv8 build",
454
455     platform "ARMV8_Basic" [ "armv8" ]
456       ([ ("armv8", f) | f <- armv8_modules ]
457        ++
458        [ ("",       f) | f <- modules_generic])
459       "Basic ARMv8 build",
460
461     platform "FVP" [ "armv8" ]
462       ([ ("armv8", "/sbin/cpu_a57_fvp"), ("armv8", "/sbin/boot_armv8_generic")  ]
463        ++
464        [ ("armv8", f) | f <- armv8_modules ]
465        ++
466        [ ("",       f) | f <- modules_generic])
467     "ARM Virtual Machine Board with ARM Cortex A57 processors in Fixed Virtual Platform.",
468
469     platform "ARM_FastModels_Base_A57" [ "armv8" ]
470        [ ("root", "/armv8_a57_fvp_base_image") ]
471     "ARM FastModels Base Board with A57 processors.",
472
473     platform "QEMU" [ "armv8" ]
474       ([ ("armv8", "/sbin/cpu_a57_qemu"), ("armv8", "/sbin/boot_armv8_generic")  ]
475        ++
476        [ ("armv8", f) | f <- armv8_modules ]
477        ++
478        [ ("",       f) | f <- modules_generic])
479     "ARM Virtual Machine Board with ARM Cortex A57 processors in QEMU",
480
481     platform "QEMU_U-Boot" [ "armv8" ]
482     ([ ("armv8", "/sbin/cpu_a57_qemu"), ("armv8", "/sbin/boot_armv8_generic")  ]
483      ++
484      [ ("armv8", f) | f <- armv8_modules ]
485      ++
486      [ ("",       f) | f <- modules_generic]
487      ++
488      [ ("root", "/armv8_a57_qemu_image.efi") ])
489   "ARM Virtual Machine Board with ARM Cortex A57 processors in QEMU",
490
491     platform "APM88xxxx" [ "armv8" ]
492     ([ ("armv8", "/sbin/cpu_apm88xxxx"), ("armv8", "/sbin/boot_armv8_generic")]
493        ++
494        [ ("armv8", f) | f <- armv8_modules ]
495        ++
496        [ ("",       f) | f <- modules_generic]
497     )
498     "The APM XGene development board (Mustang)",
499
500     platform "ThunderX" [ "armv8" ]
501     ([ ("armv8", "/sbin/cpu_cn88xx"), ("armv8", "/sbin/boot_armv8_generic") ]
502        ++
503        [ ("armv8", f) | f <- armv8_modules ]
504        ++
505        [ ("",       f) | f <- modules_generic]
506     )
507     "Cavium ThunderX-1 (CN88xx) boards",
508
509     platform "RaspberryPi3" [ "armv8" ]
510       ([ ("armv8", "/sbin/cpu_a53_rpi3"), ("armv8", "/sbin/boot_armv8_generic")  ]
511        ++
512        [ ("armv8", f) | f <- armv8_modules ]
513        ++
514        [ ("",       f) | f <- modules_generic]
515        ++
516        [ ("root", "/armv8_rpi3_image.efi") ])
517     "Raspberry Pi 3 quad ARM Cortex A53",
518
519     platform "imx8x" [ "armv8" ]
520       ([ ("armv8", "/sbin/cpu_imx8x"), ("armv8", "/sbin/boot_armv8_generic")  ]
521        ++
522        [ ("root", "/armv8_imx8x_image.efi") ])
523     "NXP iMX8QPX",
524
525     platform "PandaboardES" [ "armv7" ]
526     ([ ("armv7", f) | f <- pandaModules ] ++
527      [ ("root", "/armv7_omap44xx_image"),
528        ("root", "/armv7_omap44xx_image-gdb.gdb") ])
529     "Standard Pandaboard ES build image and modules",
530
531     platform "VExpressEMM-A15" [ "armv7" ]
532     ([ ("armv7", f) | f <- vExpressEMMModules_A15 ] ++
533      [ ("root", "/armv7_a15ve_1_image"),
534        ("root", "/armv7_a15ve_1_image-gdb.gdb"),
535        ("root", "/armv7_a15ve_fvp_1_image"),
536        ("root", "/armv7_a15ve_fvp_1_image-gdb.gdb"),
537        ("root", "/armv7_a15ve_2_image"),
538        ("root", "/armv7_a15ve_2_image-gdb.gdb"),
539        ("root", "/armv7_a15ve_4_image"),
540        ("root", "/armv7_a15ve_4_image-gdb.gdb"),
541        ("root", "/armv7_a15ve_fvp_4_image"),
542        ("root", "/armv7_a15ve_fvp_4_image-gdb.gdb"),
543        ("root", "/armv7_a15ve_gem5_image"),
544        ("root", "/armv7_a15ve_gem5_image-gdb.gdb") ])
545     "VersatileExpress EMM board with ARM Cortex-A15s",
546
547     platform "VExpressEMM-A15-A7" [ "armv7" ]
548     ([ ("armv7", f) | f <- vExpressEMMModules_A15 ] ++
549      [ ("root", "/armv7_a15a7ve_image"),
550        ("root", "/armv7_a15a7ve_image-gdb.gdb") ])
551     "VersatileExpress EMM board with ARM Cortex-A15s and A7s",
552
553     platform "VExpressEMM-A9" [ "armv7" ]
554     ([ ("armv7", f) | f <- vExpressEMMModules_A9 ] ++
555      [ ("root", "/armv7_a9ve_1_image"),
556        ("root", "/armv7_a9ve_1_image-gdb.gdb"),
557        ("root", "/armv7_a9ve_4_image"),
558        ("root", "/armv7_a9ve_4_image-gdb.gdb") ])
559     "VersatileExpress EMM board for ARMv7-A Fixed Virtual Platforms",
560
561     platform "Zynq7000" [ "armv7" ]
562     ([ ("armv7", f) | f <- zynq7Modules ] ++
563      [ ("root", "/armv7_zynq7_image"),
564        ("root", "/armv7_zynq7_image-gdb.gdb") ])
565     "Xilinx Zynq7000",
566
567     --
568     -- Rules to build assorted boot images
569     --
570
571     -- Build the default PandaBoard boot image
572     armv7Image "armv7_omap44xx" "omap44xx" "omap44xx" "0x80000000"  modules_generic pandaModules,
573
574     -- Build the A15 simulation image (VersatileExpress EMM board, 1 core)
575     armv7Image "armv7_a15ve_1" "ve" "a15ve" "0x80000000" modules_generic vExpressEMMModules_A15,
576
577     -- Build the A15 simulation image (VersatileExpress EMM board, 1 core, FVP
578     -- quirks)
579     armv7Image "armv7_a15ve_fvp_1" "ve" "a15ve" "0x80000000" modules_generic vExpressEMMModules_A15,
580
581     -- Build the A15 simulation image (VersatileExpress EMM board, 2 cores)
582     armv7Image "armv7_a15ve_2" "ve" "a15ve" "0x80000000" modules_generic vExpressEMMModules_A15,
583
584     -- Build the A15 simulation image (VersatileExpress EMM board, 4 cores)
585     armv7Image "armv7_a15ve_4" "ve" "a15ve" "0x80000000" modules_generic vExpressEMMModules_A15,
586
587     -- Build the A15 simulation image (VersatileExpress EMM board, 4 cores,
588     -- FVP quirks)
589     armv7Image "armv7_a15ve_fvp_4" "ve" "a15ve" "0x80000000" modules_generic vExpressEMMModules_A15,
590
591     -- Build the A15 simulation image (VersatileExpress EMM board, with GEM5
592     -- quirks)
593     armv7Image "armv7_a15ve_gem5" "ve" "a15ve" "0x80000000" modules_generic vExpressEMMModules_A15,
594
595     -- Build the big.LITTLE A15/A7 simulation image (VersatileExpress EMM
596     -- board, 4+4 cores)
597     armv7Image "armv7_a15a7ve" "ve" "a15ve" "0x80000000" modules_generic vExpressEMMModules_A15,
598
599     -- Build the A9 simulation image (VersatileExpress EMM board, 1 core)
600     armv7Image "armv7_a9ve_1" "ve" "a9ve" "0x80000000" modules_generic vExpressEMMModules_A9,
601
602     -- Build the A9 simulation image (VersatileExpress EMM board, 4 cores)
603     armv7Image "armv7_a9ve_4" "ve" "a9ve" "0x80000000" modules_generic vExpressEMMModules_A9,
604
605     -- Build the Zynq7000 image
606     armv7Image "armv7_zynq7" "zynq7" "zynq7" "0x00000000" modules_generic zynq7Modules,
607
608     armv8Image "armv8_a57_qemu" "armv8_a57_qemu" "armv8_generic" "a57_qemu" modules_generic armv8_modules,
609
610     armv8Image "armv8_rpi3" "armv8_rpi3" "armv8_generic" "a53_rpi3" modules_generic armv8_modules,
611
612     armv8Image "armv8_imx8x" "armv8_imx8x" "armv8_generic" "imx8x" modules_generic armv8_modules,
613
614     armv8EFIImage "armv8_a57_fvp_base" "armv8_a57_fvp_base" "armv8_generic" "a57_fvp" modules_generic armv8_modules,
615
616     armv8EFIImage "armv8_a57_qemu" "armv8_a57_qemu" "armv8_generic" "a57_qemu" modules_generic armv8_modules,
617
618     --
619     -- Booting: various targets for booting Barrelfish under different circumstances
620     --
621
622     -- Copy menu.list files across
623     Rules [ copyFile SrcTree "root" ("/hake/menu.lst." ++ p)
624                      "root" ("/platforms/arm/menu.lst." ++ p)
625             | p <- [ "armv8_a57v",
626                      "armv8_a57_qemu",
627                      "armv8_a57_fvp_base",
628                      "armv8_a57v_1",
629                      "armv8_a57_fvp_1",
630                      "armv8_apm88xxxx",
631                      "armv8_cn88xx",
632                      "armv8_imx8x",
633                      "armv8_rpi3",
634                      "armv7_a9ve_1",
635                      "armv7_a9ve_4",
636                      "armv7_a15ve_1",
637                      "armv7_a15ve_2",
638                      "armv7_a15ve_4",
639                      "armv7_a15ve_fvp_1",
640                      "armv7_a15ve_fvp_4",
641                      "armv7_a15ve_gem5",
642                      "armv7_a15a7ve",
643                      "armv7_omap44xx",
644                      "armv7_zynq7" ]],
645     Rules [ copyFile SrcTree "root" ("/hake/menu.lst." ++ p)
646                      "root" ("/platforms/x86/menu.lst." ++ p)
647             | p <- [ "x86_64", "k1om" ] ],
648
649
650     boot "gem5_armv7_vexpressemm" [ "armv7" ] [
651       In SrcTree "tools" "/tools/arm_gem5/boot_gem5.sh",
652       Str "VExpress_EMM",
653       In BuildTree "root" "/armv7_a15ve_gem5_image" ]
654     "Boot an ARMv7a multicore image on a VersatileExpress EMM board in GEM5",
655
656     boot "FVP_VE_A5x1" [ "armv7" ] [
657       Str "FVP_VE_Cortex-A5x1",
658       In BuildTree "root" "/armv7_a9ve_1_image" ]
659     "Boot on a single-core Cortex-A5 FVP model",
660
661     boot "FVP_VE_A7x1" [ "armv7" ] [
662       Str "FVP_VE_Cortex-A7x1",
663       In BuildTree "root" "/armv7_a15ve_fvp_1_image" ]
664     "Boot on a single-core Cortex-A7 FVP model",
665
666     boot "FVP_VE_A9x1" [ "armv7" ] [
667       Str "FVP_VE_Cortex-A9x1",
668       In BuildTree "root" "/armv7_a9ve_1_image" ]
669     "Boot on a single-core Cortex-A9 FVP model",
670
671     boot "FVP_VE_A9x4" [ "armv7" ] [
672       Str "FVP_VE_Cortex-A9x4",
673       In BuildTree "root" "/armv7_a9ve_4_image" ]
674     "Boot on a four-core Cortex-A9 FVP model",
675
676     boot "FVP_VE_A15x1" [ "armv7" ] [
677       Str "FVP_VE_Cortex-A15x1",
678       In BuildTree "root" "/armv7_a15ve_fvp_1_image" ]
679     "Boot on a single-core Cortex-A15 FVP model",
680
681     boot "FVP_VE_A15x4" [ "armv7" ] [
682       Str "FVP_VE_Cortex-A15x4-A7x4",
683       In BuildTree "root" "/armv7_a15ve_fvp_4_image" ]
684     "Boot on a four-core Cortex-A15 FVP model",
685
686     boot "FVP_VE_A15x4_A7x4" [ "armv7" ] [
687       Str "FVP_VE_Cortex-A15x4-A7x4",
688       NStr "-a coretile.cluster0.*=",
689       In BuildTree "root" "/armv7_a15a7ve_image",
690       NStr "-a coretile.cluster1.*=",
691       In BuildTree "root" "/armv7_a15a7ve_image",
692       Str "-C",
693       Str "coretile.dualclustersystemconfigurationblock.CFG_ACTIVECLUSTER=0x3"
694     ]
695     "Boot on a 4+4-core Cortex-A15/A7 FVP model",
696
697     boot "FVP_VE_A17x1" [ "armv7" ] [
698       Str "FVP_VE_Cortex-A17x1",
699       In BuildTree "root" "/armv7_a15ve_fvp_1_image" ]
700     "Boot on a single-core Cortex-A17 FVP model",
701
702     boot "qemu_a15ve_1" [ "armv7" ] [
703       In SrcTree "tools" "/tools/qemu-wrapper.sh",
704       Str "--image", In BuildTree "root" "/armv7_a15ve_1_image",
705       Str "--arch", Str "a15ve",
706       Str "--smp", Str "1" ]
707     "Boot QEMU in 32-bit ARM mode emulating a Versatile Express board (1 core)",
708
709     boot "qemu_a15ve_2" [ "armv7" ] [
710       In SrcTree "tools" "/tools/qemu-wrapper.sh",
711       Str "--image", In BuildTree "root" "/armv7_a15ve_2_image",
712       Str "--arch", Str "a15ve",
713       Str "--smp", Str "2" ]
714     "Boot QEMU in 32-bit ARM mode emulating a Versatile Express board (2 core)",
715
716     boot "qemu_a15ve_4" [ "armv7" ] [
717       In SrcTree "tools" "/tools/qemu-wrapper.sh",
718       Str "--image", In BuildTree "root" "/armv7_a15ve_4_image",
719       Str "--arch", Str "a15ve",
720       Str "--smp", Str "4" ]
721     "Boot QEMU in 32-bit ARM mode emulating a Versatile Express board (4 cores)",
722
723     boot "qemu_zynq7" [ "armv7" ] [
724       In SrcTree "tools" "/tools/qemu-wrapper.sh",
725       Str "--image", In BuildTree "root" "/armv7_zynq7_image",
726       Str "--arch", Str "zynq7" ]
727     "Boot QEMU in 32-bit ARM mode emulating a Zynq 7000",
728
729     boot "qemu_a57" [ "armv8" ] ([
730       In SrcTree "tools" "/tools/qemu-wrapper.sh",
731       Str "--image", In BuildTree "root" "/armv8_a57_qemu_image",
732       Str "--arch", Str "armv8",
733       Str "--bios", In SrcTree "tools" "/tools/hagfish/QEMU_EFI.fd"
734        ]
735       )
736     "Boot QEMU in 64-bit ARM mode emulating a ARM Virtual Machine using UEFI",
737
738     boot "qemu_a57_debug" [ "armv8" ] ([
739       In SrcTree "tools" "/tools/qemu-wrapper.sh",
740       Str "--image", In BuildTree "root" "/armv8_a57_qemu_image",
741       Str "--arch", Str "armv8",
742       Str "--bios", In SrcTree "tools" "/tools/hagfish/QEMU_EFI.fd",
743       Str "--debug", In SrcTree "tools" "/tools/debug.armv8.gdb" ]
744       )
745     "Boot QEMU in 64-bit ARM mode emulating a ARM Virtual Machine using UEFI with debugging enabled",
746
747     boot "qemu_a57_uboot" [ "armv8" ] ([
748       Str "MEMORY=3G",
749       In SrcTree "tools" "/tools/qemu-wrapper.sh",
750       Str "--image", In BuildTree "root" "/armv8_a57_qemu_image.efi",
751       Str "--arch", Str "armv8",
752       Str "--uboot-img", In SrcTree "tools" "/tools/qemu-armv8-uboot.bin" ]
753       )
754     "Boot QEMU in 64-bit ARM mode emulating a ARM Virtual Machine using U-Boot",
755
756     boot "qemu_armv8_uboot" [ "armv8" ] ([
757       In SrcTree "tools" "/tools/qemu-wrapper.sh",
758       Str "--image", In BuildTree "root" "/armv8_a57_qemu_image.efi",
759       Str "--arch", Str "armv8",
760       Str "--uboot"
761        ]
762       )
763     "Boot QEMU in 64-bit ARM mode emulating a ARM Virtual Machine",
764
765     boot_fastmodels "ARM_FastModels_Base_A57x1" [ "armv8" ] 
766       "armv8_a57_fvp_base_image"
767       "ARM_FastModels/ARMv8_Base_A57x1/ARMv8_Base_A57x1"
768       fvp_simargs
769       "Boot on a ARM FastModels Base A57x1 Platform",
770
771     boot_fastmodels_lisa "ARM_FastModels_Barebones" [ "armv8" ] 
772       "armv8_a57_fvp_base_image"
773       "barebones"
774       barebones_simargs
775       "Boot on a ARM FastModels based on Sven's Barebones",
776
777     boot_fastmodels "ARM_FastModels_Base_A57x4" [ "armv8" ] 
778       "armv8_a57_fvp_base_image"
779       "ARM_FastModels/ARMv8_Base_A57x4"
780       fvp_simargs
781       "Boot on a ARM FastModels Base A57x4 Platform",
782
783     boot "qemu_x86_64" [ "x86_64" ] ([
784       In SrcTree "tools" "/tools/qemu-wrapper.sh",
785       Str "--menu", In BuildTree "root" "/platforms/x86/menu.lst.x86_64",
786       Str "--arch", Str "x86_64" ] ++ [
787       (Dep BuildTree "x86_64" f) | f <- modules_x86_64 ] ++ [
788       (Dep BuildTree "" f) | f <- modules_generic ])
789     "Boot QEMU in 64-bit x86 mode emulating a PC",
790
791     boot "qemu_x86_64_debug" [ "x86_64" ] ([
792       In SrcTree "tools" "/tools/qemu-wrapper.sh",
793       Str "--menu", In BuildTree "root" "/platforms/x86/menu.lst.x86_64",
794       Str "--arch", Str "x86_64",
795       Str "--debug", In SrcTree "tools" "/tools/debug.gdb" ] ++ [
796       (Dep BuildTree "x86_64" f) | f <- modules_x86_64 ] ++ [
797       (Dep BuildTree "" f) | f <- modules_generic ])
798     "Boot QEMU under GDB in 64-bit x86 mode emulating a PC",
799
800     boot "usbboot_panda" [ "armv7" ] [
801       In BuildTree "tools" "/bin/usbboot",
802       In BuildTree "root" "/armv7_omap44xx_image"
803     ]
804     "Boot Barrelfish on a Pandaboard, over a local USB cable",
805
806     boot "usbboot_imx8x" [ "armv8" ] [
807       In SrcTree "tools" "/tools/imx8x/bf-boot.sh",
808       Str "--bf",
809       In BuildTree "root" "/armv8_imx8x_image.efi"
810     ]
811     "Boot Barrelfish on a Pandaboard, over a local USB cable"
812
813  ]