source: ssp_qb_r5f100le_cs/trunk/sample/Makefile

Last change on this file was 95, checked in by nmir-saito, 9 years ago

ファイルの mime-type 変更

  • Property svn:mime-type set to text/plain; charset=shift_jis
File size: 14.4 KB
RevLine 
[93]1#
2# TOPPERS/ASP Kernel
3# Toyohashi Open Platform for Embedded Real-Time Systems/
4# Advanced Standard Profile Kernel
5#
6# Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7# Toyohashi Univ. of Technology, JAPAN
8# Copyright (C) 2006-2010 by Embedded and Real-Time Systems Laboratory
9# Graduate School of Information Science, Nagoya Univ., JAPAN
10# Copyright (C) 2010 by Meika Sugimoto
11#
12# 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
13# ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
14# 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
15# (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
16# 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17# スコード中に含まれていること.
18# (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
19# 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
20# 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
21# の無保証規定を掲載すること.
22# (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
23# 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
24# と.
25# (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
26# 作権表示,この利用条件および下記の無保証規定を掲載すること.
27# (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
28# 報告すること.
29# (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
30# 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
31# また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
32# 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
33# 免責すること.
34#
35# 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
36# よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
37# に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
38# アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
39# の責任を負わない.
40#
41#
42
43#
44# ターゲットの指定(Makefile.targetで上書きされるのを防ぐため)
45#
46all:
47
48#
49# ターゲット略称の定義
50#
51TARGET = @(TARGET)
52
53#
54# プログラミング言語の定義
55#
56SRCLANG = @(SRCLANG)
57ifeq ($(SRCLANG),c++)
58 USE_CXX = true
59 CXXLIBS = -lstdc++ -lm -lc
60 CXXRTS = cxxrt.o newlibrt.o
61endif
62
63#
64# ソースファイルのディレクトリの定義
65#
66SRCDIR = @(SRCDIR)
67
68#
69# オブジェクトファイル名の拡張子の設定
70#
71OBJEXT = @(OBJEXT)
72
73#
74# 実行環境の定義(ターゲット依存に上書きされる場合がある)
75#
76DBGENV := @(DBGENV)
77
78#
79# カーネルライブラリ(libkernel.a)のディレクトリ名
80# (カーネルライブラリもmake対象にする時は,空に定義する)
81#
82KERNEL_LIB = @(KERNEL_LIB)
83
84#
85# カーネルを関数単位でコンパイルするかどうかの定義
86#
87KERNEL_FUNCOBJS = @(KERNEL_FUNCOBJS)
88
89#
90# トレースログを取得するかどうかの定義
91#
92ENABLE_TRACE = @(ENABLE_TRACE)
93
94#
95# ユーティリティプログラムの名称
96#
97PERL = @(PERL)
98CFG = @(CFG)
99
100#
101# オブジェクトファイル名の定義
102#
103OBJNAME = ssp
104ifdef OBJEXT
105 OBJFILE = $(OBJNAME).$(OBJEXT)
106 CFG1_OUT = cfg1_out.$(OBJEXT)
107else
108 OBJFILE = $(OBJNAME)
109 CFG1_OUT = cfg1_out
110endif
111
112#
113# ターゲット依存部のディレクトリの定義
114#
115TARGETDIR = $(SRCDIR)/target/$(TARGET)
116
117#
118# ターゲット依存の定義のインクルード
119#
120include $(TARGETDIR)/Makefile.target
121
122#
123# カーネル構成定義のインクルード
124#
125-include Makefile.config
126
127#
128# コンフィギュレータ関係の変数の定義
129#
130CFG_TABS := --api-table $(SRCDIR)/kernel/ssp_kernel_api.csv \
131 --cfg1-def-table $(SRCDIR)/kernel/ssp_kernel_def.csv \
132 --cfg1-def-table $(SRCDIR)/syssvc/syssvc_def.csv $(CFG_TABS)
133CFG_OBJS := kernel_cfg.o $(CFG_OBJS)
134CFG2_OUT := kernel_cfg.c kernel_cfg.h $(CFG2_OUT)
135
136#
137# 共通コンパイルオプションの定義
138#
139COPTS := $(COPTS) -g
140ifndef OMIT_WARNING_ALL
141 COPTS := $(COPTS) -Wall
142endif
143ifndef OMIT_OPTIMIZATION
144 COPTS := $(COPTS) -Os
145endif
146CDEFS := $(CDEFS)
147INCLUDES := -I. -I$(SRCDIR)/include -I$(SRCDIR)/arch -I$(SRCDIR) $(INCLUDES)
148LDFLAGS := $(LDFLAGS)
149LIBS := $(LIBS) $(CXXLIBS)
150CFLAGS = $(COPTS) $(CDEFS) $(INCLUDES)
151
152#
153# アプリケーションプログラムに関する定義
154#
155APPLNAME = @(APPLNAME)
156APPLDIR = @(APPLDIR)
157APPL_CFG = $(APPLNAME).cfg
158
159APPL_DIR = $(APPLDIR)
160APPL_ASMOBJS =
161ifdef USE_CXX
162 APPL_CXXOBJS = $(APPLNAME).o @(APPLOBJS)
163 APPL_COBJS =
164else
165 APPL_COBJS = $(APPLNAME).o @(APPLOBJS)
166endif
167APPL_CFLAGS =
168APPL_LIBS =
169ifdef APPLDIR
170 INCLUDES := $(INCLUDES) $(foreach dir,$(APPLDIR),-I$(dir))
171endif
172
173#
174# システムサービスに関する定義
175#
176SYSSVC_DIR := $(SYSSVC_DIR) $(SRCDIR)/syssvc $(SRCDIR)/library
177SYSSVC_ASMOBJS := $(SYSSVC_ASMOBJS)
178SYSSVC_COBJS := $(SYSSVC_COBJS) banner.o serial.o vasyslog.o syslog.o log_output.o logtask.o
179SYSSVC_CFLAGS := $(SYSSVC_CFLAGS)
180SYSSVC_LIBS := $(SYSSVC_LIBS)
181INCLUDES := $(INCLUDES)
182
183#
184# 拡張パッケージに関する定義
185#
186
187EXTPKG_DIR := $(EXTPKG_DIR) $(SRCDIR)/extension
188
189
190#
191# カーネルに関する定義
192#
193# KERNEL_ASMOBJS: カーネルライブラリに含める,ソースがアセンブリ言語の
194# オブジェクトファイル.
195# KERNEL_COBJS: カーネルのライブラリに含める,ソースがC言語で,ソース
196# ファイルと1対1に対応するオブジェクトファイル.
197# KERNEL_LCSRCS: カーネルのライブラリに含めるC言語のソースファイルで,
198# 1つのソースファイルから複数のオブジェクトファイルを生
199# 成するもの.
200# KERNEL_LCOBJS: 上のソースファイルから生成されるオブジェクトファイル.
201# KERNEL_AUX_COBJS: ロードモジュールに含めないが,カーネルのソースファ
202# イルと同じオプションを適用してコンパイルすべき,ソー
203# スがC言語のオブジェクトファイル.
204#
205KERNEL_DIR := $(KERNEL_DIR) $(SRCDIR)/kernel
206KERNEL_ASMOBJS := $(KERNEL_ASMOBJS)
207KERNEL_COBJS := $(KERNEL_COBJS)
208KERNEL_CFLAGS := $(KERNEL_CFLAGS) -I$(SRCDIR)/kernel -I$(EXTPKG_DIR)
209
210#
211# ターゲットファイル(複数を同時に選択してはならない)
212#
213all: $(OBJFILE)
214#all: $(OBJNAME).bin
215#all: $(OBJNAME).srec
216
217##### 以下は編集しないこと #####
218
219#
220# 環境に依存するコンパイルオプションの定義
221#
222ifdef DBGENV
223 CDEFS := $(CDEFS) -D$(DBGENV)
224endif
225#
226# カーネルライブラリに関連する定義
227#
228ifdef KERNEL_LIB
229 LIBKERNEL = $(KERNEL_LIB)/libkernel.a
230else
231 LIBKERNEL = libkernel.a
232endif
233
234#
235# カーネルのファイル構成の定義
236#
237include $(SRCDIR)/kernel/Makefile.kernel
238ifdef KERNEL_FUNCOBJS
239 KERNEL_LCSRCS := $(KERNEL_FCSRCS)
240 KERNEL_LCOBJS := $(foreach file,$(KERNEL_FCSRCS),$($(file:.c=)))
241else
242 KERNEL_CFLAGS := -DALLFUNC $(KERNEL_CFLAGS)
243 KERNEL_COBJS := $(KERNEL_COBJS) \
244 $(foreach file,$(KERNEL_FCSRCS),$(file:.c=.o))
245endif
246
247
248#
249# ソースファイルのあるディレクトリに関する定義
250#
251vpath %.c $(KERNEL_DIR) $(SYSSVC_DIR) $(APPL_DIR) $(EXTPKG_DIR)
252vpath %.S $(KERNEL_DIR) $(SYSSVC_DIR) $(APPL_DIR) $(EXTPKG_DIR)
253
254#
255# コンパイルのための変数の定義
256#
257KERNEL_LIB_OBJS = $(KERNEL_ASMOBJS) $(KERNEL_COBJS) $(KERNEL_LCOBJS)
258SYSSVC_OBJS = $(SYSSVC_ASMOBJS) $(SYSSVC_COBJS)
259APPL_OBJS = $(APPL_ASMOBJS) $(APPL_COBJS) $(APPL_CXXOBJS)
260ALL_OBJS = $(START_OBJS) $(APPL_OBJS) $(SYSSVC_OBJS) $(CFG_OBJS) \
261 $(END_OBJS) $(HIDDEN_OBJS)
262ALL_LIBS = $(APPL_LIBS) $(SYSSVC_LIBS) $(LIBKERNEL) $(LIBS)
263
264ifdef TEXT_START_ADDRESS
265 LDFLAGS := $(LDFLAGS) -Wl,-Ttext,$(TEXT_START_ADDRESS)
266endif
267ifdef DATA_START_ADDRESS
268 LDFLAGS := $(LDFLAGS) -Wl,-Tdata,$(DATA_START_ADDRESS)
269endif
270ifdef LDSCRIPT
271 LDFLAGS := $(LDFLAGS) -T $(LDSCRIPT)
272endif
273
274
275#
276# カーネルのコンフィギュレーションファイルの生成
277#
278cfg1_out.c:
279 $(CFG) --pass 1 --kernel ssp $(INCLUDES) $(CFG_TABS) $(APPL_CFG)
280
281kernel_cfg.timestamp: $(START_OBJS) cfg1_out.o $(END_OBJS) $(HIDDEN_OBJS)
282kernel_cfg.timestamp $(CFG2_OUT):
283 $(LINK) $(CFLAGS) $(LDFLAGS) $(CFG1_OUT_LDFLAGS) -o $(CFG1_OUT) \
284 $(START_OBJS) cfg1_out.o $(END_OBJS)
285 $(NM) -C $(CFG1_OUT) > cfg1_out.syms
286 $(OBJCOPY) -O srec -S $(CFG1_OUT) cfg1_out.srec
287 $(CFG) --pass 2 --kernel ssp $(INCLUDES) \
288 -T $(TARGETDIR)/target.tf $(CFG_TABS) $(APPL_CFG)
289 touch kernel_cfg.timestamp
290
291#
292# カーネルライブラリファイルの生成
293#
294libkernel.a: $(KERNEL_LIB_OBJS)
295 rm -f libkernel.a
296 $(AR) -rcs libkernel.a $(KERNEL_LIB_OBJS)
297 $(RANLIB) libkernel.a
298
299#
300# 特別な依存関係の定義
301#
302banner.o: kernel_cfg.timestamp $(filter-out banner.o,$(ALL_OBJS)) \
303 $(filter %.a,$(ALL_LIBS))
304
305#
306# 全体のリンク
307#
308$(OBJFILE): kernel_cfg.timestamp $(ALL_OBJS) $(filter %.a,$(ALL_LIBS))
309 $(LINK) $(CFLAGS) $(LDFLAGS) -o $(OBJFILE) $(START_OBJS) \
310 $(APPL_OBJS) $(SYSSVC_OBJS) $(CFG_OBJS) $(ALL_LIBS) $(END_OBJS)
311 $(NM) -C $(OBJFILE) > $(OBJNAME).syms
312 $(OBJCOPY) -O srec -S $(OBJFILE) $(OBJNAME).srec
313 $(CFG) --pass 3 --kernel ssp $(INCLUDES) \
314 --rom-image $(OBJNAME).srec --symbol-table $(OBJNAME).syms \
315 -T $(TARGETDIR)/target_check.tf $(CFG_TABS) $(APPL_CFG)
316
317#
318# バイナリファイルの生成
319#
320$(OBJNAME).bin: $(OBJFILE)
321 $(OBJCOPY) -O binary -S $(OBJFILE) $(OBJNAME).bin
322
323#
324# Sレコードファイルの生成
325#
326$(OBJNAME).srec: $(OBJFILE)
327 $(OBJCOPY) -O srec -S $(OBJFILE) $(OBJNAME).srec
328
329#
330# コンパイル結果の消去
331#
332.PHONY: clean
333clean:
334 rm -f \#* *~ *.o $(CLEAN_FILES)
335 rm -f $(OBJFILE) $(OBJNAME).syms $(OBJNAME).srec $(OBJNAME).bin
336 rm -f kernel_cfg.timestamp $(CFG2_OUT)
337 rm -f cfg1_out.c $(CFG1_OUT) cfg1_out.syms cfg1_out.srec
338ifndef KERNEL_LIB
339 rm -f $(LIBKERNEL)
340endif
341 rm -f makeoffset.s offset.h
342 rm -f Makefile.config
343
344.PHONY: cleankernel
345cleankernel:
346 rm -rf $(KERNEL_LIB_OBJS)
347 rm -f makeoffset.s offset.h
348
349.PHONY: cleandep
350cleandep:
351 if ! [ -f Makefile.depend ]; then \
352 rm -f kernel_cfg.timestamp $(CFG2_OUT); \
353 rm -f cfg1_out.c cfg1_out.o $(CFG1_OUT) cfg1_out.syms cfg1_out.srec; \
354 rm -f makeoffset.s offset.h; \
355 fi
356 rm -f Makefile.depend
357
358.PHONY: realclean
359realclean: cleandep clean
360ifneq ($(REALCLEAN_FILES),)
361 rm -f $(REALCLEAN_FILES)
362endif
363
364#
365# kernel_cfg.cとcfg1_out.cのコンパイルルールと依存関係作成ルールの定義
366#
367# kernel_cfg.cとcfg1_out.cは,アプリケーションプログラム用,システムサー
368# ビス用,カーネル用のすべてのオプションを付けてコンパイルする.
369#
370KERNEL_CFG_CFLAGS = $(APPL_CFLAGS) $(SYSSVC_CFLAGS) $(KERNEL_CFLAGS)
371
372kernel_cfg.o cfg1_out.o : %.o: %.c
373 $(CC) -c $(CFLAGS) $(KERNEL_CFG_CFLAGS) $<
374
375kernel_cfg.s cfg1_out.s : %.s: %.c
376 $(CC) -S $(CFLAGS) $(KERNEL_CFG_CFLAGS) $<
377
378kernel_cfg.d cfg1_out.d : %.d: %.c
379 @$(PERL) $(SRCDIR)/utils/makedep -C $(CC) $(MAKEDEP_OPTS) \
380 -O "$(CFLAGS) $(KERNEL_CFG_CFLAGS)" $< >> Makefile.depend
381
382#
383# 特殊な依存関係作成ルールの定義
384#
385cfg1_out.depend:
386 @$(CFG) -M cfg1_out.c $(INCLUDES) $(APPL_CFG) >> Makefile.depend
387
388makeoffset.d: makeoffset.c
389 @$(PERL) $(SRCDIR)/utils/makedep -C $(CC) $(MAKEDEP_OPTS) \
390 -T "makeoffset.s" -O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend
391
392#
393# 依存関係ファイルの生成
394#
395.PHONY: gendepend
396gendepend:
397 @echo "Generating Makefile.depend."
398
399.PHONY: depend
400ifdef KERNEL_LIB
401depend: cleandep kernel_cfg.timestamp gendepend \
402 cfg1_out.depend cfg1_out.d \
403 $(ALL_OBJS:.o=.d)
404else
405depend: cleandep kernel_cfg.timestamp gendepend \
406 cfg1_out.depend cfg1_out.d \
407 $(KERNEL_AUX_COBJS:.o=.d) $(KERNEL_ASMOBJS:.o=.d) \
408 $(KERNEL_COBJS:.o=.d) $(KERNEL_LCSRCS:.c=.d) $(ALL_OBJS:.o=.d)
409endif
410
411#
412# 依存関係ファイルをインクルード
413#
414-include Makefile.depend
415
416#
417# 開発ツールのコマンド名の定義
418#
419ifeq ($(TOOL),gcc)
420 #
421 # GNU開発環境用
422 #
423 ifdef GCC_TARGET
424 GCC_TARGET_PREFIX = $(GCC_TARGET)-
425 else
426 GCC_TARGET_PREFIX =
427 endif
428 CC = $(GCC_TARGET_PREFIX)gcc
429 CXX = $(GCC_TARGET_PREFIX)g++
430 AS = $(GCC_TARGET_PREFIX)as
431 LD = $(GCC_TARGET_PREFIX)ld
432 AR = $(GCC_TARGET_PREFIX)ar
433 NM = $(GCC_TARGET_PREFIX)nm
434 RANLIB = $(GCC_TARGET_PREFIX)ranlib
435 OBJCOPY = $(GCC_TARGET_PREFIX)objcopy
436 OBJDUMP = $(GCC_TARGET_PREFIX)objdump
437endif
438
439ifdef USE_CXX
440 LINK = $(CXX)
441else
442 LINK = $(CC)
443endif
444
445#
446# コンパイルルールの定義
447#
448KERNEL_ALL_COBJS = $(KERNEL_COBJS) $(KERNEL_AUX_COBJS)
449
450$(KERNEL_ALL_COBJS): %.o: %.c
451 $(CC) -c $(CFLAGS) $(KERNEL_CFLAGS) $<
452
453$(KERNEL_ALL_COBJS:.o=.s): %.s: %.c
454 $(CC) -S $(CFLAGS) $(KERNEL_CFLAGS) $<
455
456$(KERNEL_LCOBJS): %.o:
457 $(CC) -DTOPPERS_$(*F) -o $@ -c $(CFLAGS) $(KERNEL_CFLAGS) $<
458
459$(KERNEL_LCOBJS:.o=.s): %.s:
460 $(CC) -DTOPPERS_$(*F) -o $@ -S $(CFLAGS) $(KERNEL_CFLAGS) $<
461
462$(KERNEL_ASMOBJS): %.o: %.S
463 $(CC) -c $(CFLAGS) $(KERNEL_CFLAGS) $<
464
465$(SYSSVC_COBJS): %.o: %.c
466 $(CC) -c $(CFLAGS) $(SYSSVC_CFLAGS) $<
467
468$(SYSSVC_COBJS:.o=.s): %.s: %.c
469 $(CC) -S $(CFLAGS) $(SYSSVC_CFLAGS) $<
470
471$(SYSSVC_ASMOBJS): %.o: %.S
472 $(CC) -c $(CFLAGS) $(SYSSVC_CFLAGS) $<
473
474$(APPL_COBJS): %.o: %.c
475 $(CC) -c $(CFLAGS) $(APPL_CFLAGS) $<
476
477$(APPL_COBJS:.o=.s): %.s: %.c
478 $(CC) -S $(CFLAGS) $(APPL_CFLAGS) $<
479
480$(APPL_CXXOBJS): %.o: %.cpp
481 $(CXX) -c $(CFLAGS) $(APPL_CFLAGS) $<
482
483$(APPL_CXXOBJS:.o=.s): %.s: %.cpp
484 $(CXX) -S $(CFLAGS) $(APPL_CFLAGS) $<
485
486$(APPL_ASMOBJS): %.o: %.S
487 $(CC) -c $(CFLAGS) $(APPL_CFLAGS) $<
488
489#
490# 依存関係作成ルールの定義
491#
492$(KERNEL_COBJS:.o=.d): %.d: %.c
493 @$(PERL) $(SRCDIR)/utils/makedep -C $(CC) $(MAKEDEP_OPTS) \
494 -O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend
495
496$(KERNEL_LCSRCS:.c=.d): %.d: %.c
497 @$(PERL) $(SRCDIR)/utils/makedep -C $(CC) $(MAKEDEP_OPTS) -T "$($*)" \
498 -O "-DALLFUNC $(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend
499
500$(KERNEL_ASMOBJS:.o=.d): %.d: %.S
501 @$(PERL) $(SRCDIR)/utils/makedep -C $(CC) $(MAKEDEP_OPTS) \
502 -O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend
503
504$(SYSSVC_COBJS:.o=.d): %.d: %.c
505 @$(PERL) $(SRCDIR)/utils/makedep -C $(CC) $(MAKEDEP_OPTS) \
506 -O "$(CFLAGS) $(SYSSVC_CFLAGS)" $< >> Makefile.depend
507
508$(SYSSVC_ASMOBJS:.o=.d): %.d: %.S
509 @$(PERL) $(SRCDIR)/utils/makedep -C $(CC) $(MAKEDEP_OPTS) \
510 -O "$(CFLAGS) $(SYSSVC_CFLAGS)" $< >> Makefile.depend
511
512$(APPL_COBJS:.o=.d): %.d: %.c
513 @$(PERL) $(SRCDIR)/utils/makedep -C $(CC) $(MAKEDEP_OPTS) \
514 -O "$(CFLAGS) $(APPL_CFLAGS)" $< >> Makefile.depend
515
516$(APPL_CXXOBJS:.o=.d): %.d: %.cpp
517 @$(PERL) $(SRCDIR)/utils/makedep -C $(CXX) $(MAKEDEP_OPTS) \
518 -O "$(CFLAGS) $(APPL_CFLAGS)" $< >> Makefile.depend
519
520$(APPL_ASMOBJS:.o=.d): %.d: %.S
521 @$(PERL) $(SRCDIR)/utils/makedep -C $(CC) $(MAKEDEP_OPTS) \
522 -O "$(CFLAGS) $(APPL_CFLAGS)" $< >> Makefile.depend
523
524#
525# デフォルトコンパイルルールを上書き
526#
527%.o: %.c
528 @echo "*** Default compile rules should not be used."
529 $(CC) -c $(CFLAGS) $<
530
531%.s: %.c
532 @echo "*** Default compile rules should not be used."
533 $(CC) -S $(CFLAGS) $<
534
535%.o: %.cpp
536 @echo "*** Default compile rules should not be used."
537 $(CXX) -c $(CFLAGS) $<
538
539%.s: %.cpp
540 @echo "*** Default compile rules should not be used."
541 $(CXX) -S $(CFLAGS) $<
542
543%.o: %.S
544 @echo "*** Default compile rules should not be used."
545 $(CC) -c $(CFLAGS) $<
Note: See TracBrowser for help on using the repository browser.