Merge branch 'master' of git://iolanguage.com/Io
[io.git] / Makefile.lib
blob308d93966ec4a0f1fb113ffa3899d2dc9c7bf3f9
1 ifeq ($(shell [ -f Makefile.local ] && echo true),true)
2 ALL_BEGIN := $(MAKE) -f Makefile.local all_begin
3 ALL_END := $(MAKE) -f Makefile.local all_end
4 MAKE_LOCAL_CLEAN := $(MAKE) -f Makefile.local clean
5 else
6 ALL_BEGIN := 
7 ALL_END := 
8 MAKE_LOCAL_CLEAN := 
9 endif
11 #CC ?= g++
13 RANLIB ?= ranlib
14 AR     ?= ar
15 ARFLAGS := rcu 
16 AROUTFLAG :=
17 CCOUTFLAG := -o 
18 LINKDLL := $(CC)
19 LINKDLLOUTFLAG := -o 
20 LINKDIRFLAG := -L
21 LINKLIBFLAG := -l
23 # may need to remove --param max-inline-insns-single=500 for older versions of gccs
24 WARN :=-Wstrict-prototypes 
25 #-Winline
26 #--param max-inline-insns-single=500
28 #-ansi -pedantic
29 OPTIMIZE :=-O3 -g 
30 #-msse2 -msse -mmmx
31 #OPTIMIZE :=-O3 -ffast-math -ftree-vectorize  -ftree-vectorizer-verbose=4
32 DLL_SUFFIX := so
33 DLL_COMMAND := -shared
34 FLAT_NAMESPACE :=
35 dependson := $(shell cat depends)
37 HEADERS  :=-I. -I./source
38 others := $(dependson)
39 others := $(addprefix -I../,$(others))
40 others := $(addsuffix /_build/headers,$(others))
41 HEADERS += $(others)
43 DLL_L := $(dependson)
44 DLL_L := $(addprefix -L../,$(DLL_L))
45 DLL_L := $(addsuffix /_build/dll,$(DLL_L))
47 DLL_l := $(dependson)
48 DLL_l := $(addprefix -l,$(DLL_l))
50 CFLAGS = $(OPTIMIZE) $(WARN) $(HEADERS) #--param max-inline-insns-single=500
52 # Uncommment for Coros to register their stack with Valgrind
53 #CFLAGS += -DUSE_VALGRIND
55 ### PLATFORM #####################################################
57 SYS ?= $(shell uname -s)
59 ifeq ($(SYS),Darwin)
60 CFLAGS += -falign-loops=16
61 CFLAGS += -fPIC
62 DLL_SUFFIX := dylib
63 DLL_COMMAND := -dynamiclib
64 FLAT_NAMESPACE := -flat_namespace
65 endif
67 ifeq ($(SYS),DragonFly)
68 LFLAGS += -lm
69 endif
71 ifeq ($(SYS),Linux)
72 CFLAGS += -falign-loops=16
73 CFLAGS += -fPIC
74 endif
76 ifeq ($(SYS),IRIX)
77 RANLIB ?= touch
78 endif
80 ifneq (,$(findstring CYGW,$(SYS)))
81 DLL_SUFFIX := dll
82 endif
84 ifneq (,$(findstring MINGW,$(SYS)))
85 DLL_SUFFIX := dll
86 endif
88 ifneq (,$(findstring Windows,$(SYS)))
89 CC := cl -nologo
90 CCOUTFLAG :=-Fo
91 WARN := 
92 OPTIMIZE :=-Zi -MD -D_USE_MATH_DEFINES -DWIN32 -DNDEBUG -D_CRT_SECURE_NO_DEPRECATE
93 AR := link -lib
94 AROUTFLAG :=-out:
95 ARFLAGS :=
96 LINKDLL := link 
97 LINKDLLOUTFLAG :=-out:
98 LINKDIRFLAG := -libpath:
99 LINKLIBFLAG := lib
100 DLL_LIB_SUFFIX := .lib
101 DLL_COMMAND := -link /INCREMENTAL:NO -subsystem:WINDOWS -machine:X86 -DLL $(DEF_FILE)
102 DLL_SUFFIX := dll
103 DLL_EXTRAS := ws2_32.lib shell32.lib
104 FLAT_NAMESPACE :=
105 RANLIB := echo no ranlib
106 endif
108 ### FILES #########################################################
110 NAME    := $(notdir $(subst $() ,_,$(shell pwd)))
111 LIBR    := _build/lib/lib$(NAME).a
112 DLL     := _build/dll/lib$(NAME).$(DLL_SUFFIX)
113 infiles := $(wildcard source/*.c) 
114 #infiles += $(wildcard *.S)
115 asmfiles := $(wildcard source/*.S)
116 hfiles  := $(wildcard source/*.h)
117 objects := $(notdir $(infiles))
118 objects := $(basename $(objects))
119 objects := $(addsuffix .o,$(objects))
120 objects := $(addprefix _build/objs/,$(objects))
122 vmall_objects := $(notdir $(infiles))
123 vmall_objects := $(basename $(vmall_objects))
124 vmall_objects := $(addsuffix .o,$(vmall_objects))
125 vmall_objects := $(addprefix _build/vmall_objs/,$(vmall_objects))
128 DLL_L := $(dependson)
129 DLL_L := $(addprefix $(LINKDIRFLAG)../,$(DLL_L))
130 DLL_L := $(addsuffix /_build/dll,$(DLL_L))
132 DLL_l := $(dependson)
133 DLL_l := $(addprefix $(LINKLIBFLAG),$(DLL_l))
134 DLL_l := $(addsuffix $(DLL_LIB_SUFFIX),$(DLL_l))
136 DEF_FILE :=
138 ### RULES ###########################################################
140 all:
141         $(ALL_BEGIN) 
142         mkdir -p _build
143         mkdir -p _build/objs
144         mkdir -p _build/headers
145         mkdir -p _build/lib
146         mkdir -p _build/dll
147         $(MAKE) $(LIBR)
148         $(MAKE) $(DLL) 
149 ifneq (,$(findstring Windows,$(SYS)))
150         mkdir -p _build/vmall_objs
151         $(MAKE) vmall_objs
152 endif
153 ifneq (,$(hfiles))
154         cp $(hfiles) _build/headers
155 endif
156         $(ALL_END)
158 _build/objs/%.o: source/%.c
159         $(CC) -DINSTALL_PREFIX=\"$(INSTALL_PREFIX)\" $(CFLAGS) -c $< $(CCOUTFLAG)$@
161 _build/vmall_objs/%.o: source/%.c
162         $(CC) -DINSTALL_PREFIX=\"$(INSTALL_PREFIX)\" $(CFLAGS) \
163         -DBUILDING_IOVMALL_DLL -c $< $(CCOUTFLAG)$@
166 _build/vmall_objs:
167         mkdir -p $@
169 vmall_objs: _build/vmall_objs $(vmall_objects)
171 $(LIBR): $(objects)
172 ifneq ($(asmfiles),)
173         $(CC) $(CFLAGS) -c $(asmfiles) $(CCOUTFLAG)_build/objs/asm.o || true
174 endif
175         $(AR) $(ARFLAGS) $(AROUTFLAG)$@ _build/objs/*.o
176         $(RANLIB) $@
178 $(DLL): $(objects)
179         $(LINKDLL) $(DLL_COMMAND) $(FLAT_NAMESPACE) $(DLL_L) _build/objs/*.o $(LINKDLLOUTFLAG)$(DLL) $(DLL_l) $(DLL_EXTRAS)
180 ifneq (,$(findstring Windows,$(SYS)))
181         mt.exe -manifest $@.manifest -outputresource:$@
182         rm $@.manifest
183 endif
185 clean:
186         rm -rf _build
187         $(MAKE_LOCAL_CLEAN)