Merge pull request #14286 from aabadie/pr/pkg/cmake_build_source_dir

pkg: tools: ensure cmake based packages/tools are built out-of-source
This commit is contained in:
Kaspar Schleiser 2020-06-23 12:50:39 +02:00 committed by GitHub
commit b4e268423e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 87 additions and 69 deletions

View File

@ -5,6 +5,9 @@ PKG_LICENSE=Apache2.0
PKG_BUILDDIR=$(CURDIR)/bin PKG_BUILDDIR=$(CURDIR)/bin
FLATC_SOURCE_DIR = $(PKG_BUILDDIR)
FLATC_BUILD_DIR = $(PKG_BUILDDIR)/build
# manually set some RIOT env vars, so this Makefile can be called stand-alone # manually set some RIOT env vars, so this Makefile can be called stand-alone
RIOTBASE ?= $(CURDIR)/../../.. RIOTBASE ?= $(CURDIR)/../../..
RIOTTOOLS ?= $(CURDIR)/.. RIOTTOOLS ?= $(CURDIR)/..
@ -24,9 +27,9 @@ endif
include $(RIOTBASE)/pkg/pkg.mk include $(RIOTBASE)/pkg/pkg.mk
all: all:
@cd "$(PKG_BUILDDIR)" && env -i PATH="$(PATH)" cmake -G "Unix Makefiles" $(CMAKE_OPTIONS) . @env -i PATH="$(PATH)" cmake -G "Unix Makefiles" $(CMAKE_OPTIONS) -H"$(FLATC_SOURCE_DIR)" -B"$(FLATC_BUILD_DIR)"
"$(MAKE)" -C "$(PKG_BUILDDIR)" "$(MAKE)" -C "$(FLATC_BUILD_DIR)"
@mv "$(PKG_BUILDDIR)"/flatc $(CURDIR)/flatc @mv "$(FLATC_BUILD_DIR)"/flatc $(CURDIR)/flatc
distclean:: distclean::
@rm -f $(CURDIR)/flatc @rm -f $(CURDIR)/flatc

View File

@ -7,6 +7,9 @@ include $(RIOTBASE)/pkg/pkg.mk
.PHONY: ..cmake_version_supported .PHONY: ..cmake_version_supported
CCNLITE_SOURCE_DIR = $(PKG_BUILDDIR)
CCNLITE_BUILD_DIR = $(PKG_BUILDDIR)/build
CMAKE_MINIMAL_VERSION = 3.6.0 CMAKE_MINIMAL_VERSION = 3.6.0
RIOT_CFLAGS = $(INCLUDES) RIOT_CFLAGS = $(INCLUDES)
@ -15,18 +18,18 @@ ifeq (llvm,$(TOOLCHAIN))
RIOT_CFLAGS += -Wno-char-subscripts RIOT_CFLAGS += -Wno-char-subscripts
endif endif
TOOLCHAIN_FILE = $(PKG_BUILDDIR)/xcompile-toolchain.cmake TOOLCHAIN_FILE = $(CCNLITE_SOURCE_DIR)/xcompile-toolchain.cmake
all: $(BINDIR)/ccn-lite.a all: $(BINDIR)/ccn-lite.a
$(BINDIR)/ccn-lite.a: $(PKG_BUILDDIR)/bin/lib/libccnl-riot.a $(BINDIR)/ccn-lite.a: $(CCNLITE_BUILD_DIR)/lib/libccnl-riot.a
cp $< $@ cp $< $@
$(PKG_BUILDDIR)/bin/lib/libccnl-riot.a: $(PKG_BUILDDIR)/bin/Makefile $(CCNLITE_BUILD_DIR)/lib/libccnl-riot.a: $(CCNLITE_BUILD_DIR)/Makefile
$(MAKE) -C $(PKG_BUILDDIR)/bin $(MAKE) -C $(CCNLITE_BUILD_DIR)
$(PKG_BUILDDIR)/bin/Makefile: $(PKG_PREPARED) $(TOOLCHAIN_FILE) | ..cmake_version_supported $(CCNLITE_BUILD_DIR)/Makefile: $(PKG_PREPARED) $(TOOLCHAIN_FILE) | ..cmake_version_supported
cmake -B$(PKG_BUILDDIR)/bin -H$(PKG_BUILDDIR)/src \ cmake -B$(CCNLITE_BUILD_DIR) -H$(CCNLITE_SOURCE_DIR)/src \
-DCMAKE_TOOLCHAIN_FILE=$(TOOLCHAIN_FILE) \ -DCMAKE_TOOLCHAIN_FILE=$(TOOLCHAIN_FILE) \
-DCCNL_RIOT=1 -DRIOT_CFLAGS="$(RIOT_CFLAGS)" -DBUILD_TESTING=OFF -DCCNL_RIOT=1 -DRIOT_CFLAGS="$(RIOT_CFLAGS)" -DBUILD_TESTING=OFF

View File

@ -5,12 +5,61 @@ PKG_LICENSE=Apache-2.0
include $(RIOTBASE)/pkg/pkg.mk include $(RIOTBASE)/pkg/pkg.mk
JERRYSCRIPT_BUILD_DIR ?= $(PKG_BUILDDIR)/build
JERRYSCRIPT_SOURCE_DIR ?= $(PKG_BUILDDIR)
CFLAGS += -Wno-implicit-fallthrough CFLAGS += -Wno-implicit-fallthrough
JERRYHEAP ?= 16
EXT_CFLAGS := -D__TARGET_RIOT
# disable warnings when compiling with LLVM for board native # disable warnings when compiling with LLVM for board native
ifeq ($(TOOLCHAIN)_$(BOARD),llvm_native) ifeq ($(TOOLCHAIN)_$(BOARD),llvm_native)
CFLAGS += -Wno-macro-redefined -Wno-gnu-folding-constant CFLAGS += -Wno-macro-redefined -Wno-gnu-folding-constant
EXT_CFLAGS += -Wno-conversion
else ifeq ($(OS)_$(BOARD),FreeBSD_native)
EXT_CFLAGS += -Wno-conversion
else ifeq (esp32,$(CPU))
# The esp32 C newlib version 2.2.0 has errors when compiling with warnings
# that are enabled by jerryscript build system so disable them for this cpu:
# * -Wundef: stdio.h: `__GNU_VISIBLE` and `__BSD_VISIBLE` are not defined
EXT_CFLAGS += -Wno-undef -Wno-error=undef
else ifeq (esp8266,$(CPU))
# The esp8266 C newlib version 3.0.0 has errors when compiling with warnings
# that are enabled by jerryscript build system so disable them for this cpu:
# * -Wundef
# * -Wconversion
# * -Wsign-conversion
EXT_CFLAGS += -Wno-undef -Wno-error=undef
EXT_CFLAGS += -Wno-conversion -Wno-error=conversion
EXT_CFLAGS += -Wno-sign-conversion -Wno-error=sign-conversion
endif endif
all: .PHONY: libjerry
"$(MAKE)" -C $(PKG_BUILDDIR) -f $(CURDIR)/Makefile.jerryscript all
all: libjerry
libjerry: $(JERRYSCRIPT_BUILD_DIR)/Makefile
"$(MAKE)" -C $(JERRYSCRIPT_BUILD_DIR) jerry-core jerry-ext jerry-port-default-minimal
@cp $(JERRYSCRIPT_BUILD_DIR)/lib/libjerry-core.a $(BINDIR)/jerryscript.a
@cp $(JERRYSCRIPT_BUILD_DIR)/lib/libjerry-ext.a $(BINDIR)/jerryscript-ext.a
@cp $(JERRYSCRIPT_BUILD_DIR)/lib/libjerry-port-default-minimal.a $(BINDIR)/jerryport-minimal.a
$(JERRYSCRIPT_BUILD_DIR)/Makefile:
cmake -B$(JERRYSCRIPT_BUILD_DIR) -H$(JERRYSCRIPT_SOURCE_DIR) \
-DCMAKE_SYSTEM_NAME=RIOT \
-DCMAKE_SYSTEM_PROCESSOR="$(MCPU)" \
-DCMAKE_C_COMPILER=$(CC) \
-DCMAKE_C_COMPILER_WORKS=TRUE \
-DENABLE_LTO=OFF \
-DFEATURE_VALGRIND=OFF \
-DENABLE_ALL_IN_ONE=OFF \
-DJERRY_LIBM=OFF \
-DJERRY_CMDLINE=OFF \
-DHAVE_TIME_H=0 \
-DEXTERNAL_COMPILE_FLAGS="$(INCLUDES) $(EXT_CFLAGS)" \
-DMEM_HEAP_SIZE_KB=$(JERRYHEAP)
clean::
@rm -rf $(JERRYSCRIPT_BUILD_DIR)

View File

