25
|
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)
|
39
|
56 PACKAGES = core gui
|
25
|
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
|
26
|
76 D_CFLAGS += -Iqt/d$(D_VERSION)
|
25
|
77
|
|
78 #End. Main settings.
|
|
79
|
|
80 ## Flags for debug version.
|
|
81 ifeq ($(BUILD_TYPE), debug)
|
|
82 CC_CFLAGS += -O0
|
|
83 D_CFLAGS += -debug -g -gc
|
|
84 LIB_POSTFIX = d
|
|
85 else ifeq ($(BUILD_TYPE), release)
|
|
86 ## End. Flags for debug version.
|
|
87 ## Flags for release version
|
|
88 CC_CFLAGS += -O
|
|
89 D_CFLAGS += -O -release -inline
|
|
90 endif
|
|
91 ## End. Flags for release version.
|
|
92
|
|
93 ## Load classes list.
|
|
94 ## param 1 - package name.
|
|
95 define MODULE_template
|
|
96 include build/$(1).makefile
|
|
97 qt_$(1)_lib_name = $$(qt_$(1)_name)$(QT_LIB_POSTFIX)
|
|
98 $(1)_cpp_files += $$($(1)_classes:%=cpp/qt_$(1)/%_shell.cpp)
|
|
99 $(1)_cpp_obj_files = $$($(1)_cpp_files:cpp/%.cpp=$(TMP_PATH)/%.o)
|
|
100 $(1)_d_files += $$($(1)_classes:%=qt/$(1)/%.d)
|
|
101 endef
|
|
102 $(foreach package,$(PACKAGES),$(eval $(call MODULE_template,$(package))))
|
|
103 ## End. Load classes list
|
|
104
|
|
105 ## DMD compile template bug fix
|
|
106 ifeq ($(DC), dmd)
|
|
107 NOT_SEPARATE_D_OBJ = true
|
|
108 endif
|
|
109
|
|
110
|
|
111 ## CPP_SHARED options.
|
|
112 ifeq ($(CPP_SHARED), true)
|
|
113 CC_CFLAGS += -DCPP_SHARED
|
|
114 GEN_OPT += --cpp_shared
|
|
115 endif
|
|
116 ## End. CPP_SHARED options.
|
|
117
|
|
118 all: dgen build
|
|
119
|
|
120 windows:
|
|
121 $(MAKE) SYSTEM=windows
|
|
122
|
|
123 posix:
|
|
124 $(MAKE) SYSTEM=posix
|
|
125
|
|
126 release: all
|
|
127
|
|
128 debug:
|
|
129 $(MAKE) BUILD_TYPE=debug
|
|
130
|
|
131 build: mkdir $(PACKAGES)
|
|
132
|
|
133 ## DGenerator
|
|
134 make_gen:
|
|
135 cd generator && qmake && $(MAKE)
|
|
136
|
|
137 dgen: make_gen
|
39
|
138 cd generator && $(GEN) $(GEN_OPT) --d-target=$(D_TARGET) --output-directory=../ qtjambi_masterinclude.h build_gui.txt
|
25
|
139 ## DGenerator ## end
|
|
140
|
|
141 mkdir:
|
|
142 @$(MKDIR) $(TMP_PATH_)
|
|
143 @$(MKDIR) $(TMP_PATH)
|
|
144 @$(MKDIR) $(TMP_PATH)$(SL)qt_qtd
|
|
145 @$(MKDIR) $(TMP_PATH)$(SL)qtd
|
|
146 @$(MKDIR) $(OUTPUT_PATH)
|
|
147
|
|
148 ## Build cpp files.
|
|
149 $(TMP_PATH)/%.o: cpp/%.cpp
|
|
150 $(CC) $(CC_CFLAGS) $(CC_INCLUDE:%=-I%) -c $(@:$(TMP_PATH)/%.o=cpp/%.cpp) -o$@
|
|
151
|
|
152 ## Build d files.
|
|
153 $(TMP_PATH)/%_d.o: qt/%.d
|
|
154 $(DC) $(D_CFLAGS) -c $(@:$(TMP_PATH)/%_d.o=qt/%.d) -of$@
|
|
155
|
|
156 ## Build package.
|
|
157 ## param 1 - package name.
|
|
158 define BUILD_template
|
|
159 ## mkdir
|
|
160 mkdir_$(1):
|
|
161 @$(MKDIR) $(TMP_PATH)$(SL)qt_$(1)
|
|
162 @$(MKDIR) $(TMP_PATH)$(SL)$(1)
|
|
163 ## End. mkdir
|
|
164 ## Build d part.
|
|
165 ifeq ($(NOT_SEPARATE_D_OBJ), true)
|
|
166 ## DMD compile template bug fix
|
|
167 $(1)_D_RULE =$(TMP_PATH)/$(1)_dobj.$(D_OBJ_EXT)
|
|
168 $$($(1)_D_RULE):
|
|
169 $(DC) $(D_CFLAGS) $(D_INCLUDE) -c $$($(1)_d_files) -of$$($(1)_D_RULE)
|
|
170 else
|
|
171 $(1)_D_RULE = $$($(1)_d_files:qt/%.d=$(TMP_PATH)/%_d.o)
|
|
172 endif
|
|
173 ## End. Build d part.
|
|
174 ## Build cpp part.
|
|
175 ifeq ($(CPP_SHARED), true)
|
|
176 ifeq ($(SYSTEM), windows)
|
|
177 $(1)_CPP_DYN_LIB = $(OUTPUT_PATH)$(SL)$(LIB_PREFIX)$(NAME_PREFIX)$(1)$(LIB_POSTFIX).$(DYN_LIB_EXT)
|
|
178 $$($(1)_CPP_DYN_LIB): $$($(1)_cpp_obj_files)
|
|
179 $(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
|
|
180 $(1)_CPP_RULE = $(TMP_PATH)\cpp_$(1).$(LIB_EXT)
|
|
181 $$($(1)_CPP_RULE): $$($(1)_CPP_DYN_LIB)
|
|
182 $(IMPLIB) $$($(1)_CPP_RULE) $$($(1)_CPP_DYN_LIB)
|
|
183 else ## CPP_SHARED != true
|
|
184 $(1)_CPP_RULE = $(OUTPUT_PATH)$(SL)$(LIB_PREFIX)$(NAME_PREFIX)$(1)$(LIB_POSTFIX).$(DYN_LIB_EXT)
|
|
185 $$($(1)_CPP_RULE): $$($(1)_cpp_obj_files)
|
|
186 $(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)
|
|
187 endif ## CPP_SHARED
|
|
188 DELETE_FILES += $$($(1)_CPP_DYN_LIB) $$($(1)_cpp_obj_files) $(TMP_PATH)\$(LIB_PREFIX)$(NAME_PREFIX)$(1)_cpp.a
|
|
189 else
|
|
190 $(1)_CPP_RULE = $$($(1)_cpp_obj_files)
|
|
191 endif
|
|
192 ## End. Build cpp part.
|
|
193
|
|
194 DELETE_FILES += $$($(1)_D_RULE) $$($(1)_CPP_RULE) $(OUTPUT_PATH)/$(LIB_PREFIX)$$(qt_$(1)_name)D.$(LIB_EXT)
|
|
195 ## Implib link.
|
|
196 $(1)_LIB = $(OUTPUT_PATH)$(SL)$(LIB_PREFIX)$(NAME_PREFIX)$(1)$(LIB_POSTFIX).$(LIB_EXT)
|
|
197 ifeq ($(SYSTEM), windows)
|
|
198 $$($(1)_LIB): $$($(1)_D_RULE) $$($(1)_CPP_RULE)
|
|
199 $(DC) $$($(1)_D_RULE) $$($(1)_CPP_RULE) $(D_LIB_PATH:%=-L-L%) $$($(1)_link_d:%=-L-l%) -lib -of$$($(1)_LIB)
|
|
200 else
|
|
201 $$($(1)_LIB): $$($(1)_D_RULE) $$($(1)_CPP_RULE)
|
|
202 $(AR) rcs $$($(1)_LIB) $$($(1)_D_RULE) $$($(1)_CPP_RULE)
|
|
203 endif
|
|
204 # End. Implib link.
|
|
205 $(1): mkdir_$(1) $$($(1)_LIB)
|
|
206 endef
|
|
207 $(foreach package,$(PACKAGES),$(eval $(call BUILD_template,$(package))))
|
|
208 ## End. Build package.
|
|
209
|
|
210 clean:
|
|
211 @$(RM) $(DELETE_FILES)
|