blob: 7be9a53a1a7a32cffbd49b724888ce56ebe2ad37 [file] [log] [blame]
FUNCS = do_nothing stack_8w stack_64w \
hashtest_sha256 hashtest_sha512 \
hashtest_sha3_256 hashtest_sha3_512 \
aes128block_test aes128sched_test \
aes256block_test aes256sched_test \
aes128gcm_test aes128eax_test \
aes128ccm_test \
salsa20_test chacha20_test \
poly1305_test hmacsha256_test \
curve25519_test \
norx_test
AEADS = aeadperf_aes128gcm \
aeadperf_aes128ccm \
aeadperf_aes128eax \
aeadperf_aes256gcm \
aeadperf_aes256ccm \
aeadperf_aes256eax \
aeadperf_norx \
aeadperf_chacha20poly1305
TESTS = testcurve25519 testaes testmodes testsalsa20 testsha1 testsha2 \
testsha3 testpoly1305 testnorx testchacha20poly1305 testdrbg
ARCHS = stm32f0 stm32f1 stm32f3 efm32 qemucm3
all: $(patsubst %,%.stm32f0.bin,$(FUNCS) $(AEADS) $(TESTS)) \
$(patsubst %,%.stm32f1.bin,$(FUNCS) $(AEADS) $(TESTS)) \
$(patsubst %,%.stm32f3.bin,$(FUNCS) $(AEADS) $(TESTS)) \
$(patsubst %,%.efm32.bin,$(FUNCS) $(AEADS) $(TESTS)) \
$(patsubst %,%.qemucm3.bin,$(FUNCS) $(AEADS) $(TESTS))
%.stm32f0.elf:
arm-none-eabi-gcc $(CFLAGS) $(CFLAGS_$*) $(LDFLAGS) -T linkscript.stm32f0.ld -mcpu=cortex-m0 -DCORTEX_M0 -o $@ $^ -DTEST=$* -lgcc
%.stm32f1.elf:
arm-none-eabi-gcc $(CFLAGS) $(CFLAGS_$*) $(LDFLAGS) -T linkscript.stm32f1.ld -mcpu=cortex-m3 -DCORTEX_M3 -o $@ $^ -DTEST=$* -lgcc
%.stm32f3.elf:
arm-none-eabi-gcc $(CFLAGS) $(CFLAGS_$*) $(LDFLAGS) -T linkscript.stm32f3.ld -mcpu=cortex-m4 -DCORTEX_M4 -o $@ $^ -DTEST=$* -lgcc
%.efm32.elf:
arm-none-eabi-gcc $(CFLAGS) $(CFLAGS_$*) $(LDFLAGS) -T linkscript.efm32.ld -mcpu=cortex-m0 -DCORTEX_M0 -o $@ $^ -DTEST=$* -lgcc
%.qemucm3.elf:
arm-none-eabi-gcc $(CFLAGS) $(CFLAGS_$*) $(LDFLAGS) -T linkscript.qemucm3.ld -mcpu=cortex-m3 -DCORTEX_M3 -o $@ $^ -DTEST=$* -lgcc
%.bin: %.elf
arm-none-eabi-objcopy -O binary $< $@
.PRECIOUS: %.bin
AES_OPTIONS = -DCF_AES_ENCRYPT_ONLY=1 -DCF_SIDE_CHANNEL_PROTECTION=0
AES128_OPTIONS = -DCF_AES_MAXROUNDS=AES128_ROUNDS
AES256_OPTIONS = -DCF_AES_MAXROUNDS=AES256_ROUNDS
AEADPERF_BRACKET = -DBRACKET_MODE=1 -DBRACKET_START=0 -DBRACKET_END=256 -DBRACKET_STEP=4
CFLAGS_aes128block_test = $(AES_OPTIONS) $(AES128_OPTIONS)
CFLAGS_aes128sched_test = $(AES_OPTIONS) $(AES128_OPTIONS)
CFLAGS_aes128gcm_test = $(AES_OPTIONS) $(AES128_OPTIONS)
CFLAGS_aes128eax_test = $(AES_OPTIONS) $(AES128_OPTIONS)
CFLAGS_aes128ccm_test = $(AES_OPTIONS) $(AES128_OPTIONS)
CFLAGS_poly1305_test = $(AES_OPTIONS) $(AES128_OPTIONS)
CFLAGS_aeadperf_aes128gcm = $(AES_OPTIONS) $(AES128_OPTIONS) $(AEADPERF_BRACKET)
CFLAGS_aeadperf_aes128eax = $(AES_OPTIONS) $(AES128_OPTIONS) $(AEADPERF_BRACKET)
CFLAGS_aeadperf_aes128ccm = $(AES_OPTIONS) $(AES128_OPTIONS) $(AEADPERF_BRACKET)
CFLAGS_aeadperf_aes256gcm = $(AES_OPTIONS) $(AES256_OPTIONS) $(AEADPERF_BRACKET)
CFLAGS_aeadperf_aes256eax = $(AES_OPTIONS) $(AES256_OPTIONS) $(AEADPERF_BRACKET)
CFLAGS_aeadperf_aes256ccm = $(AES_OPTIONS) $(AES256_OPTIONS) $(AEADPERF_BRACKET)
CFLAGS_aeadperf_norx = $(AEADPERF_BRACKET)
CFLAGS_aeadperf_chacha20poly1305 = $(AEADPERF_BRACKET)
CFLAGS_aes256block_test = $(AES_OPTIONS) $(AES256_OPTIONS)
CFLAGS_aes256sched_test = $(AES_OPTIONS) $(AES256_OPTIONS)
CFLAGS_testaes = -DCF_SIDE_CHANNEL_PROTECTION=0
CFLAGS = -I./ext -I../ext -I.. -Os -ffunction-sections -g \
-Wall -Werror -std=gnu99 -mthumb
LDFLAGS = -nostartfiles -nostdlib -Wl,-gc-sections
CURVESRCS = unacl/cortex_m0_mpy121666.s unacl/cortex_m0_reduce25519.s unacl/mul.s unacl/sqr.s
SRCS = boot.c memcpy.s memset.s semihost.c semihost.s \
../sha1.c ../sha256.c ../sha512.c ../sha3.c ../blockwise.c ../chash.c \
../curve25519.c ../poly1305.c \
../aes.c ../eax.c ../gcm.c ../cbcmac.c ../ccm.c \
../modes.c ../cmac.c ../gf128.c \
../hmac.c ../pbkdf2.c ../salsa20.c ../chacha20.c \
../norx.c ../chacha20poly1305.c ../drbg.c
$(patsubst %,%.stm32f0.elf, $(FUNCS) $(AEADS)): $(SRCS) main.c $(CURVESRCS)
$(patsubst %,%.stm32f1.elf, $(FUNCS) $(AEADS)): $(SRCS) main.c $(CURVESRCS)
$(patsubst %,%.stm32f3.elf, $(FUNCS) $(AEADS)): $(SRCS) main.c $(CURVESRCS)
$(patsubst %,%.efm32.elf, $(FUNCS) $(AEADS)): $(SRCS) main.c $(CURVESRCS)
$(patsubst %,%.qemucm3.elf, $(FUNCS) $(AEADS)): $(SRCS) main.c $(CURVESRCS)
$(patsubst %,testcurve25519.%.elf, $(ARCHS)): $(SRCS) $(CURVESRCS) ../testcurve25519.c
$(patsubst %,testaes.%.elf, $(ARCHS)): $(SRCS) ../testaes.c
$(patsubst %,testmodes.%.elf, $(ARCHS)): $(SRCS) ../testmodes.c
$(patsubst %,testsalsa20.%.elf, $(ARCHS)): $(SRCS) ../testsalsa20.c
$(patsubst %,testsha1.%.elf, $(ARCHS)): $(SRCS) ../testsha1.c
$(patsubst %,testsha2.%.elf, $(ARCHS)): $(SRCS) ../testsha2.c
$(patsubst %,testsha3.%.elf, $(ARCHS)): $(SRCS) ../testsha3.c
$(patsubst %,testpoly1305.%.elf, $(ARCHS)): $(SRCS) ../testpoly1305.c
$(patsubst %,testnorx.%.elf, $(ARCHS)): $(SRCS) ../testnorx.c
$(patsubst %,testchacha20poly1305.%.elf, $(ARCHS)): $(SRCS) ../testchacha20poly1305.c
$(patsubst %,testdrbg.%.elf, $(ARCHS)): $(SRCS) ../testdrbg.c
run.%.qemucm3: %.qemucm3.bin
arm-none-eabi-readelf -l $(patsubst %.bin,%.elf,$^) > $@.log
qemu-system-gnuarmeclipse -verbose -verbose -M STM32-P103 -kernel $^ -semihosting -nographic -monitor null -serial null 2>> $@.log
cat $@.log
run.%.efm32: %.efm32.elf
arm-none-eabi-readelf -l $^ > $@.log
echo '-----' >> $@.log
openocd -f openocd.efm32.cfg >> $@.log &
arm-none-eabi-gdb --quiet --batch-silent \
$^ \
-ex 'target remote :3333' \
-ex 'monitor reset halt' \
-ex 'load' \
-ex 'monitor arm semihosting enable' \
-ex 'monitor reset run' \
-ex 'monitor wait_halt 720000' \
-ex 'monitor shutdown'
run.%.stm32f0: %.stm32f0.elf
arm-none-eabi-readelf -l $^ > $@.log
echo '-----' >> $@.log
openocd -f openocd.stm32f0.cfg >> $@.log &
arm-none-eabi-gdb --quiet --batch-silent \
$^ \
-ex 'target remote :3333' \
-ex 'monitor reset halt' \
-ex 'load' \
-ex 'monitor arm semihosting enable' \
-ex 'monitor reset run' \
-ex 'monitor wait_halt 720000' \
-ex 'monitor shutdown'
run.%.stm32f1: %.stm32f1.elf
arm-none-eabi-readelf -l $^ > $@.log
echo '-----' >> $@.log
openocd -f openocd.stm32f1.cfg >> $@.log &
arm-none-eabi-gdb --quiet --batch-silent \
$^ \
-ex 'target remote :3333' \
-ex 'monitor reset halt' \
-ex 'load' \
-ex 'monitor arm semihosting enable' \
-ex 'monitor reset run' \
-ex 'monitor wait_halt 720000' \
-ex 'monitor shutdown'
run.%.stm32f3: %.stm32f3.elf
arm-none-eabi-readelf -l $^ > $@.log
echo '-----' >> $@.log
openocd -f openocd.stm32f3.cfg >> $@.log &
arm-none-eabi-gdb --quiet --batch-silent \
$^ \
-ex 'target remote :3333' \
-ex 'monitor reset halt' \
-ex 'load' \
-ex 'monitor arm semihosting enable' \
-ex 'monitor reset run' \
-ex 'monitor wait_halt 720000' \
-ex 'monitor shutdown'
test: $(patsubst %,run.%.qemucm3,$(FUNCS) $(TESTS))
.PHONY: test
perf.stm32f0: $(patsubst %,run.%.stm32f0,$(FUNCS))
.PHONY: perf.stm32f0
test.stm32f0: $(patsubst %,run.%.stm32f0,$(FUNCS) $(TESTS))
.PHONY: test.stm32f0
test.stm32f1: $(patsubst %,run.%.stm32f1,$(FUNCS) $(TESTS))
.PHONY: test.stm32f1
test.stm32f3: $(patsubst %,run.%.stm32f3,$(FUNCS) $(TESTS))
.PHONY: test.stm32f3
clean:
rm -rf *.log *.elf *.bin