From 566eed8328ea61e4b18a7a77031ca22cdaf21ccc Mon Sep 17 00:00:00 2001 From: bg Date: Tue, 18 Sep 2012 20:03:01 +0200 Subject: [PATCH] new make system --- Makefile_arm7tdmi | 25 ++++++++ Makefile_arm7tdmi_conf.inc | 22 +++++++ Makefile_cortexm3 | 25 ++++++++ Makefile_cortexm3_conf.inc | 22 +++++++ Makefile_m644 | 25 ++++++++ Makefile_m644_conf.inc | 20 +++++++ Makefile => Makefile_main.inc | 108 +++++++++++++++++++++++++++------- Makefile_sys_conf.inc | 51 ++++++++++++++++ Makefile_sys_conf.inc.ref | 42 +++++++++++++ 9 files changed, 318 insertions(+), 22 deletions(-) create mode 100644 Makefile_arm7tdmi create mode 100644 Makefile_arm7tdmi_conf.inc create mode 100644 Makefile_cortexm3 create mode 100644 Makefile_cortexm3_conf.inc create mode 100644 Makefile_m644 create mode 100644 Makefile_m644_conf.inc rename Makefile => Makefile_main.inc (83%) create mode 100644 Makefile_sys_conf.inc create mode 100644 Makefile_sys_conf.inc.ref diff --git a/Makefile_arm7tdmi b/Makefile_arm7tdmi new file mode 100644 index 0000000..3ec7855 --- /dev/null +++ b/Makefile_arm7tdmi @@ -0,0 +1,25 @@ +# Makefile for the ARM-Crypto-Lib project +# +# This file is part of the AVR-Crypto-Lib. +# Copyright (C) 2010 Daniel Otte (daniel.otte@rub.de) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +SHELL = sh + +include Makefile_sys_conf.inc +include Makefile_arm7tdmi_conf.inc +include Makefile_main.inc + + diff --git a/Makefile_arm7tdmi_conf.inc b/Makefile_arm7tdmi_conf.inc new file mode 100644 index 0000000..e4bdaa4 --- /dev/null +++ b/Makefile_arm7tdmi_conf.inc @@ -0,0 +1,22 @@ +BOARD = arm7tdmi_generic +MCU_TARGET = arm7tdmi +MCU_OPTS = -marm -mthumb-interwork +OPTIMIZE = -Os +FLASHCMD = $(OPENOCD) -f openocd.cfg \ + -c "init" \ + -c "halt" \ + -c "flash write_image erase $(1) 0 bin" \ + -c "reset run" \ + -c "shutdown" + +override CFLAGS_A = $(COMMON_FLAGS) \ + -MF$(DEP_DIR)$(patsubst %.o,%.d,$(notdir $(1))) +override CFLAGS = $(COMMON_FLAGS) \ + -MF$(DEP_DIR)$(patsubst %.o,%.d,$(notdir $@)) + +override LDFLAGS = -g -Wl,--gc-sections \ + -Wl,--entry=reset_isr \ + -Wl,-Map,# no space at the end + +override ASFLAGS = -mcpu=$(MCU_TARGET) + diff --git a/Makefile_cortexm3 b/Makefile_cortexm3 new file mode 100644 index 0000000..1357e80 --- /dev/null +++ b/Makefile_cortexm3 @@ -0,0 +1,25 @@ +# Makefile for the ARM-Crypto-Lib project +# +# This file is part of the AVR-Crypto-Lib. +# Copyright (C) 2010 Daniel Otte (daniel.otte@rub.de) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +SHELL = sh + +include Makefile_sys_conf.inc +include Makefile_cortexm3_conf.inc +include Makefile_main.inc + + diff --git a/Makefile_cortexm3_conf.inc b/Makefile_cortexm3_conf.inc new file mode 100644 index 0000000..491b7ed --- /dev/null +++ b/Makefile_cortexm3_conf.inc @@ -0,0 +1,22 @@ +BOARD = lm3s9b90_cm3 +MCU_TARGET = cortex-m3 +MCU_OPTS = -mthumb +OPTIMIZE = -Os -fomit-frame-pointer +FLASHCMD = $(OPENOCD) -f openocd.cfg \ + -c "init" \ + -c "halt" \ + -c "flash write_image erase $(1) 0 bin" \ + -c "reset run" \ + -c "shutdown" + +override CFLAGS_A = $(COMMON_FLAGS) \ + -MF$(DEP_DIR)$(patsubst %.o,%.d,$(notdir $(1))) +override CFLAGS = $(COMMON_FLAGS) \ + -MF$(DEP_DIR)$(patsubst %.o,%.d,$(notdir $@)) + +override LDFLAGS = -g -T lm3s9b90.ld -Wl,--gc-sections \ + -Wl,--entry=reset_isr \ + -Wl,-Map,# no space at the end + +override ASFLAGS = -mcpu=$(MCU_TARGET) + diff --git a/Makefile_m644 b/Makefile_m644 new file mode 100644 index 0000000..4912740 --- /dev/null +++ b/Makefile_m644 @@ -0,0 +1,25 @@ +# Makefile for the AVR-Crypto-Lib project +# +# This file is part of the AVR-Crypto-Lib. +# Copyright (C) 2010 Daniel Otte (daniel.otte@rub.de) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +SHELL = sh + +include Makefile_sys_conf.inc +include Makefile_m644_conf.inc +include Makefile_main.inc + + diff --git a/Makefile_m644_conf.inc b/Makefile_m644_conf.inc new file mode 100644 index 0000000..8d698e3 --- /dev/null +++ b/Makefile_m644_conf.inc @@ -0,0 +1,20 @@ + +MCU_TARGET = atmega644 +F_CPU = 20000000 +OPTIMIZE = -Os # -Os +EXTRALINK = +DEFS = -D$(call uc, $(MCU_TARGET)) -DF_CPU=$(F_CPU) +BOARD_NAME = pollin_eval_m644 + +override CFLAGS_A = -MMD -MF$(DEP_DIR)$(patsubst %.o,%.d,$(notdir $(1))) $(DEBUG) $(WARNING) -std=$(CSTD) $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS) +override CFLAGS = -MMD -MF$(DEP_DIR)$(patsubst %.o,%.d,$(notdir $@)) $(DEBUG) $(WARNING) -std=$(CSTD) $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS) + +override LDFLAGS = -gdwarf-2 -Wl,-Map, +override ASFLAGS = -mmcu=$(MCU_TARGET) -Wa,--gdwarf-2 + +PROGRAMMER = avr911 +PROG_PORT = /dev/ttyUSB1 +DEFS = -D$(call uc, $(MCU_TARGET)) -DF_CPU=$(F_CPU) +FLASHCMD = avrdude -p $(MCU_TARGET) -P $(PROG_PORT) -c $(PROGRAMMER) -U flash:w:# no space at the end +#FLASHCMD = avrdude -p $(MCU_TARGET) -c usbasp -U flash:w:# no space at the end +RESETCMD = avrdude -p $(MCU_TARGET) -P $(PROG_PORT) -c $(PROGRAMMER) diff --git a/Makefile b/Makefile_main.inc similarity index 83% rename from Makefile rename to Makefile_main.inc index 9570d5c..d884642 100644 --- a/Makefile +++ b/Makefile_main.inc @@ -1,6 +1,7 @@ -# Makefile for the ARM-Crypto-Lib project +# vim:set ft=make +# Makefile for the AVR-Crypto-Lib project # -# This file is part of the ARM-Crypto-Lib. +# This file is part of the AVR-Crypto-Lib. # Copyright (C) 2010 Daniel Otte (daniel.otte@rub.de) # # This program is free software: you can redistribute it and/or modify @@ -16,8 +17,6 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -SHELL = sh - BLOCK_CIPHERS := STREAM_CIPHERS := HASHES := @@ -27,20 +26,20 @@ ENCODINGS := SIGNATURE := PK_CIPHERS := AUX := + LIB_ALGOS := # we use the gnu make standard library include gmsl -include arm-makefile.inc - GLOBAL_INCDIR := ./ $(TESTSRC_DIR) #------------------------------------------------------------------------------- # inclusion of make stubs - include $(sort $(wildcard mkfiles/*.mk)) +#------------------------------------------------------------------------------- +# define binary object in $(BIN_DIR)$(ALGO)/ define Assert_Template $(1) = $(2) endef @@ -101,11 +100,20 @@ $(foreach a, $(ALGORITHMS), $(eval $(call Assert_Template, \ define TargetSource_Template $(1): $(2) + @mkdir -p $(dir $(1)) $(DEP_DIR) @echo "[cc]: $(1) <-- $(2)" - @mkdir -p $(dir $(1)) @$(CC) $(CFLAGS_A) $(addprefix -I./,$(3)) $(addprefix -D, $(4)) -c -o $(1) $(2) endef + + +define TargetSourceList_Template +$(1): $(2) + @mkdir -p $(dir $(1)) $(DEP_DIR) + @echo "[cc]: $(1) <-- $(2)" + @$(CC) $(CFLAGS_A) $(addprefix -I./,$(3)) $(addprefix -D, $(4)) $(LIST_OPT) -c -o /dev/null $(2) > $(1) +endef + # ---------------------------------------------------------------------------- # Function: find_source_file # Arguments: 1: name of the binary file (.o extension) to search @@ -127,7 +135,7 @@ $(foreach a, $(ALGORITHMS), \ $(BIN_DIR)$(call lc, $(a))/$(b), \ $(call find_source_file, $(b), $($(a)_DIR) $($(a)_INCDIR) $(GLOBAL_INCDIR) ),\ $($(a)_DIR) $($(a)_INCDIR) $(GLOBAL_INCDIR), \ - $($(a)_DEF) \ + $($(a)_DEF), \ )) \ ) \ ) @@ -143,6 +151,30 @@ $(foreach a, $(ALGORITHMS), \ ) \ ) + +$(foreach a, $(ALGORITHMS), \ + $(foreach b, $($(a)_OBJ), \ + $(eval $(call TargetSourceList_Template, \ + $(LIST_DIR)$(call lc, $(a))/$(patsubst %.o,%.s,$(b)), \ + $(call find_source_file, $(b), $($(a)_DIR) $($(a)_INCDIR) $(GLOBAL_INCDIR) ),\ + $($(a)_DIR) $($(a)_INCDIR) $(GLOBAL_INCDIR), \ + $($(a)_DEF), \ + )) \ + ) \ +) + +EXTRALINK_BINOBJ = $(patsubst %, $(BIN_DIR)%, $(EXTRALINK)) + +$(foreach a, $(EXTRALINK), \ + $(eval $(call TargetSource_Template, \ + $(BIN_DIR)$(a), \ + $(call find_source_file, $(a), $(GLOBAL_INCDIR) ),\ + $($(a)_DIR) $($(a)_INCDIR) $(GLOBAL_INCDIR), \ + $($(a)_DEF), \ + )) \ +) + + $(foreach a, $(LIB_OBJECTS), \ $(eval $(call TargetSource_Template, \ $(a), \ @@ -156,20 +188,21 @@ $(foreach a, $(LIB_OBJECTS), \ #------------------------------------------------------------------------------- define MainTestElf_Template -$(1): $(2) $(3) - @echo "[ld]: $(1)" +$(1): $(2) $(3) $(4) @mkdir -p $(dir $(1)) + @echo "[ld]: $(1)" @$(CC) $(CFLAGS_A) $(LDFLAGS)$(patsubst %.elf,%.map,$(1)) -o \ $(1) \ - $(2) $(3) \ - $(addprefix -l, $(LIBS)) + $(2) $(3) $(EXTRALINK_BINOBJ)\ + $(addprefix -l,$(LIBS)) endef $(foreach a, $(ALGORITHMS), \ $(eval $(call MainTestElf_Template, \ $(BIN_DIR)$(call lc, $(a))/$(TEST_DIR)main-$(call lc, $(a))-test.elf, \ $($(a)_BINOBJ), \ - $($(a)_TESTBINOBJ) \ + $($(a)_TESTBINOBJ), \ + $(EXTRALINK_BINOBJ) \ )) \ ) @@ -179,6 +212,20 @@ all: $(foreach algo, $(ALGORITHMS), $($(algo)_BINOBJ)) #------------------------------------------------------------------------------- +define MakeDir_TEMPLATE +$(1): + @echo [mkdir] $(1) + @mkdir -p $(1) +endef + +$(foreach d, DEP_DIR BIN_DIR TESTSRC_DIR TESTLOG_DIR SPEEDLOG_DIR SIZE_DIR LIST_DIR STAT_DIR AUTOASM_DIR, $(eval $(call MakeDir_TEMPLATE, \ + $($(d)) \ +))) + +$(foreach algo, $(ALGORITHMS), $(eval $(call MakeDir__TEMPLATE, \ + $(BIN_DIR)$(call lc, $(algo))/$(TEST_DIR) \ +))) + define TestBin_TEMPLATE $(1)_TESTBIN: $(2) endef @@ -190,10 +237,20 @@ $(foreach algo, $(ALGORITHMS), $(eval $(call TestBin_TEMPLATE, \ #------------------------------------------------------------------------------- +define Listing_TEMPLATE +$(1)_LIST: $(2) +endef + +$(foreach algo, $(ALGORITHMS), $(eval $(call Listing_TEMPLATE, \ + $(algo), \ + $(foreach obj,$($(algo)_OBJ), $(LIST_DIR)$(call lc, $(algo))/$(obj:.o=.s)) \ +))) + +#------------------------------------------------------------------------------- %.bin: %.elf @echo "[objcopy]: $@" @$(OBJCOPY) -O binary $< $@ - + %.hex: %.elf @echo "[objcopy]: $@" @$(OBJCOPY) -j .text -j .data -O ihex $< $@ @@ -255,6 +312,10 @@ tests: $(foreach a, $(ALGORITHMS), $(a)_TESTBIN) define TestRun_Template $(1)_TESTRUN: $(1)_FLASH + @echo "[reset]" + @sleep 3 + @$(RESETCMD) + @sleep 1 @echo "[test]: $(1)" $(RUBY) $(GET_TEST) $(TESTPORT) $(TESTPORTBAUDR) 8 1 nessie $(TESTLOG_DIR)$(TESTPREFIX) $(2) endef @@ -276,6 +337,13 @@ $(foreach algo, $(ALGORITHMS), \ ))\ ) +.PHONY: all +all: cores + +.PHONY: reset +reset: + $(RESETCMD) + .PHONY: cores cores: $(foreach algo, $(ALGORITHMS), $(algo)_OBJ) @@ -300,9 +368,6 @@ encodings: $(foreach algo, $(ENCODINGS), $(algo)_OBJ) .PHONY: aux aux: $(foreach algo, $(AUX), $(algo)_OBJ) - - - .PHONY: lib_info lib_info: @echo "LIB_ALGOS =" @@ -325,7 +390,6 @@ $(BIN_DIR)$(LIB_DIR)$(LIB_NAME): $(LIB_OBJECTS) .PHONY: lib lib: $(BIN_DIR)$(LIB_DIR)$(LIB_NAME) - #------------------------------------------------------------------------------- @@ -355,7 +419,6 @@ info: @echo " targets:" @echo " all - all algorithm cores" @echo " cores - all algorithm cores" - @echo " lib - make library archive" @echo " listings - all algorithm core listings" @echo " tests - all algorithm test programs" @echo " stats - all algorithm size statistics" @@ -364,6 +427,7 @@ info: @echo " hashes - all hash cores" @echo " macs - all MAC cores" @echo " prngs - all PRNG cores" + @echo " lib - create library @echo " all_testrun - testrun all algorithms" @echo " hash_size - measure size of all hash functions" @echo " hash_speed - measure performance of all hash functions" @@ -384,12 +448,12 @@ info: .PHONY: clean clean: @echo "[rm]: $(BIN_DIR)*" - @$(RM) -rf $(BIN_DIR)* + rm -rf $(BIN_DIR)* .PHONY: depclean depclean: clean @echo "[rm]: $(DEP_DIR)*.d" - @$(RM) -f $(DEP_DIR)*.d + rm -f $(DEP_DIR)*.d #------------------------------------------------------------------------------- # dependency inclusion diff --git a/Makefile_sys_conf.inc b/Makefile_sys_conf.inc new file mode 100644 index 0000000..15d8978 --- /dev/null +++ b/Makefile_sys_conf.inc @@ -0,0 +1,51 @@ +TOOLCHAIN = arm-elf-# +DEBUG = -gdwarf-2 +WARNING = -pedantic -Wall -Wstrict-prototypes -Werror +DEFS = -D$(call uc, $(subst -,_,$(MCU_TARGET))) +DEP_DIR = deps/$(BOARD)/# +TEST_DIR = test/# +BIN_DIR = bin/$(BOARD)/# +TESTSRC_DIR = test_src/# +ERASECMD = +TESTPORT = /dev/ttyUSB2 +TESTPORTBAUDR = 115200 +TESTLOG_DIR = testlog/# +TESTPREFIX = nessie-# +SPEEDTOOL = host/get_performance.rb +SPEEDLOG_DIR = speed_log/$(BOARD)/# +SPEEDPREFIX = +SPEEDCMD = performance +SIZE_DIR = size_log/# +LIST_DIR = listings/$(BOARD)/# +STAT_DIR = stats/# +AUTOASM_DIR = autoasm/$(BOARD)/# +LIB_DIR = lib/# +LIB_NAME = libcrypto.a +AUTOASM_OPT = -S +CSTD = gnu99 +LIBS = c gcc + +COMMON_FLAGS = \ + $(DEBUG) $(WARNING) -std=$(CSTD) $(OPTIMIZE) \ + -mcpu=$(MCU_TARGET) $(MCU_OPTS) $(DEFS) -MMD + + # -ffunction-sections -fdata-sections \ + +SIZESTAT_FILE = sizestats.txt + +CC = $(TOOLCHAIN)gcc +OBJCOPY = $(TOOLCHAIN)objcopy +OBJDUMP = $(TOOLCHAIN)objdump +SIZE = $(TOOLCHAIN)size +OPENOCD = openocd +READELF = readelf +AR = $(TOOLCHAIN)ar +CHMOD = chmod +CHOWN = chown +CHGRP = chgrp +RM = rm +RUBY = ruby +GET_TEST = host/get_test.rb +MAKE = make +MAKE2GRAPH = ~/bin/make2graph.rb +TWOPI = twopi diff --git a/Makefile_sys_conf.inc.ref b/Makefile_sys_conf.inc.ref new file mode 100644 index 0000000..b617523 --- /dev/null +++ b/Makefile_sys_conf.inc.ref @@ -0,0 +1,42 @@ +DEBUG = -gdwarf-2 +WARNING = -pedantic -Wall -Werror -Wstrict-prototypes +PROGRAMMER = jtagmkII +PROG_PORT = usb +FLASHCMD = avrdude -p $(MCU_TARGET) -P $(PROG_PORT) -c $(PROGRAMMER) -U flash:w:# no space at the end +#FLASHCMD = avrdude -p $(MCU_TARGET) -c usbasp -U flash:w:# no space at the end +#RESETCMD = avrdude -p $(MCU_TARGET) -P $(PROG_PORT) -c $(PROGRAMMER) +RESETCMD = avarice -2 -R -j usb +DEP_DIR = deps/$(BOARD_NAME)/# +TEST_DIR = test/# +BIN_DIR = bin/$(BOARD_NAME)/# +TESTSRC_DIR = test_src/ +#uisp -dprog=bsd -dlpt=/dev/parport1 --upload if=$(PRG).hex +ERASECMD = +TESTPORT = /dev/ttyUSB0 +TESTPORTBAUDR = 115200 +TESTLOG_DIR = testlog/# +TESTPREFIX = nessie- +SPEEDTOOL = host/get_performance.rb +SPEEDLOG_DIR = speed_log/$(BOARD_NAME)/# +SPEEDPREFIX = +SPEEDCMD = performance +SIZE_DIR = size_log/$(BOARD_NAME)/# +LIST_DIR = listings/$(BOARD_NAME)/# +LIST_OPT = -Wa,-adhln -g +STAT_DIR = stats/$(BOARD_NAME)/# +AUTOASM_DIR = autoasm/$(BOARD_NAME)/# +AUTOASM_OPT = -S +CC = avr-gcc +CSTD = gnu99 + +SIZESTAT_FILE = sizestats.txt + +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +READELF = readelf +RUBY = ruby +GET_TEST = host/get_test.rb +MAKE = make +MAKE2GRAPH = ~/bin/make2graph.rb +TWOPI = twopi -- 2.39.2