2005-05-17 22:05:45 +00:00
2013-05-04 10:40:05 +00:00
#windows is special as always, but we don't support itanium, and microsoft don't support anything else (not even arm with the nt win32 api)
i f e q ( $( FTE_TARGET ) , w i n 3 2 )
2017-04-18 11:12:17 +00:00
PLUG_NATIVE_EXT = _x86.dll
2017-04-16 09:27:43 +00:00
PLUG_LDFLAGS =
PLUG_LDFLAGS_ZLIB = -L../engine/libs/mingw-libs -lzlib
2017-04-18 11:12:17 +00:00
BITS = 32
PLUG_LDFLAGS_DL =
2013-05-04 10:40:05 +00:00
e n d i f
i f e q ( $( FTE_TARGET ) , w i n 6 4 )
2017-04-18 11:12:17 +00:00
PLUG_NATIVE_EXT = _x64.dll
2017-04-16 09:27:43 +00:00
PLUG_LDFLAGS = -Wl,--support-old-code
PLUG_LDFLAGS_ZLIB = -L../engine/libs/mingw64-libs -lz
2017-04-18 11:12:17 +00:00
BITS = 64
PLUG_LDFLAGS_DL =
2013-05-04 10:40:05 +00:00
e n d i f
2016-07-15 12:26:24 +00:00
PLUG_LDFLAGS_DL ?= -ldl
2017-04-16 09:27:43 +00:00
PLUG_LDFLAGS ?= -L/usr/local/lib -Wl,-R/usr/local/lib -lm
PLUG_LDFLAGS_ZLIB ?= -lz
2013-05-04 10:40:05 +00:00
i f n e q ( $( PLUG_NATIVE_EXT ) , )
2017-04-18 11:12:17 +00:00
#if we're on windows, we'll put our windows-specific hacks here.
PLUG_DEFFILE = plugin.def
PLUG_CFLAGS =
PLUG_CXXFLAGS =
2013-05-04 10:40:05 +00:00
e n d i f
2013-11-21 23:02:28 +00:00
#cygwin uses dll naming.
i f e q ( $( FTE_TARGET ) , c y g w i n )
2017-04-18 11:12:17 +00:00
ifeq ( $( BITS) ,64)
PLUG_DEFFILE = plugin.def
PLUG_NATIVE_EXT = _amd64.dll
endif
ifneq ( $( BITS) ,64)
PLUG_DEFFILE = plugin.def
PLUG_NATIVE_EXT = _x86.dll
endif
2013-11-21 23:02:28 +00:00
e n d i f
2013-05-04 10:40:05 +00:00
#if they're not on windows, we'll try asking the compiler directly
#the check to see if its already set is to avoid asking msvc, which would probably break things.
i f e q ( $( PLUG_NATIVE_EXT ) , )
2017-04-16 09:27:43 +00:00
LIBRESOLV = -lresolv
2017-04-18 11:12:17 +00:00
ifneq ( $( shell echo| $( CC) -E -dM -| grep __amd64__) ,)
#either x32 or x64 ABIs
ifneq ( $( shell echo| $( CC) -E -dM -| grep __ILP32__| grep 1) ,)
PLUG_NATIVE_EXT = _x32.so
else
PLUG_NATIVE_EXT = _amd64.so
endif
2017-04-16 09:27:43 +00:00
endif
2017-04-18 11:12:17 +00:00
ifneq ( $( shell echo| $( CC) -E -dM -| grep __i386__) ,)
PLUG_NATIVE_EXT = _x86.so
endif
ifneq ( $( shell echo| $( CC) -E -dM -| grep __arm__) ,)
#gnueabi[hf]
ifneq ( $( shell echo| $( CC) -E -dM -| grep __SOFTFP__) ,)
PLUG_NATIVE_EXT = _arm.so
else
PLUG_NATIVE_EXT = _armhf.so
endif
endif
ifneq ( $( shell echo| $( CC) -E -dM -| grep __ppc__) ,)
PLUG_NATIVE_EXT = _ppc.so
2017-04-16 09:27:43 +00:00
endif
2013-05-04 10:40:05 +00:00
e n d i f
#fallback
2015-06-03 16:42:37 +00:00
PLUG_NATIVE_EXT ?= _unk.so
2013-05-04 10:40:05 +00:00
PLUG_DEFFILE ?=
2016-07-12 00:40:13 +00:00
PLUG_CFLAGS ?= -fPIC -Wl,--no-undefined -Bsymbolic -fvisibility= hidden
PLUG_CXXFLAGS ?= -fPIC -Wl,--no-undefined -Bsymbolic -fvisibility= hidden
2017-04-16 09:27:43 +00:00
PLUG_LDFLAGS_ZLIB ?=
ARCH := $( shell $( CC) -dumpmachine)
PLUG_LDFLAGS := -L../engine/libs-$( ARCH) $( PLUG_LDFLAGS)
PLUG_CFLAGS := -I../engine/libs-$( ARCH) $( PLUG_CFLAGS)
PLUG_CXXFLAGS := -I../engine/libs-$( ARCH) $( PLUG_CXXFLAGS)
2013-05-04 10:40:05 +00:00
2016-07-12 00:40:13 +00:00
all : ezscript qi hud irc
2005-05-17 22:05:45 +00:00
2016-07-12 00:40:13 +00:00
clean : ezscript -clean qi -clean hud -clean irc -clean
2007-10-05 09:59:27 +00:00
2013-05-04 10:40:05 +00:00
.PHONY : all ezscript hud irc native distclean clean
2005-05-17 22:05:45 +00:00
help :
@-echo make a subdirectory
2007-10-05 09:59:27 +00:00
ezscript :
$( MAKE) -C ezscript
ezscript-clean :
$( MAKE) clean -C ezscript
2005-05-17 22:05:45 +00:00
hud :
$( MAKE) -C hud
2007-10-05 09:59:27 +00:00
hud-clean :
$( MAKE) clean -C hud
2016-07-12 00:40:13 +00:00
qi :
$( MAKE) -C qi
qi-clean :
$( MAKE) clean -C qi
2005-05-17 22:05:45 +00:00
irc :
2005-06-15 15:04:34 +00:00
$( MAKE) -C irc
2005-05-17 22:05:45 +00:00
2007-10-05 09:59:27 +00:00
irc-clean :
$( MAKE) clean -C irc
2013-05-04 10:40:05 +00:00
#small script to download+install avformat for windows cross compiles.
#linux users are expected to have the library installed locally already. If your version is too old or missing, run the following command to install it (to /usr/local), then delete the gz and directory.
#wget http://ffmpeg.org/releases/ffmpeg-1.2.tar.gz && cd tar xvfz ffmpeg-1.2.tar.gz && cd ffmpeg-1.2/ && ./configure --disable-yasm --enable-shared && make && sudo make install
#we use ffmpeg's version for some reason, as opposed to libav. not sure what the differences are meant to be, but libav seemed to have non-depricated functions defined, docs that say to use them, and these functions missing.
2016-07-12 00:40:13 +00:00
AV7Z_VER = ffmpeg-3.0.1
2013-05-04 10:40:05 +00:00
AV7Z_W32 = $( AV7Z_VER) -win32-dev.7z
AV7Z_URL32 = http://ffmpeg.zeranoe.com/builds/win32/dev/$( AV7Z_W32)
AV7Z_PRE32 = $( AV7Z_VER) -win32-dev/
AV7Z_W64 = $( AV7Z_VER) -win64-dev.7z
AV7Z_URL64 = http://ffmpeg.zeranoe.com/builds/win64/dev/$( AV7Z_W64)
AV7Z_PRE64 = $( AV7Z_VER) -win64-dev/
2016-07-12 00:40:13 +00:00
AV_BASE = $( OUT_DIR) /../fte_libav_$( AV7Z_VER) /
2013-05-04 10:40:05 +00:00
2016-07-12 00:40:13 +00:00
i f e q ( $( FTE_TARGET ) , w i n 3 2 )
#NATIVE_PLUGINS+=avplug
e n d i f
i f e q ( $( FTE_TARGET ) , w i n 6 4 )
#NATIVE_PLUGINS+=avplug
e n d i f
$(AV_BASE)libavformat/avformat.h :
mkdir -p $( AV_BASE)
wget $( AV7Z_URL32) -O $( AV_BASE) $( AV7Z_W32)
mkdir -p $( AV_BASE) libavformat && cd $( AV_BASE) libavformat && 7z e -y ../$( AV7Z_W32) $( AV7Z_PRE32) include/libavformat/ && cd -
mkdir -p $( AV_BASE) libavcodec && cd $( AV_BASE) libavcodec && 7z e -y ../$( AV7Z_W32) $( AV7Z_PRE32) include/libavcodec/ && cd -
mkdir -p $( AV_BASE) libavutil && cd $( AV_BASE) libavutil && 7z e -y ../$( AV7Z_W32) $( AV7Z_PRE32) include/libavutil/ && cd -
mkdir -p $( AV_BASE) libswscale && cd $( AV_BASE) libswscale && 7z e -y ../$( AV7Z_W32) $( AV7Z_PRE32) include/libswscale/ && cd -
mkdir -p $( AV_BASE) lib32 && cd $( AV_BASE) lib32 && 7z e -y ../$( AV7Z_W32) $( AV7Z_PRE32) lib/avformat.lib $( AV7Z_PRE32) lib/avcodec.lib $( AV7Z_PRE32) lib/avutil.lib $( AV7Z_PRE32) lib/swscale.lib && cd -
rm $( AV_BASE) $( AV7Z_W32)
wget $( AV7Z_URL64) -O $( AV_BASE) $( AV7Z_W64)
mkdir -p $( AV_BASE) lib64 && cd $( AV_BASE) lib64 && 7z e -y ../$( AV7Z_W64) $( AV7Z_PRE64) lib/avformat.lib $( AV7Z_PRE64) lib/avcodec.lib $( AV7Z_PRE64) lib/avutil.lib $( AV7Z_PRE64) lib/swscale.lib && cd -
rm $( AV_BASE) $( AV7Z_W64)
distclean :
rm $( AV_BASE) libavformat/avformat.h
$(OUT_DIR)/fteplug_avplug$(PLUG_NATIVE_EXT) : $( AV_BASE ) libavformat /avformat .h
2014-04-24 01:53:01 +00:00
2013-06-23 18:43:59 +00:00
$(OUT_DIR)/fteplug_avplug$(PLUG_NATIVE_EXT) : avplug /avencode .c avplug /avdecode .c plugin .c qvm_api .c
2016-07-12 00:40:13 +00:00
$( CC) $( BASE_CFLAGS) $( CFLAGS) -DFTEPLUGIN -s -o $@ -shared $( PLUG_CFLAGS) -L$( AV_BASE) lib$( BITS) -I$( AV_BASE) $^ $( PLUG_DEFFILE) $( PLUG_LDFLAGS) -lavcodec -lavformat -lavutil -lswscale
#small script for ode
#FIXME: ode fails to compile under cygwin
ODE_ARCH = $( FTE_TARGET)
i f e q ( $( ODE_ARCH ) , )
ODE_ARCH = unknown
e n d i f
ODE_VER = 0.14
ODE_URL = https://bitbucket.org/odedevs/ode/downloads/ode-$( ODE_VER) .tar.gz
ODE_BASE = $( OUT_DIR) /../ode-$( ODE_VER) _$( ODE_ARCH) /
ODE_LIB = $( ODE_BASE) ode-$( ODE_VER) /ode/src/.libs/libode.a
$(OUT_DIR)/../ode-$(ODE_VER).tar.gz :
mkdir -p $( ODE_BASE)
wget $( ODE_URL) -O $@
$(ODE_LIB) : $( OUT_DIR ) /../ode -$( ODE_VER ) .tar .gz
mkdir -p $( ODE_BASE) && cd $( ODE_BASE) && tar xvfz $<
cd $( ODE_BASE) ode-$( ODE_VER) / && ./bootstrap && ./configure --enable-double-precision --disable-demos --without-x --with-pic CC = " $( CC) $( PLUG_CXXFLAGS) " CXX = " $( CC) $( PLUG_CXXFLAGS) " --host= ` $( CC) -dumpmachine` && make
ODE_FILES = ../engine/common/com_phys_ode.c ../engine/common/mathlib.c plugin.c qvm_api.c $( ODE_LIB)
$(OUT_DIR)/fteplug_ode$(PLUG_NATIVE_EXT) : $( ODE_FILES )
2016-07-15 12:26:24 +00:00
$( CC) -flto -s $( BASE_CFLAGS) $( CFLAGS) -Os -DFTEPLUGIN -DODE_STATIC -o $@ -shared $( PLUG_CFLAGS) -I$( ODE_BASE) ode-$( ODE_VER) /include $( ODE_FILES) $( PLUG_DEFFILE) $( PLUG_LDFLAGS) -static-libgcc ` $( CC) -print-file-name= libstdc++.a` -lpthread
2016-07-12 00:40:13 +00:00
#NATIVE_PLUGINS+=ode
BULLET_VER = 2.83.7
BULLET_URL = https://github.com/bulletphysics/bullet3/archive/$( BULLET_VER) .tar.gz
BULLET_BASE = $( OUT_DIR) /../bullet3-$( ODE_VER) _$( FTE_TARGET) /
BULLET_LIB = $( ODE_BASE) bullet3-$( ODE_VER) /ode/src/.libs/libode.a
$(OUT_DIR)/../bullet3-$(BULLET_VER).tar.gz :
mkdir -p $( BULLET_BASE)
wget $( BULLET_URL) -O $@
$(BULLET_LIB) : $( OUT_DIR ) /../bullet 3-$( BULLET_VER ) .tar .gz
mkdir -p $( BULLET_BASE) && cd $( BULLET_BASE) && tar xvfz $<
cd $( BULLET_BASE) bullet3-$( BULLET_VER) / && ./bootstrap && ./configure --enable-double-precision --disable-demos --without-x CXX = " $( CC) " CFLAGS = " $( PLUG_CFLAGS) " CXXFLAGS = " $( PLUG_CXXFLAGS) " --host= ` $( CC) -dumpmachine` && make
$(OUT_DIR)/fteplug_bullet$(PLUG_NATIVE_EXT) : bullet /bulletplug .c plugin .c qvm_api .c $( BULLET_LIB )
$( CC) $( BASE_CFLAGS) $( CFLAGS) -DFTEPLUGIN -o $@ -shared $( PLUG_CFLAGS) $^ $( PLUG_DEFFILE) $( PLUG_LDFLAGS)
#NATIVE_PLUGINS+=bullet
- i n c l u d e M a k e f i l e . p r i v a t e
2013-05-04 10:40:05 +00:00
$(OUT_DIR)/fteplug_mpq$(PLUG_NATIVE_EXT) : mpq /fs_mpq .c mpq /blast .c plugin .c qvm_api .c
2017-04-16 09:27:43 +00:00
$( CC) $( BASE_CFLAGS) $( CFLAGS) -DFTEPLUGIN -o $@ -shared $( PLUG_CFLAGS) -Impq $^ $( PLUG_DEFFILE) $( PLUG_LDFLAGS_ZLIB) $( PLUG_LDFLAGS)
2016-07-12 00:40:13 +00:00
NATIVE_PLUGINS += mpq
2013-05-04 10:40:05 +00:00
2013-11-21 23:02:28 +00:00
$(OUT_DIR)/fteplug_xmpp$(PLUG_NATIVE_EXT) : jabber /jabberclient .c jabber /jingle .c jabber /sift .c jabber /xml .c plugin .c qvm_api .c ../engine /common /sha 1.c emailnot /md 5.c
2016-07-12 00:40:13 +00:00
$( CC) $( BASE_CFLAGS) $( CFLAGS) -DFTEPLUGIN -o $@ -shared $( PLUG_CFLAGS) -Ijabber $^ $( PLUG_DEFFILE) $( PLUG_LDFLAGS) $( LIBRESOLV)
NATIVE_PLUGINS += xmpp
$(OUT_DIR)/fteplug_qi$(PLUG_NATIVE_EXT) : qi /qi .c jabber /xml .c plugin .c qvm_api .c
$( CC) $( BASE_CFLAGS) $( CFLAGS) -DFTEPLUGIN -o $@ -shared $( PLUG_CFLAGS) -Ijabber $^ $( PLUG_DEFFILE) $( PLUG_LDFLAGS)
NATIVE_PLUGINS += qi
2016-07-17 18:41:01 +00:00
i f e q ( $( FTE_TARGET ) , w i n 3 2 )
#Yes, this is old, but it actually works without the gpu process crashing all the fucking time.
#multiple more recent versions are defective. and they don't support WinXP either.
CEF_VER = win32_2526
e n d i f
i f e q ( $( FTE_TARGET ) , w i n 6 4 )
#I'm just too lazy to test this minor platform.
#CEF_VER=win64_2704
e n d i f
i f n e q ( $( CEF_VER ) , )
.PHONEY : $( OUT_DIR ) /fteplug_cef $( PLUG_NATIVE_EXT )
$(OUT_DIR)/fteplug_cef$(PLUG_NATIVE_EXT) : $( OUT_DIR ) /fteplug_cef_ $( BITS ) .zip
$(OUT_DIR)/fteplug_cef_$(BITS).zip : cef /cef .c plugin .c qvm_api .c
$( CC) $( BASE_CFLAGS) $( CFLAGS) -DFTEPLUGIN -o $( OUT_DIR) /fteplug_cef$( PLUG_NATIVE_EXT) -shared $( PLUG_CFLAGS) -Icef/2623 $^ $( PLUG_DEFFILE) $( PLUG_LDFLAGS) -Wl,-rpath,. $( PLUG_LDFLAGS_DL)
cp cef/2623/libcef_$( BITS) .zip $@
chmod 644 $@
zip -9 -j $@ $( OUT_DIR) /fteplug_cef$( PLUG_NATIVE_EXT)
rm $( OUT_DIR) /fteplug_cef$( PLUG_NATIVE_EXT)
2016-07-12 00:40:13 +00:00
#NATIVE_PLUGINS+=cef
2016-07-17 18:41:01 +00:00
e l s e
.PHONEY : $( OUT_DIR ) /fteplug_cef $( PLUG_NATIVE_EXT )
$(OUT_DIR)/fteplug_cef$(PLUG_NATIVE_EXT) :
echo cef plugin not supported on this arch
e n d i f
2013-06-23 18:43:59 +00:00
2013-11-29 17:13:19 +00:00
#irc plugin can still be built as a qvm.
2013-11-29 14:27:23 +00:00
$(OUT_DIR)/fteplug_irc$(PLUG_NATIVE_EXT) : irc /ircclient .c plugin .c qvm_api .c
2016-07-12 00:40:13 +00:00
$( CC) $( BASE_CFLAGS) $( CFLAGS) -DFTEPLUGIN -o $@ -shared $( PLUG_CFLAGS) -Iirc $^ $( PLUG_DEFFILE) $( PLUG_LDFLAGS)
NATIVE_PLUGINS += irc
2013-06-23 18:43:59 +00:00
2015-06-03 16:42:37 +00:00
#for compat with ezquake
$(OUT_DIR)/fteplug_ezhud$(PLUG_NATIVE_EXT) : ezhud /ezquakeisms .c ezhud /hud .c ezhud /hud_common .c ezhud /hud_editor .c plugin .c qvm_api .c
2016-07-12 00:40:13 +00:00
$( CC) $( BASE_CFLAGS) $( CFLAGS) -DFTEPLUGIN -o $@ -shared $( PLUG_CFLAGS) -Iezhud $^ $( PLUG_DEFFILE) $( PLUG_LDFLAGS)
NATIVE_PLUGINS += ezhud
2015-06-03 16:42:37 +00:00
2016-07-12 00:40:13 +00:00
native : $( foreach FOO ,$ ( NATIVE_PLUGINS ) , $ ( OUT_DIR ) /fteplug_ $ ( FOO ) $ ( PLUG_NATIVE_EXT ) )