# Copyright (c) 2015-2016, NORDUnet A/S # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: # - Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # # - Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # - Neither the name of the NORDUnet nor the names of its contributors may # be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS # IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A # PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # Number of static hash and HMAC state blocks to allocate. # Numbers pulled out of a hat, just testing. STATIC_HASH_STATE_BLOCKS = 10 STATIC_HMAC_STATE_BLOCKS = 4 STATIC_PKEY_STATE_BLOCKS = 6 INC = hal.h hal_internal.h LIB = libhal.a USAGE = "usage: make [IO_BUS=eim|i2c|fmc] [RPC_CLIENT=local|remote|mixed] [RPC_SERVER=yes] [KS=mmap|volatile|flash]" OBJ = errorstrings.o CORE_OBJ = core.o ${HASH_OBJ} ${MISC_OBJ} ${PKEY_OBJ} ${PKEY2_OBJ} ${KS_OBJ} ${IO_OBJ} ${MKMIF_OBJ} HASH_OBJ = hash.o MISC_OBJ = csprng.o pbkdf2.o PKEY_OBJ = asn1.o ecdsa.o rsa.o PKEY2_OBJ = aes_keywrap.o modexp.o MKMIF_OBJ = mkmif.o # I/O bus to the FPGA # # IO_BUS = eim | i2c | fmc # eim: EIM bus from Novena # i2c: older I2C bus from Novena # fmc: FMC bus from dev-bridge and alpha boards IO_BUS ?= eim ifeq (${IO_BUS},eim) IO_OBJ = hal_io_eim.o novena-eim.o else ifeq (${IO_BUS},i2c) IO_OBJ = hal_io_i2c.o else ifeq (${IO_BUS},fmc) IO_OBJ = hal_io_fmc.o endif # If we're building for STM32, position-independent code leads to some # hard-to-debug function pointer errors. OTOH, if we're building for Linux # (even on the Novena), we want to make it possible to build a shared library. ifneq (${IO_BUS},fmc) CFLAGS += -fPIC endif # The mmap and flash keystore implementations are both server code. # # The volatile keystore (conventional memory) is client code, to # support using the same API for things like PKCS #11 "session" objects. # # Default at the moment is mmap, since that should work on the Novena # and we haven't yet written the flash code for the bridge board. KS_OBJ = ks.o KS ?= mmap ifeq (${KS},mmap) KS_OBJ += ks_mmap.o else ifeq (${KS},volatile) KS_OBJ += ks_volatile.o else ifeq (${KS},flash) KS_OBJ += ks_flash.o endif # RPC_CLIENT = local | remote | mixed # local: Build for Novena or dev-bridge, access FPGA cores directly. # remote: Build for other host, communicate with RPC server. # mixed: Do hashing locally in software, other functions remotely. # # RPC_SERVER = yes # # RPC_TRANSPORT = loopback | serial | daemon # loopback: communicate over loopback socket on Novena # serial: communicate over USB in serial pass-through mode # daemon: communicate over USB via a daemon, to arbitrate multiple clients RPC_TRANSPORT ?= daemon RPC_CLIENT_OBJ = rpc_api.o rpc_client.o xdr.o ifeq (${RPC_TRANSPORT},loopback) RPC_CLIENT_OBJ += rpc_client_loopback.o else ifeq (${RPC_TRANSPORT},serial) RPC_CLIENT_OBJ += rpc_client_serial.o slip.o else ifeq (${RPC_TRANSPORT},daemon) RPC_CLIENT_OBJ += rpc_client_daemon.o endif RPC_DISPATCH_OBJ = rpc_hash.o rpc_misc.o rpc_pkey.o RPC_SERVER_OBJ = rpc_api.o rpc_server.o xdr.o ${RPC_DISPATCH_OBJ} ifeq (${RPC_TRANSPORT},loopback) RPC_SERVER_OBJ += rpc_server_loopback.o
vpath %.c ${LIBCLI_SRC}
vpath %.h ${LIBCLI_SRC}

CFLAGS += \
	-DDO_CRYPT=0 \
	-DDO_FILE=0 \
	-DDO_FILTER=0 \
	-DDO_IDLE_TIMEOUT=0 \
	-DDO_MALLOC=0 \
	-DDO_PRINT_BUFFERED=0 \
	-DDO_REGULAR=0 \
	-DDO_SOCKET=0 \
	-DDO_TAB_COMPLETION=1 \
	-DDO_TELNET=0

all: libcli.a

libcli.a: libcli.o
	$(AR) rcs $@ $^

clean:
	rm -f libcli.[ao]