# # TOPPERS/OSEK Kernel # Toyohashi Open Platform for Embedded Real-Time Systems/ # OSEK Kernel # # Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory # Toyohashi Univ. of Technology, JAPAN # Copyright (C) 2004-2006 by Witz Corporation, JAPAN # Copyright (C) 2010 by Meika Sugimoto # # 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation # によって公表されている GNU General Public License の Version 2 に記 # 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア # を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, # 利用と呼ぶ)することを無償で許諾する. # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー # スコード中に含まれていること. # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 # の無保証規定を掲載すること. # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ # と. # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 # 作権表示,この利用条件および下記の無保証規定を掲載すること. # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに # 報告すること. # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. # # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お # よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も # 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 # 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. # # all: # # ターゲット名の定義 # CPU = sh2-gnu SYS = cq7144a # # コンフォーマンスクラスの定義 # CONFCLASS = ecc2 # # ソースファイルのトップディレクトリの定義 # TOPDIR = ../../.. # # 出力ファイルのディレクトリの定義 # OUTDIR = ./output # # コンフィギュレーションファイルの改行コード変換ツール定義 # # SystemGeneratorにより出力されるコンフィグレーションファイルの # 改行コードはCR+LFとなっているため、 # LFに変換するツール名・パス名・オプションを定義する。 # 使用するツールは任意。以下は参考使用例 # #CHANGELINE_TOOL = nkf.exe #CHANGELINE_TOOL_PATH = #CHANGELINE_TOOL_OPTION = -d # # ターゲット依存の定義のインクルード # include $(TOPDIR)/config/$(CPU)/$(SYS)/Makefile.config include $(TOPDIR)/config/$(CPU)/Makefile.config # # 共通コンパイルオプションの定義 # COPTS := $(COPTS) CDEFS := $(CDEFS) INCLUDES := -I. -I$(TOPDIR)/include $(INCLUDES) \ -I$(TOPDIR)/syslib -I$(TOPDIR)/syslib/$(CPU)/$(SYS) LDFLAGS := -nostdlib -lgcc $(LDFLAGS) LIBS := $(LIBS) CFLAGS = $(COPTS) $(CDEFS) $(INCLUDES) # # アプリケーションプログラムに関する定義 # UNAME = sample1_ecc2 UTASK_DIR := $(UTASK_DIR):$(TOPDIR)/sample UTASK_ASMOBJS = UTASK_COBJS = $(UNAME).o sample1_log_ecc2.o UTASK_CFLAGS = UTASK_LIBS = # # システムサービスに関する定義 # (現在システムサービスに関する定義は存在しないが、将来の追加のため準備してある) # STASK_DIR := $(STASK_DIR) STASK_ASMOBJS := $(STASK_ASMOBJS) STASK_COBJS := $(STASK_COBJS) STASK_CFLAGS := $(STASK_CFLAGS) STASK_LIBS := $(STASK_LIBS) # # カーネルに関する定義 # # KERNEL_ASMOBJS: カーネルライブラリに含める,ソースがアセンブリ言語の # オブジェクトファイル. # KERNEL_COBJS: カーネルのライブラリに含める,ソースがC言語で,ソース # ファイルと1対1に対応するオブジェクトファイル. KERNEL = $(TOPDIR)/kernel KERNEL_DIR := $(KERNEL_DIR):$(KERNEL):$(KERNEL)/$(CONFCLASS) KERNEL_ASMOBJS := $(KERNEL_ASMOBJS) KERNEL_COBJS := alarm.o event.o interrupt.o osctl.o resource.o \ task.o task_manage.o $(KERNEL_COBJS) KERNEL_CFLAGS := $(KERNEL_CFLAGS) -I$(KERNEL) -I$(KERNEL)/$(CONFCLASS) # # システムライブラリに関する定義 # SYSLIB_DIR := $(SYSLIB_DIR):$(TOPDIR)/syslib:$(TOPDIR)/syslib/$(CPU)/$(SYS) SYSLIB_ASMOBJS = SYSLIB_COBJS := $(SYSLIB_COBJS) serial.o sys_timer.o SYSLIB_CFLAGS = SYSLIB_LIBS = # # システムライブラリ依存部に関する定義 # SYSLIB_DIR := $(SYSLIB_DIR):$(TOPDIR)/syslib/$(CPU)/$(SYS) SYSLIB_ASMOBJS = SYSLIB_COBJS := $(SYSLIB_COBJS) hw_serial.o hw_sys_timer.o sample_config.o SYSLIB_CFLAGS = SYSLIB_LIBS = # # オブジェクトファイル名の拡張子の設定 # OBJEXT = elf # # オブジェクトファイル名の定義 # OBJNAME = toppers_osek_$(SYS) ifdef OBJEXT OBJFILE = $(OUTDIR)/$(OBJNAME).$(OBJEXT) else OBJFILE = $(OUTDIR)/$(OBJNAME) endif # # ターゲットファイル(複数を同時に選択してはならない) # all: $(OBJNAME).mot ##### 以下は編集しないこと ##### # # ソースファイルのあるディレクトリに関する定義 # vpath %.c $(KERNEL_DIR):$(STASK_DIR):$(UTASK_DIR):$(SYSLIB_DIR) vpath %.S $(KERNEL_DIR):$(STASK_DIR):$(UTASK_DIR):$(SYSLIB_DIR) # # オブジェクトファイルのあるディレクトリに関する定義 # vpath %.o $(OUTDIR) # # コンパイルのための変数の定義 # START_OBJS = $(START_ASMOBJS) KERNEL_OBJS = $(KERNEL_ASMOBJS) $(KERNEL_COBJS) STASK_OBJS = $(STASK_ASMOBJS) $(STASK_COBJS) UTASK_OBJS = $(UTASK_ASMOBJS) $(UTASK_COBJS) SYSLIB_OBJS = $(SYSLIB_ASMOBJS) $(SYSLIB_COBJS) ALL_OBJS = $(START_OBJS) kernel_cfg.o $(KERNEL_OBJS) $(UTASK_OBJS) $(STASK_OBJS) $(SYSLIB_OBJS) ifdef LDSCRIPT LDFLAGS := $(LDFLAGS) -T $(TOPDIR)/config/$(LDSCRIPT) endif # # 全体のリンク # $(OBJFILE): $(ALL_OBJS) $(LINK) $(CFLAGS) -Wl,-Map,$(OUTDIR)/$(OBJNAME).map -o $(OBJFILE) $(addprefix $(OUTDIR)/, $(ALL_OBJS)) $(LDFLAGS) $(NM) $(OBJFILE) > $(OUTDIR)/$(OBJNAME).syms # # MOTファイルの生成(Sレコードファイルと同一) # $(OBJNAME).mot: $(OBJFILE) $(OBJCOPY) -O srec -S $(OBJFILE) $(OUTDIR)/$(OBJNAME).mot # # コンパイル結果の消去 # clean: rm -f \#* *~ $(OUTDIR)/*.o tmpfile? rm -f $(OUTDIR)/$(OBJNAME).map rm -f $(OUTDIR)/$(OBJNAME) rm -f $(OUTDIR)/$(OBJNAME).syms $(OUTDIR)/$(OBJNAME).mot rm -f $(OUTDIR)/$(OBJNAME).elf rm -f implementation.oil rm -f kernel_cfg.c kernel_id.h cleandep: rm -f Makefile.depend realclean: cleandep clean # # カーネルのコンフィギュレーションファイルの生成 # kernel_cfg.c kernel_id.h: $(UNAME).oil $(TOPDIR)/sg/sg.exe $(UNAME).oil -I$(TOPDIR)/sg/impl_oil \ -I$(TOPDIR)/syslib/$(CPU)/$(SYS) -I$(TOPDIR)/syslib -os=ECC2 \ -template=$(TOPDIR)/config/$(CPU)/$(SYS)/$(TEMPLATE).sgt # # コンフィギュレーションファイルの改行コード変換 # 上記SystemGeneratorにより出力されるコンフィグレーションファイルの # 改行コードはCR+LFとなっているため、LFに変換する。 # ifdef CHANGELINE_TOOL @echo "kernel_cfg.c/kernel_id.h Change Line CR+LF -> LF!!" $(CHANGELINE_TOOL_PATH)/$(CHANGELINE_TOOL) $(CHANGELINE_TOOL_OPTION) kernel_cfg.c $(CHANGELINE_TOOL_PATH)/$(CHANGELINE_TOOL) $(CHANGELINE_TOOL_OPTION) kernel_id.h endif # # kernel_cfg.c のコンパイルルール # # kernel_cfg.c は,アプリケーションプログラム用,システムサービス用, # カーネル用のすべてのオプションを付けてコンパイルする. # KERNEL_CFG_CFLAGS = $(UTASK_CFLAGS) $(STASK_CFLAGS) $(KERNEL_CFLAGS) $(SYSLIB_CFLAGS) kernel_cfg.o: kernel_cfg.c $(CC) -c $(CFLAGS) -o $(OUTDIR)/kernel_cfg.o $(KERNEL_CFG_CFLAGS) $< kernel_cfg.d: kernel_cfg.c $(PERL) makedep -C $(CC) \ -O "$(CFLAGS) $(KERNEL_CFG_CFLAGS)" $< >> Makefile.depend # # 依存関係ファイルの生成 # gendepend: @echo "Generating Makefile.depend." depend: cleandep gendepend $(ALL_OBJS:.o=.d) # # 依存関係ファイルをインクルード # -include Makefile.depend # # 開発ツールのコマンド名の定義 # # # GNU開発環境用 # TARGET_PREFIX = $(TARGET)- CC = $(TARGET_PREFIX)gcc CXX = $(TARGET_PREFIX)g++ AS = $(TARGET_PREFIX)as LD = $(TARGET_PREFIX)ld AR = $(TARGET_PREFIX)ar NM = $(TARGET_PREFIX)nm RANLIB = $(TARGET_PREFIX)ranlib OBJCOPY = $(TARGET_PREFIX)objcopy OBJDUMP = $(TARGET_PREFIX)objdump LINK = $(CC) PERL = perl # # コンパイルルールの定義 # $(KERNEL_COBJS): %.o: %.c $(CC) -c $(CFLAGS) -o $(OUTDIR)/$(patsubst %.c,%.o,$(notdir $<)) $(KERNEL_CFLAGS) $< $(KERNEL_ASMOBJS): %.o: %.S $(CC) -c $(CFLAGS) -o $(OUTDIR)/$(patsubst %.S,%.o,$(notdir $<)) $(KERNEL_CFLAGS) $< $(STASK_COBJS): %.o: %.c $(CC) -c $(CFLAGS) -o $(OUTDIR)/$(patsubst %.c,%.o,$(notdir $<)) $(STASK_CFLAGS) $< $(STASK_ASMOBJS): %.o: %.S $(CC) -c $(CFLAGS) -o $(OUTDIR)/$(patsubst %.S,%.o,$(notdir $<)) $(STASK_CFLAGS) $< $(UTASK_COBJS): %.o: %.c $(CC) -c $(CFLAGS) -o $(OUTDIR)/$(patsubst %.c,%.o,$(notdir $<)) $(UTASK_CFLAGS) $< $(UTASK_ASMOBJS): %.o: %.S $(CC) -c $(CFLAGS) -o $(OUTDIR)/$(patsubst %.S,%.o,$(notdir $<))) $(UTASK_CFLAGS) $< $(SYSLIB_COBJS): %.o: %.c $(CC) -c $(CFLAGS) -o $(OUTDIR)/$(patsubst %.c,%.o,$(notdir $<)) $(SYSLIB_CFLAGS) $< $(SYSLIB_ASMOBJS): %.o: %.S $(CC) -c $(CFLAGS) -o $(OUTDIR)/$(patsubst %.S,%.o,$(notdir $<)) $(SYSLIB_CFLAGS) $< # # 依存関係作成ルールの定義 # $(KERNEL_COBJS:.o=.d): %.d: %.c @$(PERL) makedep -C $(CC) \ -O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend $(KERNEL_ASMOBJS:.o=.d): %.d: %.S @$(PERL) makedep -C $(CC) \ -O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend $(STASK_COBJS:.o=.d): %.d: %.c @$(PERL) makedep -C $(CC) \ -O "$(CFLAGS) $(STASK_CFLAGS)" $< >> Makefile.depend $(STASK_ASMOBJS:.o=.d): %.d: %.S @$(PERL) makedep -C $(CC) \ -O "$(CFLAGS) $(STASK_CFLAGS)" $< >> Makefile.depend $(UTASK_COBJS:.o=.d): %.d: %.c @$(PERL) makedep -C $(CC) \ -O "$(CFLAGS) $(UTASK_CFLAGS)" $< >> Makefile.depend $(UTASK_ASMOBJS:.o=.d): %.d: %.S @$(PERL) makedep -C $(CC) \ -O "$(CFLAGS) $(UTASK_CFLAGS)" $< >> Makefile.depend $(SYSLIB_COBJS:.o=.d): %.d: %.c @$(PERL) makedep -C $(CC) \ -O "$(CFLAGS) $(SYSLIB_CFLAGS)" $< >> Makefile.depend $(SYSLIB_ASMOBJS:.o=.d): %.d: %.S @$(PERL) makedep -C $(CC) \ -O "$(CFLAGS) $(SYSLIB_CFLAGS)" $< >> Makefile.depend # # デフォルトコンパイルルールを上書き # %.o: %.c @echo "*** Default compile rules should not be used." $(CC) -c $(CFLAGS) $< %.s: %.c @echo "*** Default compile rules should not be used." $(CC) -S $(CFLAGS) $< %.o: %.S @echo "*** Default compile rules should not be used." $(CC) -c $(CFLAGS) $< test: @echo $(INCLUDES)