Skip to content

Commit

Permalink
Add Linux compiling scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
mawen1250 committed Oct 16, 2014
1 parent 32a7095 commit e7dffbf
Show file tree
Hide file tree
Showing 2 changed files with 299 additions and 0 deletions.
46 changes: 46 additions & 0 deletions GNUmakefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#----------------------------------------------------------------------------
# Makefile for VapourSynth-Retinex, modified based on d2vsource/GNUmakefile
#----------------------------------------------------------------------------

include config.mak

vpath %.cpp $(SRCDIR)
vpath %.h $(SRCDIR)

SRCS = source/VSPlugin.cpp source/Gaussian.cpp source/MSR.cpp source/MSRCP.cpp

OBJS = $(SRCS:%.cpp=%.o)

.PHONY: all install clean distclean dep

all: $(LIBNAME)

$(LIBNAME): $(OBJS)
$(LD) -o $@ $(LDFLAGS) $^ $(LIBS)
-@ $(if $(STRIP), $(STRIP) -x $@)

%.o: %.cpp .depend
$(CXX) $(CXXFLAGS) -c $< -o $@

install: all
install -d $(libdir)
install -m 755 $(LIBNAME) $(libdir)

clean:
$(RM) *.dll *.so *.dylib $(OBJS) .depend

distclean: clean
$(RM) config.*

dep: .depend

ifneq ($(wildcard .depend),)
include .depend
endif

.depend: config.mak
@$(RM) .depend
@$(foreach SRC, $(SRCS:%=$(SRCDIR)/%), $(CXX) $(SRC) $(CXXFLAGS) -MT $(SRC:$(SRCDIR)/%.cpp=%.o) -MM >> .depend;)

config.mak:
./configure
253 changes: 253 additions & 0 deletions configure
Original file line number Diff line number Diff line change
@@ -0,0 +1,253 @@
#!/bin/sh

#----------------------------------------------------------------------------
# configure script for VapourSynth-Retinex
#----------------------------------------------------------------------------

## This script was modified based on d2vsource/configure.

# -- help -------------------------------------------------------------------
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
cat << EOF
Usage: [PKG_CONFIG_PATH=/foo/bar/lib/pkgconfig] ./configure [options]
options:
-h, --help print help (this)
--install=PATH set dir for install library
[/usr/local/lib/vapoursynth]
--clang, --gcc compile by g++ or clang++ [clang]
--target-os=OS build programs to run on OS [auto]
--cross-prefix=PREFIX use PREFIX for compilation tools
--sysroot=SYSROOT root of cross-build tree
--enable-debug compile with debug symbols and never strip
--extra-cxxflags=XCXXFLAGS add XCXXFLAGS to CXXFLAGS
--extra-ldflags=XLDFLAGS add XLDFLAGS to LDFLAGS
--extra-libs=XLIBS add XLIBS to LIBS
--target=TARGET set target instruction set [sse2]
EOF
exit 1
fi

#-- func --------------------------------------------------------------------
error_exit()
{
echo error: $1
exit 1
}
log_echo()
{
echo $1
echo >> config.log
echo --------------------------------- >> config.log
echo $1 >> config.log
}

cc_check()
{
rm -f conftest.c
if [ -n "$3" ]; then
echo "#include <$3>" >> config.log
echo 'extern "C" {' > conftest.cpp
echo "#include <$3>" >> conftest.cpp
echo } >> conftest.cpp
fi
echo "int main(void){$4 return 0;}" >> config.log
echo "int main(void){$4 return 0;}" >> conftest.cpp
echo $CXX conftest.cpp -o conftest -Werror $1 $2 >> config.log
$CXX conftest.cpp -o conftest -Werror $1 $2 2>> config.log
ret=$?
echo $ret >> config.log
rm -f conftest*
return $ret
}
#----------------------------------------------------------------------------
rm -f config.* .depend

SRCDIR="$(cd $(dirname $0); pwd)"
test "$SRCDIR" = "$(pwd)" && SRCDIR=.
test -n "$(echo $SRCDIR | grep ' ')" && \
error_exit "out-of-tree builds are impossible with whitespace in source path"

# -- init -------------------------------------------------------------------
libdir="/usr/local/lib/vapoursynth"

TARGET_OS=""
CROSS=""

SYSROOT=""
CXX="clang++"
LD="clang++"
STRIP="strip"

test -n "$(which $CXX 2> /dev/null)" || CXX="g++"
test -n "$(which $LD 2> /dev/null)" || LD="g++"

DEBUG=""

LIBNAME=""

CXXFLAGS="-std=c++11 -Wall -I. -I$SRCDIR/include"
LDFLAGS=""
SOFLAGS="-shared -Wl,-Bsymbolic"
DEPLIBS=""
TARGET="-msse2"

# -- options ----------------------------------------------------------------
echo all command lines: > config.log
echo "$*" >> config.log

