From 65074a48df8b7492e2d4d13a1e8a9776198e4571 Mon Sep 17 00:00:00 2001 From: Dmitry Kozlyuk Date: Sun, 28 Aug 2022 03:31:26 +0300 Subject: [PATCH 1/3] Support cross-compilation When cross-compiling, tool names may differ from "gcc" and "ar". Do not overwrite $(CC) if set; call the archiver via $(AR). Signed-off-by: Dmitry Kozlyuk --- Makefile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index cb56282..aeef345 100644 --- a/Makefile +++ b/Makefile @@ -35,10 +35,12 @@ SRCDIR := ${CURDIR} OBJDIR := ${CURDIR}/obj PCDIR := ${CURDIR}/pkgconfig +CC ?= gcc +AR ?= ar + #DEFINE += -DTEST_DEBUG # build flags -CC = gcc CFLAGS += -O3 CFLAGS += -Wall -static CFLAGS += -I$(SRCDIR) @@ -112,7 +114,7 @@ $(OBJDIR): libAArch64crypto.a: $(OBJS) - ar -rcs $@ $(OBJDIR)/*.o + $(AR) -rcs $@ $(OBJDIR)/*.o $(PACKAGE_NAME).pc: mkdir ${PCDIR} From 721a02b3493023eed73c01912d122d5980053a60 Mon Sep 17 00:00:00 2001 From: Dmitry Kozlyuk Date: Sun, 28 Aug 2022 04:04:18 +0300 Subject: [PATCH 2/3] Add 'install' target Makefile suggested that the library should only be used from the build directory, which currently must be the same as the source directory. Add "install" make target and handle convenient variables: * PREFIX (default: /usr/local) * INCLUDEDIR (relative to PREFIX, default: include) * LIBDIR (relative to PREFIX, default: lib) There is no need to use this target to continue using the library from the build directory, but it saves work for users and packagers. Signed-off-by: Dmitry Kozlyuk --- Makefile | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index aeef345..1f514db 100644 --- a/Makefile +++ b/Makefile @@ -33,7 +33,10 @@ SRCDIR := ${CURDIR} OBJDIR := ${CURDIR}/obj -PCDIR := ${CURDIR}/pkgconfig +PREFIX ?= /usr/local +INCLUDEDIR ?= include +LIBDIR ?= lib +PCDIR := pkgconfig CC ?= gcc AR ?= ar @@ -130,3 +133,8 @@ $(PACKAGE_NAME).pc: @echo 'Version: '$(PACKAGE_VERSION) >> ${PKGCONFIG} @echo 'Libs: -L$${libdir} -lAArch64crypto' >> ${PKGCONFIG} @echo 'Cflags: -I$${includedir}' >> ${PKGCONFIG} + +install: AArch64cryptolib.h libAArch64crypto.a $(PKGCONFIG) + install -m 0644 -Dt $(PREFIX)/$(INCLUDEDIR) AArch64cryptolib.h + install -m 0644 -Dt $(PREFIX)/$(LIBDIR) libAArch64crypto.a + install -m 0644 -Dt $(PREFIX)/$(LIBDIR)/$(PCDIR) $(PKGCONFIG) From 4e2bf29a8b078654b74cffa51bde43ebbcb64cfd Mon Sep 17 00:00:00 2001 From: Dmitry Kozlyuk Date: Sun, 28 Aug 2022 04:04:18 +0300 Subject: [PATCH 3/3] Generate pkg-config file from a template The file for pkg-config was generated line-by-line in Makefile. This required escaping and was developer-unfriendly. Generate the .pc file from a template file using awk (which is already used and must be on all POSIX-compliant systems). While there, alter the target name for the .pc file so that it is not needlessly rebuilt. Signed-off-by: Dmitry Kozlyuk --- Makefile | 25 ++++++++----------------- libAArch64crypto.pc.in | 11 +++++++++++ 2 files changed, 19 insertions(+), 17 deletions(-) create mode 100644 libAArch64crypto.pc.in diff --git a/Makefile b/Makefile index 1f514db..a8f0282 100644 --- a/Makefile +++ b/Makefile @@ -86,9 +86,6 @@ TEST_OBJS += $(TEST_SRCS:.c=.o) # pkg-config metadata PACKAGE_NAME=libAArch64crypto -PACKAGE_DESCRIPTION=AArch64 Crypto Library -PACKAGE_URL=https://github.com/ARM-software/AArch64cryptolib -PACKAGE_VERSION=20.01 PKGCONFIG = ${PCDIR}/${PACKAGE_NAME}.pc all: libAArch64crypto.a $(TEST_TARGETS) $(PACKAGE_NAME).pc @@ -119,20 +116,14 @@ $(OBJDIR): libAArch64crypto.a: $(OBJS) $(AR) -rcs $@ $(OBJDIR)/*.o -$(PACKAGE_NAME).pc: - mkdir ${PCDIR} - @echo '--- Creating pkg-config file' - @echo 'prefix='$(shell pwd) >> ${PKGCONFIG} - @echo 'exec_prefix=$${prefix}' >> ${PKGCONFIG} - @echo 'libdir=$${prefix}' >> ${PKGCONFIG} - @echo 'includedir=$${prefix}' >> ${PKGCONFIG} - @echo '' >> ${PKGCONFIG} - @echo 'Name: '$(PACKAGE_NAME) >> ${PKGCONFIG} - @echo 'Description: '$(PACKAGE_DESCRIPTION) >> ${PKGCONFIG} - @echo 'URL: '$(PACKAGE_URL) >> ${PKGCONFIG} - @echo 'Version: '$(PACKAGE_VERSION) >> ${PKGCONFIG} - @echo 'Libs: -L$${libdir} -lAArch64crypto' >> ${PKGCONFIG} - @echo 'Cflags: -I$${includedir}' >> ${PKGCONFIG} +$(PKGCONFIG): $(PACKAGE_NAME).pc.in Makefile + mkdir -p $(dir $@) + awk <$< >$@ '{ \ + sub("@PREFIX@", "$(PREFIX)"); \ + sub("@INCLUDEDIR@", "$(INCLUDEDIR)"); \ + sub("@LIBDIR@", "$(LIBDIR)"); \ + sub("@NAME@", "$(PACKAGE_NAME)"); \ + }1' install: AArch64cryptolib.h libAArch64crypto.a $(PKGCONFIG) install -m 0644 -Dt $(PREFIX)/$(INCLUDEDIR) AArch64cryptolib.h diff --git a/libAArch64crypto.pc.in b/libAArch64crypto.pc.in new file mode 100644 index 0000000..bf7bc25 --- /dev/null +++ b/libAArch64crypto.pc.in @@ -0,0 +1,11 @@ +prefix=@PREFIX@ +exec_prefix=${prefix} +libdir=${prefix}/@LIBDIR@ +includedir=${prefix}/@INCLUDEDIR@ + +Name: @NAME@ +Description: AArch64 Crypto Library +URL: https://github.com/ARM-software/AArch64cryptolib +Version: 20.11 +Libs: -L${libdir} -lAArch64crypto +Cflags: -I${includedir}