cleaned up harts stack allocation
[akaros.git] / user / parlib / src / Makefrag
1 USER_PARLIB_SRC_DIR = $(USER_PARLIB_DIR)/src
2 OBJDIRS += $(USER_PARLIB_SRC_DIR)
3
4 USER_PARLIB_SRC_CFLAGS   := $(USER_CFLAGS) \
5                             -I$(USER_PARLIB_DIR)/inc \
6                             -I$(USER_PARLIB_NEWLIB_DIR)/include
7 ifeq ($(COMPILER),IVY)
8 PATCHFILE = $(OBJDIR)/$(USER_PARLIB_DIR)/libc_patch.i
9 USER_PARLIB_SRC_CFLAGS   += --nopatch --patch=$(PATCHFILE)
10 endif
11
12 USER_PARLIB_SRC_SRCFILES := $(USER_PARLIB_SRC_DIR)/debug.c \
13                             $(USER_PARLIB_SRC_DIR)/debugfmt.c \
14                             $(USER_PARLIB_SRC_DIR)/syscall.c \
15                             $(USER_PARLIB_SRC_DIR)/parlibmain.c \
16                             $(USER_PARLIB_SRC_DIR)/channel.c \
17                             $(USER_PARLIB_SRC_DIR)/hart.c \
18                             $(USER_PARLIB_SRC_DIR)/newlib_backend.c \
19                             $(USER_PARLIB_ARCH_SRCFILES)
20
21 USER_PARLIB_SRC_OBJFILES := $(patsubst $(USER_PARLIB_SRC_DIR)/%.c, \
22                             $(OBJDIR)/$(USER_PARLIB_SRC_DIR)/%.o, \
23                             $(USER_PARLIB_SRC_SRCFILES))
24 USER_PARLIB_SRC_OBJFILES := $(patsubst $(USER_PARLIB_SRC_DIR)/%.S, \
25                             $(OBJDIR)/$(USER_PARLIB_SRC_DIR)/%.o, \
26                             $(USER_PARLIB_SRC_OBJFILES))
27
28 USER_PARLIB_PTHREAD_SRCFILES := $(USER_PARLIB_SRC_DIR)/pthread.c
29
30 USER_PARLIB_PTHREAD_OBJFILES := $(patsubst $(USER_PARLIB_SRC_DIR)/%.c, \
31                                 $(OBJDIR)/$(USER_PARLIB_SRC_DIR)/%.o, \
32                                 $(USER_PARLIB_PTHREAD_SRCFILES))
33 USER_PARLIB_PTHREAD_OBJFILES := $(patsubst $(USER_PARLIB_SRC_DIR)/%.S, \
34                                 $(OBJDIR)/$(USER_PARLIB_SRC_DIR)/%.o, \
35                                 $(USER_PARLIB_PTHREAD_OBJFILES))
36
37 ANNOTS := $(shell dirname $(shell which ivycc))
38 ANNOTS := $(ANNOTS)/../lib/ivy/include/deputy/annots.h
39
40 $(PATCHFILE): $(USER_PARLIB_DIR)/inc/libc_patch.h
41         @echo + cpp [PARLIB] $^
42         @mkdir -p $(@D)
43         $(V)gcc -E -include $(ANNOTS) -o $@ $^
44
45 $(OBJDIR)/$(USER_PARLIB_SRC_DIR)/%.o: $(USER_PARLIB_SRC_DIR)/%.c $(PATCHFILE)
46         @echo + cc [PARLIB] $<
47         @mkdir -p $(@D)
48         $(V)$(CC) $(USER_PARLIB_SRC_CFLAGS) -c -o $@ $<
49
50 $(OBJDIR)/$(USER_PARLIB_SRC_DIR)/%.o: $(USER_PARLIB_SRC_DIR)/%.S
51         @echo + as [PARLIB] $<
52         @mkdir -p $(@D)
53         $(V)$(CC) $(USER_PARLIB_SRC_CFLAGS) -D__ASSEMBLER__ -c -o $@ $<
54
55 $(OBJDIR)/$(USER_PARLIB_DIR)/libparlib.a: $(USER_PARLIB_SRC_OBJFILES)
56         @echo + ar [PARLIB] $@
57         @mkdir -p $(@D)
58         $(V)$(AR) r $@ $(USER_PARLIB_SRC_OBJFILES) 2>/dev/null
59
60 $(OBJDIR)/$(USER_PARLIB_DIR)/libparlib-pthread.a: $(USER_PARLIB_DIR)/newlib/lib/$(TARGET_ARCH)/libc.a $(USER_PARLIB_DIR)/newlib/lib/$(TARGET_ARCH)/libg.a $(USER_PARLIB_DIR)/newlib/lib/$(TARGET_ARCH)/libm.a $(OBJDIR)/$(USER_PARLIB_DIR)/libparlib.a $(OBJDIR)/$(USER_PARLIB_DIR)/libpthread.a
61         @mkdir -p $(OBJDIR)/$(USER_PARLIB_DIR)/tmp
62         @rm -f $(OBJDIR)/$(USER_PARLIB_DIR)/*.o
63         @cp $(USER_PARLIB_DIR)/newlib/lib/$(TARGET_ARCH)/libc.a $(OBJDIR)/$(USER_PARLIB_DIR)/tmp
64         @cp $(USER_PARLIB_DIR)/newlib/lib/$(TARGET_ARCH)/libg.a $(OBJDIR)/$(USER_PARLIB_DIR)/tmp
65         @cp $(USER_PARLIB_DIR)/newlib/lib/$(TARGET_ARCH)/libm.a $(OBJDIR)/$(USER_PARLIB_DIR)/tmp
66         @cd $(OBJDIR)/$(USER_PARLIB_DIR)/tmp; $(AR) x libc.a
67         @cd $(OBJDIR)/$(USER_PARLIB_DIR)/tmp; $(AR) x libg.a
68         @cd $(OBJDIR)/$(USER_PARLIB_DIR)/tmp; $(AR) x libm.a
69         @cd $(OBJDIR)/$(USER_PARLIB_DIR)/tmp; $(AR) x $(GCC_LIB)
70         @echo + ar [PARLIB] $@
71         @mkdir -p $(@D)
72         $(V)$(AR) r $@ $(USER_PARLIB_PTHREAD_OBJFILES) $(USER_PARLIB_SRC_OBJFILES) $(OBJDIR)/$(USER_PARLIB_DIR)/tmp/*.o 2>/dev/null
73
74 $(OBJDIR)/$(USER_PARLIB_DIR)/libpthread.a: $(USER_PARLIB_PTHREAD_OBJFILES)
75         @echo + ar [PARLIB] $@
76         @mkdir -p $(@D)
77         $(V)$(AR) r $@ $(USER_PARLIB_PTHREAD_OBJFILES) 2>/dev/null
78