############################################################ # 環境設定 ############################################################ # マイコン開発環境のインストール先を環境変数で指定する NECEL_ROOT = if $(defined-env NECEL_ROOT) value $(absname $"$(getenv NECEL_ROOT)") else value "C:\Program Files (x86)\NEC Electronics Tools" # cygwinのインストール先を環境変数で指定する CYGWIN_ROOT = if $(defined-env CYGWIN_ROOT) value $(absname $"$(getenv CYGWIN_ROOT)") else value "C:\cygwin" # GCCバージョンを環境変数で指定する CYGWIN_GCC = if $(defined-env CYGWIN_GCC) value $(CYGWIN_ROOT)/bin/$"$(getenv CYGWIN_GCC)" else value $(CYGWIN_ROOT)/bin/gcc-4 #デバイスファイルは NECEL_ROOT/dev に置くこと #自己アップデート用ライブラリは CC_LIBS_ROOT/以下に置くこと SUBDIR_INTER_ASM = $(dir inter_asm) CC_ROOT = $(NECEL_ROOT)/CC78K0R CC_VER = W2.13 CC = $(CC_ROOT)/$(CC_VER)/bin/cc78k0r.exe RA = $(NECEL_ROOT)/RA78K0R/W1.33/bin/ra78k0r.exe LK = $(NECEL_ROOT)/RA78K0R/W1.33/bin/lk78k0r.exe OC = $(NECEL_ROOT)/RA78K0R/W1.33/bin/oc78k0r.exe LCNV = $(NECEL_ROOT)/RA78K0R/W1.33/bin/lc78k0r.exe DEVFILE_ROOT = $(NECEL_ROOT)/dev CC_LIBS_ROOT = $(CC_ROOT)/$(CC_VER)/lib78k0r CC_INCLUDES_ROOT = $(CC_ROOT)/$(CC_VER)/inc78k0r S0RM = s0rm.rel # セキュリティID GIVALUE = 1B339499E033F240BFAAh # ユーザオプションバイト GBValue = 7EFBFFh DEVICE_NAME = 9F0104 FSL_LIB = fsl.lib TARGET_NAME = bsr TARGET_LMF = $(TARGET_NAME).lmf TARGET_HEX = $(TARGET_NAME).hex # ここまで ############################################################ ############################################################ # ソースを追加したら編集する箇所 ############################################################ SRC_FILES[] = loader pm i2c_ctr main magic WDT i2c_mcu i2c_twl led rtc vreg_ctr vreg_twl adc renge\renge accero self_flash sw task_debug task_misc task_sys pedo_alg_thre_det2 ini_VECT task_status led_cam led_pow hal batt_params voltable pedo_lpf_coeff INCLUDES[] = ./ renge # ここまで ############################################################ .PHONY: clean BeforeBuild AddRel(files) = file_names = $(addsuffix .rel, $(files)) return $(file_names) # *.cからinter_asm/*.asmを作るための関数 AsmProgram(files) = foreach(filename, $(files)) asm_name = $(addprefix $(SUBDIR_INTER_ASM)/, $(addsuffix .asm, $(basename $(filename)))) c_name = $(addsuffix .c, $(filename)) .SCANNER: $(asm_name): $(c_name) $(CYGWIN_GCC) -MM -w -I$(CC_INCLUDES_ROOT) $(c_name) | sed 's/$(filename)\.o/$(SUBDIR_INTER_ASM)\/$(filename)\.asm/g' $(asm_name): $(c_name) $(CC) -c$(DEVICE_NAME) -y$(DEVFILE_ROOT) -_msgoff -irenge -i$(CC_INCLUDES_ROOT) -ms -qvjl2w -sa$(SUBDIR_INTER_ASM) -zpb -no $(c_name) return $(addsuffix .c, $(files)) # inter_asm/*.asm から *.relを作るための関数 RelProgram(files) = foreach(filename, $(files)) rel_name = $(addsuffix .rel, $(basename $(filename))) asm_name = $(addprefix $(SUBDIR_INTER_ASM)/, $(addsuffix .asm, $(basename $(filename)))) asm_win_name = $(addprefix $(SUBDIR_INTER_ASM)\\, $(addsuffix .asm, $(basename $(filename)))) c_name = $(addsuffix .c, $(filename)) .SCANNER: $(rel_name): $(asm_win_name) $(CYGWIN_GCC) -MM -w -I$(CC_INCLUDES_ROOT) $(c_name) | sed 's/\.o/\.rel/g' $(rel_name): $(asm_name) $(RA) -c$(DEVICE_NAME) -y$(DEVFILE_ROOT) -_msgoff $(asm_win_name) return $(addsuffix .rel, $(basename $(files))) $(TARGET_LMF): $(RelProgram $(SRC_FILES)) $(AsmProgram $(SRC_FILES)) $(LK) -y$(DEVFILE_ROOT) -_msgoff -o$(TARGET_LMF) $(CC_LIBS_ROOT)/$(S0RM) -gi$(GIVALUE) -pbsr_k0r.map -nkd -gb$(GBValue) -b$(CC_LIBS_ROOT)/$(FSL_LIB) -bcl0rdm.lib -bcl0rm.lib -bcl0rmf.lib -i$(CC_LIBS_ROOT) -dbsr_mcu.dr -s -w0 $(AddRel $(basename $(SRC_FILES))) $(TARGET_HEX) : $(TARGET_LMF) $(OC) -y$(DEVFILE_ROOT) -_msgoff -o.\\$(TARGET_HEX) -nu -ki $(TARGET_LMF) BeforeBuild: # ビルド前に必ず実行したい処理 # OMakeがタイムスタンプではなくMD5でファイルの状態を管理しているので # 残念ながら cleanしてからビルドしなおす必要がある C:\Windows\system32\cmd.exe /c $(CYGWIN_ROOT)\bin\touch magic.c if $(not $(file-exists $(SUBDIR_INTER_ASM))) mkdir $(SUBDIR_INTER_ASM) hoge.bin: BeforeBuild $(TARGET_HEX) C:\Windows\system32\cmd.exe /c ruby nec_s_2_bsrbin2.rb $(TARGET_HEX) clean: rm -rf *.prn *.rel $(SUBDIR_INTER_ASM)/*.asm *.omc .omakedb .omakedb.lock .DEFAULT: hoge.bin