@ -1,50 +0,0 @@
JERRYSCRIPT_BUILD_DIR ?= $(BINDIR)/jerryscript
JERRYHEAP ?= 16
EXT_CFLAGS :=-D__TARGET_RIOT
ifeq ($(TOOLCHAIN)_$(BOARD),llvm_native)
EXT_CFLAGS :=-D__TARGET_RIOT -Wno-conversion
else ifeq ($(OS)_$(BOARD),FreeBSD_native)
EXT_CFLAGS += -Wno-conversion
else ifeq (esp32,$(CPU))
# The esp32 C newlib version 2.2.0 has errors when compiling with warnings
# that are enabled by jerryscript build system so disable them for this cpu:
# * -Wundef: stdio.h: `__GNU_VISIBLE` and `__BSD_VISIBLE` are not defined
EXT_CFLAGS += -Wno-undef -Wno-error=undef
else ifeq (esp8266,$(CPU))
# The esp8266 C newlib version 3.0.0 has errors when compiling with warnings
# that are enabled by jerryscript build system so disable them for this cpu:
# * -Wundef
# * -Wconversion
# * -Wsign-conversion
EXT_CFLAGS += -Wno-undef -Wno-error=undef
EXT_CFLAGS += -Wno-conversion -Wno-error=conversion
EXT_CFLAGS += -Wno-sign-conversion -Wno-error=sign-conversion
endif
.PHONY: all libjerry
all: libjerry
libjerry:
cmake -B$(JERRYSCRIPT_BUILD_DIR) -H./ \
-DCMAKE_SYSTEM_NAME=RIOT \
-DCMAKE_SYSTEM_PROCESSOR="$(MCPU)" \
-DCMAKE_C_COMPILER=$(CC) \
-DCMAKE_C_COMPILER_WORKS=TRUE \
-DENABLE_LTO=OFF \
-DFEATURE_VALGRIND=OFF \
-DENABLE_ALL_IN_ONE=OFF \
-DJERRY_LIBC=OFF \
-DJERRY_LIBM=OFF \
-DJERRY_CMDLINE=OFF \
-DHAVE_TIME_H=0 \
-DEXTERNAL_COMPILE_FLAGS="$(INCLUDES) $(EXT_CFLAGS)" \
-DMEM_HEAP_SIZE_KB=$(JERRYHEAP)
"$(MAKE)" -C $(JERRYSCRIPT_BUILD_DIR) jerry-core jerry-ext jerry-port-default-minimal
cp $(JERRYSCRIPT_BUILD_DIR)/lib/libjerry-core.a $(BINDIR)/jerryscript.a
cp $(JERRYSCRIPT_BUILD_DIR)/lib/libjerry-ext.a $(BINDIR)/jerryscript-ext.a
cp $(JERRYSCRIPT_BUILD_DIR)/lib/libjerry-port-default-minimal.a $(BINDIR)/jerryport-minimal.a

View File

@ -51,6 +51,9 @@ PKG_PREPARED = $(PKG_STATE)-prepared
PKG_PATCHED = $(PKG_STATE)-patched PKG_PATCHED = $(PKG_STATE)-patched
PKG_DOWNLOADED = $(PKG_STATE)-downloaded PKG_DOWNLOADED = $(PKG_STATE)-downloaded
# Custom prepared target that can be defined in packages Makefile.
PKG_CUSTOM_PREPARED ?=
# Declare 'all' first to have it being the default target # Declare 'all' first to have it being the default target
all: prepare all: prepare
@ -95,7 +98,7 @@ $(PKG_DOWNLOADED): $(MAKEFILE_LIST) | $(PKG_BUILDDIR)/.git
$(Q)$(GIT_IN_PKG) fetch $(GIT_QUIET) $(PKG_URL) $(PKG_VERSION) $(Q)$(GIT_IN_PKG) fetch $(GIT_QUIET) $(PKG_URL) $(PKG_VERSION)
echo $(PKG_VERSION) > $@ echo $(PKG_VERSION) > $@
$(PKG_BUILDDIR)/.git: $(PKG_BUILDDIR)/.git: | $(PKG_CUSTOM_PREPARED)
$(info [INFO] cloning $(PKG_NAME)) $(info [INFO] cloning $(PKG_NAME))
$(Q)rm -Rf $(PKG_BUILDDIR) $(Q)rm -Rf $(PKG_BUILDDIR)
$(Q)mkdir -p $(PKG_BUILDDIR) $(Q)mkdir -p $(PKG_BUILDDIR)

