summaryrefslogtreecommitdiff
path: root/make/gcc-linux.mk
diff options
context:
space:
mode:
Diffstat (limited to 'make/gcc-linux.mk')
-rw-r--r--make/gcc-linux.mk87
1 files changed, 87 insertions, 0 deletions
diff --git a/make/gcc-linux.mk b/make/gcc-linux.mk
new file mode 100644
index 0000000..d34ecf0
--- /dev/null
+++ b/make/gcc-linux.mk
@@ -0,0 +1,87 @@
+#
+# This file primarily exists for making it possible to test the build
+# system and external library support from Linux. However, its use is
+# strongly discouraged; use the (default) libtool rules for building
+# on Linux.
+#
+
+# --- Required interface definitions ---
+
+OBJ=o
+LOBJ=o
+
+# Usage: $(call libname,base)
+define libname
+lib$(1).so
+endef
+
+# Usage: $(call binname,base)
+define binname
+$(1)
+endef
+
+# --- Required rule definitions ---
+
+# 1 2
+# Usage: $(call compile,src,includes)
+define compile
+ $(CXX) $(CPPFLAGS) $(CXXFLAGS) \
+ $(call depflags,$(basename $(call src_to_obj,$(1)))) \
+ $(foreach I,$(2),-I$(I)) \
+ -c $(1) -o $(call src_to_obj,$(1))
+endef
+
+# 1 2
+# Usage: $(call c_compile,src,includes)
+define c_compile
+ $(CC) $(CPPFLAGS) $(CFLAGS) \
+ $(call depflags,$(basename $(call c_src_to_obj,$(1)))) \
+ $(foreach I,$(2),-I$(I)) \
+ -c $(1) -o $(call c_src_to_obj,$(1))
+endef
+
+define libcompile
+ $(CXX) $(CPPFLAGS) $(CXXFLAGS) -fpic \
+ $(call depflags,$(basename $(call src_to_lobj,$(1)))) \
+ $(foreach I,$(2),-I$(I)) \
+ -c $(1) -o $(call src_to_lobj,$(1))
+endef
+define c_libcompile
+ $(CC) $(CPPFLAGS) $(CXXFLAGS) -fpic \
+ $(call depflags,$(basename $(call c_src_to_lobj,$(1)))) \
+ $(foreach I,$(2),-I$(I)) \
+ -c $(1) -o $(call c_src_to_lobj,$(1))
+endef
+
+
+# 1 2
+# Usage: $(call makeslib,objs,library)
+define makeslib
+ $(RM) $2
+ $(AR) cru $(2) $(1)
+ $(RANLIB) $(2)
+endef
+
+# 1 2 3 4 5 6 7
+# Usage: $(call makelib,objs,library,ldflags,libs,current,revision,age)
+define makelib
+ $(RM) $(2) $(2).*
+ major=$$(( $(5) - $(7) )); \
+ versuffix=$$major.$(7).$(6); \
+ $(CXX) $(CXXFLAGS) -shared -o $(2).$$versuffix $(1) \
+ -Wl,--soname -Wl,`basename $(2)`.$$major \
+ $(3) $(4) && \
+ ln -s `basename $(2)`.$$versuffix $(2) && \
+ ln -s `basename $(2)`.$$versuffix $(2).$$major
+endef
+
+# 1 2 3 4
+# Usage: $(call makebin,objs,binary,ldflags,libs)
+define makebin
+ $(CXX) $(CXXFLAGS) $(1) -o $(2) $(LDFLAGS) $(3) $(4)
+endef
+
+# Install target
+
+install: all
+ @echo Automated installation is not supported for buildrules=$(BUILDRULES)