Massively simplify the Makefile...

... and avoid listing all the .a files explicitly.
Not sure if this will still work for MacOS, but it really should? Unless we can't use --static there.

For a reference setup (like the CI), a release build should now be
        make local.conf PREFIX=/install/ PEP_LIB_PATH=/install/lib PEP_INCLUDE=/install/include LIBRARY_PATH=/usr/lib/
        make -j8
        make install

For a dev build with dynamic linking (and if you don't have .a files), simply remove the --static from local.conf.
JSON-180
Marcel Schneider 2 years ago
parent 2df14f82ef
commit b379362fe6

@ -18,36 +18,16 @@ PEP_INCLUDE?=$(PREFIX)/include
# where libs from the packages systems are installed into:
LIBRARY_PATH?=/usr/local/lib
# paths to the .a libraries. Can be overridden in local.conf
PEP_WEBSERVER?=$(PEP_LIB_PATH)
PEP_ADAPTER_LIBRARY?=$(PEP_LIB_PATH)
PEP_ENGINE?=$(PEP_LIB_PATH)
LIBETPAN_FDIK?=$(PEP_LIB_PATH)
PEP_MIME_PATH?=$(PEP_LIB_PATH)
SEQUOIA_PGP?=$(PEP_LIB_PATH)
ASN1_PATH?=$(PEP_LIB_PATH)
NETTLE?=$(LIBRARY_PATH)
BOOST_INCLUDE_PATH?=/usr/local/include
BOOST_LIBRARY_PATH?=$(LIBRARY_PATH)
LIBRARY_PATH?=$(PREFIX)/lib
GMP_LIBRARY_PATH?=$(LIBRARY_PATH)
SQLITE3_LIBRARY_PATH?=$(LIBRARY_PATH)
LIBZ_LIBRARY_PATH?=$(LIBRARY_PATH)
UUID_LIBRARY_PATH?=$(LIBRARY_PATH)
ICONV_LIBRARY_PATH?=$(LIBRARY_PATH)
LIBEVENT_LIBRARY_PATH=$(LIBRARY_PATH)
AR?=/usr/bin/ar
CC?=cc
CXX?=c++
CFLAGS+=-std=c14 -fvisibility=hidden
CXXFLAGS+=-I$(BOOST_INCLUDE_PATH) -I$(PEP_INCLUDE) -std=c++14 -fvisibility=hidden
LDFLAGS+=-std=c++14
CXXFLAGS+= -I$(PEP_INCLUDE) -std=c++14 -fvisibility=hidden
LDFLAGS+=-std=c++14 -L$(PEP_LIB_PATH) -L$(LIBRARY_PATH)
LDLIBS+= -lpEpEngine -lpEpAdapter -lpEpwebserver -lasn1 \
-lboost_filesystem -lboost_program_options -lboost_system -lboost_thread -lboost_regex \
-lsequoia_openpgp_ffi -lhogweed -lnettle -lgmp \
-lz -lsqlite3
# This idiom is from the pEp Engine Makefile, but we don't sure Makefile.conf here.
BUILD_ON:=$(shell uname)
@ -57,14 +37,12 @@ ifeq ($(BUILD_ON),Darwin)
LDLIBS+= -liconv -lobjc -framework Foundation -framework Security
# ASAN is not strictly a MacOS/clang feature, but won't work with musl.
CXXFLAGS+= -fsanitize=address
EXTRA_STATIC_LIBS=$(ICONV_LIBRARY_PATH)/libiconv.a
else
$(error I do not know how to make for $(BUILD_FOR) on $(BUILD_ON))
endif
else ifeq ($(BUILD_ON),Linux)
ifeq ($(BUILD_FOR),Linux)
LDLIBS+= -luuid
EXTRA_STATIC_LIBS=$(UUID_LIBRARY_PATH)/libuuid.a
else
$(error I do not know how to make for $(BUILD_FOR) on $(BUILD_ON))
endif
@ -86,11 +64,9 @@ LIB_TARGET=libjson-adapter.a
ifeq ($(MIME_LIB),etpan)
LDLIBS+=-letpan
MIME_LIB_A=$(LIBETPAN_FDIK)/libetpan.a
OMIT_NFC_SOURCE=
else ifeq ($(MIME_LIB),pEpMIME)
LDLUBS+=-lpEpMIME
MIME_LIB_A=$(PEP_MIME_PATH)/libpEpMIME.a
LDLIBS+=-lpEpMIME
# is already in libpEpMIME:
OMIT_NFC_SOURCE=nfc.cc nfc_sets.cc
@ -116,27 +92,6 @@ SPIRIT_OBJECTS=$(subst .cpp,.o,$(SPIRIT_SOURCE))
TEST_SOURCE=$(wildcard unittest_*.cc)
TEST_OBJECTS=$(subst .cc,.o,$(TEST_SOURCE))
ALL_STATIC_LIBS=$(PEP_ENGINE)/libpEpEngine.a \
$(PEP_ADAPTER_LIBRARY)/libpEpAdapter.a \
$(PEP_WEBSERVER)/libpEpwebserver.a \
$(BOOST_LIBRARY_PATH)/libboost_filesystem$(BOOST_MT).a \
$(BOOST_LIBRARY_PATH)/libboost_program_options$(BOOST_MT).a \
$(BOOST_LIBRARY_PATH)/libboost_system$(BOOST_MT).a \
$(BOOST_LIBRARY_PATH)/libboost_thread$(BOOST_MT).a \
$(BOOST_LIBRARY_PATH)/libboost_regex$(BOOST_MT).a \
$(SEQUOIA_PGP)/libsequoia_openpgp_ffi.a \
$(MIME_LIB_A) \
$(ASN1_PATH)/libasn1.a \
$(LIBZ_LIBRARY_PATH)/libz.a \
$(SQLITE3_LIBRARY_PATH)/libsqlite3.a \
$(NETTLE)/libhogweed.a \
$(NETTLE)/libnettle.a \
$(GMP_LIBRARY_PATH)/libgmp.a \
$(EXTRA_STATIC_LIBS)
all: $(TARGET) unittests parse_mail
%.d: %.cc
@ -156,17 +111,16 @@ $(LIB_TARGET): $(LIB_OBJECTS)
$(TARGET): $(LIB_TARGET) $(MA_OBJECTS) $(SPIRIT_OBJECTS)
$(CXX) $(LDFLAGS) \
$(MA_OBJECTS) $(SPIRIT_OBJECTS) $(LIB_TARGET) \
$(ALL_STATIC_LIBS) \
-o "$@"
-o "$@" $(LDLIBS)
%.o: %.cc
$(CXX) $(CXXFLAGS) -c -o $@ $^
unittests: $(TEST_OBJECTS) $(LIB_TARGET) $(SPIRIT_OBJECTS)
$(CXX) $(CXXFLAGS) -o $@ $^ $(ALL_STATIC_LIBS) -lgtest
$(CXX) $(LDFLAGS) -o $@ $^ $(LDLIBS) -lgtest
parse_mail: parse_mail.o $(LIB_TARGET) $(SPIRIT_OBJECTS)
$(CXX) $(CXXFLAGS) -o $@ $^ $(ALL_STATIC_LIBS) $(LIB_TARGET)
parse_mail: parse_mail.o nfc.o $(LIB_TARGET) $(SPIRIT_OBJECTS)
$(CXX) $(LDFLAGS) -o $@ $^ $(LDLIBS)
.PHONY: clean uninstall install
@ -182,75 +136,30 @@ clean:
rm -vf *.a *.o */*.o *.d *.d.* $(TARGET) $(TESTS) encode_decode
local.conf:
@echo "# the following are directories with the source build" >> local.conf
@echo "# ---------------------------------------------------" >> local.conf
@echo >> local.conf
@echo "# path to pEp webserver" >> local.conf
@echo >> local.conf
@echo "PEP_WEBSERVER=$(PEP_WEBSERVER)" >> local.conf
@echo >> local.conf
@echo "# path to pEp adapter library" >> local.conf
@echo >> local.conf
@echo "PEP_ADAPTER_LIBRARY=$(PEP_ADAPTER_LIBRARY)" >> local.conf
@echo >> local.conf
@echo "# path to pEp engine" >> local.conf
@echo >> local.conf
@echo "PEP_ENGINE=$(PEP_ENGINE)" >> local.conf
@echo >> local.conf
@echo "# path to fdik fork of libetpan" >> local.conf
@echo >> local.conf
@echo "LIBETPAN_FDIK=$(LIBETPAN_FDIK)" >> local.conf
@echo >> local.conf
@echo "# path to Sequoia PGP" >> local.conf
@echo >> local.conf
@echo "SEQUOIA_PGP=$(SEQUOIA_PGP)" >> local.conf
@echo >> local.conf
@echo "# path to ASN1 (part of pEp Engine)" >> local.conf
@echo >> local.conf
@echo "ASN1_PATH=$(ASN1_PATH)" >> local.conf
@echo >> local.conf
@echo "# path to nettle and hogweed crypto libraries" >> local.conf
@echo >> local.conf
@echo "NETTLE=$(NETTLE)" >> local.conf
@echo >> local.conf
@echo "# path where to find boost" >> local.conf
@echo >> local.conf
@echo "BOOST_INCLUDE_PATH=$(BOOST_INCLUDE_PATH)" >> local.conf
@echo "BOOST_LIBRARY_PATH=$(BOOST_LIBRARY_PATH)" >> local.conf
@echo >> local.conf
@echo >> local.conf
@echo "# these are installation directories" >> local.conf
@echo "# ----------------------------------" >> local.conf
@echo >> local.conf
@echo "# pEp installation header file directory" >> local.conf
@echo >> local.conf
@echo "PEP_INCLUDE=$(PEP_INCLUDE)" >> local.conf
@echo >> local.conf
@echo "# path where to find GMP" >> local.conf
@echo >> local.conf
@echo "GMP_LIBRARY_PATH=$(GMP_LIBRARY_PATH)" >> local.conf
@echo >> local.conf
@echo "# path where to find SQLite3" >> local.conf
@echo >> local.conf
@echo "SQLITE3_LIBRARY_PATH=$(SQLITE3_LIBRARY_PATH)" >> local.conf
@echo >> local.conf
@echo "# path where to find libz" >> local.conf
@echo >> local.conf
@echo "LIBZ_LIBRARY_PATH=$(LIBZ_LIBRARY_PATH)" >> local.conf
@echo >> local.conf
@echo "# path where to find libuuid" >> local.conf
@echo >> local.conf
@echo "UUID_LIBRARY_PATH=$(UUID_LIBRARY_PATH)" >> local.conf
@echo >> local.conf
@echo "# path where to find GNU iconv" >> local.conf
@echo >> local.conf
@echo "ICONV_LIBRARY_PATH=$(ICONV_LIBRARY_PATH)" >> local.conf
@echo "# installation destination for make install" >> local.conf
@echo "PREFIX?=$(PREFIX)" >> local.conf
@echo >> local.conf
@echo "# Additional options" >> local.conf
@echo "# ------------------" >> local.conf
@echo >> local.conf
@echo "# for a dynamically linked binary (for development) remove this." >> local.conf
@echo "LD_FLAGS+=--static" >> local.conf
@echo "# also add -L<path> here if .a or .so files from non-standard paths are needed." >> local.conf
@echo "LDFLAGS+=--static" >> local.conf
@echo >> local.conf
@echo "# Path where pEp libraries are installed." >> local.conf
@echo "PEP_LIB_PATH=$(PEP_LIB_PATH)" >> local.conf
@echo >> local.conf
@echo "# Path where system libraries are installed." >> local.conf
@echo "LIBRARY_PATH=$(LIBRARY_PATH)" >> local.conf
@echo >> local.conf
@echo "# remove this for a debug build." >> local.conf
@echo "NDEBUG=yes" >> local.conf
help:
@echo "usage:"

Loading…
Cancel
Save