comparison Makefile @ 1:e78566595089

initial import
author mandel
date Mon, 11 May 2009 16:01:50 +0000
parents
children e747af2e6b46
comparison
equal deleted inserted replaced
0:36fb74dc547d 1:e78566595089
1 ## TODO: CPP_SHARED is very experemental on posix.
2 ## TODO: "make clean" don`t work as expected.
3 ## TODO: add target "install"
4 ## TODO: delete 'lib' prefix from output library name under windows.
5
6 ## Read variable from shell.
7 export QTDIR
8 export QTDIR_INC
9 export QTDIR_LIB
10 ## End. Read variable from shell.
11
12 ## Try identify system.
13 ifeq ($(MAKE), mingw32-make) # TODO: add another system.
14 SYSTEM = windows
15 endif
16 ifndef SYSTEM
17 SYSTEM = posix
18 endif
19 ## End, Try identify system.
20
21 ## Load system specify settings.
22 include build/$(SYSTEM).makefile
23
24 ## Main settings.
25 ## D compiler.
26 ifndef $(DC)
27 DC = dmd
28 endif
29 ## C++ compiler.
30 ifndef $(CC)
31 CC = g++
32 endif
33 ## Archiver.
34 ifndef $(AR)
35 AR = ar
36 endif
37 ## Set default target.
38 ifndef $(BUILD_TYPE)
39 BUILD_TYPE = release
40 endif
41
42 ## Tmp path.
43 ifndef $(TMP_PATH)
44 TMP_PATH_ = tmp
45 TMP_PATH = $(TMP_PATH_)$(SL)$(BUILD_TYPE)
46 endif
47 ## Output path.
48 ifndef $(OUTPUT_PATH)
49 OUTPUT_PATH = lib
50 endif
51 ## Prefix for lib name.
52 ifndef $(NAME_PREFIX)
53 NAME_PREFIX = qtd
54 endif
55 ifndef $(PACKAGES)
56 PACKAGES = core gui
57 endif
58 LIB_PREFIX = lib
59 CC_INCLUDE += include $(QTDIR_INC) $(QTDIR_INC)$(SL)Qt $(QTDIR_INC)$(SL)QtCore $(QTDIR_INC)$(SL)QtGui $(QTDIR_INC)$(SL)QtOpenGL $(QTDIR_INC)$(SL)QtSvg
60 D_INCLUDE +=
61 CC_LFLAGS += -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -mthreads
62 CC_CFLAGS +=
63 D_CFLAGS +=
64 CC_LIB_PATH += $(QTDIR_LIB) $(TMP_PATH)
65 D_LIB_PATH += $(TMP_PATH)
66
67 ## D target
68 ifndef D_TARGET
69 D_TARGET = d1-tango
70 endif
71 ifeq ($(D_TARGET), d1-tango)
72 D_VERSION = 1
73 else
74 D_VERSION = 2
75 endif
76
77 #End. Main settings.
78
79 ## Flags for debug version.
80 ifeq ($(BUILD_TYPE), debug)
81 CC_CFLAGS += -O0
82 D_CFLAGS += -debug -g -gc
83 LIB_POSTFIX = d
84 else ifeq ($(BUILD_TYPE), release)
85 ## End. Flags for debug version.
86 ## Flags for release version
87 CC_CFLAGS += -O
88 D_CFLAGS += -O -release -inline
89 endif
90 ## End. Flags for release version.
91
92 ## Load classes list.
93 ## param 1 - package name.
94 define MODULE_template
95 include build/$(1).makefile
96 qt_$(1)_lib_name = $$(qt_$(1)_name)$(QT_LIB_POSTFIX)
97 $(1)_cpp_files += $$($(1)_classes:%=cpp/qt_$(1)/%_shell.cpp)
98 $(1)_cpp_obj_files = $$($(1)_cpp_files:cpp/%.cpp=$(TMP_PATH)/%.o)
99 $(1)_d_files += $$($(1)_classes:%=qt/$(1)/%.d)
100 endef
101 $(foreach package,$(PACKAGES),$(eval $(call MODULE_template,$(package))))
102 ## End. Load classes list
103
104 ## DMD compile template bug fix
105 ifeq ($(DC), dmd)
106 NOT_SEPARATE_D_OBJ = true
107 endif
108
109
110 ## CPP_SHARED options.
111 ifeq ($(CPP_SHARED), true)
112 CC_CFLAGS += -DCPP_SHARED
113 GEN_OPT += --cpp_shared
114 endif
115 ## End. CPP_SHARED options.
116
117 all: dgen build
118
119 windows:
120 $(MAKE) SYSTEM=windows
121
122 posix:
123 $(MAKE) SYSTEM=posix
124
125 release: all
126
127 debug:
128 $(MAKE) BUILD_TYPE=debug
129
130 build: mkdir $(PACKAGES)
131
132 ## DGenerator
133 make_gen:
134 cd generator && qmake && $(MAKE)
135
136 dgen: make_gen
137 cd generator && $(GEN) $(GEN_OPT) --d-target=$(D_TARGET) --output-directory=../ qtjambi_masterinclude.h build_opengl.txt
138 ## DGenerator ## end
139
140 mkdir:
141 @$(MKDIR) $(TMP_PATH_)
142 @$(MKDIR) $(TMP_PATH)
143 @$(MKDIR) $(TMP_PATH)$(SL)qt_qtd
144 @$(MKDIR) $(TMP_PATH)$(SL)qtd
145 @$(MKDIR) $(OUTPUT_PATH)
146
147 ## Build cpp files.
148 $(TMP_PATH)/%.o: cpp/%.cpp
149 $(CC) $(CC_CFLAGS) $(CC_INCLUDE:%=-I%) -c $(@:$(TMP_PATH)/%.o=cpp/%.cpp) -o$@
150
151 ## Build d files.
152 $(TMP_PATH)/%_d.o: qt/%.d
153 $(DC) $(D_CFLAGS) -c $(@:$(TMP_PATH)/%_d.o=qt/%.d) -of$@
154
155 ## Build package.
156 ## param 1 - package name.
157 define BUILD_template
158 ## mkdir
159 mkdir_$(1):
160 @$(MKDIR) $(TMP_PATH)$(SL)qt_$(1)
161 @$(MKDIR) $(TMP_PATH)$(SL)$(1)
162 ## End. mkdir
163 ## Build d part.
164 ifeq ($(NOT_SEPARATE_D_OBJ), true)
165 ## DMD compile template bug fix
166 $(1)_D_RULE =$(TMP_PATH)/$(1)_dobj.$(D_OBJ_EXT)
167 $$($(1)_D_RULE):
168 $(DC) $(D_CFLAGS) $(D_INCLUDE) -c $$($(1)_d_files) -of$$($(1)_D_RULE)
169 else
170 $(1)_D_RULE = $$($(1)_d_files:qt/%.d=$(TMP_PATH)/%_d.o)
171 endif
172 ## End. Build d part.
173 ## Build cpp part.
174 ifeq ($(CPP_SHARED), true)
175 ifeq ($(SYSTEM), windows)
176 $(1)_CPP_DYN_LIB = $(OUTPUT_PATH)$(SL)$(LIB_PREFIX)$(NAME_PREFIX)$(1)$(LIB_POSTFIX).$(DYN_LIB_EXT)
177 $$($(1)_CPP_DYN_LIB): $$($(1)_cpp_obj_files)
178 $(CC) $(CC_LFLAGS) -shared $$($(1)_cpp_obj_files) -o $$($(1)_CPP_DYN_LIB) $(CC_LIB_PATH:%=-L%) -l$(qt_$(1)_lib_name) $$($(1)_link_cpp:%=-l%) -Wl,--out-implib,$(TMP_PATH)\$(LIB_PREFIX)$(NAME_PREFIX)$(1)_cpp.a
179 $(1)_CPP_RULE = $(TMP_PATH)\cpp_$(1).$(LIB_EXT)
180 $$($(1)_CPP_RULE): $$($(1)_CPP_DYN_LIB)
181 $(IMPLIB) $$($(1)_CPP_RULE) $$($(1)_CPP_DYN_LIB)
182 else ## CPP_SHARED != true
183 $(1)_CPP_RULE = $(OUTPUT_PATH)$(SL)$(LIB_PREFIX)$(NAME_PREFIX)$(1)$(LIB_POSTFIX).$(DYN_LIB_EXT)
184 $$($(1)_CPP_RULE): $$($(1)_cpp_obj_files)
185 $(CC) $(CC_LFLAGS) $(QTDIR_LIB)/$(LIB_PREFIX)$(qt_$(1)_name).$(DYN_LIB_EXT) $$($(1)_link_cpp:%=-l%) $$($(1)_cpp_obj_files) -o $$($(1)_CPP_RULE)
186 endif ## CPP_SHARED
187 DELETE_FILES += $$($(1)_CPP_DYN_LIB) $$($(1)_cpp_obj_files) $(TMP_PATH)\$(LIB_PREFIX)$(NAME_PREFIX)$(1)_cpp.a
188 else
189 $(1)_CPP_RULE = $$($(1)_cpp_obj_files)
190 endif
191 ## End. Build cpp part.
192
193 DELETE_FILES += $$($(1)_D_RULE) $$($(1)_CPP_RULE) $(OUTPUT_PATH)/$(LIB_PREFIX)$$(qt_$(1)_name)D.$(LIB_EXT)
194 ## Implib link.
195 $(1)_LIB = $(OUTPUT_PATH)$(SL)$(LIB_PREFIX)$(NAME_PREFIX)$(1)$(LIB_POSTFIX).$(LIB_EXT)
196 ifeq ($(SYSTEM), windows)
197 $$($(1)_LIB): $$($(1)_D_RULE) $$($(1)_CPP_RULE)
198 $(DC) $$($(1)_D_RULE) $$($(1)_CPP_RULE) $(D_LIB_PATH:%=-L-L%) $$($(1)_link_d:%=-L-l%) -lib -of$$($(1)_LIB)
199 else
200 $$($(1)_LIB): $$($(1)_D_RULE) $$($(1)_CPP_RULE)
201 $(AR) rcs $$($(1)_LIB) $$($(1)_D_RULE) $$($(1)_CPP_RULE)
202 endif
203 # End. Implib link.
204 $(1): mkdir_$(1) $$($(1)_LIB)
205 endef
206 $(foreach package,$(PACKAGES),$(eval $(call BUILD_template,$(package))))
207 ## End. Build package.
208
209 clean:
210 @$(RM) $(DELETE_FILES)