for opt; do
optarg="${opt#*=}"
case "$opt" in
--install=*)
libdir="$optarg"
;;
--enable-debug)
DEBUG="enabled"
XCXXFLAGS="$XCXXFLAGS -g"
;;
--cxx=*)
CXX="$optarg"
;;
--extra-cxxflags=*)
XCXXFLAGS="$optarg"
;;
--extra-ldflags=*)
XLDFLAGS="$optarg"
;;
--extra-libs=*)
XLIBS="$optarg"
;;
--target-os=*)
TARGET_OS="$optarg"
;;
--cross-prefix=*)
CROSS="$optarg"
;;
--sysroot=*)
CXXFLAGS="$CXXFLAGS --sysroot=$optarg"
LDFLAGS="$LDFLAGS --sysroot=$optarg"
;;
--gcc)
CXX="g++"
LD="g++"
;;
--clang)
CXX="clang++"
LD="clang++"
;;
--target=*)
TARGET="-m$optarg"
;;
*)
error_exit "unknown option $opt"
;;
esac
done

CXXFLAGS="$CXXFLAGS $XCXXFLAGS $TARGET"
LDFLAGS="$LDFLAGS $XLDFLAGS"

CXX="${CROSS}${CXX}"
LD="${CROSS}${LD}"
STRIP="${CROSS}${STRIP}"
for f in "$CXX" "$LD" "$STRIP"; do
test -n "$(which $f 2> /dev/null)" || error_exit "$f is not executable"
done

if test -n "$TARGET_OS"; then
TARGET_OS=$(echo $TARGET_OS | tr '[A-Z]' '[a-z]')
else
TARGET_OS=$($CXX -dumpmachine | tr '[A-Z]' '[a-z]')
fi
case "$TARGET_OS" in
*mingw*)
LIBNAME="Retinex.dll"
SOFLAGS="$SOFLAGS -Wl,--dll,--add-stdcall-alias"
;;
*darwin*)
LIBNAME="libretinex.dylib"
DEPLIBS="$DEPLIBS vapoursynth"
SOFLAGS="$SOFLAGS -dynamiclib -Wl,-undefined,suppress -Wl,-read_only_relocs,suppress -Wl,-flat_namespace"
;;
*linux*)
LIBNAME="libretinex.so"
DEPLIBS="$DEPLIBS vapoursynth"
CXXFLAGS="$CXXFLAGS -fPIC"
SOFLAGS="$SOFLAGS -fPIC"
;;
*)
error_exit "target is unsupported system"
esac


log_echo "CXXFLAGS/LDFLAGS checking..."
if ! cc_check "$CXXFLAGS" "$LDFLAGS"; then
error_exit "invalid CXXFLAGS/LDFLAGS"
fi
if cc_check "-Os -ffast-math $CXXFLAGS" "$LDFLAGS"; then
CXXFLAGS="-Os -ffast-math $CXXFLAGS"
fi
if cc_check "$CXXFLAGS -fexcess-precision=fast" "$LDFLAGS"; then
CXXFLAGS="$CXXFLAGS -fexcess-precision=fast"
fi

PKGCONFIGBIN="pkg-config"
test -n "$(which ${CROSS}${PKGCONFIGBIN} 2> /dev/null)" && \
PKGCONFIGBIN=${CROSS}${PKGCONFIGBIN}

if $PKGCONFIGBIN --exists $DEPLIBS 2> /dev/null; then
LIBS="$($PKGCONFIGBIN --libs $DEPLIBS)"
CXXFLAGS="$CXXFLAGS $($PKGCONFIGBIN --cflags $DEPLIBS)"
else
for lib in $DEPLIBS; do
LIBS="$LIBS -l${lib#lib}"
done
log_echo "warning: pkg-config or pc files not found, lib detection may be inaccurate."
fi

LDFLAGS="$SOFLAGS $LDFLAGS"
LIBS="$LIBS $XLIBS"


cat >> config.mak << EOF
CXX = $CXX
LD = $LD
STRIP = $STRIP
CXXFLAGS = $CXXFLAGS
LDFLAGS = $LDFLAGS
LIBS = $LIBS
SRCDIR = $SRCDIR
LIBNAME = $LIBNAME
libdir = $libdir
EOF

cat >> config.log << EOF
---------------------------------
setting
---------------------------------
EOF
cat config.mak >> config.log

cat << EOF
settings...
CXX = $CXX
LD = $LD
STRIP = $STRIP
CXXFLAGS = $CXXFLAGS
LDFLAGS = $LDFLAGS
LIBS = $LIBS
LIBNAME = $LIBNAME
install path = $libdir
EOF

test "$SRCDIR" = "." || ln -sf $SRCDIR/GNUmakefile .

echo configure finished.

exit 0

0 comments on commit e7dffbf

Please sign in to comment.