Current section

Files

Jump to
sgp4_ex Makefile
Raw

Makefile

CC ?= gcc
CXX ?= g++
CFLAGS = -fPIC -Wall -O2
CXXFLAGS = -fPIC -Wall -O2 -std=c++11
ifeq ($(shell uname -s), Darwin)
LDFLAGS = -shared -undefined dynamic_lookup
else
LDFLAGS = -shared
endif
# Mix passes ERTS_INCLUDE_DIR from the compiling VM. Fallback is for raw `make`.
ERTS_INCLUDE_DIR ?= $(shell erl -noshell -eval 'io:format("~s/erts-~s/include", [code:root_dir(), erlang:system_info(version)]).' -s init stop)
# Mix passes MIX_APP_PATH so the .so lands in :code.priv_dir(:sgp4_ex).
ifeq ($(MIX_APP_PATH),)
PRIV_DIR = priv
BUILD_DIR = build
else
PRIV_DIR = $(MIX_APP_PATH)/priv
BUILD_DIR = $(MIX_APP_PATH)/obj
endif
CPP_SRC = $(wildcard cpp_src/*.cpp)
CPP_OBJ = $(CPP_SRC:cpp_src/%.cpp=$(BUILD_DIR)/%.o)
TARGET_SO = $(PRIV_DIR)/sgp4_nif.so
CXXFLAGS += -I$(ERTS_INCLUDE_DIR) -Icpp_src
all: $(TARGET_SO)
$(BUILD_DIR) $(PRIV_DIR):
mkdir -p $@
$(BUILD_DIR)/%.o: cpp_src/%.cpp | $(BUILD_DIR)
$(CXX) $(CXXFLAGS) -c $< -o $@
$(TARGET_SO): $(CPP_OBJ) | $(PRIV_DIR)
$(CXX) $(LDFLAGS) -o $@ $^
clean:
rm -rf $(BUILD_DIR) $(TARGET_SO)
.PHONY: all clean