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