Packages
circuits_gpio
2.3.0
2.3.0
2.2.0
2.1.3
2.1.2
retired
2.1.1
retired
2.1.0
retired
2.0.2
retired
2.0.1
retired
2.0.0
retired
2.0.0-pre.6
retired
2.0.0-pre.5
retired
2.0.0-pre.4
retired
2.0.0-pre.3
retired
2.0.0-pre.2
retired
2.0.0-pre.1
retired
2.0.0-pre.0
retired
1.2.2
1.2.1
1.2.0
1.1.0
1.0.1
1.0.0
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.1
0.3.0
0.2.0
0.1.0
Use GPIOs in Elixir
Current section
Files
Jump to
Current section
Files
circuits_gpio
Makefile
Makefile
# SPDX-FileCopyrightText: 2014 Frank Hunleth
# SPDX-FileCopyrightText: 2016 Connor Rigby
# SPDX-FileCopyrightText: 2018 Mark Sebald
# SPDX-FileCopyrightText: 2018 Matt Ludwigs
# SPDX-FileCopyrightText: 2019 Enrico Rivarola
#
# SPDX-License-Identifier: Apache-2.0
# Makefile for building the NIF
#
# Makefile targets:
#
# all/install build and install the NIF
# clean clean build products and intermediates
#
# Variables to override:
#
# MIX_APP_PATH path to the build directory
# CIRCUITS_GPIO_BACKEND Backend to build - `"cdev"`, `"test"`, or `"disabled"` will build a NIF
#
# CC C compiler
# CROSSCOMPILE crosscompiler prefix, if any
# CFLAGS compiler flags for compiling all C files
# ERL_CFLAGS additional compiler flags for files using Erlang header files
# ERL_EI_INCLUDE_DIR include path to ei.h (Required for crosscompile)
# ERL_EI_LIBDIR path to libei.a (Required for crosscompile)
# LDFLAGS linker flags for linking all binaries
# ERL_LDFLAGS additional linker flags for projects referencing Erlang libraries
PREFIX = $(MIX_APP_PATH)/priv
BUILD = $(MIX_APP_PATH)/obj
NIF = $(PREFIX)/gpio_nif.so
CFLAGS ?= -O2 -Wall -Wextra -Wno-unused-parameter -pedantic
$(info "**** CIRCUITS_GPIO_BACKEND set to [$(CIRCUITS_GPIO_BACKEND)] ****")
# Check that we're on a supported build platform
ifeq ($(CROSSCOMPILE),)
# Not crosscompiling, so check that we're on Linux for whether to compile the NIF.
ifeq ($(shell uname -s),Linux)
CFLAGS += -fPIC
LDFLAGS += -fPIC -shared
else
LDFLAGS += -undefined dynamic_lookup -dynamiclib
ifeq ($(CIRCUITS_GPIO_BACKEND),cdev)
$(error Circuits.GPIO Linux cdev backend is not supported on non-Linux platforms. Review circuits_gpio backend configuration or report an issue if improperly detected.)
endif
endif
else
# Crosscompiled build
LDFLAGS += -fPIC -shared
CFLAGS += -fPIC
endif
ifeq ($(CIRCUITS_GPIO_BACKEND),cdev)
# Enable real GPIO calls. This is the default and works with Nerves
HAL_SRC = c_src/hal_cdev_gpio.c c_src/hal_cdev_gpio_interrupts.c
# Hide cdev ioctl warnings
CFLAGS += -Wno-overflow
else
ifeq ($(CIRCUITS_GPIO_BACKEND),test)
# Stub out ioctls and send back test data
HAL_SRC = c_src/hal_stub.c
else
# Don't build NIF
NIF =
endif
endif
# Set Erlang-specific compile and linker flags
ERL_CFLAGS ?= -I"$(ERL_EI_INCLUDE_DIR)"
ERL_LDFLAGS ?= -L"$(ERL_EI_LIBDIR)" -lei
HAL_SRC += c_src/nif_utils.c
SRC = $(HAL_SRC) c_src/gpio_nif.c
HEADERS =$(wildcard c_src/*.h)
OBJ = $(SRC:c_src/%.c=$(BUILD)/%.o)
calling_from_make:
mix compile
all: install
install: $(PREFIX) $(BUILD) $(NIF)
$(OBJ): $(HEADERS) Makefile
$(BUILD)/%.o: c_src/%.c
@echo " CC $(notdir $@)"
$(CC) -c $(ERL_CFLAGS) $(CFLAGS) -o $@ $<
$(NIF): $(OBJ)
@echo " LD $(notdir $@)"
$(CC) -o $@ $(ERL_LDFLAGS) $(LDFLAGS) $^
$(PREFIX) $(BUILD):
mkdir -p $@
clean:
$(RM) $(NIF) $(OBJ)
.PHONY: all clean calling_from_make install
# Don't echo commands unless the caller exports "V=1"
${V}.SILENT: