Packages
circuits_gpio
1.2.1
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: 2018 Frank Hunleth, Mark Sebald, Matt Ludwigs
#
# 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
# MIX_ENV Mix build environment - "test" forces use of the stub
# CIRCUITS_MIX_ENV Alternative way to force "test" mode when using circuits_gpio as a dependency
#
# 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
TARGET_CFLAGS = $(shell c_src/detect_target.sh)
CFLAGS ?= -O2 -Wall -Wextra -Wno-unused-parameter -pedantic
CFLAGS += $(TARGET_CFLAGS)
$(info "**** MIX_ENV set to [$(MIX_ENV)] ****")
$(info "**** CIRCUITS_MIX_ENV set to [$(CIRCUITS_MIX_ENV)] ****")
# Check that we're on a supported build platform
ifeq ($(CROSSCOMPILE),)
# Not crosscompiling.
ifeq ($(shell uname -s),Darwin)
$(warning Elixir Circuits only works on Nerves and Linux.)
$(warning Compiling a stub NIF for testing.)
HAL_SRC = c_src/hal_stub.c
LDFLAGS += -undefined dynamic_lookup -dynamiclib
else
ifneq ($(filter $(CIRCUITS_MIX_ENV) $(MIX_ENV),test),)
$(warning Compiling stub NIF to support 'mix test')
HAL_SRC = c_src/hal_stub.c
endif
LDFLAGS += -fPIC -shared
CFLAGS += -fPIC
endif
else
# Crosscompiled build
LDFLAGS += -fPIC -shared
CFLAGS += -fPIC
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/hal_sysfs.c c_src/hal_sysfs_interrupts.c c_src/hal_rpi.c
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: