1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-30 00:00:11 +01:00

build thirdparty dependencies out-of-source as well

This commit is contained in:
Steffen Vogel 2016-10-08 20:28:34 -04:00
parent af14793901
commit 1cbfd72d35
7 changed files with 97 additions and 84 deletions

6
.gitmodules vendored
View file

@ -16,3 +16,9 @@
[submodule "thirdparty/pciutils"]
path = thirdparty/pciutils
url = https://github.com/pciutils/pciutils.git
[submodule "thirdparty/jansson"]
path = thirdparty/jansson
url = https://github.com/akheron/jansson.git
[submodule "thirdparty/libcurl"]
path = thirdparty/libcurl
url = https://github.com/curl/curl.git

View file

@ -59,5 +59,6 @@ RUN dnf -y update && \
bison \
texinfo
WORKDIR /villas
ENTRYPOINT /bin/bash

View file

@ -17,7 +17,7 @@
#################################################################################
# Project modules
MODULES = lib plugins src tests
MODULES = lib plugins src tests thirdparty
# Default prefix for install target
PREFIX ?= /usr/local
@ -41,30 +41,38 @@ else ifdef GIT
CFLAGS += -D_GIT_REV='"$(shell git rev-parse --short HEAD)"'
endif
# We must compile without optimizations for gcov!
ifdef DEBUG
CFLAGS += -O0 -g
VARIANTS += debug
else
CFLAGS += -O3
VARIANTS += release
endif
ifdef PROFILE
CFLAGS += -pg
LDFLAGS += -pg
VARIANTS += profile
endif
ifdef COVERAGE
CFLAGS += -fprofile-arcs -ftest-coverage
LDFLAGS += --coverage
LDLIBS += -lgcov
LIB_LDFLAGS += --coverage
LIB_LDFLAGS += -coverage
LIB_LDLIBS += -gcov
VARIANTS += coverage
endif
# We must compile without optimizations for gcov!
ifneq ($(or $(DEBUG),$(COVERAGE)),)
CFLAGS += -O0 -g
else
CFLAGS += -O3
endif
SPACE :=
SPACE +=
BUILDDIR := $(BUILDDIR)/$(subst $(SPACE),-,$(strip $(VARIANTS)))
# Build variant
ifdef COVERAGE
BUILDDIR := $(BUILDDIR)/coverage
else ifdef DEBUG
BUILDDIR := $(BUILDDIR)/debug
else
BUILDDIR := $(BUILDDIR)/release
endif
SRCDIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
# pkg-config dependencies
PKGS = libconfig
@ -77,26 +85,21 @@ CFLAGS += $(shell pkg-config --cflags ${PKGS})
LDLIBS += $(shell pkg-config --libs ${PKGS})
# Default target: build everything; no tests, docs
all: $(MODULES)
all: src
everything:
$(MAKE) DEBUG=1
$(MAKE) COVERAGE=1
$(MAKE) PROFILE=1
$(MAKE) doc
$(MAKE) tests
.PHONY: all clean install docker doc $(MODULES)
.SECONDARY:
.SECONDEXPANSION:
# Create non-existent directories in build directory
$(BUILDDIR)/%/:
mkdir -p $@
install: $(addprefix install-,$(MODULES))
install -m 0755 tools/villas.sh $(PREFIX)/bin/villas
clean:
clean: $(addprefix clean-,$(MODULES))
rm -rf $(BUILDDIR)
docker:
@ -106,5 +109,11 @@ docker:
doc:
( cat Doxyfile ; echo "OUTPUT_DIRECTORY=$(BUILD)/doc/" ) | doxygen -
# Create non-existent directories
%/:
mkdir -p $@
.SECONDEXPANSION:
-include $(wildcard $(BUILDDIR)/**/*.d)
$(foreach MODULE,$(MODULES),$(eval -include $(MODULE)/Makefile.inc))
-include $(addsuffix /Makefile.inc,$(MODULES))

View file

@ -83,5 +83,5 @@ install-lib:
install -m 0644 $(LIBS) $(PREFIX)/lib
install -m 0755 -d $(PREFIX)/include/villas/
install -m 0644 include/villas/*.h $(PREFIX)/include/villas/
echo "note: you may need to run 'ldconfig'"
echo "note: make sure $(PREFIX)/lib is in your /etc/ld.so.conf or $$LD_LIBRARY_PATH"
@echo "note: you may need to run 'ldconfig'"
@echo "note: make sure $(PREFIX)/lib is in your /etc/ld.so.conf or $$LD_LIBRARY_PATH"

49
thirdparty/Makefile vendored
View file

@ -1,49 +0,0 @@
DEPS = libxil libconfig libnl libwebsockets criterion
.PHONY: $(DEPS) all clean
TMPDIR ?= $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
PREFIX ?= /usr/local
# Install all dependencies
all: $(DEPS)
# Install & compile libconfig dependency
libconfig:
cd $@ && \
rm -f lib/scanner.[ch] && \
autoreconf && \
./configure --prefix=$(PREFIX) --disable-examples && \
make install
# Install & compile libnl3 dependency
libnl:
cd $@ && \
./autogen.sh && \
./configure --prefix=$(PREFIX) --disable-cli && \
make install
# Install & compile libwebsockets dependency
libwebsockets:
mkdir $@/build && cd $@/build && \
cmake -DCMAKE_INSTALL_PREFIX:PATH=$(PREFIX) .. && \
make install
# Install & compile Criterion unittest framework
criterion:
mkdir $@/build && cd $@/build && \
cmake -DCMAKE_INSTALL_PREFIX:PATH=$(PREFIX) .. && \
make install
# Install & compile Xilinx standalone drivers
libxil:
cd $@ && \
make install
clean:
for DEP in ${DEPS}; do \
pushd $$DEP; \
git checkout . ; \
git clean -dxf $$DEP . ; \
popd; \
done

34
thirdparty/Makefile.inc vendored Normal file
View file

@ -0,0 +1,34 @@
DEPS_CMAKE = libwebsockets criterion jansson
DEPS_AUTOCONF = libnl libconfig libcurl
DEPS = libxil $(DEPS_CMAKE) $(DEPS_AUTOCONF)
.PHONY: $(DEPS)
# Install all dependencies
thirdparty: $(DEPS)
# Install & compile autotools based projects
$(DEPS_AUTOCONF): | $(BUILDDIR)/thirdparty/$$@/
autoreconf -fi $(SRCDIR)/thirdparty/$@
cd $(BUILDDIR)/thirdparty/$@ && $(SRCDIR)/thirdparty/$@/configure --prefix=$(PREFIX) && make install
# Install & compile CMake based projects
$(DEPS_CMAKE): | $(BUILDDIR)/thirdparty/$$@/
cmake -DCMAKE_INSTALL_PREFIX:PATH=$(PREFIX) \
-H$(SRCDIR)/thirdparty/$@ \
-B$(BUILDDIR)/thirdparty/$@
make -C$(BUILDDIR)/thirdparty/$@ install
# Install & compile Xilinx standalone drivers
libxil: | $(BUILDDIR)/thirdparty/$$@/
make -C$(BUILDDIR)/thirdparty/$@ \
-f$(SRCDIR)/thirdparty/$@/Makefile install
clean-thirdparty:
for DEP in $(DEPS); do \
pushd $$DEP; \
git checkout . ; \
git clean -dxf $$DEP . ; \
popd; \
done

View file

@ -2,12 +2,16 @@ LIB = libxil.so
PREFIX ?= /usr/local
SRCS = $(wildcard src/*.c)
SRCS += $(wildcard orig/*/src/*.c)
OBJS = $(SRCS:c=o)
SRCDIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
VPATH = $(SRCDIR)
SRCS = $(wildcard $(SRCDIR)/src/*.c)
SRCS += $(wildcard $(SRCDIR)/orig/*/src/*.c)
OBJS = $(SRCS:$(SRCDIR)/%.c=%.o)
CC = gcc
CFLAGS = -O3 -fPIC -Iinclude/xilinx -Iorig/common_v1_00_a/src -Wno-int-conversion -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast
CFLAGS = -O3 -fPIC -I$(SRCDIR)/include/xilinx -Iorig/common_v1_00_a/src -Wno-int-conversion -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast
ifdef DEBUG
CFLAGS += -DDEBUG -DXDEBUG_WARNING -g
@ -24,5 +28,13 @@ clean:
install: $(LIB)
mkdir -p $(PREFIX)/include/xilinx
install -m 0644 $(LIB) $(PREFIX)/lib
install -m 0644 include/xilinx/*.h $(PREFIX)/include/xilinx
ldconfig
install -m 0644 $(SRCDIR)/include/xilinx/*.h $(PREFIX)/include/xilinx
@echo "note: you may need to run 'ldconfig'"
@echo "note: make sure $(PREFIX)/lib is in your /etc/ld.so.conf or $$LD_LIBRARY_PATH"
.SECONDEXPANSION:
$(OBJS): | $$(dir $$@)
%/:
mkdir -p $@