Complete rewrite of c3po for multicore
[akaros.git] / user / c3po / Makefile
1 TARGET_ARCH ?= i686
2 CFLAGS = -O2 -static -std=gnu99 -fomit-frame-pointer -DOPTIMIZE=2 -DNO_TIMING
3 LIBNAME = c3po
4 SUBDIRS = util stack threads #aio 
5 V ?= @
6
7 GCCPREFIX ?= $(TARGET_ARCH)-ros-
8 CC := $(GCCPREFIX)gcc
9 GCC_ROOT := $(shell which $(CC) | xargs dirname)/../
10
11 SRCDIR := 
12 OBJDIR := $(SRCDIR)obj
13 INCDIR = $(SRCDIR)include
14 UTILDIR = $(SRCDIR)util
15 STACKDIR = $(SRCDIR)stack
16 THREADSDIR = $(SRCDIR)threads
17 AIODIR = $(SRCDIR)aio
18
19 INCS = -I$(INCDIR) -I$(UTILDIR) -I$(THREADSDIR) -I$(STACKDIR) -I.
20 FINALLIB = $(OBJDIR)/lib$(LIBNAME).a
21
22 uc = $(shell echo $(1) | tr a-z A-Z)
23 lc = $(shell echo $(1) | tr A-Z a-z)
24 libname = $(OBJDIR)/$(1)/lib$(1).a
25 cleanname = $(1)-clean
26 makefragname = $(1)/Makefrag
27 filename = $(notdir $(1))
28 dirname = $(dir $(1))
29
30 CLEANS := $(foreach x, $(SUBDIRS), $(call cleanname,$(x)))
31 MAKEFRAGS := $(foreach x, $(SUBDIRS), $(call makefragname,$(x)))
32 LIBUCNAME := $(call uc, $(LIBNAME))
33
34 all: $(FINALLIB)
35
36 include $(MAKEFRAGS)
37 ALLOBJS = $(foreach x, $(SUBDIRS), $(wildcard $(OBJDIR)/$(x)/*.o))
38 ALLLIBS = $(foreach x, $(SUBDIRS), $(call libname,$(x)))
39
40 $(FINALLIB): $(ALLLIBS)
41         @echo + ar [$(LIBUCNAME)] $@
42         @mkdir -p $(@D)
43         $(V)$(AR) rc $@ $(ALLOBJS)
44
45 install: $(FINALLIB)
46         cp $(FINALLIB) $(GCC_ROOT)/$(TARGET_ARCH)-ros/lib/
47         mkdir -p $(GCC_ROOT)/$(TARGET_ARCH)-ros/include/$(LIBNAME)
48         cp -R $(INCDIR)/* $(GCC_ROOT)/$(TARGET_ARCH)-ros/include/$(LIBNAME)
49
50 clean: $(CLEANS)
51         @echo + clean [$(LIBUCNAME)]
52         $(V)rm -rf $(FINALLIB)
53         $(V)rm -rf $(OBJDIR)
54