Skip to content

Commit 8578b75

Browse files
committed
Make building outside of the top directory work.
This also makes the cross-build targets (and not the others) /use/ this functionality, so we'll catch it if we break it again. This fixes issue #340. Signed-off-by: Peter Jones <[email protected]>
1 parent d746292 commit 8578b75

File tree

5 files changed

+42
-22
lines changed

5 files changed

+42
-22
lines changed

.github/workflows/pullrequest.yml

+11-5
Original file line numberDiff line numberDiff line change
@@ -110,18 +110,24 @@ jobs:
110110
id: update-submodules
111111
run: |
112112
make update
113-
- name: Do 'make clean' on ${{ matrix.distro }} for ${{ matrix.efiarch }}
114-
id: clean
113+
- name: Make a build directory for ${{ matrix.distro }} for ${{ matrix.efiarch }}
114+
id: builddir
115115
run: |
116-
make CROSS_COMPILE=${{ matrix.gccarch }}-linux-gnu- ARCH=${{ matrix.makearch }} PREFIX=/usr DESTDIR=/destdir EFIDIR=test ENABLE_SHIM_HASH=true clean
116+
rm -rf build-${{ matrix.distro }}-${{ matrix.efiarch }}
117+
mkdir build-${{ matrix.distro }}-${{ matrix.efiarch }}
118+
cd build-${{ matrix.distro }}-${{ matrix.efiarch }}
117119
- name: Do the build on ${{ matrix.distro }} for ${{ matrix.efiarch }}
118120
id: build
119121
run: |
120-
make CROSS_COMPILE=${{ matrix.gccarch }}-linux-gnu- ARCH=${{ matrix.makearch }} PREFIX=/usr DESTDIR=/destdir EFIDIR=test ENABLE_SHIM_HASH=true all
122+
pwd
123+
cd build-${{ matrix.distro }}-${{ matrix.efiarch }}
124+
make TOPDIR=.. -f ../Makefile CROSS_COMPILE=${{ matrix.gccarch }}-linux-gnu- ARCH=${{ matrix.makearch }} PREFIX=/usr DESTDIR=/destdir EFIDIR=test ENABLE_SHIM_HASH=true all
121125
- name: Install on ${{ matrix.distro }} for ${{ matrix.efiarch }}
122126
id: install
123127
run: |
124-
make CROSS_COMPILE=${{ matrix.gccarch }}-linux-gnu- ARCH=${{ matrix.makearch }} PREFIX=/usr DESTDIR=/destdir EFIDIR=test ENABLE_SHIM_HASH=true install
128+
pwd
129+
cd build-${{ matrix.distro }}-${{ matrix.efiarch }}
130+
make TOPDIR=.. -f ../Makefile CROSS_COMPILE=${{ matrix.gccarch }}-linux-gnu- ARCH=${{ matrix.makearch }} PREFIX=/usr DESTDIR=/destdir EFIDIR=test ENABLE_SHIM_HASH=true install
125131
echo 'results:'
126132
find /destdir -type f
127133

Make.defaults

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22
# load the local configuration if it exists
33
-include Make.local
4+
-include $(TOPDIR)/Make.local
45

56
COMPILER ?= gcc
67
CC = $(CROSS_COMPILE)$(COMPILER)

Makefile

