Page Menu
Home
Phabricator (Chris)
Search
Configure Global Search
Log In
Files
F86004
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
11 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/source/angelscript/projects/gnuc/makefile b/source/angelscript/projects/gnuc/makefile
index cdd5206..43d1586 100644
--- a/source/angelscript/projects/gnuc/makefile
+++ b/source/angelscript/projects/gnuc/makefile
@@ -1,155 +1,262 @@
-# Angelscript makefile for linux (based on MingW makefile)
-# Type 'make' then 'make install' to complete the installation of the library
+# Modern AngelScript Makefile for Linux/Unix-like systems
+# Usage samples:
+# make # Release static lib (default)
+# make SHARED=1 VERSION=2.37.0 # Build shared lib with SONAME + symlinks
+# make BUILD=debug V=1 # Debug build, verbose output
+# make LTO=1 SHARED=1 # Shared lib with LTO (uses gcc-ar/gcc-ranlib)
+# make install PREFIX=/usr DESTDIR=/pkgroot
+# make uninstall PREFIX=/usr
-# For 'make install' to work, set LOCAL according to your system configuration
-LOCAL = /usr/local
+# -----------------------
+# Configuration (tweak here or via env)
+# -----------------------
+# Back-compat: allow LOCAL to override PREFIX if provided
+PREFIX ?= /usr/local
+ifneq ($(origin LOCAL), undefined)
+ PREFIX := $(LOCAL)
+endif
+
+DESTDIR ?=
+INCLUDEDIR ?= $(PREFIX)/include
+LIBDIR ?= $(PREFIX)/lib
+PKGCONFIGDIR ?= $(LIBDIR)/pkgconfig
+
+# Source tree layout (relative to this Makefile)
+SRCDIR ?= ../../source
+INCDIR ?= ../../include
+INC = angelscript.h
+
+# Build layout (out-of-tree)
+OBJDIR ?= build/obj
+OUTDIR ?= build/lib
+
+# Build mode: release|debug
+BUILD ?= release
+
+# Build type: static (default) or shared if SHARED=1
+SHARED ?= 0
+# Optional version, e.g. 2.37.0. Enables SONAME and symlinks for shared libs.
+VERSION ?=
+
+# Optional features
+LTO ?= 0
+PTHREAD ?= 1
-# If you want to build a shared library, then run make with SHARED=1 and VERSION=version
-ifdef SHARED
- LIB = libangelscript-$(VERSION).so
- DEVLIB = libangelscript.so
+# Toolchain
+CXX ?= g++
+AR ?= ar
+RANLIB ?= ranlib
+INSTALL ?= install
+LN ?= ln -sf
+MKDIR ?= mkdir -p
+RM ?= rm -f
+
+# Quiet vs verbose (V=1 for verbose)
+V ?= 0
+ifeq ($(V),1)
+ Q :=
else
- LIB = libangelscript.a
- DEVLIB = libangelscript.a
+ Q := @
endif
-INC = angelscript.h
-
-SRCDIR = ../../source
-INCDIR = ../../include
-ifeq ($(TARGETPLATFORM), iphone)
- IPHONEBIN = /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
- OBJDIR = obj-iphone
- LIBDIR = ../../lib-iphone
- CXX = $(IPHONEBIN)/clang++
- CXXFLAGS += -O2 -Wall -fPIC -arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk -miphoneos-version-min=3.0
-else ifeq ($(TARGETPLATFORM), iphonesimulator)
- IPHONEBIN = /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin
- OBJDIR = obj-iphone
- LIBDIR = ../../lib-iphone
- CXX = $(IPHONEBIN)/clang++
- CXXFLAGS += -O2 -Wall -fPIC -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk -miphoneos-version-min=3.0
-else ifeq ($(TARGETPLATFORM), android)
- ANDROIDNDKROOT = /cygdrive/c/android/android-ndk-1.6_r1
- ANDROIDBIN = $(ANDROIDNDKROOT)/build/prebuilt/windows/arm-eabi-4.2.1/bin
- SYSROOT = $(ANDROIDNDKROOT)/build/platforms/android-4/arch-arm
- OBJDIR = obj-android
- LIBDIR = ../../lib-android
- CXX = $(ANDROIDBIN)/arm-eabi-gcc
- CXXFLAGS += -g -Wall -I$(SYSROOT)/usr/include \
- -Wall \
- -DANDROID \
- -fno-exceptions \
- -march=armv6 -mthumb-interwork \
- -mfloat-abi=softfp -fno-rtti
+
+# -----------------------
+# Flags
+# -----------------------
+CPPFLAGS += -I$(INCDIR)
+CXXFLAGS += -fPIC -Wall -Wextra -fno-strict-aliasing
+LDFLAGS +=
+
+# Build mode flags
+ifeq ($(BUILD),debug)
+ CPPFLAGS += -DDEBUG
+ CXXFLAGS += -O0 -g
else
- OBJDIR = obj
- LIBDIR = ../../lib
- CXX ?= gcc
- # On i686 architecture you may need to add -march=i686 if you get
- # an undefined symbol for __sync_sub_and_fetch_4 in as_atomic.cpp.
- CXXFLAGS += -Wall -fPIC -fno-strict-aliasing
+ CPPFLAGS += -DNDEBUG
+ CXXFLAGS += -O2
+endif
+
+# Threads (AngelScript uses threading on POSIX)
+ifeq ($(PTHREAD),1)
+ CXXFLAGS += -pthread
+ LDFLAGS += -pthread
+endif
+
+# LTO
+ifeq ($(LTO),1)
+ CXXFLAGS += -flto
+ LDFLAGS += -flto
+ AR := gcc-ar
+ RANLIB := gcc-ranlib
endif
-ifeq ($(origin AR), default)
- AR = gcc-ar
+# Shared/static selection
+LIBNAME := angelscript
+ifeq ($(SHARED),1)
+ # Shared library
+ ifneq ($(strip $(VERSION)),)
+ MAJOR := $(firstword $(subst ., ,$(VERSION)))
+ LIB := lib$(LIBNAME).so.$(VERSION)
+ SONAME := lib$(LIBNAME).so.$(MAJOR)
+ else
+ LIB := lib$(LIBNAME).so
+ SONAME := $(LIB)
+ endif
+ LDFLAGS += -shared -Wl,-soname,$(SONAME)
+else
+ # Static library
+ LIB := lib$(LIBNAME).a
endif
-RANLIB = gcc-ranlib
-DELETER = rm -f
-COPIER = cp -a
+OUT := $(OUTDIR)/$(LIB)
+
+# -----------------------
+# Sources
+# (Preserve original explicit list; safer than wildcard for arch-specific files)
+# -----------------------
SRCNAMES = \
as_atomic.cpp \
as_builder.cpp \
as_bytecode.cpp \
as_callfunc.cpp \
as_callfunc_arm.cpp \
as_callfunc_mips.cpp \
as_callfunc_ppc.cpp \
as_callfunc_ppc_64.cpp \
as_callfunc_sh4.cpp \
as_callfunc_x86.cpp \
as_callfunc_x64_gcc.cpp \
as_callfunc_x64_mingw.cpp \
as_compiler.cpp \
as_context.cpp \
as_configgroup.cpp \
as_datatype.cpp \
as_generic.cpp \
as_gc.cpp \
as_globalproperty.cpp \
as_memory.cpp \
as_module.cpp \
as_objecttype.cpp \
as_outputbuffer.cpp \
as_parser.cpp \
as_restore.cpp \
as_scriptcode.cpp \
as_scriptengine.cpp \
as_scriptfunction.cpp \
as_scriptnode.cpp \
as_scriptobject.cpp \
as_string.cpp \
as_string_util.cpp \
as_thread.cpp \
as_tokenizer.cpp \
as_typeinfo.cpp \
- as_variablescope.cpp \
+ as_variablescope.cpp
-OBJ = $(addprefix $(OBJDIR)/, $(notdir $(SRCNAMES:.cpp=.o)))
-BIN = $(LIBDIR)/$(LIB)
+SRCS := $(addprefix $(SRCDIR)/,$(SRCNAMES))
+OBJS := $(patsubst $(SRCDIR)/%.cpp,$(OBJDIR)/%.o,$(SRCS))
+DEPS := $(OBJS:.o=.d)
-ifeq ($(TARGETPLATFORM), iphone)
- OBJ += $(OBJDIR)/as_callfunc_arm_xcode.o
-else ifeq ($(TARGETPLATFORM), android)
- OBJ += $(OBJDIR)/as_callfunc_arm_gcc.o
-endif
+# -----------------------
+# Top-level targets
+# -----------------------
+.PHONY: all clean distclean install uninstall help
+all: $(OUT)
-all: $(BIN)
+help:
+ @echo "Targets:"
+ @echo " make [SHARED=0|1] [VERSION=X.Y.Z] [BUILD=release|debug] [LTO=0|1] [V=0|1]"
+ @echo " make install PREFIX=/usr/local [DESTDIR=/staging]"
+ @echo " make uninstall PREFIX=/usr/local"
+ @echo "Notes:"
+ @echo " - SHARED=1 builds a shared library with proper SONAME if VERSION is set."
+ @echo " - LTO=1 uses gcc-ar/gcc-ranlib automatically."
+ @echo " - Headers are installed from $(INCDIR)/$(INC)."
-$(BIN): $(OBJDIR) $(LIBDIR) $(OBJ)
-ifdef SHARED
- $(CXX) -shared -Wl,-soname,$(LIB) -o $(BIN) $(OBJ)
- ( cd $(LIBDIR); ln -s $(LIB) $(DEVLIB) )
+# -----------------------
+# Build rules
+# -----------------------
+$(OUT): $(OUTDIR) $(OBJDIR) $(OBJS)
+ifeq ($(SHARED),1)
+ $(Q)$(CXX) $(LDFLAGS) -o $@ $(OBJS)
else
- $(AR) r $(BIN) $(OBJ)
- $(RANLIB) $(BIN)
+ $(Q)$(AR) rcs $@ $(OBJS)
+ $(Q)$(RANLIB) $@
endif
- @echo -------------------------------------------------------------------
- @echo Done. As root, type 'make install' to install the library.
+ @echo "-------------------------------------------------------------------"
+ @echo "Built: $@"
+ @echo "Run 'make install' to install the library."
$(OBJDIR):
- mkdir $(OBJDIR)
+ $(Q)$(MKDIR) $(OBJDIR)
-$(LIBDIR):
- mkdir $(LIBDIR)
+$(OUTDIR):
+ $(Q)$(MKDIR) $(OUTDIR)
+# C++ sources -> objects with depfiles
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
- $(CXX) $(CXXFLAGS) -o $@ -c $<
+ $(Q)$(CXX) $(CPPFLAGS) $(CXXFLAGS) -MMD -MP -MF $(@:.o=.d) -c $< -o $@
+# (Optional) Assembly sources
$(OBJDIR)/%.o: $(SRCDIR)/%.S
- $(CXX) $(CXXFLAGS) -o $@ -c $<
-
+ $(Q)$(CXX) $(CPPFLAGS) $(CXXFLAGS) -MMD -MP -MF $(@:.o=.d) -c $< -o $@
$(OBJDIR)/%.o: $(SRCDIR)/%.s
- $(CXX) $(CXXFLAGS) -o $@ -c $<
-
+ $(Q)$(CXX) $(CPPFLAGS) $(CXXFLAGS) -MMD -MP -MF $(@:.o=.d) -c $< -o $@
-clean:
- $(DELETER) $(OBJ) $(BIN) $(LIBDIR)/$(DEVLIB)
+# Auto-include depfiles if present
+-include $(DEPS)
-install: $(BIN)
- @echo Installing to: $(LOCAL)/lib and $(LOCAL)/include...
- @echo -------------------------------------------------------------------
-ifdef SHARED
- $(COPIER) $(LIBDIR)/$(DEVLIB) $(LOCAL)/lib
+# -----------------------
+# Install / Uninstall
+# -----------------------
+install: $(OUT)
+ @echo "Installing to: $(DESTDIR)$(LIBDIR) and $(DESTDIR)$(INCLUDEDIR)"
+ $(Q)$(MKDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(INCLUDEDIR)
+ # Install library
+ $(Q)$(INSTALL) -m 755 -D $(OUT) $(DESTDIR)$(LIBDIR)/$(notdir $(OUT))
+ifeq ($(SHARED),1)
+ifneq ($(strip $(VERSION)),)
+ # Create SONAME and devel symlinks: .so.$(MAJOR) and .so
+ $(Q)cd $(DESTDIR)$(LIBDIR) && $(LN) lib$(LIBNAME).so.$(VERSION) lib$(LIBNAME).so.$(MAJOR)
+ $(Q)cd $(DESTDIR)$(LIBDIR) && $(LN) lib$(LIBNAME).so.$(MAJOR) lib$(LIBNAME).so
+else
+ # Ensure libangelscript.so devel link exists
+ $(Q)cd $(DESTDIR)$(LIBDIR) && [ -e lib$(LIBNAME).so ] || $(LN) $(notdir $(OUT)) lib$(LIBNAME).so
+endif
endif
- $(COPIER) $(BIN) $(LOCAL)/lib
- $(COPIER) $(INCDIR)/$(INC) $(LOCAL)/include
- @echo -------------------------------------------------------------------
- @echo Angelscript library installed. Enjoy!
+ # Install header
+ $(Q)$(INSTALL) -m 644 -D $(INCDIR)/$(INC) $(DESTDIR)$(INCLUDEDIR)/$(INC)
+ # Install pkg-config file
+ $(Q)$(MKDIR) $(DESTDIR)$(PKGCONFIGDIR)
+ $(Q)echo "prefix=$(PREFIX)" > $(OUTDIR)/lib$(LIBNAME).pc
+ $(Q)echo "exec_prefix=\$${prefix}" >> $(OUTDIR)/lib$(LIBNAME).pc
+ $(Q)echo "libdir=\$${exec_prefix}/lib" >> $(OUTDIR)/lib$(LIBNAME).pc
+ $(Q)echo "includedir=\$${prefix}/include" >> $(OUTDIR)/lib$(LIBNAME).pc
+ $(Q)echo "" >> $(OUTDIR)/lib$(LIBNAME).pc
+ $(Q)echo "Name: AngelScript" >> $(OUTDIR)/lib$(LIBNAME).pc
+ $(Q)echo "Description: AngelScript scripting library" >> $(OUTDIR)/lib$(LIBNAME).pc
+ $(Q)echo "Version: $(if $(strip $(VERSION)),$(VERSION),0.0)" >> $(OUTDIR)/lib$(LIBNAME).pc
+ $(Q)echo "Libs: -L\$${libdir} -l$(LIBNAME)" >> $(OUTDIR)/lib$(LIBNAME).pc
+ $(Q)echo "Cflags: -I\$${includedir}" >> $(OUTDIR)/lib$(LIBNAME).pc
+ $(Q)$(INSTALL) -m 644 -D $(OUTDIR)/lib$(LIBNAME).pc $(DESTDIR)$(PKGCONFIGDIR)/lib$(LIBNAME).pc
+ @echo "-------------------------------------------------------------------"
+ @echo "AngelScript library installed."
uninstall:
- $(DELETER) $(LOCAL)/include/$(INC) $(LOCAL)/lib/$(LIB) $(LOCAL)/lib/$(DEVLIB)
- @echo -------------------------------------------------------------------
- @echo Angelscript library uninstalled.
+ @echo "Uninstalling from: $(DESTDIR)$(LIBDIR) and $(DESTDIR)$(INCLUDEDIR)"
+ $(Q)$(RM) $(DESTDIR)$(INCLUDEDIR)/$(INC)
+ $(Q)$(RM) $(DESTDIR)$(PKGCONFIGDIR)/lib$(LIBNAME).pc
+ifeq ($(SHARED),1)
+ifneq ($(strip $(VERSION)),)
+ $(Q)$(RM) $(DESTDIR)$(LIBDIR)/lib$(LIBNAME).so.$(VERSION)
+ $(Q)$(RM) $(DESTDIR)$(LIBDIR)/lib$(LIBNAME).so.$(MAJOR)
+endif
+ $(Q)$(RM) $(DESTDIR)$(LIBDIR)/lib$(LIBNAME).so
+endif
+ $(Q)$(RM) $(DESTDIR)$(LIBDIR)/lib$(LIBNAME).a
+ @echo "-------------------------------------------------------------------"
+ @echo "AngelScript library uninstalled."
+
+clean:
+ $(Q)$(RM) $(OBJS) $(DEPS)
-.PHONY: all clean install uninstall
+distclean: clean
+ $(Q)$(RM) -r $(OBJDIR) $(OUTDIR)
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Wed, Sep 10, 11:31 AM (1 d, 2 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
42585
Default Alt Text
(11 KB)
Attached To
Mode
R80 StarRuler2-Source
Attached
Detach File
Event Timeline
Log In to Comment