########################################################################## # Copyright (c) 2009-2014 ETH Zurich. # All rights reserved. # # This file is distributed under the terms in the attached LICENSE file. # If you do not find this file, copies can be found by writing to: # ETH Zurich D-INFK, CAB F.78, Universitaetstr. 6, CH-8092 Zurich, # Attn: Systems Group. # # This file defines symbolic (i.e. non-file) targets for the Makefile # generated by Hake. Edit this to add your own symbolic targets. # ########################################################################## # Disable built-in implicit rules. GNU make adds environment's MAKEFLAGS too. MAKEFLAGS=r # Explicitly disable the flex and bison implicit rules %.c : %.y %.c : %.l # Set default architecture to the first specified by Hake in generated Makefile. ARCH ?= $(word 1, $(HAKE_ARCHS)) ARM_GCC?=arm-linux-gnueabi-gcc ARM_OBJCOPY?=arm-linux-gnueabi-objcopy K1OM_OBJCOPY?=k1om-mpss-linux-objcopy # upload Xeon Phi images to nfs share (leave blank to cancel) BARRELFISH_NFS_DIR ?="emmentaler.ethz.ch:/mnt/local/nfs/barrelfish/xeon_phi" ################################################################################# # Additional submodule targets ################################################################################# $(info Additional submodules:) # Shoal submodule ifneq ("$(wildcard $(SRCDIR)/lib/shoal/Hakefile)","") $(info + shoal: [YES]) SUBMODULE_SHOAL=1 SHOAL= \ sbin/tests/shl_simple else $(info + shoal: [NO]) SUBMODULE_SHOAL=0 SHOAL= endif # Green Marl Submodule ifneq ("$(wildcard $(SRCDIR)/usr/green-marl/Hakefile)","") $(info + green-marl: [YES]) SUBMODULE_GREEN_MARL=1 else $(info + green-marl: [NO]) SUBMODULE_GREEN_MARL= endif # green-marl depends on presence of shoal ifneq "$(and $(SUBMODULE_GREEN_MARL),$(SUBMODULE_SHOAL))" "" $(info + green-marl: [ENABLED]) GREEN_MARL= \ sbin/gm_tc \ sbin/gm_pr else $(info + green-marl: [DISABLED]) GREEN_MARL= endif # All binaries of the RCCE LU benchmark BIN_RCCE_LU= \ sbin/rcce_lu_A1 \ sbin/rcce_lu_A2 \ sbin/rcce_lu_A4 \ sbin/rcce_lu_A8 \ sbin/rcce_lu_A16 \ sbin/rcce_lu_A32 \ sbin/rcce_lu_A64 # All binaries of the RCCE BT benchmark BIN_RCCE_BT= \ sbin/rcce_bt_A1 \ sbin/rcce_bt_A4 \ sbin/rcce_bt_A9 \ sbin/rcce_bt_A16 \ sbin/rcce_bt_A25 \ sbin/rcce_bt_A36 # All test domains TESTS_COMMON= \ sbin/fputest \ sbin/fread_test \ sbin/fscanf_test \ sbin/hellotest \ sbin/idctest \ sbin/memtest \ sbin/schedtest \ sbin/testerror \ sbin/yield_test TESTS_x86= \ sbin/tests/luatest \ sbin/tests/numatest TESTS_x86_64= \ $(TESTS_x86) \ sbin/arrakis_hellotest \ sbin/ata_rw28_test \ sbin/bomp_cpu_bound \ sbin/bomp_cpu_bound_progress \ sbin/bomp_sync \ sbin/bomp_sync_progress \ sbin/bomp_test \ sbin/bulk_shm \ sbin/cryptotest \ sbin/mdbtest_addr_zero \ sbin/mdbtest_range_query \ sbin/mem_affinity \ sbin/multihoptest \ sbin/net-test \ sbin/net_openport_test \ sbin/perfmontest \ sbin/phoenix_kmeans \ sbin/socketpipetest \ sbin/spantest \ sbin/spin \ sbin/testconcurrent \ sbin/testdesc \ sbin/testdesc-child \ sbin/tests/cxxtest \ sbin/tests/dma_test \ sbin/tests/xphi_nameservice_test \ sbin/thcidctest \ sbin/thcminitest \ sbin/thctest \ sbin/timer_test \ sbin/tlstest \ sbin/tweedtest \ sbin/xcorecap \ sbin/xcorecapserv TESTS_k1om= \ $(TESTS_x86) \ sbin/tests/dma_test \ sbin/tests/xeon_phi_inter \ sbin/tests/xeon_phi_test \ sbin/tests/xphi_nameservice_test # All benchmark domains BENCH_COMMON= \ sbin/channel_cost_bench \ sbin/flounder_stubs_buffer_bench \ sbin/flounder_stubs_empty_bench \ sbin/flounder_stubs_payload_bench \ sbin/xcorecapbench BENCH_x86= \ sbin/multihop_latency_bench \ sbin/net_openport_test \ sbin/perfmontest \ sbin/thc_v_flounder_empty \ sbin/timer_test \ sbin/udp_throughput \ sbin/ump_exchange \ sbin/ump_latency \ sbin/ump_latency_cache \ sbin/ump_receive \ sbin/ump_send \ sbin/ump_throughput BENCH_x86_64= \ $(BENCH_x86) \ $(BIN_RCCE_BT) \ $(BIN_RCCE_LU) \ sbin/ahci_bench \ sbin/apicdrift_bench \ sbin/benchmarks/bomp_mm \ sbin/benchmarks/dma_bench \ sbin/benchmarks/xomp_share \ sbin/benchmarks/xomp_spawn \ sbin/benchmarks/xomp_work \ sbin/benchmarks/xphi_ump_bench \ sbin/bomp_benchmark_cg \ sbin/bomp_benchmark_ft \ sbin/bomp_benchmark_is \ sbin/bulk_transfer_passthrough \ sbin/bulkbench \ sbin/bulkbench_micro_echo \ sbin/bulkbench_micro_rtt \ sbin/bulkbench_micro_throughput \ sbin/elb_app \ sbin/elb_app_tcp \ sbin/lrpc_bench \ sbin/mdb_bench \ sbin/mdb_bench_old \ sbin/netthroughput \ sbin/phases_bench \ sbin/phases_scale_bench \ sbin/placement_bench \ sbin/rcce_pingpong \ sbin/shared_mem_clock_bench \ sbin/tsc_bench BENCH_k1om=\ $(BENCH_x86) \ sbin/benchmarks/bomp_mm \ sbin/benchmarks/dma_bench \ sbin/benchmarks/xomp_share \ sbin/benchmarks/xomp_spawn \ sbin/benchmarks/xomp_work \ sbin/benchmarks/xphi_ump_bench \ sbin/benchmarks/xphi_xump_bench # Default list of modules to build/install for all enabled architectures MODULES_COMMON= \ sbin/init \ sbin/chips \ sbin/skb \ sbin/spawnd \ sbin/startd \ sbin/mem_serv \ sbin/monitor \ sbin/ramfsd \ /home/abhishek/barrelfish/tools/schedsim # List of modules that are arch-independent and always built MODULES_GENERIC= \ skb_ramfs.cpio.gz \ sshd_ramfs.cpio.gz # x86_64-specific modules to build by default # this should shrink as targets are ported and move into the generic list above MODULES_x86_64= \ sbin/elver \ sbin/cpu \ sbin/arrakismon \ sbin/bench \ sbin/bfscope \ sbin/boot_perfmon \ sbin/datagatherer \ sbin/ahcid \ sbin/e1000n \ sbin/NGD_mng \ sbin/e10k \ sbin/sfxge \ sbin/e10k_queue \ sbin/rtl8029 \ sbin/netd \ sbin/echoserver \ sbin/fbdemo \ sbin/fish \ sbin/hpet \ sbin/lpc_kbd \ sbin/lpc_timer \ sbin/mem_serv_dist \ sbin/lo_queue \ sbin/pci \ sbin/acpi \ sbin/kaluga \ sbin/serial \ sbin/angler \ sbin/sshd \ sbin/lshw \ sbin/sif \ sbin/slideshow \ sbin/vbe \ sbin/vmkitmon \ sbin/webserver \ sbin/routing_setup \ sbin/bcached \ sbin/xeon_phi_mgr \ sbin/xeon_phi \ sbin/dma_mgr \ sbin/ioat_dma \ sbin/virtio_blk_host \ sbin/virtio_blk \ sbin/block_server \ sbin/block_server_client \ sbin/bs_user \ sbin/bulk_shm \ $(GREEN_MARL) \ $(SHOAL) \ sbin/corectrl MODULES_k1om= \ sbin/weever \ sbin/cpu \ sbin/xeon_phi \ sbin/corectrl \ xeon_phi_multiboot \ $(GREEN_MARL) \ $(SHOAL) # the following are broken in the newidc system MODULES_x86_64_broken= \ sbin/barriers \ sbin/ipi_bench \ sbin/ring_barriers \ sbin/ssf_bcast \ sbin/lamport_bcast # x86-32-specific module to build by default MODULES_x86_32=\ sbin/cpu \ sbin/lpc_kbd \ sbin/serial \ $(BIN_RCCE_BT) \ $(BIN_RCCE_LU) \ sbin/rcce_pingpong \ sbin/bench \ sbin/fbdemo \ sbin/fish \ sbin/fputest \ sbin/pci \ sbin/acpi \ sbin/kaluga \ sbin/slideshow \ sbin/thc_v_flounder_empty \ sbin/thcidctest \ sbin/thcminitest \ sbin/thctest \ sbin/vbe \ sbin/mem_serv_dist \ sbin/routing_setup \ sbin/multihoptest \ sbin/multihop_latency_bench \ sbin/angler \ sbin/sshd \ sbin/corectrl # SCC-specific module to build by default MODULES_scc=\ sbin/cpu \ $(BIN_RCCE_BT) \ $(BIN_RCCE_LU) \ sbin/rcce_pingpong \ sbin/bench \ sbin/eMAC \ sbin/netd \ sbin/NGD_mng \ sbin/webserver \ sbin/ipirc_test \ sbin/thc_v_flounder_empty \ sbin/thcidctest \ sbin/thcminitest \ sbin/thctest \ sbin/mem_serv_dist \ sbin/net-test \ sbin/netthroughput \ sbin/udp_throughput # ARM-specific modules to build by default MODULES_armv5=\ sbin/cpu \ sbin/cpu.bin # XScale-specific modules to build by default MODULES_xscale=\ sbin/cpu_ixp2800 \ sbin/cpu_ixp2800.bin # ARMv7-specific modules to build by default # XXX: figure out armv7 default MODULES_armv7=\ sbin/cpu_omap44xx \ sbin/usb_manager \ sbin/usb_keyboard \ sbin/kaluga \ sbin/fish \ sbin/corectrl # ARM11MP-specific modules to build by default MODULES_arm11mp=\ sbin/cpu \ sbin/cpu.bin # construct list of all modules to be built (arch-specific and common for each arch) MODULES=$(foreach a,$(HAKE_ARCHS),$(foreach m,$(MODULES_$(a)),$(a)/$(m)) \ $(foreach m,$(MODULES_COMMON),$(a)/$(m))) \ $(foreach a,$(HAKE_ARCHS),$(foreach m,$(TESTS_$(a)),$(a)/$(m)) \ $(foreach m,$(TESTS_COMMON),$(a)/$(m))) \ $(foreach a,$(HAKE_ARCHS),$(foreach m,$(BENCH_$(a)),$(a)/$(m)) \ $(foreach m,$(BENCH_COMMON),$(a)/$(m))) \ $(MODULES_GENERIC) all: $(MODULES) menu.lst @echo "You've just run the default ("all") target for Barrelfish" @echo "using Hake. The following modules have been built:" @echo $(MODULES) @echo "If you want to change this target, edit the file called" @echo "'symbolic_targets.mk' in your build directory." .PHONY: all # XXX: this should be overridden in some local settings file? INSTALL_PREFIX ?= /home/netos/tftpboot/$(USER) # Only install a binary if it doesn't exist in INSTALL_PREFIX or the modification timestamp differs install: $(MODULES) @echo ""; \ echo "Installing modules..." ; \ for m in ${MODULES}; do \ if [ ! -f ${INSTALL_PREFIX}/$$m ] || \ [ $$(stat -c%Y $$m) -ne $$(stat -c%Y ${INSTALL_PREFIX}/$$m) ]; then \ if [ "$$m" != "k1om/xeon_phi_multiboot" ]; then \ do_update=1; \ echo " > Installing $$m" ; \ mkdir -p ${INSTALL_PREFIX}/$$(dirname $$m); \ install -p $$m ${INSTALL_PREFIX}/$$m; \ fi; \ fi; \ done; \ if [ ! $$do_update ]; then \ echo " > All up to date" ; \ else \ if [ -f "k1om/xeon_phi_multiboot" ] && [ $(BARRELFISH_NFS_DIR) ]; then \ echo ""; \ echo "Uploading to NFS share $(BARRELFISH_NFS_DIR) ..." ; \ scp k1om/xeon_phi_multiboot $(BARRELFISH_NFS_DIR); \ scp k1om/sbin/weever $(BARRELFISH_NFS_DIR); \ fi; \ fi; \ echo ""; \ echo "done." ; \ .PHONY : install install_headers: echo "Installing header files..." ; \ for a in ${HAKE_ARCHS}; do \ mkdir -p "$$a" ; \ cp -rv "${SRCDIR}/include" "$$a/" ; \ done; \ echo "done." ; \ .PHONY : install_headers sim: simulate .PHONY : sim QEMU=unknown-arch-error GDB=unknown-arch-error CLEAN_HD= DISK=hd.img AHCI=-device ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0 -drive id=disk,file=$(DISK),if=none MENU_LST=-kernel $(shell sed -rne 's,^kernel[ \t]*/([^ ]*).*,\1,p' menu.lst) \ -append '$(shell sed -rne 's,^kernel[ \t]*[^ ]*[ \t]*(.*),\1,p' menu.lst)' \ -initrd '$(shell sed -rne 's,^module(nounzip)?[ \t]*/(.*),\2,p' menu.lst | awk '{ if(NR == 1) printf($$0); else printf("," $$0) } END { printf("\n") }')' ifeq ($(filter $(x86_64),$(ARCH)),) QEMU_CMD=qemu-system-x86_64 -smp 2 -m 1024 -net nic,model=e1000 -net user $(AHCI) -nographic $(MENU_LST) GDB=x86_64-pc-linux-gdb CLEAN_HD=qemu-img create $(DISK) 10M else ifeq ($(ARCH),x86_32) QEMU_CMD=qemu-system-i386 -no-kvm -smp 2 -m 1024 -net nic,model=ne2k_pci -net user -fda $(SRCDIR)/tools/grub-qemu.img -tftp $(PWD) -nographic GDB=gdb else ifeq ($(ARCH),scc) QEMU_CMD=qemu-system-i386 -no-kvm -smp 2 -m 1024 -cpu pentium -net nic,model=ne2k_pci -net user -fda $(SRCDIR)/tools/grub-qemu.img -tftp $(PWD) -nographic GDB=gdb else ifeq ($(ARCH),armv5) ARM_QEMU_CMD=qemu-system-arm -M integratorcp -kernel armv5/sbin/cpu.bin -nographic -no-reboot -m 256 -initrd armv5/romfs.cpio GDB=xterm -e arm-linux-gnueabi-gdb simulate: $(MODULES) armv5/romfs.cpio $(ARM_QEMU_CMD) .PHONY: simulate armv5/tools/debug.arm.gdb: $(SRCDIR)/tools/debug.arm.gdb cp $< $@ debugsim: $(MODULES) armv5/romfs.cpio armv5/tools/debug.arm.gdb $(SRCDIR)/tools/debug.sh "$(ARM_QEMU_CMD) -initrd armv5/romfs.cpio" "$(GDB)" "-s $(ARCH)/sbin/cpu -x armv5/tools/debug.arm.gdb $(GDB_ARGS)" .PHONY : debugsim else ifeq ($(ARCH),arm11mp) QEMU_CMD=qemu-system-arm -cpu mpcore -M realview -kernel arm11mp/sbin/cpu.bin GDB=arm-linux-gnueabi-gdb else ifeq ($(ARCH), k1om) # what is the emulation option for the xeon phi ? QEMU=unknown-arch-error GDB=x86_64-k1om-barrelfish-gdb endif ifdef QEMU_CMD simulate: $(MODULES) $(CLEAN_HD) $(QEMU_CMD) .PHONY : simulate debugsim: $(MODULES) $(CLEAN_HD) $(SRCDIR)/tools/debug.sh "$(QEMU_CMD)" "$(GDB)" "-x $(SRCDIR)/tools/debug.gdb $(GDB_ARGS)" "file:/dev/stdout" .PHONY : debugsim endif $(ARCH)/menu.lst: $(SRCDIR)/hake/menu.lst.$(ARCH) cp $< $@ $(ARCH)/romfs.cpio: $(SRCDIR)/tools/arm-mkbootcpio.sh $(MODULES) $(ARCH)/menu.lst $(SRCDIR)/tools/arm-mkbootcpio.sh $(ARCH)/menu.lst $@ # Location of hardcoded size of romfs CPIO image arm_romfs_cpio = "$(ARCH)/include/romfs_size.h" # XXX: Horrid hack to hardcode size of romfs CPIO image into ARM kernel # This works in several recursive make steps: # 1. Create a dummy romfs_size.h header file # 2. Compile everything # 3. Create the romfs CPIO image # 4. Determine its size and write to romfs_size.h # 5. Re-compile kernel (but not the romfs) with correct size information # 6. Install romfs to installation location arm: $(MAKE) $(MAKE) $(ARCH)/romfs.cpio echo "//Autogenerated size of romfs.cpio because the bootloader cannot calculate it" > $(arm_romfs_cpio) echo "size_t romfs_cpio_archive_size = `ls -asl $(ARCH)/romfs.cpio | sed -e 's/ /\n/g' | head -6 | tail -1`;" >> $(arm_romfs_cpio) $(MAKE) .PHONY: arm # Builds a dummy romfs_size.h $(ARCH)/include/romfs_size.h: mkdir -p $(shell dirname $@) echo "size_t romfs_cpio_archive_size = 0; //should not see this" > $@ arminstall: $(MAKE) arm $(MAKE) install install -p $(ARCH)/romfs.cpio ${INSTALL_PREFIX}/$(ARCH)/romfs.cpio .PHONY: arminstall # Copy the scc-specific menu.lst from the source directory to the build directory menu.lst.scc: $(SRCDIR)/hake/menu.lst.scc cp $< $@ scc: all tools/bin/dite menu.lst.scc $(shell find scc/sbin -type f -print0 | xargs -0 strip -d) tools/bin/dite -32 -o bigimage.dat menu.lst.scc cp $(SRCDIR)/tools/scc/bootvector.dat . bin2obj -m $(SRCDIR)/tools/scc/bigimage.map -o barrelfish0.obj bin2obj -m $(SRCDIR)/tools/scc/bootvector.map -o barrelfish1.obj @echo Taking the barrelfish.obj files to SCC host scp barrelfish[01].obj user@tomme1.in.barrelfish.org: # Source indexing targets cscope.files: find $(abspath .) $(abspath $(SRCDIR)) -name '*.[ch]' -type f -print | sort | uniq > $@ .PHONY: cscope.files cscope.out: cscope.files cscope -k -b -i$< TAGS: cscope.files etags - < $< # for emacs cat $< | xargs ctags -o TAGS_VI # for vim # force rebuild of the Makefile rehake: ./hake/hake ./hake/hake --source-dir $(SRCDIR) .PHONY: rehake clean:: $(RM) -r tools $(HAKE_ARCHS) .PHONY: clean realclean:: clean $(RM) hake/*.o hake/*.hi hake/hake Hakefiles.hs cscope.* .PHONY: realclean # Documentation DOCS= \ ./docs/TN-000-Overview.pdf \ ./docs/TN-001-Glossary.pdf \ ./docs/TN-002-Mackerel.pdf \ ./docs/TN-003-Hake.pdf \ ./docs/TN-004-VirtualMemory.pdf \ ./docs/TN-005-SCC.pdf \ ./docs/TN-006-Routing.pdf \ ./docs/TN-008-Tracing.pdf \ ./docs/TN-009-Notifications.pdf \ ./docs/TN-010-Spec.pdf \ ./docs/TN-011-IDC.pdf \ ./docs/TN-012-Services.pdf \ ./docs/TN-013-CapabilityManagement.pdf \ ./docs/TN-014-bulk-transfer.pdf \ ./docs/TN-015-DiskDriverArchitecture.pdf \ ./docs/TN-016-Serial.pdf \ ./docs/TN-017-ARM.pdf \ ./docs/TN-018-PracticalGuide.pdf \ ./docs/TN-019-DeviceDriver.pdf docs doc: $(DOCS) .PHONY: docs doc clean:: $(RM) $(DOCS) .PHONY: clean doxygen: Doxyfile doxygen $< .PHONY: doxygen # pretend to be CMake's CONFIGURE_FILE command # TODO: clean this up Doxyfile: $(SRCDIR)/doc/Doxyfile.cmake sed -r 's#@CMAKE_SOURCE_DIR@#$(SRCDIR)#g' $< > $@ # Scheduler simulator test cases RUNTIME = 1000 TESTS = $(addsuffix .txt,$(basename $(wildcard $(SRCDIR)/tools/schedsim/*.cfg))) schedsim-regen: $(TESTS) $(TESTS): %.txt: %.cfg tools/bin/simulator tools/bin/simulator $< $(RUNTIME) > $@ schedsim-check: $(wildcard $(SRCDIR)/tools/schedsim/*.cfg) for f in $^; do tools/bin/simulator $$f $(RUNTIME) | diff -q - `dirname $$f`/`basename $$f .cfg`.txt || exit 1; done ###################################################################### # # Green Marl Targets # ###################################################################### GM_APPS=$(SRCDIR)usr/green-marl/apps/src define \n endef x86_64/usr/green-marl/%.cc k1om/usr/green-marl/%.cc : tools/bin/gm_comp $(GM_APPS)/%.gm $(foreach a,$(HAKE_ARCHS), \ mkdir -p $(a)/usr/green-marl ${\n}\ mkdir -p $(a)/include/green-marl ${\n}\ tools/bin/gm_comp -o=$(a)/usr/green-marl -t=cpp_omp $(GM_APPS)/$*.gm ${\n} \ mv $(a)/usr/green-marl/$*.h $(a)/include/green-marl ${\n} \ ) tools/bin/gm_comp : test -s ./tools/bin/gm_comp || { echo "Compiler does already exist"; exit 0; } # this target generates the green-marl compiler in the tools/bin directory make -C $(SRCDIR)/usr/green-marl compiler -j 8 mv $(SRCDIR)/usr/green-marl/bin/gm_comp ./tools/bin/ make -C $(SRCDIR)/usr/green-marl clean $(foreach a,$(HAKE_ARCHS), \ rm -rf $(a)/usr/green-marl/* ${\n}\ ) ###################################################################### # # Intel Xeon Phi Builds # ###################################################################### # we have to filter out the moduels that are generated below MODULES_k1om_filtered = $(filter-out xeon_phi_multiboot, \ $(filter-out sbin/weever,$(MODULES_k1om))) # Intel Xeon Phi-specific modules XEON_PHI_MODULES =\ $(foreach m,$(MODULES_COMMON),k1om/$(m)) \ $(foreach m,$(MODULES_k1om_filtered),k1om/$(m)) \ $(foreach m,$(BENCH_COMMON),k1om/$(m)) \ $(foreach m,$(TESTS_COMMON),k1om/$(m)) \ $(foreach m,$(BENCH_k1om),k1om/$(m)) \ $(foreach m,$(TESTS_k1om),k1om/$(m)) menu.lst.k1om: $(SRCDIR)/hake/menu.lst.k1om cp $< $@ k1om/tools/weever/mbi.c: tools/bin/weever_multiboot \ k1om/xeon_phi_multiboot \ k1om/tools/weever/.marker tools/bin/weever_multiboot k1om/multiboot.menu.lst.k1om k1om/tools/weever/mbi.c k1om/sbin/weever: k1om/sbin/weever.bin tools/bin/weever_creator tools/bin/weever_creator ./k1om/sbin/weever.bin > ./k1om/sbin/weever k1om/sbin/weever.bin: k1om/sbin/weever_elf $(K1OM_OBJCOPY) -O binary -R .note -R .comment -S k1om/sbin/weever_elf ./k1om/sbin/weever.bin k1om/xeon_phi_multiboot: $(XEON_PHI_MODULES) menu.lst.k1om $(SRCDIR)/tools/weever/multiboot/build_data_files.sh menu.lst.k1om k1om ####################################################################### # # Pandaboard builds # ####################################################################### PANDABOARD_MODULES=\ armv7/sbin/cpu_omap44xx \ armv7/sbin/init \ armv7/sbin/mem_serv \ armv7/sbin/monitor \ armv7/sbin/ramfsd \ armv7/sbin/spawnd \ armv7/sbin/startd \ armv7/sbin/skb \ armv7/sbin/memtest \ armv7/sbin/kaluga \ armv7/sbin/fish \ armv7/sbin/sdma \ armv7/sbin/sdmatest \ armv7/sbin/sdma_bench \ armv7/sbin/bulk_sdma \ armv7/sbin/usb_manager \ armv7/sbin/usb_keyboard \ armv7/sbin/serial \ armv7/sbin/angler \ armv7/sbin/corectrl \ menu.lst.pandaboard: $(SRCDIR)/hake/menu.lst.pandaboard cp $< $@ pandaboard_image: $(PANDABOARD_MODULES) \ tools/bin/arm_molly \ menu.lst.pandaboard # Translate each of the binary files we need $(SRCDIR)/tools/arm_molly/build_data_files.sh menu.lst.pandaboard molly_panda # Generate appropriate linker script cpp -P -DBASE_ADDR=0x82001000 $(SRCDIR)/tools/arm_molly/molly_ld_script.in \ molly_panda/molly_ld_script # Build a C file to link into a single image for the 2nd-stage # bootloader tools/bin/arm_molly menu.lst.pandaboard panda_mbi.c # Compile the complete boot image into a single executable $(ARM_GCC) -std=c99 -g -fPIC -pie -Wl,-N -fno-builtin \ -nostdlib -march=armv7-a -mapcs -fno-unwind-tables \ -Tmolly_panda/molly_ld_script \ -I$(SRCDIR)/include \ -I$(SRCDIR)/include/arch/arm \ -I./armv7/include \ -I$(SRCDIR)/include/oldc \ -I$(SRCDIR)/include/c \ -imacros $(SRCDIR)/include/deputy/nodeputy.h \ $(SRCDIR)/tools/arm_molly/molly_boot.S \ $(SRCDIR)/tools/arm_molly/molly_init.c \ $(SRCDIR)/tools/arm_molly/lib.c \ ./panda_mbi.c \ $(SRCDIR)/lib/elf/elf32.c \ ./molly_panda/* \ -o pandaboard_image @echo "OK - pandaboard boot image is built." @echo "If your boot environment is correctly set up, you can now:" @echo "$ usbboot ./pandaboard_image" ######################################################################## # # GEM5 build # ######################################################################## menu.lst.arm_gem5: $(SRCDIR)/hake/menu.lst.arm_gem5 cp $< $@ menu.lst.arm_gem5_mc: $(SRCDIR)/hake/menu.lst.arm_gem5_mc cp $< $@ GEM5_MODULES=\ armv7/sbin/cpu_arm_gem5 \ armv7/sbin/init \ armv7/sbin/mem_serv \ armv7/sbin/monitor \ armv7/sbin/ramfsd \ armv7/sbin/spawnd \ armv7/sbin/startd \ armv7/sbin/corectrl \ armv7/sbin/skb \ armv7/sbin/memtest arm_gem5_image: $(GEM5_MODULES) \ tools/bin/arm_molly \ menu.lst.arm_gem5_mc # Translate each of the binary files we need $(SRCDIR)/tools/arm_molly/build_data_files.sh menu.lst.arm_gem5_mc molly_gem5 # Generate appropriate linker script cpp -P -DBASE_ADDR=0x00100000 $(SRCDIR)/tools/arm_molly/molly_ld_script.in \ molly_gem5/molly_ld_script # Build a C file to link into a single image for the 2nd-stage # bootloader tools/bin/arm_molly menu.lst.arm_gem5_mc arm_mbi.c # Compile the complete boot image into a single executable $(ARM_GCC) -std=c99 -g -fPIC -pie -Wl,-N -fno-builtin \ -nostdlib -march=armv7-a -mapcs -fno-unwind-tables \ -Tmolly_gem5/molly_ld_script \ -I$(SRCDIR)/include \ -I$(SRCDIR)/include/arch/arm \ -I./armv7/include \ -I$(SRCDIR)/include/oldc \ -I$(SRCDIR)/include/c \ -imacros $(SRCDIR)/include/deputy/nodeputy.h \ $(SRCDIR)/tools/arm_molly/molly_boot.S \ $(SRCDIR)/tools/arm_molly/molly_init.c \ $(SRCDIR)/tools/arm_molly/lib.c \ ./arm_mbi.c \ $(SRCDIR)/lib/elf/elf32.c \ ./molly_gem5/* \ -o arm_gem5_image # ARM GEM5 Simulation Targets ARM_FLAGS=$(SRCDIR)/tools/arm_gem5/gem5script.py --caches --l2cache --n=2 --kernel=arm_gem5_image arm_gem5: arm_gem5_image $(SRCDIR)/tools/arm_gem5/gem5script.py gem5.fast $(ARM_FLAGS) arm_gem5_detailed: arm_gem5_image $(SRCDIR)/tools/arm_gem5/gem5script.py gem5.fast $(ARM_FLAGS) --cpu-type=arm_detailed .PHONY: arm_gem5 arm_gem5_detailed ####################################################################### # # Pandaboard build for the armv7-M slave image (to be used in conjunction with a master image) # (basically a normal pandaboard_image, but compiled for the cortex-m3) # ####################################################################### HETEROPANDA_SLAVE_MODULES=\ armv7-m/sbin/cpu_omap44xx \ armv7-m/sbin/init \ armv7-m/sbin/mem_serv \ armv7-m/sbin/monitor \ armv7-m/sbin/ramfsd \ armv7-m/sbin/spawnd \ armv7-m/sbin/startd \ armv7-m/sbin/skb \ armv7-m/sbin/memtest menu.lst.armv7-m: $(SRCDIR)/hake/menu.lst.armv7-m cp $< $@ heteropanda_slave: $(HETEROPANDA_SLAVE_MODULES) \ tools/bin/arm_molly \ menu.lst.armv7-m # Translate each of the binary files we need $(SRCDIR)/tools/arm_molly/build_data_files.sh menu.lst.armv7-m molly_panda_slave # Generate appropriate linker script cpp -P -DBASE_ADDR=0x0 $(SRCDIR)/tools/arm_molly/molly_ld_script.in \ molly_panda_slave/molly_ld_script # Build a C file to link into a single image for the 2nd-stage # bootloader tools/bin/arm_molly menu.lst.armv7-m panda_mbi_slave.c # Compile the complete boot image into a single executable $(ARM_GCC) -std=c99 -g -fPIC -pie -Wl,-N -fno-builtin \ -nostdlib -march=armv7-m -mcpu=cortex-m3 -mthumb -mapcs -fno-unwind-tables \ -Tmolly_panda_slave/molly_ld_script \ -I$(SRCDIR)/include \ -I$(SRCDIR)/include/arch/arm \ -I./armv7-m/include \ -I$(SRCDIR)/include/oldc \ -I$(SRCDIR)/include/c \ -imacros $(SRCDIR)/include/deputy/nodeputy.h \ $(SRCDIR)/tools/arm_molly/molly_boot.S \ $(SRCDIR)/tools/arm_molly/molly_init.c \ $(SRCDIR)/tools/arm_molly/lib.c \ ./panda_mbi_slave.c \ $(SRCDIR)/lib/elf/elf32.c \ ./molly_panda_slave/* \ -o heteropanda_slave @echo "OK - heteropanda slave image is built." @echo "you can now use this image to link into a regular pandaboard image" ####################################################################### # # Pandaboard build for the heteropanda_master: # basically a regular pandaboard_image, except that it contains # a heteropanda_slave image, and arm_molly is called with -DHETEROPANDA # ####################################################################### menu.lst.heteropanda_master: $(SRCDIR)/hake/menu.lst.heteropanda_master cp $< $@ heteropanda_master_image: $(PANDABOARD_MODULES) \ tools/bin/arm_molly \ menu.lst.heteropanda_master \ heteropanda_slave \ $(SRCDIR)/tools/arm_molly/molly_ld_script.in # Translate each of the binary files we need $(SRCDIR)/tools/arm_molly/build_data_files.sh menu.lst.heteropanda_master molly_panda # Generate appropriate linker script cpp -P -DBASE_ADDR=0x82001000 $(SRCDIR)/tools/arm_molly/molly_ld_script.in \ molly_panda/molly_ld_script # HETEROPANDA: convert slave image into a form we can insert in our image $(ARM_OBJCOPY) -I binary -O elf32-littlearm -B arm --rename-section \ .data=.rodata_thumb,alloc,load,readonly,data,contents heteropanda_slave \ molly_panda/heteropanda_slave # Build a C file to link into a single image for the 2nd-stage # bootloader tools/bin/arm_molly menu.lst.heteropanda_master panda_mbi.c # Compile the complete boot image into a single executable $(ARM_GCC) -std=c99 -g -fPIC -pie -Wl,-N -fno-builtin \ -nostdlib -march=armv7-a -mcpu=cortex-a9 -mapcs -fno-unwind-tables \ -Tmolly_panda/molly_ld_script \ -I$(SRCDIR)/include \ -I$(SRCDIR)/include/arch/arm \ -I./armv7/include \ -I$(SRCDIR)/include/oldc \ -I$(SRCDIR)/include/c \ -imacros $(SRCDIR)/include/deputy/nodeputy.h \ $(SRCDIR)/tools/arm_molly/molly_boot.S \ $(SRCDIR)/tools/arm_molly/molly_init.c \ $(SRCDIR)/tools/arm_molly/lib.c \ ./panda_mbi.c \ $(SRCDIR)/lib/elf/elf32.c \ ./molly_panda/* \ -DHETEROPANDA \ -o heteropanda_master_image @echo "OK - heteropanda_master_image is built." @echo "If your boot environment is correctly set up, you can now:" @echo "$ usbboot ./heteropanda_master_image"