|
@@ -27,7 +27,7 @@ import sys
|
|
|
|
|
|
|
|
## jGenPyCode tries to get the directory for Direct from the sys.path. This only works if you
|
|
## jGenPyCode tries to get the directory for Direct from the sys.path. This only works if you
|
|
|
## have installed the sdk using a installer. This would not work if the installer was
|
|
## have installed the sdk using a installer. This would not work if the installer was
|
|
|
-## never used and everything was grabbed into a virign environment using cvs.
|
|
|
|
|
|
|
+## never used and everything was grabbed into a virgin environment using cvs.
|
|
|
sys.path.append( os.getcwd() )
|
|
sys.path.append( os.getcwd() )
|
|
|
import __builtin__
|
|
import __builtin__
|
|
|
|
|
|
|
@@ -62,9 +62,10 @@ COREAPI_VERSION=None
|
|
|
PLUGIN_VERSION=None
|
|
PLUGIN_VERSION=None
|
|
|
OSXTARGET=None
|
|
OSXTARGET=None
|
|
|
HOST_URL="https://runtime.panda3d.org/"
|
|
HOST_URL="https://runtime.panda3d.org/"
|
|
|
-global STRDXSDKVERSION, STRMSPLATFORMVERSION
|
|
|
|
|
|
|
+global STRDXSDKVERSION, STRMSPLATFORMVERSION, BOOUSEINTELCOMPILER
|
|
|
STRDXSDKVERSION = 'default'
|
|
STRDXSDKVERSION = 'default'
|
|
|
STRMSPLATFORMVERSION = 'default'
|
|
STRMSPLATFORMVERSION = 'default'
|
|
|
|
|
+BOOUSEINTELCOMPILER = False
|
|
|
|
|
|
|
|
if "MACOSX_DEPLOYMENT_TARGET" in os.environ:
|
|
if "MACOSX_DEPLOYMENT_TARGET" in os.environ:
|
|
|
OSXTARGET=os.environ["MACOSX_DEPLOYMENT_TARGET"]
|
|
OSXTARGET=os.environ["MACOSX_DEPLOYMENT_TARGET"]
|
|
@@ -140,6 +141,10 @@ def usage(problem):
|
|
|
print " --everything (enable every third-party lib)"
|
|
print " --everything (enable every third-party lib)"
|
|
|
print " --dxSdk=X (specify version of Dx9 SDK to use: jun2010, aug2009, mar2009, aug2006)"
|
|
print " --dxSdk=X (specify version of Dx9 SDK to use: jun2010, aug2009, mar2009, aug2006)"
|
|
|
print " --MSPlatSdk=X (specify MSPlatSdk to use: win71, win61, win60A, winserver2003r2"
|
|
print " --MSPlatSdk=X (specify MSPlatSdk to use: win71, win61, win60A, winserver2003r2"
|
|
|
|
|
+ print " --MSVC_Intel (experimental setting to use an intel compiler instead of MSVC. win-only"
|
|
|
|
|
+ print " Novice users of this option should only use it inconjunction with the latest SDKs"
|
|
|
|
|
+ print " and have installed Intell Parallel Studios 2011 SP1. Use of the directcam and vision modules"
|
|
|
|
|
+ print " will require additional modifications to the build system."
|
|
|
print ""
|
|
print ""
|
|
|
print "The simplest way to compile panda is to just type:"
|
|
print "The simplest way to compile panda is to just type:"
|
|
|
print ""
|
|
print ""
|
|
@@ -151,13 +156,13 @@ def parseopts(args):
|
|
|
global INSTALLER,RTDIST,RUNTIME,GENMAN,DISTRIBUTOR,VERSION
|
|
global INSTALLER,RTDIST,RUNTIME,GENMAN,DISTRIBUTOR,VERSION
|
|
|
global COMPRESSOR,THREADCOUNT,OSXTARGET,HOST_URL
|
|
global COMPRESSOR,THREADCOUNT,OSXTARGET,HOST_URL
|
|
|
global DEBVERSION,RPMRELEASE,P3DSUFFIX
|
|
global DEBVERSION,RPMRELEASE,P3DSUFFIX
|
|
|
- global STRDXSDKVERSION, STRMSPLATFORMVERSION
|
|
|
|
|
|
|
+ global STRDXSDKVERSION, STRMSPLATFORMVERSION, BOOUSEINTELCOMPILER
|
|
|
longopts = [
|
|
longopts = [
|
|
|
"help","distributor=","verbose","runtime","osxtarget=",
|
|
"help","distributor=","verbose","runtime","osxtarget=",
|
|
|
"optimize=","everything","nothing","installer","rtdist","nocolor",
|
|
"optimize=","everything","nothing","installer","rtdist","nocolor",
|
|
|
"version=","lzma","no-python","threads=","outputdir=","override=",
|
|
"version=","lzma","no-python","threads=","outputdir=","override=",
|
|
|
"static","host=","debversion=","rpmrelease=","p3dsuffix=",
|
|
"static","host=","debversion=","rpmrelease=","p3dsuffix=",
|
|
|
- "dxSdk=", "MSPlatSdk="]
|
|
|
|
|
|
|
+ "dxSdk=", "MSPlatSdk=", "MSVC_Intel"]
|
|
|
anything = 0
|
|
anything = 0
|
|
|
optimize = ""
|
|
optimize = ""
|
|
|
for pkg in PkgListGet(): longopts.append("no-"+pkg.lower())
|
|
for pkg in PkgListGet(): longopts.append("no-"+pkg.lower())
|
|
@@ -202,6 +207,7 @@ def parseopts(args):
|
|
|
if STRMSPLATFORMVERSION == '':
|
|
if STRMSPLATFORMVERSION == '':
|
|
|
print "No MS Platform SDK version specified. Using 'default' MS Platform SDK search"
|
|
print "No MS Platform SDK version specified. Using 'default' MS Platform SDK search"
|
|
|
STRMSPLATFORMVERSION = 'default'
|
|
STRMSPLATFORMVERSION = 'default'
|
|
|
|
|
+ elif (option=="--MSVC_Intel"): BOOUSEINTELCOMPILER = True
|
|
|
else:
|
|
else:
|
|
|
for pkg in PkgListGet():
|
|
for pkg in PkgListGet():
|
|
|
if (option=="--use-"+pkg.lower()):
|
|
if (option=="--use-"+pkg.lower()):
|
|
@@ -800,45 +806,138 @@ def BracketNameWithQuotes(name):
|
|
|
def CompileCxx(obj,src,opts):
|
|
def CompileCxx(obj,src,opts):
|
|
|
ipath = GetListOption(opts, "DIR:")
|
|
ipath = GetListOption(opts, "DIR:")
|
|
|
if (COMPILER=="MSVC"):
|
|
if (COMPILER=="MSVC"):
|
|
|
- cmd = "cl "
|
|
|
|
|
- if (is_64):
|
|
|
|
|
- cmd += "/favor:blend "
|
|
|
|
|
- cmd += "/wd4996 /wd4275 /wd4267 /wd4101 /wd4273 "
|
|
|
|
|
-
|
|
|
|
|
- # Enables Windows 7 mode if SDK is detected.
|
|
|
|
|
- # But only if it is Windows 7 (0x601) and not e. g. Vista (0x600)
|
|
|
|
|
- if (STRMSPLATFORMVERSION not in ['winserver2003r2', 'win60A']):
|
|
|
|
|
- platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1", "InstallationFolder")
|
|
|
|
|
- winver = sys.getwindowsversion()
|
|
|
|
|
- if platsdk and os.path.isdir(platsdk) and winver[0] >= 6 and winver[1] >= 1:
|
|
|
|
|
- cmd += "/DPANDA_WIN7 /DWINVER=0x601 "
|
|
|
|
|
-
|
|
|
|
|
- cmd += "/Fo" + obj + " /nologo /c"
|
|
|
|
|
- if (not is_64):
|
|
|
|
|
- cmd += " /arch:SSE2"
|
|
|
|
|
- for x in ipath: cmd += " /I" + x
|
|
|
|
|
- for (opt,dir) in INCDIRECTORIES:
|
|
|
|
|
- if (opt=="ALWAYS") or (opt in opts): cmd += " /I" + BracketNameWithQuotes(dir)
|
|
|
|
|
- for (opt,var,val) in DEFSYMBOLS:
|
|
|
|
|
- if (opt=="ALWAYS") or (opt in opts): cmd += " /D" + var + "=" + val
|
|
|
|
|
- if (opts.count('NOFLOATWARN')): cmd += ' /wd4244 /wd4305'
|
|
|
|
|
- if (opts.count('MSFORSCOPE')): cmd += ' /Zc:forScope-'
|
|
|
|
|
- optlevel = GetOptimizeOption(opts)
|
|
|
|
|
- if (optlevel==1): cmd += " /MDd /Zi /RTCs /GS"
|
|
|
|
|
- if (optlevel==2): cmd += " /MDd /Zi"
|
|
|
|
|
- if (optlevel==3): cmd += " /MD /Zi /O2 /Ob2 /Oi /Ot /fp:fast /DFORCE_INLINING"
|
|
|
|
|
- if (optlevel==4):
|
|
|
|
|
- cmd += " /MD /Zi /Ox /Ob2 /Oi /Ot /fp:fast /DFORCE_INLINING /DNDEBUG /GL"
|
|
|
|
|
- cmd += " /Oy" # jcr add
|
|
|
|
|
- cmd += " /Zp16" # jcr add # Is this necessary with /Ox?
|
|
|
|
|
-
|
|
|
|
|
- cmd += " /Fd" + os.path.splitext(obj)[0] + ".pdb"
|
|
|
|
|
- building = GetValueOption(opts, "BUILDING:")
|
|
|
|
|
- if (building): cmd += " /DBUILDING_" + building
|
|
|
|
|
- if ("BIGOBJ" in opts) or (is_64):
|
|
|
|
|
- cmd += " /bigobj"
|
|
|
|
|
- cmd += " /EHa /Zm300 /DWIN32_VC /DWIN32 /W3 " + BracketNameWithQuotes(src)
|
|
|
|
|
- oscmd(cmd)
|
|
|
|
|
|
|
+ if not BOOUSEINTELCOMPILER:
|
|
|
|
|
+ cmd = "cl "
|
|
|
|
|
+ if (is_64):
|
|
|
|
|
+ cmd += "/favor:blend "
|
|
|
|
|
+ cmd += "/wd4996 /wd4275 /wd4267 /wd4101 /wd4273 "
|
|
|
|
|
+
|
|
|
|
|
+ # Enables Windows 7 mode if SDK is detected.
|
|
|
|
|
+ # But only if it is Windows 7 (0x601) and not e. g. Vista (0x600)
|
|
|
|
|
+ if (STRMSPLATFORMVERSION not in ['winserver2003r2', 'win60A']):
|
|
|
|
|
+ platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1", "InstallationFolder")
|
|
|
|
|
+ winver = sys.getwindowsversion()
|
|
|
|
|
+ if platsdk and os.path.isdir(platsdk) and winver[0] >= 6 and winver[1] >= 1:
|
|
|
|
|
+ cmd += "/DPANDA_WIN7 /DWINVER=0x601 "
|
|
|
|
|
+
|
|
|
|
|
+ cmd += "/Fo" + obj + " /nologo /c"
|
|
|
|
|
+ if (not is_64):
|
|
|
|
|
+ cmd += " /arch:SSE2"
|
|
|
|
|
+ for x in ipath: cmd += " /I" + x
|
|
|
|
|
+ for (opt,dir) in INCDIRECTORIES:
|
|
|
|
|
+ if (opt=="ALWAYS") or (opt in opts): cmd += " /I" + BracketNameWithQuotes(dir)
|
|
|
|
|
+ for (opt,var,val) in DEFSYMBOLS:
|
|
|
|
|
+ if (opt=="ALWAYS") or (opt in opts): cmd += " /D" + var + "=" + val
|
|
|
|
|
+ if (opts.count('NOFLOATWARN')): cmd += ' /wd4244 /wd4305'
|
|
|
|
|
+ if (opts.count('MSFORSCOPE')): cmd += ' /Zc:forScope-'
|
|
|
|
|
+ optlevel = GetOptimizeOption(opts)
|
|
|
|
|
+ if (optlevel==1): cmd += " /MDd /Zi /RTCs /GS"
|
|
|
|
|
+ if (optlevel==2): cmd += " /MDd /Zi"
|
|
|
|
|
+ if (optlevel==3): cmd += " /MD /Zi /O2 /Ob2 /Oi /Ot /fp:fast /DFORCE_INLINING"
|
|
|
|
|
+ if (optlevel==4):
|
|
|
|
|
+ cmd += " /MD /Zi /Ox /Ob2 /Oi /Ot /fp:fast /DFORCE_INLINING /DNDEBUG /GL"
|
|
|
|
|
+ cmd += " /Oy" # jcr add
|
|
|
|
|
+ cmd += " /Zp16" # jcr add # Is this necessary with /Ox?
|
|
|
|
|
+
|
|
|
|
|
+ cmd += " /Fd" + os.path.splitext(obj)[0] + ".pdb"
|
|
|
|
|
+ building = GetValueOption(opts, "BUILDING:")
|
|
|
|
|
+ if (building): cmd += " /DBUILDING_" + building
|
|
|
|
|
+ if ("BIGOBJ" in opts) or (is_64):
|
|
|
|
|
+ cmd += " /bigobj"
|
|
|
|
|
+ cmd += " /EHa /Zm300 /DWIN32_VC /DWIN32 /W3 " + BracketNameWithQuotes(src)
|
|
|
|
|
+ oscmd(cmd)
|
|
|
|
|
+ else:
|
|
|
|
|
+ cmd = "icl "
|
|
|
|
|
+ if (is_64):
|
|
|
|
|
+ cmd += "/favor:blend "
|
|
|
|
|
+ cmd += "/wd4996 /wd4275 /wd4267 /wd4101 /wd4273 "
|
|
|
|
|
+
|
|
|
|
|
+ # Enables Windows 7 mode if SDK is detected.
|
|
|
|
|
+ # But only if it is Windows 7 (0x601) and not e. g. Vista (0x600)
|
|
|
|
|
+ if (STRMSPLATFORMVERSION not in ['winserver2003r2', 'win60A']):
|
|
|
|
|
+ platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1", "InstallationFolder")
|
|
|
|
|
+ winver = sys.getwindowsversion()
|
|
|
|
|
+ if platsdk and os.path.isdir(platsdk) and winver[0] >= 6 and winver[1] >= 1:
|
|
|
|
|
+ cmd += "/DPANDA_WIN7 /DWINVER=0x601 "
|
|
|
|
|
+
|
|
|
|
|
+ cmd += "/Fo" + obj + " /c"
|
|
|
|
|
+ for x in ipath: cmd += " /I" + x
|
|
|
|
|
+ for (opt,dir) in INCDIRECTORIES:
|
|
|
|
|
+ if (opt=="ALWAYS") or (opt in opts): cmd += " /I" + BracketNameWithQuotes(dir)
|
|
|
|
|
+ for (opt,var,val) in DEFSYMBOLS:
|
|
|
|
|
+ if (opt=="ALWAYS") or (opt in opts): cmd += " /D" + var + "=" + val
|
|
|
|
|
+ if (opts.count('NOFLOATWARN')): cmd += ' /wd4244 /wd4305'
|
|
|
|
|
+ if (opts.count('MSFORSCOPE')): cmd += ' /Zc:forScope-'
|
|
|
|
|
+ optlevel = GetOptimizeOption(opts)
|
|
|
|
|
+ if (optlevel==1): cmd += " /MDd /Zi /RTCs /GS"
|
|
|
|
|
+ if (optlevel==2): cmd += " /MDd /Zi /arch:SSE3"
|
|
|
|
|
+ # core changes from jean-claude (dec 2011)
|
|
|
|
|
+ # ----------------------------------------
|
|
|
|
|
+ # performance will be seeked at level 3 & 4
|
|
|
|
|
+ # -----------------------------------------
|
|
|
|
|
+ if (optlevel==3):
|
|
|
|
|
+ cmd += " /MD /Zi /O2 /Oi /Ot /arch:SSE3"
|
|
|
|
|
+ cmd += " /Ob0"
|
|
|
|
|
+ cmd += " /Qipo-" # beware of IPO !!!
|
|
|
|
|
+ ## Lesson learned: Don't use /GL flag -> end result is MESSY
|
|
|
|
|
+ ## ----------------------------------------------------------------
|
|
|
|
|
+ ## if (optlevel==4): cmd += " /MD /Zi /O3 /Oi /Ot /arch:SSE3 /Yc /DNDEBUG"
|
|
|
|
|
+ if (optlevel==4):
|
|
|
|
|
+ cmd += " /MD /Zi /O3 /Oi /Ot /Ob0 /Yc /DNDEBUG" # /Ob0 a ete rajoute en cours de route a 47%
|
|
|
|
|
+ # cmd += " /MD /Zi /Ox /Oi /Ot /Ob0 /Yc /DNDEBUG" # /Ob0 a ete rajoute en cours de route a 47% test Ox
|
|
|
|
|
+
|
|
|
|
|
+ # cmd += " /Qipo-"
|
|
|
|
|
+ # cmd += " /Qip" # optimization mono file
|
|
|
|
|
+ cmd += " /Qipo" # optimization multi file
|
|
|
|
|
+
|
|
|
|
|
+ # for 3 & 4 optimization levels
|
|
|
|
|
+ # -----------------------------
|
|
|
|
|
+ if (optlevel>=3):
|
|
|
|
|
+ cmd += " /fp:fast=2"
|
|
|
|
|
+ cmd += " /Qftz"
|
|
|
|
|
+ cmd += " /Qfp-speculation:fast"
|
|
|
|
|
+ cmd += " /Qopt-matmul" # needs /O2
|
|
|
|
|
+ cmd += " /Qprec-div-"
|
|
|
|
|
+ cmd += " /Qsimd"
|
|
|
|
|
+
|
|
|
|
|
+ cmd += " /QxHost" # compile for target host
|
|
|
|
|
+ cmd += " /Quse-intel-optimized-headers" # use intel optimized headers
|
|
|
|
|
+ cmd += " /Qparallel" # enable parallelization
|
|
|
|
|
+ cmd += " /Qvc9" # for Microsoft Visual C++ 2008
|
|
|
|
|
+
|
|
|
|
|
+ # cmd += " /Qopt-report:2 /Qopt-report-phase:hlo /Qopt-report-phase:hpo" # some optimization reports
|
|
|
|
|
+
|
|
|
|
|
+ ## 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.
|
|
|
|
|
+ ## The /Qpchi option is on by default but interferes with Microsoft libs; so use /Qpchi- to turn it off.
|
|
|
|
|
+ cmd += " /Qpchi-" # keep it this way!
|
|
|
|
|
+
|
|
|
|
|
+ ## Inlining seems to be an issue here !
|
|
|
|
|
+ ## ------------------------------------
|
|
|
|
|
+ ## so don't use cmd += " /DFORCE_INLINING" (need to check why with Panda developpers!)
|
|
|
|
|
+ ## Inline expansion /Ob1 : Allow functions marked inline to be inline.
|
|
|
|
|
+ ## Inline any /Ob2 : Inline functions deemed appropriate by compiler.
|
|
|
|
|
+
|
|
|
|
|
+ ## Ctor displacement /vd0 : Disable constructor displacement.
|
|
|
|
|
+ ## Choose this option only if no class constructors or destructors call virtual functions.
|
|
|
|
|
+ ## Use /vd1 (default) to enable. Alternate: #pragma vtordisp
|
|
|
|
|
+
|
|
|
|
|
+ ## Best case ptrs /vmb : Use best case "pointer to class member" representation.
|
|
|
|
|
+ ## Use this option if you always define a class before you declare a pointer to a member of the class.
|
|
|
|
|
+ ## The compiler will issue an error if it encounters a pointer declaration before the class is defined.
|
|
|
|
|
+ ## Alternate: #pragma pointers_to_members
|
|
|
|
|
+
|
|
|
|
|
+ cmd += " /Fd" + os.path.splitext(obj)[0] + ".pdb"
|
|
|
|
|
+ building = GetValueOption(opts, "BUILDING:")
|
|
|
|
|
+ if (building): cmd += " /DBUILDING_" + building
|
|
|
|
|
+ if ("BIGOBJ" in opts) or (is_64):
|
|
|
|
|
+ cmd += " /bigobj"
|
|
|
|
|
+
|
|
|
|
|
+ # level of warnings
|
|
|
|
|
+ cmd += " /EHa /Zm300 /DWIN32_VC /DWIN32 /W3 " + BracketNameWithQuotes(src)
|
|
|
|
|
+ # cmd += " /EHa /Zm300 /DWIN32_VC /DWIN32 /W4 " + BracketNameWithQuotes(src)
|
|
|
|
|
+ # cmd += " /EHa /Zm300 /DWIN32_VC /DWIN32 /Wall " + BracketNameWithQuotes(src)
|
|
|
|
|
+ oscmd(cmd)
|
|
|
if (COMPILER=="LINUX"):
|
|
if (COMPILER=="LINUX"):
|
|
|
cc = os.environ.get('CC', 'gcc')
|
|
cc = os.environ.get('CC', 'gcc')
|
|
|
cxx = os.environ.get('CXX', 'g++')
|
|
cxx = os.environ.get('CXX', 'g++')
|
|
@@ -998,12 +1097,25 @@ def CompileImod(wobj, wsrc, opts):
|
|
|
|
|
|
|
|
def CompileLib(lib, obj, opts):
|
|
def CompileLib(lib, obj, opts):
|
|
|
if (COMPILER=="MSVC"):
|
|
if (COMPILER=="MSVC"):
|
|
|
- cmd = 'link /lib /nologo '
|
|
|
|
|
- if (is_64):
|
|
|
|
|
- cmd += "/MACHINE:X64 "
|
|
|
|
|
- cmd += '/OUT:' + BracketNameWithQuotes(lib)
|
|
|
|
|
- for x in obj: cmd += ' ' + BracketNameWithQuotes(x)
|
|
|
|
|
- oscmd(cmd)
|
|
|
|
|
|
|
+ if not BOOUSEINTELCOMPILER:
|
|
|
|
|
+ #Use MSVC Linker
|
|
|
|
|
+ cmd = 'link /lib /nologo '
|
|
|
|
|
+ if (is_64):
|
|
|
|
|
+ cmd += "/MACHINE:X64 "
|
|
|
|
|
+ cmd += '/OUT:' + BracketNameWithQuotes(lib)
|
|
|
|
|
+ for x in obj: cmd += ' ' + BracketNameWithQuotes(x)
|
|
|
|
|
+ oscmd(cmd)
|
|
|
|
|
+ else:
|
|
|
|
|
+ # Choose Intel linker; from Jean-Claude
|
|
|
|
|
+ cmd = 'xilink /verbose:lib /lib '
|
|
|
|
|
+ if (is_64):
|
|
|
|
|
+ cmd += "/MACHINE:X64 "
|
|
|
|
|
+ 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\compiler\lib\ia32"'
|
|
|
|
|
+ oscmd(cmd)
|
|
|
if (COMPILER=="LINUX"):
|
|
if (COMPILER=="LINUX"):
|
|
|
if sys.platform == 'darwin':
|
|
if sys.platform == 'darwin':
|
|
|
cmd = 'libtool -static -o ' + BracketNameWithQuotes(lib)
|
|
cmd = 'libtool -static -o ' + BracketNameWithQuotes(lib)
|
|
@@ -1014,22 +1126,6 @@ def CompileLib(lib, obj, opts):
|
|
|
|
|
|
|
|
oscmd("ranlib " + BracketNameWithQuotes(lib))
|
|
oscmd("ranlib " + BracketNameWithQuotes(lib))
|
|
|
|
|
|
|
|
-########################################################################
|
|
|
|
|
-##
|
|
|
|
|
-## CompileLink implicitly checks whether or not a file like libpanda.lib exists
|
|
|
|
|
-## This is not explicitly checked stated in the dependency, but is necessary on windows to link in a dll
|
|
|
|
|
-##
|
|
|
|
|
-########################################################################
|
|
|
|
|
-
|
|
|
|
|
-def CompileLink_DoesImplicitLibExist(dll, obj, opts):
|
|
|
|
|
- for x in obj:
|
|
|
|
|
- if (x.endswith(".dll")):
|
|
|
|
|
- baseStr = GetOutputDir() + '/lib/' + os.path.splitext(os.path.basename(x))[0] + ".lib"
|
|
|
|
|
- strFullPath = os.path.join( os.getcwd(), baseStr )
|
|
|
|
|
- if not os.path.exists( strFullPath ):
|
|
|
|
|
- return False
|
|
|
|
|
- return True
|
|
|
|
|
-
|
|
|
|
|
########################################################################
|
|
########################################################################
|
|
|
##
|
|
##
|
|
|
## CompileLink
|
|
## CompileLink
|
|
@@ -1038,53 +1134,105 @@ def CompileLink_DoesImplicitLibExist(dll, obj, opts):
|
|
|
|
|
|
|
|
def CompileLink(dll, obj, opts):
|
|
def CompileLink(dll, obj, opts):
|
|
|
if (COMPILER=="MSVC"):
|
|
if (COMPILER=="MSVC"):
|
|
|
- cmd = "link /nologo"
|
|
|
|
|
- if (is_64):
|
|
|
|
|
- cmd += " /MACHINE:X64"
|
|
|
|
|
- if ("MFC" not in opts):
|
|
|
|
|
- cmd += " /NOD:MFC90.LIB /NOD:MFC80.LIB /NOD:LIBCMT"
|
|
|
|
|
- cmd += " /NOD:LIBCI.LIB /DEBUG"
|
|
|
|
|
- cmd += " /nod:libc /nod:libcmtd /nod:atlthunk /nod:atls"
|
|
|
|
|
- if (GetOrigExt(dll) != ".exe"): cmd += " /DLL"
|
|
|
|
|
- optlevel = GetOptimizeOption(opts)
|
|
|
|
|
- if (optlevel==1): cmd += " /MAP /MAPINFO:EXPORTS /NOD:MSVCRT.LIB /NOD:MSVCPRT.LIB /NOD:MSVCIRT.LIB"
|
|
|
|
|
- if (optlevel==2): cmd += " /MAP:NUL /NOD:MSVCRT.LIB /NOD:MSVCPRT.LIB /NOD:MSVCIRT.LIB"
|
|
|
|
|
- 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"
|
|
|
|
|
- cmd += " /FIXED:NO /OPT:REF /STACK:4194304 /INCREMENTAL:NO "
|
|
|
|
|
- cmd += ' /OUT:' + BracketNameWithQuotes(dll)
|
|
|
|
|
- subsystem = GetValueOption(opts, "SUBSYSTEM:")
|
|
|
|
|
- if (subsystem): cmd += " /SUBSYSTEM:" + subsystem
|
|
|
|
|
- if (dll.endswith(".dll")):
|
|
|
|
|
- cmd += ' /IMPLIB:' + GetOutputDir() + '/lib/'+os.path.splitext(os.path.basename(dll))[0]+".lib"
|
|
|
|
|
- for (opt, dir) in LIBDIRECTORIES:
|
|
|
|
|
- if (opt=="ALWAYS") or (opt in opts): cmd += ' /LIBPATH:' + BracketNameWithQuotes(dir)
|
|
|
|
|
- for x in obj:
|
|
|
|
|
- if (x.endswith(".dll")):
|
|
|
|
|
- cmd += ' ' + GetOutputDir() + '/lib/' + os.path.splitext(os.path.basename(x))[0] + ".lib"
|
|
|
|
|
- elif (x.endswith(".lib")):
|
|
|
|
|
- dname = os.path.splitext(dll)[0]+".dll"
|
|
|
|
|
- if (GetOrigExt(x) != ".ilb" and os.path.exists(GetOutputDir()+"/bin/" + os.path.splitext(os.path.basename(x))[0] + ".dll")):
|
|
|
|
|
- exit("Error: in makepanda, specify "+dname+", not "+x)
|
|
|
|
|
- cmd += ' ' + BracketNameWithQuotes(x)
|
|
|
|
|
- elif (x.endswith(".def")):
|
|
|
|
|
- cmd += ' /DEF:' + BracketNameWithQuotes(x)
|
|
|
|
|
- elif (x.endswith(".dat")):
|
|
|
|
|
- pass
|
|
|
|
|
- else: cmd += ' ' + BracketNameWithQuotes(x)
|
|
|
|
|
- if (GetOrigExt(dll)==".exe" and "NOICON" not in opts):
|
|
|
|
|
- cmd += " " + GetOutputDir() + "/tmp/pandaIcon.res"
|
|
|
|
|
- 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 not BOOUSEINTELCOMPILER:
|
|
|
|
|
+ cmd = "link /nologo"
|
|
|
|
|
+ if (is_64):
|
|
|
|
|
+ cmd += " /MACHINE:X64"
|
|
|
|
|
+ if ("MFC" not in opts):
|
|
|
|
|
+ cmd += " /NOD:MFC90.LIB /NOD:MFC80.LIB /NOD:LIBCMT"
|
|
|
|
|
+ cmd += " /NOD:LIBCI.LIB /DEBUG"
|
|
|
|
|
+ cmd += " /nod:libc /nod:libcmtd /nod:atlthunk /nod:atls"
|
|
|
|
|
+ if (GetOrigExt(dll) != ".exe"): cmd += " /DLL"
|
|
|
|
|
+ optlevel = GetOptimizeOption(opts)
|
|
|
|
|
+ if (optlevel==1): cmd += " /MAP /MAPINFO:EXPORTS /NOD:MSVCRT.LIB /NOD:MSVCPRT.LIB /NOD:MSVCIRT.LIB"
|
|
|
|
|
+ if (optlevel==2): cmd += " /MAP:NUL /NOD:MSVCRT.LIB /NOD:MSVCPRT.LIB /NOD:MSVCIRT.LIB"
|
|
|
|
|
+ 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"
|
|
|
|
|
+ cmd += " /FIXED:NO /OPT:REF /STACK:4194304 /INCREMENTAL:NO "
|
|
|
|
|
+ cmd += ' /OUT:' + BracketNameWithQuotes(dll)
|
|
|
|
|
+ subsystem = GetValueOption(opts, "SUBSYSTEM:")
|
|
|
|
|
+ if (subsystem): cmd += " /SUBSYSTEM:" + subsystem
|
|
|
|
|
+ if (dll.endswith(".dll")):
|
|
|
|
|
+ cmd += ' /IMPLIB:' + GetOutputDir() + '/lib/'+os.path.splitext(os.path.basename(dll))[0]+".lib"
|
|
|
|
|
+ for (opt, dir) in LIBDIRECTORIES:
|
|
|
|
|
+ if (opt=="ALWAYS") or (opt in opts): cmd += ' /LIBPATH:' + BracketNameWithQuotes(dir)
|
|
|
|
|
+ for x in obj:
|
|
|
|
|
+ if (x.endswith(".dll")):
|
|
|
|
|
+ cmd += ' ' + GetOutputDir() + '/lib/' + os.path.splitext(os.path.basename(x))[0] + ".lib"
|
|
|
|
|
+ elif (x.endswith(".lib")):
|
|
|
|
|
+ dname = os.path.splitext(dll)[0]+".dll"
|
|
|
|
|
+ if (GetOrigExt(x) != ".ilb" and os.path.exists(GetOutputDir()+"/bin/" + os.path.splitext(os.path.basename(x))[0] + ".dll")):
|
|
|
|
|
+ exit("Error: in makepanda, specify "+dname+", not "+x)
|
|
|
|
|
+ cmd += ' ' + BracketNameWithQuotes(x)
|
|
|
|
|
+ elif (x.endswith(".def")):
|
|
|
|
|
+ cmd += ' /DEF:' + BracketNameWithQuotes(x)
|
|
|
|
|
+ elif (x.endswith(".dat")):
|
|
|
|
|
+ pass
|
|
|
|
|
+ else: cmd += ' ' + BracketNameWithQuotes(x)
|
|
|
|
|
+ if (GetOrigExt(dll)==".exe" and "NOICON" not in opts):
|
|
|
|
|
+ cmd += " " + GetOutputDir() + "/tmp/pandaIcon.res"
|
|
|
|
|
+ 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 /verbose:lib"
|
|
|
|
|
+ if (is_64):
|
|
|
|
|
+ cmd += " /MACHINE:X64"
|
|
|
|
|
+ if ("MFC" not in opts):
|
|
|
|
|
+ cmd += " /NOD:MFC90.LIB /NOD:MFC80.LIB /NOD:LIBCMT"
|
|
|
|
|
+ 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\compiler\lib\ia32"'
|
|
|
|
|
+ if (GetOrigExt(dll) != ".exe"): cmd += " /DLL"
|
|
|
|
|
+ optlevel = GetOptimizeOption(opts)
|
|
|
|
|
+ if (optlevel==1): cmd += " /MAP /MAPINFO:EXPORTS /NOD:MSVCRT.LIB /NOD:MSVCPRT.LIB /NOD:MSVCIRT.LIB"
|
|
|
|
|
+ if (optlevel==2): cmd += " /MAP:NUL /NOD:MSVCRT.LIB /NOD:MSVCPRT.LIB /NOD:MSVCIRT.LIB"
|
|
|
|
|
+ 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"
|
|
|
|
|
+ cmd += " /FIXED:NO /OPT:REF /STACK:4194304 /INCREMENTAL:NO "
|
|
|
|
|
+ cmd += ' /OUT:' + BracketNameWithQuotes(dll)
|
|
|
|
|
+ subsystem = GetValueOption(opts, "SUBSYSTEM:")
|
|
|
|
|
+ if (subsystem): cmd += " /SUBSYSTEM:" + subsystem
|
|
|
|
|
+ if (dll.endswith(".dll")):
|
|
|
|
|
+ cmd += ' /IMPLIB:' + GetOutputDir() + '/lib/'+os.path.splitext(os.path.basename(dll))[0]+".lib"
|
|
|
|
|
+ for (opt, dir) in LIBDIRECTORIES:
|
|
|
|
|
+ if (opt=="ALWAYS") or (opt in opts): cmd += ' /LIBPATH:' + BracketNameWithQuotes(dir)
|
|
|
|
|
+ for x in obj:
|
|
|
|
|
+ if (x.endswith(".dll")):
|
|
|
|
|
+ cmd += ' ' + GetOutputDir() + '/lib/' + os.path.splitext(os.path.basename(x))[0] + ".lib"
|
|
|
|
|
+ elif (x.endswith(".lib")):
|
|
|
|
|
+ dname = os.path.splitext(dll)[0]+".dll"
|
|
|
|
|
+ if (GetOrigExt(x) != ".ilb" and os.path.exists(GetOutputDir()+"/bin/" + os.path.splitext(os.path.basename(x))[0] + ".dll")):
|
|
|
|
|
+ exit("Error: in makepanda, specify "+dname+", not "+x)
|
|
|
|
|
+ cmd += ' ' + BracketNameWithQuotes(x)
|
|
|
|
|
+ elif (x.endswith(".def")):
|
|
|
|
|
+ cmd += ' /DEF:' + BracketNameWithQuotes(x)
|
|
|
|
|
+ elif (x.endswith(".dat")):
|
|
|
|
|
+ pass
|
|
|
|
|
+ else: cmd += ' ' + BracketNameWithQuotes(x)
|
|
|
|
|
+ if (GetOrigExt(dll)==".exe" and "NOICON" not in opts):
|
|
|
|
|
+ cmd += " " + GetOutputDir() + "/tmp/pandaIcon.res"
|
|
|
|
|
+ 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=="LINUX"):
|
|
if (COMPILER=="LINUX"):
|
|
|
cxx = os.environ.get('CXX', 'g++')
|
|
cxx = os.environ.get('CXX', 'g++')
|
|
|
if (GetOrigExt(dll)==".exe"): cmd = cxx + ' -o ' + dll + ' -L' + GetOutputDir() + '/lib -L' + GetOutputDir() + '/tmp -L/usr/X11R6/lib'
|
|
if (GetOrigExt(dll)==".exe"): cmd = cxx + ' -o ' + dll + ' -L' + GetOutputDir() + '/lib -L' + GetOutputDir() + '/tmp -L/usr/X11R6/lib'
|
|
@@ -1535,9 +1683,6 @@ DTOOL_CONFIG=[
|
|
|
("GLOBAL_OPERATOR_NEW_EXCEPTIONS", 'UNDEF', '1'),
|
|
("GLOBAL_OPERATOR_NEW_EXCEPTIONS", 'UNDEF', '1'),
|
|
|
("HAVE_EIGEN", 'UNDEF', 'UNDEF'),
|
|
("HAVE_EIGEN", 'UNDEF', 'UNDEF'),
|
|
|
("LINMATH_ALIGN", '1', '1'),
|
|
("LINMATH_ALIGN", '1', '1'),
|
|
|
- ("MEMORY_HOOK_DO_ALIGN", 'UNDEF', 'UNDEF'),
|
|
|
|
|
- ("USE_MEMORY_DLMALLOC", 'UNDEF', 'UNDEF'),
|
|
|
|
|
- ("USE_MEMORY_PTMALLOC2", 'UNDEF', 'UNDEF'),
|
|
|
|
|
("HAVE_ZLIB", 'UNDEF', 'UNDEF'),
|
|
("HAVE_ZLIB", 'UNDEF', 'UNDEF'),
|
|
|
("HAVE_PNG", 'UNDEF', 'UNDEF'),
|
|
("HAVE_PNG", 'UNDEF', 'UNDEF'),
|
|
|
("HAVE_JPEG", 'UNDEF', 'UNDEF'),
|
|
("HAVE_JPEG", 'UNDEF', 'UNDEF'),
|
|
@@ -5238,7 +5383,6 @@ def ParallelMake(tasklist):
|
|
|
th.start()
|
|
th.start()
|
|
|
# Feed tasks to the workers.
|
|
# Feed tasks to the workers.
|
|
|
tasksqueued = 0
|
|
tasksqueued = 0
|
|
|
- booStopParallel = False
|
|
|
|
|
while (1):
|
|
while (1):
|
|
|
if (tasksqueued < THREADCOUNT):
|
|
if (tasksqueued < THREADCOUNT):
|
|
|
extras = []
|
|
extras = []
|