Mercurial > projects > qtd
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) |