View File

@ -3,30 +3,39 @@ PKG_URL=https://github.com/relic-toolkit/relic.git
PKG_VERSION=0b0442a8218df8d309266923f2dd5b9ae3b318ce PKG_VERSION=0b0442a8218df8d309266923f2dd5b9ae3b318ce
PKG_LICENSE=LGPL-2.1 PKG_LICENSE=LGPL-2.1
PKG_CUSTOM_PREPARED = $(PKGDIRBASE)/$(PKG_NAME)/build/include
include $(RIOTBASE)/pkg/pkg.mk include $(RIOTBASE)/pkg/pkg.mk
.PHONY: ..cmake_version_supported .PHONY: ..cmake_version_supported
RELIC_BUILD_DIR = $(PKG_BUILDDIR)/build
RELIC_SOURCE_DIR = $(PKG_BUILDDIR)
CMAKE_MINIMAL_VERSION = 3.6.0 CMAKE_MINIMAL_VERSION = 3.6.0
CFLAGS += -Wno-gnu-zero-variadic-macro-arguments -Wno-unused-function -Wno-newline-eof CFLAGS += -Wno-gnu-zero-variadic-macro-arguments -Wno-unused-function -Wno-newline-eof
TOOLCHAIN_FILE = $(PKG_BUILDDIR)/xcompile-toolchain.cmake TOOLCHAIN_FILE = $(RELIC_SOURCE_DIR)/xcompile-toolchain.cmake
all: $(BINDIR)/$(PKG_NAME).a all: $(BINDIR)/$(PKG_NAME).a
$(BINDIR)/$(PKG_NAME).a: $(PKG_BUILDDIR)/lib/librelic_s.a $(PKG_CUSTOM_PREPARED):
$(info [INFO] Relic: create include directory in build)
mkdir -p $(PKG_CUSTOM_PREPARED)
$(BINDIR)/$(PKG_NAME).a: $(RELIC_BUILD_DIR)/lib/librelic_s.a
cp $< $@ cp $< $@
$(PKG_BUILDDIR)/lib/librelic_s.a: $(PKG_BUILDDIR)/Makefile $(RELIC_BUILD_DIR)/lib/librelic_s.a: $(RELIC_BUILD_DIR)/Makefile
$(MAKE) -C $(PKG_BUILDDIR) $(MAKE) -C $(RELIC_BUILD_DIR)
# Pass 'COMP' with a target specific export to not have issues with the shell # Pass 'COMP' with a target specific export to not have issues with the shell
# escaping evaluation. # escaping evaluation.
COMP = $(filter-out -Werror -Werror=old-style-definition -Werror=strict-prototypes -std=gnu99,$(CFLAGS)) COMP = $(filter-out -Werror -Werror=old-style-definition -Werror=strict-prototypes -std=gnu99,$(CFLAGS))
$(PKG_BUILDDIR)/Makefile: export COMP ?= $(RELIC_BUILD_DIR)/Makefile: export COMP ?=
$(PKG_BUILDDIR)/Makefile: $(PKG_PREPARED) $(TOOLCHAIN_FILE) | ..cmake_version_supported $(RELIC_BUILD_DIR)/Makefile: $(PKG_PREPARED) $(TOOLCHAIN_FILE) | ..cmake_version_supported
cmake -B$(PKG_BUILDDIR) -H$(PKG_BUILDDIR) \ cmake -B$(RELIC_BUILD_DIR) -H$(RELIC_SOURCE_DIR) \
-DCMAKE_TOOLCHAIN_FILE=$(TOOLCHAIN_FILE) \ -DCMAKE_TOOLCHAIN_FILE=$(TOOLCHAIN_FILE) \
-DCHECK=off -DTESTS=0 -DBENCH=0 -DSHLIB=off -Wno-dev $(RELIC_CONFIG_FLAGS) -DCHECK=off -DTESTS=0 -DBENCH=0 -DSHLIB=off -Wno-dev $(RELIC_CONFIG_FLAGS)

View File

@ -1,4 +1,5 @@
INCLUDES += -I$(PKGDIRBASE)/relic/include INCLUDES += -I$(PKGDIRBASE)/relic/include
INCLUDES += -I$(PKGDIRBASE)/relic/build/include
ifneq (,$(filter cortex-m%,$(CPU_CORE))) ifneq (,$(filter cortex-m%,$(CPU_CORE)))
# relic package package is not using system includes right now, so # relic package package is not using system includes right now, so