From 4c4b627260b7edcb770014ce9e492d35a62abe13 Mon Sep 17 00:00:00 2001 From: rdb Date: Mon, 26 Aug 2013 12:22:24 +0000 Subject: [PATCH] Drop support for VC2008. Add support for VC2010. Split vrpn and ffmpeg out of libpanda. Fixes for cross-compiling 64-bit on 32-bit Windows. Will post new thirdparty packages at the forums. --- makepanda/confauto.in | 11 +++ makepanda/makepanda.bat | 8 -- makepanda/makepanda.py | 162 +++++++++++++++++-------------- makepanda/makepandacore.py | 190 +++++++++---------------------------- 4 files changed, 147 insertions(+), 224 deletions(-) diff --git a/makepanda/confauto.in b/makepanda/confauto.in index 7b75aed048..608a6daf68 100755 --- a/makepanda/confauto.in +++ b/makepanda/confauto.in @@ -21,6 +21,17 @@ load-file-type egg pandaegg +# These entries work very similar to load-file-type, except they are +# used by the MovieVideo and MovieAudio code to determine which module +# should be loaded in order to decode files of the given extension. + +# ffmpeg is added by default because it used to be compiled in. +# The * is a special catch-all extension that is consulted unless a +# loader has been defined with an explicit extension. + +load-audio-type * p3ffmpeg +load-video-type * p3ffmpeg + # The following lines define some handy object types to use within the # egg syntax. This remaps { name } into whatever egg # syntax is given by egg-object-type-name, which makes a handy diff --git a/makepanda/makepanda.bat b/makepanda/makepanda.bat index c143d3aa75..a2401be267 100755 --- a/makepanda/makepanda.bat +++ b/makepanda/makepanda.bat @@ -10,19 +10,11 @@ set thirdparty=thirdparty if defined MAKEPANDA_THIRDPARTY set thirdparty=%MAKEPANDA_THIRDPARTY% if not exist makepanda\makepanda.py goto :missing1 - if not exist %thirdparty%\win-python\python.exe goto :missing2 - -if exist %thirdparty%\win-python-x64\python.exe goto :build64 %thirdparty%\win-python\python.exe makepanda\makepanda.py %* if errorlevel 1 if x%1 == x--slavebuild exit 1 goto done -:build64 -%thirdparty%\win-python-x64\python.exe makepanda\makepanda.py %* -if errorlevel 1 if x%1 == x--slavebuild exit 1 -goto done - :missing1 echo You need to change directory to the root of the panda source tree echo before invoking makepanda. For further install instructions, read diff --git a/makepanda/makepanda.py b/makepanda/makepanda.py index 912622db6e..9dcc5747c0 100755 --- a/makepanda/makepanda.py +++ b/makepanda/makepanda.py @@ -80,7 +80,7 @@ PkgListSet(["PYTHON", "DIRECT", # Python support "EGL", # OpenGL (ES) integration "EIGEN", # Linear algebra acceleration "OPENAL", "FMODEX", # Audio playback - "FFMPEG", "SWSCALE", "SWRESAMPLE", # FFMpeg (audio decoding) + "VORBIS", "FFMPEG", "SWSCALE", "SWRESAMPLE", # Audio decoding "ODE", "PHYSX", "BULLET", "PANDAPHYSICS", # Physics "SPEEDTREE", # SpeedTree "ZLIB", "PNG", "JPEG", "TIFF", "SQUISH", "FREETYPE", # 2D Formats support @@ -501,13 +501,12 @@ if (COMPILER == "MSVC"): if (PkgSkip("DIRECTCAM")==0): LibName("DIRECTCAM", "quartz.lib") if (PkgSkip("DIRECTCAM")==0): LibName("DIRECTCAM", "odbc32.lib") if (PkgSkip("DIRECTCAM")==0): LibName("DIRECTCAM", "odbccp32.lib") - if (PkgSkip("PNG")==0): LibName("PNG", GetThirdpartyDir() + "png/lib/libpandapng.lib") - if (PkgSkip("JPEG")==0): LibName("JPEG", GetThirdpartyDir() + "jpeg/lib/libpandajpeg.lib") + if (PkgSkip("PNG")==0): LibName("PNG", GetThirdpartyDir() + "png/lib/libpng_static.lib") + if (PkgSkip("JPEG")==0): LibName("JPEG", GetThirdpartyDir() + "jpeg/lib/jpeg-static.lib") if (PkgSkip("TIFF")==0): LibName("TIFF", GetThirdpartyDir() + "tiff/lib/libpandatiff.lib") - if (PkgSkip("ZLIB")==0): LibName("ZLIB", GetThirdpartyDir() + "zlib/lib/libpandazlib1.lib") + if (PkgSkip("ZLIB")==0): LibName("ZLIB", GetThirdpartyDir() + "zlib/lib/zlibstatic.lib") if (PkgSkip("VRPN")==0): LibName("VRPN", GetThirdpartyDir() + "vrpn/lib/vrpn.lib") if (PkgSkip("VRPN")==0): LibName("VRPN", GetThirdpartyDir() + "vrpn/lib/quat.lib") - if (PkgSkip("FMODEX")==0): LibName("FMODEX", GetThirdpartyDir() + "fmodex/lib/fmodex_vc.lib") if (PkgSkip("NVIDIACG")==0): LibName("CGGL", GetThirdpartyDir() + "nvidiacg/lib/cgGL.lib") if (PkgSkip("NVIDIACG")==0): LibName("CGDX9", GetThirdpartyDir() + "nvidiacg/lib/cgD3D9.lib") if (PkgSkip("NVIDIACG")==0): LibName("NVIDIACG", GetThirdpartyDir() + "nvidiacg/lib/cg.lib") @@ -517,7 +516,6 @@ if (COMPILER == "MSVC"): if (PkgSkip("FFTW")==0): LibName("FFTW", GetThirdpartyDir() + "fftw/lib/rfftw.lib") if (PkgSkip("FFTW")==0): LibName("FFTW", GetThirdpartyDir() + "fftw/lib/fftw.lib") if (PkgSkip("ARTOOLKIT")==0):LibName("ARTOOLKIT",GetThirdpartyDir() + "artoolkit/lib/libAR.lib") - if (PkgSkip("ODE")==0): LibName("ODE", GetThirdpartyDir() + "ode/lib/ode.lib") if (PkgSkip("FCOLLADA")==0): LibName("FCOLLADA", GetThirdpartyDir() + "fcollada/lib/FCollada.lib") if (PkgSkip("SQUISH")==0): LibName("SQUISH", GetThirdpartyDir() + "squish/lib/squish.lib") if (PkgSkip("OPENCV")==0): LibName("OPENCV", GetThirdpartyDir() + "opencv/lib/cv.lib") @@ -534,14 +532,19 @@ if (COMPILER == "MSVC"): if (PkgSkip("ROCKET")==0): LibName("ROCKET", GetThirdpartyDir() + "rocket/lib/RocketCore.lib") LibName("ROCKET", GetThirdpartyDir() + "rocket/lib/RocketControls.lib") - LibName("ROCKET", GetThirdpartyDir() + "rocket/lib/boost_python-vc90-mt-1_48.lib") + if (PkgSkip("PYTHON")==0): + LibName("ROCKET", GetThirdpartyDir() + "rocket/lib/" + SDK["PYTHONVERSION"] + "/boost_python-vc100-mt-1_54.lib") if (GetOptimize() <= 3): LibName("ROCKET", GetThirdpartyDir() + "rocket/lib/RocketDebugger.lib") - if (PkgSkip("OPENAL")==0): - if (os.path.exists(GetThirdpartyDir() + "openal/lib/pandaopenal32.lib")): - LibName("OPENAL", GetThirdpartyDir() + "openal/lib/pandaopenal32.lib") + if (PkgSkip("OPENAL")==0): LibName("OPENAL", GetThirdpartyDir() + "openal/lib/OpenAL32.lib") + if (PkgSkip("ODE")==0): + LibName("ODE", GetThirdpartyDir() + "ode/lib/ode_single.lib") + DefSymbol("ODE", "dSINGLE", "") + if (PkgSkip("FMODEX")==0): + if (GetTargetArch() == 'x64'): + LibName("FMODEX", GetThirdpartyDir() + "fmodex/lib/fmodex64_vc.lib") else: - LibName("OPENAL", GetThirdpartyDir() + "openal/lib/OpenAL32.lib") + LibName("FMODEX", GetThirdpartyDir() + "fmodex/lib/fmodex_vc.lib") if (PkgSkip("WX")==0): LibName("WX", GetThirdpartyDir() + "wx/lib/wxbase28u.lib") LibName("WX", GetThirdpartyDir() + "wx/lib/wxmsw28u_core.lib") @@ -550,6 +553,10 @@ if (COMPILER == "MSVC"): DefSymbol("WX", "UNICODE", "") if (PkgSkip("FLTK")==0): LibName("FLTK", GetThirdpartyDir() + "fltk/lib/fltk.lib") + if (PkgSkip("VORBIS")==0): + LibName("VORBIS", GetThirdpartyDir() + "vorbis/lib/libogg_static.lib") + LibName("VORBIS", GetThirdpartyDir() + "vorbis/lib/libvorbis_static.lib") + LibName("VORBIS", GetThirdpartyDir() + "vorbis/lib/libvorbisfile_static.lib") for pkg in MAYAVERSIONS: if (PkgSkip(pkg)==0): LibName(pkg, '"' + SDK[pkg] + '/lib/Foundation.lib"') @@ -578,15 +585,15 @@ if (COMPILER == "MSVC"): AddToPathEnv("PATH", SDK["PHYSX"]+"/../Bin/win32/") if (PkgSkip("SPEEDTREE")==0): if GetTargetArch() == 'x64': - libdir = SDK["SPEEDTREE"] + "/Lib/Windows/VC9.x64/" + libdir = SDK["SPEEDTREE"] + "/Lib/Windows/VC10.x64/" p64ext = '64' else: - libdir = SDK["SPEEDTREE"] + "/Lib/Windows/VC9/" + libdir = SDK["SPEEDTREE"] + "/Lib/Windows/VC10/" p64ext = '' debugext = '' if (GetOptimize() <= 2): debugext = "_d" - libsuffix = "_v%s_VC90MT%s_Static%s.lib" % ( + libsuffix = "_v%s_VC100MT%s_Static%s.lib" % ( SDK["SPEEDTREEVERSION"], p64ext, debugext) LibName("SPEEDTREE", "%sSpeedTreeCore%s" % (libdir, libsuffix)) LibName("SPEEDTREE", "%sSpeedTreeForest%s" % (libdir, libsuffix)) @@ -597,10 +604,13 @@ if (COMPILER == "MSVC"): LibName("SPEEDTREE", "glu32.lib") IncDirectory("SPEEDTREE", SDK["SPEEDTREE"] + "/Include") if (PkgSkip("BULLET")==0): - LibName("BULLET", GetThirdpartyDir() + "bullet/lib/LinearMath.lib") - LibName("BULLET", GetThirdpartyDir() + "bullet/lib/BulletCollision.lib") - LibName("BULLET", GetThirdpartyDir() + "bullet/lib/BulletDynamics.lib") - LibName("BULLET", GetThirdpartyDir() + "bullet/lib/BulletSoftBody.lib") + suffix = '.lib' + if GetTargetArch() == 'x64': + suffix = '_x64.lib' + LibName("BULLET", GetThirdpartyDir() + "bullet/lib/LinearMath" + suffix) + LibName("BULLET", GetThirdpartyDir() + "bullet/lib/BulletCollision" + suffix) + LibName("BULLET", GetThirdpartyDir() + "bullet/lib/BulletDynamics" + suffix) + LibName("BULLET", GetThirdpartyDir() + "bullet/lib/BulletSoftBody" + suffix) if (COMPILER=="GCC"): PkgDisable("AWESOMIUM") @@ -665,6 +675,7 @@ if (COMPILER=="GCC"): SmartPkgEnable("TIFF", "", ("tiff"), "tiff.h") SmartPkgEnable("VRPN", "", ("vrpn", "quat"), ("vrpn", "quat.h", "vrpn/vrpn_Types.h")) SmartPkgEnable("BULLET", "bullet", ("BulletSoftBody", "BulletDynamics", "BulletCollision", "LinearMath"), ("bullet", "bullet/btBulletDynamicsCommon.h")) + SmartPkgEnable("VORBIS", "vorbisfile",("vorbisfile", "vorbis", "ogg"), ("ogg/ogg.h", "vorbis/vorbisfile.h")) rocket_libs = ("RocketCore", "RocketControls") if (GetOptimize() <= 3): @@ -801,7 +812,6 @@ if (COMPILER=="GCC"): LibName("PHYSX", "-lPhysXLoader") LibName("PHYSX", "-lNxCharacter") -DefSymbol("ALWAYS", "MAKEPANDA", "") DefSymbol("WITHINPANDA", "WITHIN_PANDA", "1") if GetLinkAllStatic(): DefSymbol("ALWAYS", "LINK_ALL_STATIC", "") @@ -951,7 +961,7 @@ def CompileCxx(obj,src,opts): cmd += " /QxHost" # compile for target host; Compiling for distribs should probably strictly enforce /arch:.. cmd += " /Quse-intel-optimized-headers" # use intel optimized headers cmd += " /Qparallel" # enable parallelization - cmd += " /Qvc9" # for Microsoft Visual C++ 2008 + cmd += " /Qvc10" # for Microsoft Visual C++ 2010 ## PCH files coexistence: the /Qpchi option causes the Intel C++ Compiler to name its ## PCH files with a .pchi filename suffix and reduce build time. @@ -1152,16 +1162,17 @@ def CompileIgate(woutd,wsrc,opts): # If we're compiling for this platform, we can use the one we've built. cmd = os.path.join(GetOutputDir(), 'bin', 'interrogate') else: + # Assume that interrogate is on the PATH somewhere. cmd = 'interrogate' cmd += ' -srcdir %s -I%s -Dvolatile -Dmutable' % (srcdir, srcdir) if (COMPILER=="MSVC"): cmd += ' -DCPPPARSER -D__STDC__=1 -D__cplusplus -D__inline -longlong __int64 -D_X86_ -DWIN32_VC -D_WIN32' - #NOTE: this 1500 value is the version number for VC2008. - cmd += ' -D_MSC_VER=1500 -D"_declspec(param)=" -D_near -D_far -D__near -D__far -D__stdcall' + # NOTE: this 1600 value is the version number for VC2010. + cmd += ' -D_MSC_VER=1600 -D"_declspec(param)=" -D_near -D_far -D__near -D__far -D__stdcall' if (COMPILER=="GCC"): cmd += ' -DCPPPARSER -D__STDC__=1 -D__cplusplus -D__inline -D__const=const' - if is_64: + if GetTargetArch() in ("x86_64", "amd64"): cmd += ' -D_LP64' else: cmd += ' -D__i386__' @@ -1219,6 +1230,7 @@ def CompileImod(wobj, wsrc, opts): # If we're compiling for this platform, we can use the one we've built. cmd = os.path.join(GetOutputDir(), 'bin', 'interrogate_module') else: + # Assume that interrogate_module is on the PATH somewhere. cmd = 'interrogate_module' cmd += ' -oc ' + woutc + ' -module ' + module + ' -library ' + library + ' -python-native ' @@ -1237,7 +1249,7 @@ def CompileLib(lib, obj, opts): if (COMPILER=="MSVC"): if not BOOUSEINTELCOMPILER: #Use MSVC Linker - cmd = 'link /lib /nologo /MANIFEST ' + cmd = 'link /lib /nologo ' if GetTargetArch() == 'x64': cmd += "/MACHINE:X64 " cmd += '/OUT:' + BracketNameWithQuotes(lib) @@ -1251,7 +1263,7 @@ def CompileLib(lib, obj, opts): cmd += '/OUT:' + BracketNameWithQuotes(lib) for x in obj: cmd += ' ' + BracketNameWithQuotes(x) cmd += ' /LIBPATH:"C:\Program Files (x86)\Intel\Composer XE 2011 SP1\ipp\lib\ia32"' - cmd += ' /LIBPATH:"C:\Program Files (x86)\Intel\Composer XE 2011 SP1\TBB\Lib\ia32\vc9"' + cmd += ' /LIBPATH:"C:\Program Files (x86)\Intel\Composer XE 2011 SP1\TBB\Lib\ia32\vc10"' cmd += ' /LIBPATH:"C:\Program Files (x86)\Intel\Composer XE 2011 SP1\compiler\lib\ia32"' oscmd(cmd) @@ -1275,7 +1287,7 @@ def CompileLib(lib, obj, opts): def CompileLink(dll, obj, opts): if (COMPILER=="MSVC"): if not BOOUSEINTELCOMPILER: - cmd = "link /nologo /manifest " + cmd = "link /nologo " if GetTargetArch() == 'x64': cmd += " /MACHINE:X64" if ("MFC" not in opts): @@ -1289,8 +1301,8 @@ def CompileLink(dll, obj, opts): if (optlevel==3): cmd += " /MAP:NUL /NOD:MSVCRTD.LIB /NOD:MSVCPRTD.LIB /NOD:MSVCIRTD.LIB" if (optlevel==4): cmd += " /MAP:NUL /LTCG /NOD:MSVCRTD.LIB /NOD:MSVCPRTD.LIB /NOD:MSVCIRTD.LIB" if ("MFC" in opts): - if (optlevel<=2): cmd += " /NOD:MSVCRTD.LIB mfcs90d.lib MSVCRTD.lib" - else: cmd += " /NOD:MSVCRT.LIB mfcs90.lib MSVCRT.lib" + if (optlevel<=2): cmd += " /NOD:MSVCRTD.LIB mfcs100d.lib MSVCRTD.lib" + else: cmd += " /NOD:MSVCRT.LIB mfcs100.lib MSVCRT.lib" cmd += " /FIXED:NO /OPT:REF /STACK:4194304 /INCREMENTAL:NO " cmd += ' /OUT:' + BracketNameWithQuotes(dll) subsystem = GetValueOption(opts, "SUBSYSTEM:") @@ -1317,11 +1329,6 @@ def CompileLink(dll, obj, opts): for (opt, name) in LIBNAMES: if (opt=="ALWAYS") or (opt in opts): cmd += " " + BracketNameWithQuotes(name) oscmd(cmd) - SetVC90CRTVersion(dll+".manifest") - mtcmd = "mt -manifest " + dll + ".manifest -outputresource:" + dll - if (dll.endswith(".exe")==0): mtcmd = mtcmd + ";2" - else: mtcmd = mtcmd + ";1" - oscmd(mtcmd, ignoreError=True) # HACK: For some reason, mt sometimes gives a non-zero return value, even when it works else: cmd = "xilink" if GetVerbose(): cmd += " /verbose:lib" @@ -1332,7 +1339,7 @@ def CompileLink(dll, obj, opts): cmd += " /NOD:LIBCI.LIB /DEBUG" cmd += " /nod:libc /nod:libcmtd /nod:atlthunk /nod:atls" cmd += ' /LIBPATH:"C:\Program Files (x86)\Intel\Composer XE 2011 SP1\ipp\lib\ia32"' - cmd += ' /LIBPATH:"C:\Program Files (x86)\Intel\Composer XE 2011 SP1\TBB\Lib\ia32\vc9"' + cmd += ' /LIBPATH:"C:\Program Files (x86)\Intel\Composer XE 2011 SP1\TBB\Lib\ia32\vc10"' cmd += ' /LIBPATH:"C:\Program Files (x86)\Intel\Composer XE 2011 SP1\compiler\lib\ia32"' if (GetOrigExt(dll) != ".exe"): cmd += " /DLL" optlevel = GetOptimizeOption(opts) @@ -1341,8 +1348,8 @@ def CompileLink(dll, obj, opts): if (optlevel==3): cmd += " /MAP:NUL /NOD:MSVCRTD.LIB /NOD:MSVCPRTD.LIB /NOD:MSVCIRTD.LIB" if (optlevel==4): cmd += " /MAP:NUL /LTCG /NOD:MSVCRTD.LIB /NOD:MSVCPRTD.LIB /NOD:MSVCIRTD.LIB" if ("MFC" in opts): - if (optlevel<=2): cmd += " /NOD:MSVCRTD.LIB mfcs90d.lib MSVCRTD.lib" - else: cmd += " /NOD:MSVCRT.LIB mfcs90.lib MSVCRT.lib" + if (optlevel<=2): cmd += " /NOD:MSVCRTD.LIB mfcs100d.lib MSVCRTD.lib" + else: cmd += " /NOD:MSVCRT.LIB mfcs100.lib MSVCRT.lib" cmd += " /FIXED:NO /OPT:REF /STACK:4194304 /INCREMENTAL:NO " cmd += ' /OUT:' + BracketNameWithQuotes(dll) subsystem = GetValueOption(opts, "SUBSYSTEM:") @@ -1369,11 +1376,6 @@ def CompileLink(dll, obj, opts): for (opt, name) in LIBNAMES: if (opt=="ALWAYS") or (opt in opts): cmd += " " + BracketNameWithQuotes(name) oscmd(cmd) - SetVC90CRTVersion(dll+".manifest") - mtcmd = "mt -manifest " + dll + ".manifest -outputresource:" + dll - if (dll.endswith(".exe")==0): mtcmd = mtcmd + ";2" - else: mtcmd = mtcmd + ";1" - oscmd(mtcmd, ignoreError=True) # HACK: For some reason, mt sometimes gives a non-zero return value, even when it works if COMPILER == "GCC": cxx = GetCXX() @@ -1911,7 +1913,7 @@ DTOOL_CONFIG=[ ("HAVE_SOFTIMAGE_PIC", '1', '1'), ("HAVE_BMP", '1', '1'), ("HAVE_PNM", '1', '1'), - ("HAVE_VRPN", 'UNDEF', 'UNDEF'), + ("HAVE_VORBIS", 'UNDEF', 'UNDEF'), ("HAVE_FMODEX", 'UNDEF', 'UNDEF'), ("HAVE_OPENAL", 'UNDEF', 'UNDEF'), ("HAVE_NVIDIACG", 'UNDEF', 'UNDEF'), @@ -2507,6 +2509,8 @@ CopyAllHeaders('panda/src/grutil') if (PkgSkip("VISION")==0): CopyAllHeaders('panda/src/vision') CopyAllHeaders('panda/src/awesomium') +if (PkgSkip("FFMPEG")==0): + CopyAllHeaders('panda/src/ffmpeg') CopyAllHeaders('panda/src/tform') CopyAllHeaders('panda/src/collide') CopyAllHeaders('panda/src/parametrics') @@ -3213,9 +3217,8 @@ if (not RUNTIME): # if (not RUNTIME): - OPTS=['DIR:panda/src/movies', 'BUILDING:PANDA', 'FFMPEG'] + OPTS=['DIR:panda/src/movies', 'BUILDING:PANDA', 'VORBIS'] TargetAdd('p3movies_composite1.obj', opts=OPTS, input='p3movies_composite1.cxx') - TargetAdd('p3movies_composite2.obj', opts=OPTS, input='p3movies_composite2.cxx') IGATEFILES=GetDirectoryContents('panda/src/movies', ["*.h", "*_composite*.cxx"]) TargetAdd('libp3movies.in', opts=OPTS, input=IGATEFILES) TargetAdd('libp3movies.in', opts=['IMOD:panda', 'ILIB:libp3movies', 'SRCDIR:panda/src/movies']) @@ -3226,7 +3229,7 @@ if (not RUNTIME): # if (not RUNTIME): - OPTS=['DIR:panda/src/grutil', 'BUILDING:PANDA', 'FFMPEG', 'BIGOBJ'] + OPTS=['DIR:panda/src/grutil', 'BUILDING:PANDA', 'BIGOBJ'] TargetAdd('p3grutil_multitexReducer.obj', opts=OPTS, input='multitexReducer.cxx') TargetAdd('p3grutil_composite1.obj', opts=OPTS, input='p3grutil_composite1.cxx') TargetAdd('p3grutil_composite2.obj', opts=OPTS, input='p3grutil_composite2.cxx') @@ -3309,18 +3312,6 @@ if (not RUNTIME): TargetAdd('libp3recorder.in', opts=['IMOD:panda', 'ILIB:libp3recorder', 'SRCDIR:panda/src/recorder']) TargetAdd('libp3recorder_igate.obj', input='libp3recorder.in', opts=["DEPENDENCYONLY"]) -# -# DIRECTORY: panda/src/vrpn/ -# - -if (PkgSkip("VRPN")==0 and not RUNTIME): - OPTS=['DIR:panda/src/vrpn', 'BUILDING:PANDA', 'VRPN'] - TargetAdd('p3vrpn_composite1.obj', opts=OPTS, input='p3vrpn_composite1.cxx') - IGATEFILES=GetDirectoryContents('panda/src/vrpn', ["*.h", "*_composite*.cxx"]) - TargetAdd('libp3vrpn.in', opts=OPTS, input=IGATEFILES) - TargetAdd('libp3vrpn.in', opts=['IMOD:panda', 'ILIB:libp3vrpn', 'SRCDIR:panda/src/vrpn']) - TargetAdd('libp3vrpn_igate.obj', input='libp3vrpn.in', opts=["DEPENDENCYONLY"]) - # # DIRECTORY: panda/src/dxml/ # @@ -3345,9 +3336,9 @@ if (not RUNTIME): # if (not RUNTIME): - OPTS=['DIR:panda/metalibs/panda', 'BUILDING:PANDA', 'VRPN', 'JPEG', 'PNG', - 'TIFF', 'ZLIB', 'OPENSSL', 'FREETYPE', 'FFTW', 'ADVAPI', 'WINSOCK2','SQUISH', - 'NVIDIACG', 'WINUSER', 'WINMM', 'FFMPEG', 'SWSCALE', 'SWRESAMPLE', 'WINGDI', 'IPHLPAPI'] + OPTS=['DIR:panda/metalibs/panda', 'BUILDING:PANDA', 'JPEG', 'PNG', + 'TIFF', 'ZLIB', 'OPENSSL', 'FREETYPE', 'FFTW', 'ADVAPI', 'WINSOCK2', + 'SQUISH', 'NVIDIACG', 'VORBIS', 'WINUSER', 'WINMM', 'WINGDI', 'IPHLPAPI'] TargetAdd('panda_panda.obj', opts=OPTS, input='panda.cxx') @@ -3398,7 +3389,6 @@ if (not RUNTIME): TargetAdd('libpanda.dll', input='p3cull_composite1.obj') TargetAdd('libpanda.dll', input='p3cull_composite2.obj') TargetAdd('libpanda.dll', input='p3movies_composite1.obj') - TargetAdd('libpanda.dll', input='p3movies_composite2.obj') TargetAdd('libpanda.dll', input='libp3movies_igate.obj') TargetAdd('libpanda.dll', input='p3grutil_multitexReducer.obj') TargetAdd('libpanda.dll', input='p3grutil_composite1.obj') @@ -3477,11 +3467,6 @@ if (not RUNTIME): TargetAdd('libpanda.dll', input='libp3dtoolconfig.dll') TargetAdd('libpanda.dll', input='libp3dtool.dll') - if PkgSkip("VRPN")==0: - TargetAdd('libpanda.dll', input="p3vrpn_composite1.obj") - TargetAdd('libpanda.dll', input="libp3vrpn_igate.obj") - TargetAdd('libpanda_module.obj', input='libp3vrpn.in') - if PkgSkip("FREETYPE")==0: TargetAdd('libpanda.dll', input="p3pnmtext_composite1.obj") TargetAdd('libpanda.dll', input="libp3pnmtext_igate.obj") @@ -3490,7 +3475,6 @@ if (not RUNTIME): TargetAdd('libpanda_module.obj', opts=OPTS) TargetAdd('libpanda_module.obj', opts=['IMOD:panda', 'ILIB:libpanda']) - TargetAdd('libpanda.dll', dep='dtool_have_vrpn.dat') TargetAdd('libpanda.dll', dep='dtool_have_freetype.dat') TargetAdd('libpanda.dll', opts=OPTS) @@ -3560,7 +3544,6 @@ if PkgSkip("AWESOMIUM") == 0 and not RUNTIME: TargetAdd('libp3awesomium.dll', input=COMMON_PANDA_LIBS) TargetAdd('libp3awesomium.dll', opts=OPTS) - # # DIRECTORY: panda/src/p3skel # @@ -3621,6 +3604,38 @@ if (PkgSkip('PANDAFX')==0) and (not RUNTIME): TargetAdd('libpandafx.dll', input=COMMON_PANDA_LIBS) TargetAdd('libpandafx.dll', opts=['ADVAPI', 'NVIDIACG']) +# +# DIRECTORY: panda/src/vrpn/ +# + +if (PkgSkip("VRPN")==0 and not RUNTIME): + OPTS=['DIR:panda/src/vrpn', 'BUILDING:VRPN', 'VRPN'] + TargetAdd('p3vrpn_composite1.obj', opts=OPTS, input='p3vrpn_composite1.cxx') + IGATEFILES=GetDirectoryContents('panda/src/vrpn', ["*.h", "*_composite*.cxx"]) + TargetAdd('libp3vrpn.in', opts=OPTS, input=IGATEFILES) + TargetAdd('libp3vrpn.in', opts=['IMOD:p3vrpn', 'ILIB:libp3vrpn', 'SRCDIR:panda/src/vrpn']) + TargetAdd('libp3vrpn_igate.obj', input='libp3vrpn.in', opts=["DEPENDENCYONLY"]) + + TargetAdd('libp3vrpn_module.obj', input='libp3vrpn.in') + TargetAdd('libp3vrpn_module.obj', opts=OPTS) + TargetAdd('libp3vrpn_module.obj', opts=['IMOD:p3vrpn', 'ILIB:libp3vrpn']) + + TargetAdd('libp3vrpn.dll', input='libp3vrpn_module.obj') + TargetAdd('libp3vrpn.dll', input='p3vrpn_composite1.obj') + TargetAdd('libp3vrpn.dll', input='libp3vrpn_igate.obj') + TargetAdd('libp3vrpn.dll', input=COMMON_PANDA_LIBS) + TargetAdd('libp3vrpn.dll', opts=['VRPN']) + +# +# DIRECTORY: panda/src/ffmpeg +# +if PkgSkip("FFMPEG") == 0 and not RUNTIME: + OPTS=['DIR:panda/src/ffmpeg', 'BUILDING:FFMPEG', 'FFMPEG', 'SWSCALE', 'SWRESAMPLE'] + TargetAdd('p3ffmpeg_composite1.obj', opts=OPTS, input='p3ffmpeg_composite1.cxx') + TargetAdd('libp3ffmpeg.dll', input='p3ffmpeg_composite1.obj') + TargetAdd('libp3ffmpeg.dll', input=COMMON_PANDA_LIBS) + TargetAdd('libp3ffmpeg.dll', opts=OPTS) + # # DIRECTORY: panda/src/audiotraits/ # @@ -5574,7 +5589,10 @@ if (PkgSkip("CONTRIB")==0 and not RUNTIME): if (PkgSkip("PYTHON")==0 and not RUNTIME): # We're phasing out the concept of PandaModules, so do not - # add new libraries here. See direct/src/ffi/panda3d.py + # add new libraries here. Only add new libraries when you've + # split them out of libpanda and need to maintain backward + # compatibility with old imports. See direct/src/ffi/panda3d.py + TargetAdd('PandaModules.py', input='libpandaexpress.dll') TargetAdd('PandaModules.py', input='libpanda.dll') if (PkgSkip("PANDAPHYSICS")==0): @@ -5592,6 +5610,8 @@ if (PkgSkip("PYTHON")==0 and not RUNTIME): TargetAdd('PandaModules.py', input='libp3awesomium.dll') if (PkgSkip("ODE")==0): TargetAdd('PandaModules.py', input='libpandaode.dll') + if (PkgSkip("VRPN")==0): + TargetAdd('PandaModules.py', input='libp3vrpn.dll') # # Generate the models directory and samples directory @@ -6403,9 +6423,9 @@ if (INSTALLER != 0): if (GetOptimize() <= 2): dbg = "-dbg" if GetTargetArch() == 'x64': if (RUNTIME): - MakeInstallerNSIS("Panda3D-Runtime-"+VERSION+dbg+"-x64.exe", "Panda3D", "Panda3D "+VERSION, "C:\\Panda3D-"+VERSION) + MakeInstallerNSIS("Panda3D-Runtime-"+VERSION+dbg+"-x64.exe", "Panda3D", "Panda3D "+VERSION, "C:\\Panda3D-"+VERSION+"-x64") else: - MakeInstallerNSIS("Panda3D-"+VERSION+dbg+"-x64.exe", "Panda3D", "Panda3D "+VERSION, "C:\\Panda3D-"+VERSION) + MakeInstallerNSIS("Panda3D-"+VERSION+dbg+"-x64.exe", "Panda3D", "Panda3D "+VERSION, "C:\\Panda3D-"+VERSION+"-x64") else: if (RUNTIME): MakeInstallerNSIS("Panda3D-Runtime-"+VERSION+dbg+".exe", "Panda3D", "Panda3D "+VERSION, "C:\\Panda3D-"+VERSION) diff --git a/makepanda/makepandacore.py b/makepanda/makepandacore.py index 8aabbb9dee..d4deb915ac 100644 --- a/makepanda/makepandacore.py +++ b/makepanda/makepandacore.py @@ -43,14 +43,14 @@ if sys.platform == 'darwin': # currently running in 32-bit mode. But sys.maxint is a reliable # indicator. if sys.version_info >= (3, 0): - is_64 = (sys.maxsize > 0x100000000) + host_64 = (sys.maxsize > 0x100000000) else: - is_64 = (sys.maxint > 0x100000000) + host_64 = (sys.maxint > 0x100000000) else: # On Windows (and Linux?) sys.maxint reports 0x7fffffff even on a # 64-bit build. So we stick with platform.architecture in that # case. - is_64 = (platform.architecture()[0] == '64bit') + host_64 = (platform.architecture()[0] == '64bit') ######################################################################## ## @@ -260,7 +260,7 @@ def GetHostArch(): target = GetTarget() if target == 'windows': - return 'x64' if is_64 else 'x86' + return 'x64' if host_64 else 'x86' else: #TODO return platform.machine() @@ -284,6 +284,11 @@ def SetTarget(target, arch=None): TOOLCHAIN_PREFIX = '' if target == 'windows': + if arch == 'i386': + arch = 'x86' + elif arch == 'amd64': + arch = 'x64' + if arch is not None and arch != 'x86' and arch != 'x64': exit("Windows architecture must be x86 or x64") @@ -846,7 +851,7 @@ def ListRegistryValues(path): return result def GetRegistryKey(path, subkey, override64=True): - if (is_64 and override64==True): + if (host_64 and override64): path = path.replace("SOFTWARE\\", "SOFTWARE\\Wow6432Node\\") k1=0 key = TryRegistryKey(path) @@ -1064,7 +1069,7 @@ def GetThirdpartyBase(): def GetThirdpartyDir(): """Returns the thirdparty directory for the target platform, - ie. thirdparty/win-libs-vc9/. May return None in the future.""" + ie. thirdparty/win-libs-vc10/. May return None in the future.""" global THIRDPARTYDIR if THIRDPARTYDIR != None: return THIRDPARTYDIR @@ -1075,28 +1080,28 @@ def GetThirdpartyDir(): if (target == 'windows'): if target_arch == 'x64': - THIRDPARTYDIR = base + "/win-libs-vc9-x64/" + THIRDPARTYDIR = base + "/win-libs-vc10-x64/" if not os.path.isdir(THIRDPARTYDIR): - THIRDPARTYDIR = base + "/win-libs-vc9/" + THIRDPARTYDIR = base + "/win-libs-vc10/" else: - THIRDPARTYDIR = base + "/win-libs-vc9/" + THIRDPARTYDIR = base + "/win-libs-vc10/" elif (target == 'darwin'): # OSX thirdparty binaries are universal, where possible. THIRDPARTYDIR = base + "/darwin-libs-a/" elif (target == 'linux'): - if (platform.machine().startswith("arm")): + if (target_arch.startswith("arm")): THIRDPARTYDIR = base + "/linux-libs-arm/" - elif (is_64): + elif (target_arch in ("x86_64", "amd64")): THIRDPARTYDIR = base + "/linux-libs-x64/" else: THIRDPARTYDIR = base + "/linux-libs-a/" elif (target == 'freebsd'): - if (platform.machine().startswith("arm")): + if (target_arch.startswith("arm")): THIRDPARTYDIR = base + "/freebsd-libs-arm/" - elif (is_64): + elif (target_arch in ("x86_64", "amd64")): THIRDPARTYDIR = base + "/freebsd-libs-x64/" else: THIRDPARTYDIR = base + "/freebsd-libs-a/" @@ -1113,46 +1118,6 @@ def GetThirdpartyDir(): return THIRDPARTYDIR -######################################################################## -## -## Visual Studio Manifest Manipulation. -## These functions exist to make sure we are referencing the same -## version of the VC runtime in the manifests that we are shipping -## with Panda3D, to avoid side-by-side configuration errors. Also, -## it also removes any dependency the VC80 CRT (as we only want to -## depend on the VC90 CRT). -## -######################################################################## - -VC90CRTVERSIONRE=re.compile("name=['\"]Microsoft.VC90.CRT['\"]\\s+version=['\"]([0-9.]+)['\"]") -VC80CRTASSEMBLYRE=re.compile("[\t \r\n]*[\t \r\n]*[\t \r\n]*()?[\t \r\n]*[\t \r\n]*[\t \r\n]*") -VC90CRTVERSION=None - -def GetVC90CRTVersion(fn = None): - global VC90CRTVERSION - if (VC90CRTVERSION != None): - return VC90CRTVERSION - if (not sys.platform.startswith("win")): - VC90CRTVERSION = 0 - return 0 - if (fn == None): - fn = GetThirdpartyDir() + "extras/bin/Microsoft.VC90.CRT.manifest" - manifest = ReadFile(fn) - version = VC90CRTVERSIONRE.search(manifest) - if (version == None): - exit("Cannot locate version number in " + fn) - VC90CRTVERSION = version.group(1) - return version.group(1) - -def SetVC90CRTVersion(fn, ver = None): - if (ver == None): - ver = GetVC90CRTVersion() - manifest = ReadFile(fn) - subst = " name='Microsoft.VC90.CRT' version='" + ver + "' " - manifest = VC90CRTVERSIONRE.sub(subst, manifest) - manifest = VC80CRTASSEMBLYRE.sub("", manifest) - WriteFile(fn, manifest) - ######################################################################## ## ## Gets or sets the output directory, by default "built". @@ -1672,8 +1637,7 @@ def SdkLocateDirectX( strMode = 'default' ): if (dir != 0): print("Using DirectX SDK March 2009") SDK["DX9"] = dir.replace("\\", "/").rstrip("/") - archStr = "x86" - if (is_64): archStr = "x64" + archStr = GetTargetArch() if ("DX9" not in SDK) or ("DX8" not in SDK): uninstaller = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall" for subdir in ListRegistryKeys(uninstaller): @@ -1735,8 +1699,7 @@ def SdkLocateDirectX( strMode = 'default' ): if ("DX9" not in SDK): exit("Couldn't find DirectX March 2009 SDK") elif strMode == 'aug2006': - archStr = "x86" - if (is_64): archStr = "x64" + archStr = GetTargetArch() if ("DX9" not in SDK) or ("DX8" not in SDK): uninstaller = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall" for subdir in ListRegistryKeys(uninstaller): @@ -1777,7 +1740,7 @@ def SdkLocateMaya(): ddir = "/Applications/Autodesk/maya"+key if (os.path.isdir(ddir)): SDK[ver] = ddir else: - if (is_64): + if (GetTargetArch() == 'x64'): ddir1 = "/usr/autodesk/maya"+key+"-x64" ddir2 = "/usr/aw/maya"+key+"-x64" else: @@ -1810,7 +1773,7 @@ def SdkLocatePython(force_use_sys_executable = False): SDK["PYTHON"] = GetThirdpartyBase()+"/win-python" if (GetOptimize() <= 2): SDK["PYTHON"] += "-dbg" - if (is_64 and os.path.isdir(SDK["PYTHON"] + "-x64")): + if (GetTargetArch() == 'x64' and os.path.isdir(SDK["PYTHON"] + "-x64")): SDK["PYTHON"] += "-x64" SDK["PYTHONEXEC"] = SDK["PYTHON"].replace('/', '\\') + "\\python" @@ -1844,7 +1807,7 @@ def SdkLocatePython(force_use_sys_executable = False): def SdkLocateVisualStudio(): if (sys.platform != "win32"): return - vcdir = GetRegistryKey("SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VC7", "9.0") + vcdir = GetRegistryKey("SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VC7", "10.0") if (vcdir != 0) and (vcdir[-4:] == "\\VC\\"): vcdir = vcdir[:-3] SDK["VISUALSTUDIO"] = vcdir @@ -1856,87 +1819,19 @@ def SdkLocateVisualStudio(): vcdir = vcdir[:-3] SDK["VISUALSTUDIO"] = vcdir -def SdkLocateMSPlatform( strMode = 'default'): +def SdkLocateMSPlatform(strMode = 'default'): if (sys.platform != "win32"): return platsdk = 0 - if (strMode == 'default'): - platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1", "InstallationFolder") - if (platsdk and not os.path.isdir(platsdk)): - platsdk = 0 - - if (platsdk == 0): - platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\MicrosoftSDK\\InstalledSDKs\\D2FF9F89-8AA2-4373-8A31-C838BF4DBBE1", "Install Dir") - if (platsdk and not os.path.isdir(platsdk)): - platsdk = 0 - - if (platsdk == 0): - platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v6.1","InstallationFolder") - if (platsdk and not os.path.isdir(platsdk)): - platsdk = 0 - - if (platsdk == 0): - platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v6.0A","InstallationFolder") - if (platsdk and not os.path.isdir(platsdk)): - platsdk = 0 - - if (platsdk == 0 and os.path.isdir(os.path.join(GetProgramFiles(), "Microsoft Platform SDK for Windows Server 2003 R2"))): - if (not is_64 or os.path.isdir(os.path.join(GetProgramFiles(), "Microsoft Platform SDK for Windows Server 2003 R2", "Lib", "AMD64"))): - platsdk = os.path.join(GetProgramFiles(), "Microsoft Platform SDK for Windows Server 2003 R2") - if (not os.path.isdir(platsdk)): - platsdk = 0 - # Doesn't work with the Express versions, so we're checking for the "atlmfc" dir, which is not in the Express - if (platsdk == 0 and os.path.isdir(os.path.join(GetProgramFiles(), "Microsoft Visual Studio 9\\VC\\atlmfc")) - and os.path.isdir(os.path.join(GetProgramFiles(), "Microsoft Visual Studio 9\\VC\\PlatformSDK"))): - platsdk = os.path.join(GetProgramFiles(), "Microsoft Visual Studio 9\\VC\\PlatformSDK") - if (not os.path.isdir(platsdk)): - platsdk = 0 + platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1", "InstallationFolder") + if (platsdk and not os.path.isdir(platsdk)): + platsdk = 0 + if not platsdk: + exit("Couldn't find Windows SDK v7.1") - # This may not be the best idea but it does give a warning - if (platsdk == 0): - if ("WindowsSdkDir" in os.environ): - WARNINGS.append("Windows SDK directory not found in registry, found in Environment variables instead") - platsdk = os.environ["WindowsSdkDir"] - - elif (strMode == 'win71'): - platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1", "InstallationFolder") - if (platsdk and not os.path.isdir(platsdk)): - platsdk = 0 - if not platsdk: - exit("Couldn't find Win7.1 Platform SDK") - elif (strMode == 'win61'): - platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v6.1","InstallationFolder") - if (platsdk and not os.path.isdir(platsdk)): - platsdk = 0 - if not platsdk: - exit("Couldn't find Win6.1 Platform SDK") - elif (strMode == 'win60A'): - platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v6.0A","InstallationFolder") - if (platsdk and not os.path.isdir(platsdk)): - platsdk = 0 - if not platsdk: - exit("Couldn't find Win6.0 Platform SDK") - elif (strMode == 'winserver2003r2'): - platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\MicrosoftSDK\\InstalledSDKs\\D2FF9F89-8AA2-4373-8A31-C838BF4DBBE1", "Install Dir") - if (platsdk and not os.path.isdir(platsdk)): - platsdk = 0 - if (platsdk == 0 and os.path.isdir(os.path.join(GetProgramFiles(), "Microsoft Platform SDK for Windows Server 2003 R2"))): - if (not is_64 or os.path.isdir(os.path.join(GetProgramFiles(), "Microsoft Platform SDK for Windows Server 2003 R2", "Lib", "AMD64"))): - platsdk = os.path.join(GetProgramFiles(), "Microsoft Platform SDK for Windows Server 2003 R2") - if (not os.path.isdir(platsdk)): - platsdk = 0 - if (platsdk == 0 and os.path.isdir("C:/Program Files/Microsoft Platform SDK for Windows Server 2003 R2")): - if (not is_64 or os.path.isdir(os.path.join("C:/Program Files/Microsoft Platform SDK for Windows Server 2003 R2", "Lib", "AMD64"))): - platsdk = os.path.join("C:/Program Files/Microsoft Platform SDK for Windows Server 2003 R2") - if (not os.path.isdir(platsdk)): - platsdk = 0 - if not platsdk: - exit("Couldn't find Windows Server 2003 R2 PlatformSDK") - - if (platsdk != 0): - if (not platsdk.endswith("\\")): - platsdk += "\\" - SDK["MSPLATFORM"] = platsdk + if (not platsdk.endswith("\\")): + platsdk += "\\" + SDK["MSPLATFORM"] = platsdk def SdkLocateMacOSX(osxtarget = None): if (sys.platform != "darwin"): return @@ -2134,7 +2029,8 @@ def SetupVisualStudioEnviron(): os.environ["VCINSTALLDIR"] = SDK["VISUALSTUDIO"] + "VC" os.environ["WindowsSdkDir"] = SDK["MSPLATFORM"] suffix="" - if (is_64): suffix = "\\amd64" + arch = GetTargetArch() + if (arch == 'x64'): suffix = "\\amd64" AddToPathEnv("PATH", SDK["VISUALSTUDIO"] + "VC\\bin"+suffix) AddToPathEnv("PATH", SDK["VISUALSTUDIO"] + "Common7\\IDE") AddToPathEnv("INCLUDE", SDK["VISUALSTUDIO"] + "VC\\include") @@ -2145,10 +2041,10 @@ def SetupVisualStudioEnviron(): AddToPathEnv("INCLUDE", SDK["MSPLATFORM"] + "include") AddToPathEnv("INCLUDE", SDK["MSPLATFORM"] + "include\\atl") AddToPathEnv("INCLUDE", SDK["MSPLATFORM"] + "include\\mfc") - if (not is_64): + if (arch != 'x64'): AddToPathEnv("LIB", SDK["MSPLATFORM"] + "lib") - AddToPathEnv("PATH",SDK["VISUALSTUDIO"] + "VC\\redist\\x86\\Microsoft.VC90.CRT") - AddToPathEnv("PATH",SDK["VISUALSTUDIO"] + "VC\\redist\\x86\\Microsoft.VC90.MFC") + AddToPathEnv("PATH",SDK["VISUALSTUDIO"] + "VC\\redist\\x86\\Microsoft.VC100.CRT") + AddToPathEnv("PATH",SDK["VISUALSTUDIO"] + "VC\\redist\\x86\\Microsoft.VC100.MFC") elif (os.path.isdir(SDK["MSPLATFORM"] + "lib\\x64")): AddToPathEnv("LIB", SDK["MSPLATFORM"] + "lib\\x64") elif (os.path.isdir(SDK["MSPLATFORM"] + "lib\\amd64")): @@ -2207,6 +2103,10 @@ def DefSymbol(opt, sym, val=""): def SetupBuildEnvironment(compiler): if GetVerbose(): print("Using compiler: %s" % compiler) + print("Host OS: %s" % GetHost()) + print("Host arch: %s" % GetHostArch()) + print("Target OS: %s" % GetTarget()) + print("Target arch: %s" % GetTargetArch()) if compiler == "MSVC": # Add the visual studio tools to PATH et al. @@ -2251,18 +2151,18 @@ def SetupBuildEnvironment(compiler): exit('Not found: %s' % (prebuilt_dir)) host_tag = GetHost() + '-x86' - if is_64: + if host_64: host_tag += '_64' - if host_tag == 'windows-x86': + elif host_tag == 'windows-x86': host_tag = 'windows' prebuilt_dir = os.path.join(prebuilt_dir, host_tag) - if is_64 and not os.path.isdir(prebuilt_dir): + if host_64 and not os.path.isdir(prebuilt_dir): # Try the 32-bits toolchain instead. prebuilt_dir = os.path.join(prebuilt_dir, host_tag) if not os.path.isdir(prebuilt_dir): - if is_64: + if host_64: exit('Not found: %s or %s' % (prebuilt_dir, host_tag)) else: exit('Not found: %s' % (prebuilt_dir))