+28-15
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ MOK_OBJS = MokManager.o PasswordCrypt.o crypt_blowfish.o errlog.o sbat_data.o
4545
ORIG_MOK_SOURCES = MokManager.c PasswordCrypt.c crypt_blowfish.c shim.h $(wildcard include/*.h)
4646
FALLBACK_OBJS = fallback.o tpm.o errlog.o sbat_data.o
4747
ORIG_FALLBACK_SRCS = fallback.c
48-
SBATPATH = data/sbat.csv
48+
SBATPATH = $(TOPDIR)/data/sbat.csv
4949

5050
ifeq ($(SOURCE_DATE_EPOCH),)
5151
UNAME=$(shell uname -s -m -p -i -o)
@@ -146,21 +146,23 @@ $(MMSONAME): $(MOK_OBJS) $(LIBS)
146146

147147
gnu-efi/$(ARCH_GNUEFI)/gnuefi/libgnuefi.a gnu-efi/$(ARCH_GNUEFI)/lib/libefi.a: CFLAGS+=-DGNU_EFI_USE_EXTERNAL_STDARG
148148
gnu-efi/$(ARCH_GNUEFI)/gnuefi/libgnuefi.a gnu-efi/$(ARCH_GNUEFI)/lib/libefi.a:
149+
mkdir -p gnu-efi/lib gnu-efi/gnuefi
149150
$(MAKE) -C gnu-efi \
150151
ARCH=$(ARCH_GNUEFI) TOPDIR=$(TOPDIR)/gnu-efi \
152+
-f $(TOPDIR)/gnu-efi/Makefile \
151153
lib gnuefi inc
152154

153155
Cryptlib/libcryptlib.a:
154156
for i in Hash Hmac Cipher Rand Pk Pem SysCall; do mkdir -p Cryptlib/$$i; done
155-
$(MAKE) VPATH=$(TOPDIR)/Cryptlib -C Cryptlib -f $(TOPDIR)/Cryptlib/Makefile
157+
$(MAKE) TOPDIR=$(TOPDIR) VPATH=$(TOPDIR)/Cryptlib -C Cryptlib -f $(TOPDIR)/Cryptlib/Makefile
156158

157159
Cryptlib/OpenSSL/libopenssl.a:
158160
for i in x509v3 x509 txt_db stack sha rsa rc4 rand pkcs7 pkcs12 pem ocsp objects modes md5 lhash kdf hmac evp err dso dh conf comp cmac buffer bn bio async/arch asn1 aes; do mkdir -p Cryptlib/OpenSSL/crypto/$$i; done
159-
$(MAKE) VPATH=$(TOPDIR)/Cryptlib/OpenSSL -C Cryptlib/OpenSSL -f $(TOPDIR)/Cryptlib/OpenSSL/Makefile
161+
$(MAKE) TOPDIR=$(TOPDIR) VPATH=$(TOPDIR)/Cryptlib/OpenSSL -C Cryptlib/OpenSSL -f $(TOPDIR)/Cryptlib/OpenSSL/Makefile
160162

161163
lib/lib.a: | $(TOPDIR)/lib/Makefile $(wildcard $(TOPDIR)/include/*.[ch])
162-
if [ ! -d lib ]; then mkdir lib ; fi
163-
$(MAKE) VPATH=$(TOPDIR)/lib -C lib -f $(TOPDIR)/lib/Makefile lib.a
164+
mkdir -p lib
165+
$(MAKE) VPATH=$(TOPDIR)/lib TOPDIR=$(TOPDIR) -C lib -f $(TOPDIR)/lib/Makefile
164166

165167
buildid : $(TOPDIR)/buildid.c
166168
$(HOSTCC) -I/usr/include -Og -g3 -Wall -Werror -Wextra -o $@ $< -lelf
@@ -275,35 +277,46 @@ else
275277
endif
276278

277279
test :
278-
@make -f include/test.mk EFI_INCLUDES="$(EFI_INCLUDES)" ARCH_DEFINES="$(ARCH_DEFINES)" all
280+
@make -f $(TOPDIR)/include/test.mk EFI_INCLUDES="$(EFI_INCLUDES)" ARCH_DEFINES="$(ARCH_DEFINES)" all
279281

280282
$(patsubst %.c,%,$(wildcard test-*.c)) :
281-
@make -f include/test.mk EFI_INCLUDES="$(EFI_INCLUDES)" ARCH_DEFINES="$(ARCH_DEFINES)" $@
283+
@make -f $(TOPDIR)/include/test.mk EFI_INCLUDES="$(EFI_INCLUDES)" ARCH_DEFINES="$(ARCH_DEFINES)" $@
282284

283285
.PHONY : $(patsubst %.c,%,$(wildcard test-*.c)) test
284286

285287
clean-test-objs:
286-
@make -f include/test.mk EFI_INCLUDES="$(EFI_INCLUDES)" ARCH_DEFINES="$(ARCH_DEFINES)" clean
288+
@make -f $(TOPDIR)/include/test.mk EFI_INCLUDES="$(EFI_INCLUDES)" ARCH_DEFINES="$(ARCH_DEFINES)" clean
287289

288290
clean-gnu-efi:
289-
$(MAKE) -C gnu-efi \
290-
ARCH=$(ARCH_GNUEFI) TOPDIR=$(TOPDIR)/gnu-efi \
291-
clean
291+
@if [ -d gnu-efi ] ; then \
292+
$(MAKE) -C gnu-efi \
293+
ARCH=$(ARCH_GNUEFI) TOPDIR=$(TOPDIR)/gnu-efi \
294+
-f $(TOPDIR)/gnu-efi/Makefile \
295+
clean ; \
296+
fi
297+
298+
clean-lib-objs:
299+
@if [ -d lib ] ; then \
300+
$(MAKE) -C lib TOPDIR=$(TOPDIR) -f $(TOPDIR)/lib/Makefile clean ; \
301+
fi
292302

293303
clean-shim-objs:
294-
$(MAKE) -C lib -f $(TOPDIR)/lib/Makefile clean
295304
@rm -rvf $(TARGET) *.o $(SHIM_OBJS) $(MOK_OBJS) $(FALLBACK_OBJS) $(KEYS) certdb $(BOOTCSVNAME)
296305
@rm -vf *.debug *.so *.efi *.efi.* *.tar.* version.c buildid
297306
@rm -vf Cryptlib/*.[oa] Cryptlib/*/*.[oa]
298307
@if [ -d .git ] ; then git clean -f -d -e 'Cryptlib/OpenSSL/*'; fi
299308

300309
clean-openssl-objs:
301-
$(MAKE) -C Cryptlib/OpenSSL -f $(TOPDIR)/Cryptlib/OpenSSL/Makefile clean
310+
@if [ -d Cryptlib/Openssl ] ; then \
311+
$(MAKE) -C Cryptlib/OpenSSL -f $(TOPDIR)/Cryptlib/OpenSSL/Makefile clean ; \
312+
fi
302313

303314
clean-cryptlib-objs:
304-
$(MAKE) -C Cryptlib -f $(TOPDIR)/Cryptlib/Makefile clean
315+
@if [ -d Cryptlib ] ; then \
316+
$(MAKE) -C Cryptlib -f $(TOPDIR)/Cryptlib/Makefile clean ; \
317+
fi
305318

306-
clean: clean-shim-objs clean-test-objs clean-gnu-efi clean-openssl-objs clean-cryptlib-objs
319+
clean: clean-shim-objs clean-test-objs clean-gnu-efi clean-openssl-objs clean-cryptlib-objs clean-lib-objs
307320

308321
GITTAG = $(VERSION)
309322

gnu-efi

lib/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
TARGET = lib.a
22

3-
LIBFILES_UNSORTED := $(foreach x,$(wildcard *.c),$(patsubst %.c,%.o,$(x)))
3+
LIBFILES_UNSORTED := $(patsubst %.c,%.o,$(subst $(TOPDIR)/lib/,,$(wildcard $(TOPDIR)/lib/*.c)))
44
LIBFILES := $(sort $(LIBFILES_UNSORTED))
55

66
CRYPTDIR = $(TOPDIR)/Cryptlib

0 commit comments

Comments
 (0)