|
@@ -15,17 +15,24 @@ C_SRC_TYPE ?= shared
|
|
|
ifeq ($(PLATFORM),msys2)
|
|
|
C_SRC_OUTPUT_EXECUTABLE_EXTENSION ?= .exe
|
|
|
C_SRC_OUTPUT_SHARED_EXTENSION ?= .dll
|
|
|
+ C_SRC_OUTPUT_STATIC_EXTENSION ?= .lib
|
|
|
else
|
|
|
C_SRC_OUTPUT_EXECUTABLE_EXTENSION ?=
|
|
|
C_SRC_OUTPUT_SHARED_EXTENSION ?= .so
|
|
|
+ C_SRC_OUTPUT_STATIC_EXTENSION ?= .a
|
|
|
endif
|
|
|
|
|
|
ifeq ($(C_SRC_TYPE),shared)
|
|
|
C_SRC_OUTPUT_FILE = $(C_SRC_OUTPUT)$(C_SRC_OUTPUT_SHARED_EXTENSION)
|
|
|
+else ifeq ($(C_SRC_TYPE),static)
|
|
|
+ C_SRC_OUTPUT_FILE = $(C_SRC_OUTPUT)$(C_SRC_OUTPUT_STATIC_EXTENSION)
|
|
|
else
|
|
|
C_SRC_OUTPUT_FILE = $(C_SRC_OUTPUT)$(C_SRC_OUTPUT_EXECUTABLE_EXTENSION)
|
|
|
endif
|
|
|
|
|
|
+RANLIB ?= ranlib
|
|
|
+ARFLAGS ?= cr
|
|
|
+
|
|
|
ifeq ($(PLATFORM),msys2)
|
|
|
# We hardcode the compiler used on MSYS2. The default CC=cc does
|
|
|
# not produce working code. The "gcc" MSYS2 package also doesn't.
|
|
@@ -53,6 +60,11 @@ ifneq ($(PLATFORM),msys2)
|
|
|
CXXFLAGS += -fPIC
|
|
|
endif
|
|
|
|
|
|
+ifeq ($(C_SRC_TYPE),static)
|
|
|
+ CFLAGS += -DSTATIC_ERLANG_NIF=1
|
|
|
+ CXXFLAGS += -DSTATIC_ERLANG_NIF=1
|
|
|
+endif
|
|
|
+
|
|
|
CFLAGS += -I"$(ERTS_INCLUDE_DIR)" -I"$(ERL_INTERFACE_INCLUDE_DIR)"
|
|
|
CXXFLAGS += -I"$(ERTS_INCLUDE_DIR)" -I"$(ERL_INTERFACE_INCLUDE_DIR)"
|
|
|
|
|
@@ -69,6 +81,12 @@ cpp_verbose = $(cpp_verbose_$(V))
|
|
|
link_verbose_0 = @echo " LD " $(@F);
|
|
|
link_verbose = $(link_verbose_$(V))
|
|
|
|
|
|
+ar_verbose_0 = @echo " AR " $(@F);
|
|
|
+ar_verbose = $(ar_verbose_$(V))
|
|
|
+
|
|
|
+ranlib_verbose_0 = @echo " RANLIB" $(@F);
|
|
|
+ranlib_verbose = $(ranlib_verbose_$(V))
|
|
|
+
|
|
|
# Targets.
|
|
|
|
|
|
ifeq ($(wildcard $(C_SRC_DIR)),)
|
|
@@ -97,11 +115,19 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
|
|
|
|
|
|
test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
|
|
|
|
|
|
+ifneq ($(C_SRC_TYPE),static)
|
|
|
$(C_SRC_OUTPUT_FILE): $(OBJECTS)
|
|
|
$(verbose) mkdir -p $(dir $@)
|
|
|
$(link_verbose) $(CC) $(OBJECTS) \
|
|
|
$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
|
|
|
-o $(C_SRC_OUTPUT_FILE)
|
|
|
+else
|
|
|
+$(C_SRC_OUTPUT_FILE): $(OBJECTS)
|
|
|
+ $(verbose) mkdir -p $(dir $@)
|
|
|
+ $(ar_verbose) $(AR) $(ARFLAGS) $(C_SRC_OUTPUT_FILE) $(OBJECTS)
|
|
|
+ $(ranlib_verbose) $(RANLIB) $(C_SRC_OUTPUT_FILE)
|
|
|
+endif
|
|
|
+
|
|
|
|
|
|
$(OBJECTS): $(MAKEFILE_LIST) $(C_SRC_ENV)
|
|
|
|