Merge remote branch 'origin/sparc-dev'
[akaros.git] / kern / src / Makefrag
1 # Makefile fragment for ROS kernel.
2 # This is NOT a complete makefile;
3 # you must run GNU make in the top-level directory
4 # where the GNUmakefile is located.
5 #
6
7 KERN_SRC_DIR = $(KERN_DIR)/src
8 OBJDIRS += $(KERN_SRC_DIR)
9
10 # entry.S must be first, so that it's the first code in the text segment!!!
11 #
12 # We also snatch the use of a couple handy source files
13 # from the lib directory, to avoid gratuitous code duplication.
14 KERN_SRCFILES := $(KERN_ARCH_SRCFILES) \
15                  $(KERN_SRC_DIR)/init.c \
16                  $(KERN_SRC_DIR)/monitor.c \
17                  $(KERN_SRC_DIR)/printf.c \
18                  $(KERN_SRC_DIR)/sched.c \
19                  $(KERN_SRC_DIR)/printfmt.c \
20                  $(KERN_SRC_DIR)/smp.c \
21                  $(KERN_SRC_DIR)/multiboot.c \
22                  $(KERN_SRC_DIR)/readline.c \
23                  $(KERN_SRC_DIR)/string.c \
24                  $(KERN_SRC_DIR)/atomic.c \
25                  $(KERN_SRC_DIR)/workqueue.c \
26                  $(KERN_SRC_DIR)/colored_caches.c \
27                  $(KERN_SRC_DIR)/page_alloc.c \
28                  $(KERN_SRC_DIR)/pmap.c \
29                  $(KERN_SRC_DIR)/env.c \
30                  $(KERN_SRC_DIR)/manager.c \
31                  $(KERN_SRC_DIR)/syscall.c \
32                  $(KERN_SRC_DIR)/timer.c \
33                  $(KERN_SRC_DIR)/kfs.c \
34                  $(KERN_SRC_DIR)/process.c \
35                  $(KERN_SRC_DIR)/kmalloc.c \
36                  $(KERN_SRC_DIR)/hashtable.c \
37                  $(KERN_SRC_DIR)/schedule.c \
38                  $(KERN_SRC_DIR)/mm.c \
39                  $(KERN_SRC_DIR)/resource.c \
40                  $(KERN_SRC_DIR)/slab.c \
41                  $(KERN_SRC_DIR)/testing.c
42
43 # Only build files if they exist.
44 KERN_SRCFILES := $(wildcard $(KERN_SRCFILES))
45
46 KERN_APPFILES := \
47                  $(USER_APPS_ROSLIB_DIR)/proctests \
48                  $(USER_APPS_ROSLIB_DIR)/fptest \
49                  $(USER_APPS_ROSLIB_DIR)/null \
50                  $(USER_APPS_ROSLIB_DIR)/spawn \
51                  $(USER_APPS_ROSLIB_DIR)/hello \
52                  $(USER_APPS_ROSLIB_DIR)/mhello \
53                  $(USER_APPS_ROSLIB_DIR)/mproctests \
54                  $(USER_APPS_ROSLIB_DIR)/measurements \
55                  $(USER_APPS_PARLIB_PTHREAD_DIR)/pthread_test \
56                  $(USER_APPS_PARLIB_PTHREAD_DIR)/blackscholes \
57                  $(USER_APPS_PARLIB_DIR)/draw_nanwan_standalone \
58                  $(USER_APPS_PARLIB_DIR)/channel_test_client \
59                  $(USER_APPS_PARLIB_DIR)/channel_test_server \
60                  $(USER_APPS_PARLIB_DIR)/hello \
61                  $(USER_APPS_PARLIB_DIR)/manycore_test \
62                  $(USER_APPS_PARLIB_DIR)/matrix
63 #                 $(USER_APPS_PARLIB_DIR)/open_read
64
65 ifeq ($(TARGET_ARCH),sparc)
66 KERN_APPFILES += \
67                  $(USER_APPS_USR_DIR)/blackscholes \
68                  $(USER_APPS_USR_DIR)/streamcluster \
69                  $(USER_APPS_USR_DIR)/swaptions \
70                  $(USER_APPS_USR_DIR)/bodytrack \
71                  $(USER_APPS_USR_DIR)/fluidanimate \
72                  $(USER_APPS_USR_DIR)/x264 \
73                  $(USER_APPS_USR_DIR)/cpptest \
74                  $(USER_APPS_USR_DIR)/condtest \
75                  $(USER_APPS_USR_DIR)/synthetic_procobv_cacheobv_offbwobv \
76                  $(USER_APPS_USR_DIR)/synthetic_procplus_cacheplus_offbwplus 
77 endif
78
79 KERN_LDFLAGS   := $(KERN_LDFLAGS) -L$(OBJDIR)/$(KERN_DIR) \
80                   -T $(KERN_ARCH_SRC_DIR)/kernel.ld
81
82 KERN_OBJFILES  := $(patsubst $(KERN_DIR)/%.c, \
83                              $(OBJDIR)/$(KERN_DIR)/%.o, \
84                              $(KERN_SRCFILES))
85 KERN_OBJFILES  := $(patsubst $(KERN_DIR)/%.S, \
86                              $(OBJDIR)/$(KERN_DIR)/%.o, \
87                              $(KERN_OBJFILES))
88
89 KERN_APPFILES  := $(patsubst %, $(OBJDIR)/%, $(KERN_APPFILES))
90
91 KERN_LDDEPENDS := $(KERN_OBJFILES) $(KERN_APPFILES) $(ARCH_DIR)/$(TARGET_ARCH)/kernel.ld \
92                   $(OBJDIR)/$(KERN_DIR)/libivykern.a
93
94 KERN_LDLIBS    := -livykern
95
96 KERN_GCC_LIB   ?= $(GCC_LIB)
97
98 $(OBJDIR)/$(KERN_DIR)/%.o: $(KERN_DIR)/%.c
99         @echo + cc [KERN] $<
100         @mkdir -p $(@D)
101         $(V)$(CC) $(KERN_CFLAGS) -c -o $@ $<
102
103 $(OBJDIR)/$(KERN_DIR)/%.o: $(KERN_DIR)/%.S
104         @echo + as [KERN] $<
105         @mkdir -p $(@D)
106         $(V)$(CC) $(KERN_CFLAGS) -D__ASSEMBLER__ -c -o $@ $<
107
108 $(OBJDIR)/$(KERN_DIR)/kernel: $(KERN_LDDEPENDS)
109         @echo + ld [KERN] $@
110         $(V)$(LD) -o $@ $(KERN_LDFLAGS) $(KERN_OBJFILES) $(KERN_LDLIBS) \
111                         $(KERN_GCC_LIB) -b binary $(KERN_APPFILES)
112         $(V)$(OBJDUMP) -S $@ > $@.asm
113         $(V)$(NM) -n $@ > $@.sym
114
115 all: $(OBJDIR)/$(KERN_DIR)/kernel
116
117 #$(OBJDIR)/$(KERN_DIR)/bochs.img: $(OBJDIR)/$(KERN_DIR)/kernel $(OBJDIR)/$(KERN_DIR)/boot
118 #       @echo + mk [KERN] $@
119 #       $(V)dd if=/dev/zero of=$(OBJDIR)/$(KERN_DIR)/bochs.img~ count=10080 2>/dev/null
120 #       $(V)dd if=$(OBJDIR)/$(KERN_DIR)/boot of=$(OBJDIR)/$(KERN_DIR)/bochs.img~ conv=notrunc 2>/dev/null
121 #       $(V)dd if=$(OBJDIR)/$(KERN_DIR)/kernel of=$(OBJDIR)/$(KERN_DIR)/bochs.img~ seek=1 conv=notrunc 2>/dev/null
122 #       $(V)mv $(OBJDIR)/kern/bochs.img~ $(OBJDIR)/kern/bochs.img
123
124 ifeq ($(AUGMENT_GCC),TRUE)
125 all: augment-gcc
126 endif