271
|
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 ($(strip $(shell uname)),Linux)
|
|
14 SYSTEM=posix
|
|
15 else
|
|
16 ifeq ($(strip $(shell uname)),Darwin)
|
|
17 SYSTEM=posix
|
|
18 else
|
|
19 SYSTEM=windows
|
|
20 endif
|
|
21 endif
|
|
22 ## End, Try identify system.
|
|
23
|
|
24 ## Load system specify settings.
|
|
25 include build/$(SYSTEM).makefile
|
|
26
|
|
27 ## Main settings.
|
|
28 ## D compiler.
|
|
29 ifndef $(DC)
|
|
30 DC = dmd
|
|
31 endif
|
|
32 ## C++ compiler.
|
|
33 ifndef $(CC)
|
|
34 CC = g++
|
|
35 endif
|
|
36 ## Archiver.
|
|
37 ifndef $(AR)
|
|
38 AR = ar
|
|
39 endif
|
|
40 ## Set default target.
|
|
41 ifndef $(BUILD_TYPE)
|
|
42 BUILD_TYPE = release
|
|
43 endif
|
|
44
|
|
45 ## Tmp path.
|
|
46 ifndef $(TMP_PATH)
|
|
47 TMP_PATH_ = tmp
|
|
48 TMP_PATH = $(TMP_PATH_)$(SL)$(BUILD_TYPE)
|
|
49 endif
|
|
50 ## Output path.
|
|
51 ifndef $(OUTPUT_PATH)
|
|
52 OUTPUT_PATH = lib
|
|
53 endif
|
|
54 ## Prefix for lib name.
|
|
55 ifndef $(NAME_PREFIX)
|
|
56 NAME_PREFIX = qtd
|
|
57 endif
|
|
58
|
|
59 ifndef $(PACKAGES)
|
|
60 PACKAGES = core gui
|
|
61 endif
|
|
62
|
|
63 ifeq ($(DMD_WIN), false)
|
|
64 LIB_PREFIX = lib
|
|
65 endif
|
|
66
|
|
67 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
|
|
68 D_INCLUDE +=
|
|
69 CC_LFLAGS += -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -mthreads
|
|
70 CC_CFLAGS +=
|
|
71 D_CFLAGS +=
|
|
72 CC_LIB_PATH += $(QTDIR_LIB) $(TMP_PATH)
|
|
73 D_LIB_PATH += $(TMP_PATH)
|
|
74
|
|
75 ## D target
|
|
76 ifndef D_TARGET
|
|
77 D_TARGET = d1-tango
|
|
78 endif
|
|
79
|
|
80 ifeq ($(D_TARGET), d1-tango)
|
|
81 D_VERSION = 1
|
|
82 else
|
|
83 D_VERSION = 2
|
|
84 endif
|
|
85 D_CFLAGS += -Iqt/d$(D_VERSION)
|
|
86
|
|
87 #End. Main settings.
|
|
88
|
|
89 ## Flags for debug version.
|
|
90 ifeq ($(BUILD_TYPE), debug)
|
|
91 CC_CFLAGS += -O0
|
|
92 D_CFLAGS += -debug -g -gc
|
|
93 LIB_POSTFIX = d
|
|
94 else ifeq ($(BUILD_TYPE), release)
|
|
95 ## End. Flags for debug version.
|
|
96 ## Flags for release version
|
|
97 CC_CFLAGS += -O
|
|
98 D_CFLAGS += -O -release -inline
|
|
99 endif
|
|
100 ## End. Flags for release version.
|
|
101
|
|
102 ## Load classes list.
|
|
103 ## param 1 - package name.
|
|
104 define MODULE_template
|
|
105 include build/$(1).makefile
|
|
106 qt_$(1)_lib_name = $$(qt_$(1)_name)$(QT_LIB_POSTFIX)
|
|
107 $(1)_cpp_files += $$($(1)_classes:%=cpp/qt_$(1)/%_shell.cpp)
|
|
108 $(1)_cpp_obj_files = $$($(1)_cpp_files:cpp/%.cpp=$(TMP_PATH)/%.o)
|
|
109 $(1)_d_files += $$($(1)_classes:%=qt/$(1)/%.d)
|
|
110 endef
|
|
111 $(foreach package,$(PACKAGES),$(eval $(call MODULE_template,$(package))))
|
|
112 ## End. Load classes list
|
|
113
|
|
114 ## DMD compile template bug fix
|
|
115 ifeq ($(DC), dmd)
|
|
116 NOT_SEPARATE_D_OBJ = true
|
|
117 endif
|
|
118
|
|
119 ifeq ($(SYSTEM), windows)
|
|
120 ifeq ($(DC), dmd)
|
|
121 DMD_WIN = true
|
|
122 endif
|
|
123 endif
|
|
124
|
|
125 ifeq ($(DMD_WIN), true)
|
|
126 CPP_SHARED = true
|
|
127 LIB_EXT = lib
|
|
128 else
|
|
129 LIB_EXT = a
|
|
130 endif
|
|
131
|
|
132 ## CPP_SHARED options.
|
|
133 ifeq ($(CPP_SHARED), true)
|
|
134 CC_CFLAGS += -DCPP_SHARED
|
|
135 GEN_OPT += --cpp_shared
|
|
136 D_CFLAGS += -version=cpp_shared
|
|
137 endif
|
|
138 ## End. CPP_SHARED options.
|
|
139
|
|
140 all: dgen build
|
|
141
|
|
142 windows:
|
|
143 $(MAKE) SYSTEM=windows
|
|
144
|
|
145 posix:
|
|
146 $(MAKE) SYSTEM=posix
|
|
147
|
|
148 release: all
|
|
149
|
|
150 debug:
|
|
151 $(MAKE) BUILD_TYPE=debug
|
|
152
|
|
153 build: mkdir $(PACKAGES)
|
|
154
|
|
155 ## DGenerator
|
|
156 make_gen:
|
|
157 cd generator && qmake && $(MAKE)
|
|
158
|
|
159 dgen: make_gen
|
|
160 cd generator && $(GEN) $(GEN_OPT) --d-target=$(D_TARGET) --output-directory=../ qtjambi_masterinclude.h build_gui.txt
|
|
161 ## DGenerator ## end
|
|
162
|
|
163 mkdir:
|
|
164 @$(MKDIR) $(TMP_PATH_)
|
|
165 @$(MKDIR) $(TMP_PATH)
|
|
166 @$(MKDIR) $(TMP_PATH)$(SL)qt_qtd
|
|
167 @$(MKDIR) $(TMP_PATH)$(SL)qtd
|
|
168 @$(MKDIR) $(OUTPUT_PATH)
|
|
169
|
|
170 ## Build cpp files.
|
|
171 $(TMP_PATH)/%.o: cpp/%.cpp
|
|
172 $(CC) $(CC_CFLAGS) $(CC_INCLUDE:%=-I%) -c $(@:$(TMP_PATH)/%.o=cpp/%.cpp) -o$@
|
|
173
|
|
174 ## Build d files.
|
|
175 $(TMP_PATH)/%_d.o: qt/%.d
|
|
176 $(DC) $(D_CFLAGS) -c $(@:$(TMP_PATH)/%_d.o=qt/%.d) -of$@
|
|
177
|
|
178 ## Build package.
|
|
179 ## param 1 - package name.
|
|
180 define BUILD_template
|
|
181 ## mkdir
|
|
182 mkdir_$(1):
|
|
183 @$(MKDIR) $(TMP_PATH)$(SL)qt_$(1)
|
|
184 @$(MKDIR) $(TMP_PATH)$(SL)$(1)
|
|
185 ## End. mkdir
|
|
186 ## Build d part.
|
|
187 ifeq ($(NOT_SEPARATE_D_OBJ), true)
|
|
188 ## DMD compile template bug fix
|
|
189 $(1)_D_RULE =$(TMP_PATH)/$(1)_dobj.$(D_OBJ_EXT)
|
|
190 $$($(1)_D_RULE):
|
|
191 $(DC) $(D_CFLAGS) $(D_INCLUDE) -c $$($(1)_d_files) -of$$($(1)_D_RULE)
|
|
192 else
|
|
193 $(1)_D_RULE = $$($(1)_d_files:qt/%.d=$(TMP_PATH)/%_d.o)
|
|
194 endif
|
|
195 ## End. Build d part.
|
|
196 ## Build cpp part.
|
|
197 ifeq ($(CPP_SHARED), true)
|
|
198 ifeq ($(SYSTEM), windows)
|
|
199 $(1)_CPP_DYN_LIB = $(OUTPUT_PATH)$(SL)$(LIB_PREFIX)$(NAME_PREFIX)$(1)$(LIB_POSTFIX).$(DYN_LIB_EXT)
|
|
200 $$($(1)_CPP_DYN_LIB): $$($(1)_cpp_obj_files)
|
|
201 $(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
|
|
202 $(1)_CPP_RULE = $(TMP_PATH)\cpp_$(1).$(LIB_EXT)
|
|
203 $$($(1)_CPP_RULE): $$($(1)_CPP_DYN_LIB)
|
|
204 $(IMPLIB) $$($(1)_CPP_RULE) $$($(1)_CPP_DYN_LIB)
|
|
205 else ## CPP_SHARED != true
|
|
206 $(1)_CPP_RULE = $(OUTPUT_PATH)$(SL)$(LIB_PREFIX)$(NAME_PREFIX)$(1)$(LIB_POSTFIX).$(DYN_LIB_EXT)
|
|
207 $$($(1)_CPP_RULE): $$($(1)_cpp_obj_files)
|
|
208 $(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)
|
|
209 endif ## CPP_SHARED
|
|
210 DELETE_FILES += $$($(1)_CPP_DYN_LIB) $$($(1)_cpp_obj_files) $(TMP_PATH)\$(LIB_PREFIX)$(NAME_PREFIX)$(1)_cpp.a
|
|
211 else
|
|
212 $(1)_CPP_RULE = $$($(1)_cpp_obj_files)
|
|
213 endif
|
|
214 ## End. Build cpp part.
|
|
215
|
|
216 DELETE_FILES += $$($(1)_D_RULE) $$($(1)_CPP_RULE) $(OUTPUT_PATH)/$(LIB_PREFIX)$$(qt_$(1)_name)D.$(LIB_EXT)
|
|
217 ## Implib link.
|
|
218 $(1)_LIB = $(OUTPUT_PATH)$(SL)$(LIB_PREFIX)$(NAME_PREFIX)$(1)$(LIB_POSTFIX).$(LIB_EXT)
|
|
219 ifeq ($(DMD_WIN), true)
|
|
220 $$($(1)_LIB): $$($(1)_D_RULE) $$($(1)_CPP_RULE)
|
|
221 $(DC) $$($(1)_D_RULE) $$($(1)_CPP_RULE) $(D_LIB_PATH:%=-L-L%) $$($(1)_link_d:%=-L-l%) -lib -of$$($(1)_LIB)
|
|
222 else
|
|
223 $$($(1)_LIB): $$($(1)_D_RULE) $$($(1)_CPP_RULE)
|
|
224 $(AR) rcs $$($(1)_LIB) $$($(1)_D_RULE) $$($(1)_CPP_RULE)
|
|
225 endif
|
|
226 # End. Implib link.
|
|
227 $(1): mkdir_$(1) $$($(1)_LIB)
|
|
228 endef
|
|
229 $(foreach package,$(PACKAGES),$(eval $(call BUILD_template,$(package))))
|
|
230 ## End. Build package.
|
|
231
|
|
232 clean:
|
|
233 @$(RM) $(DELETE_FILES)
|