fixed #1642: Adding tools for generating jsbinding codes on windows.

This commit is contained in:
James Chen 2013-01-06 18:01:44 +08:00
parent bfb8c1f048
commit be1be2771b
3 changed files with 199 additions and 0 deletions

View File

@ -0,0 +1,135 @@
[cocos2d-x]
# the prefix to be added to the generated functions. You might or might not use this in your own
# templates
prefix = cocos2dx
# create a target namespace (in javascript, this would create some code like the equiv. to `ns = ns || {}`)
# all classes will be embedded in that namespace
target_namespace = cc
clang_headers =
clang_flags = -x c++
cocos_headers = -I%(cocosdir)s/cocos2dx/include -I%(cocosdir)s/cocos2dx/platform -I%(cocosdir)s/cocos2dx/platform/win32 -I%(cocosdir)s/cocos2dx/platform/third_party/win32/OGLES -I%(cocosdir)s/cocos2dx -I%(cocosdir)s/cocos2dx/kazmath/include -I%(cocosdir)s/extensions -I%(cocosdir)s/extensions/CCBReader -I%(cocosdir)s/external/chipmunk/include/chipmunk
cocos_flags = -DWIN32 -D_WINDOWS -DCOCOS2D_JAVASCRIPT -DCC_ENABLE_CHIPMUNK_INTEGRATION=1
cxxgenerator_headers = -I%(cxxgeneratordir)s/targets/spidermonkey/common
# extra arguments for clang
extra_arguments = %(vs_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(vs_flags)s %(clang_flags)s %(cocos_flags)s
# what headers to parse
headers = %(cocosdir)s/cocos2dx/include/cocos2d.h %(cocosdir)s/CocosDenshion/include/SimpleAudioEngine.h %(cocosdir)s/extensions/cocos-ext.h
# what classes to produce code for. You can use regular expressions here. When testing the regular
# expression, it will be enclosed in "^$", like this: "^CCMenu*$".
classes = CCSprite.* CCScene CCNode CCDirector CCLayer.* CCMenu.* CCTouch CC.*Action.* CCMove.* CCRotate.* CCBlink.* CCTint.* CCSequence CCRepeat.* CCFade.* CCEase.* CCScale.* CCTransition.* CCSpawn CCSequence CCAnimat.* CCFlip.* CCDelay.* CCSkew.* CCJump.* CCPlace.* CCShow.* CCProgress.* CCPointArray CCToggleVisibility.* CCHide CCParticle.* CCLabel.* CCAtlas.* CCTextureCache.* CCTexture2D CCCardinal.* CCCatmullRom.* CCParallaxNode CCTileMap.* CCTMX.* CCCallFunc CCRenderTexture CCGridAction CCGrid3DAction CCShaky3D CCWaves3D CCFlipX3D CCFlipY3D CCSpeed CCActionManager CCBReader.* CCBAnimationManager.* CCSet SimpleAudioEngine CCScheduler CCTimer CCOrbit.* CCFollow.* CCBezier.* CCCardinalSpline.* CCControlButton.* CCCamera.* CCDrawNode CC.*3D$ CCLiquid$ CCWaves$ CCShuffleTiles$ CCTurnOffTiles$ CCSplit.* CCTwirl$
# what should we skip? in the format ClassName::[function function]
# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also
# regular expressions, they will not be surrounded by "^$". If you want to skip a whole class, just
# add a single "*" as functions. See bellow for several examples. A special class name is "*", which
# will apply to all class names. This is a convenience wildcard to be able to skip similar named
# functions from all classes.
skip = CCNode::[.*Transform convertToWindowSpace getChildren ^setPosition$ getGrid setGLServerState description getShaderProgram getUserObject .*UserData getGLServerState unscheduleAllSelectors],
CCSprite::[getQuad displayFrame getBlendFunc ^setPosition$ setBlendFunc setSpriteBatchNode getSpriteBatchNode],
CCSpriteBatchNode::[getBlendFunc setBlendFunc],
CCMotionStreak::[getBlendFunc setBlendFunc],
CCAtlasNode::[getBlendFunc setBlendFunc],
CCParticleBatchNode::[getBlendFunc setBlendFunc],
CCLayerColor::[getBlendFunc setBlendFunc],
CCParticleSystem::[getBlendFunc setBlendFunc],
CCDrawNode::[getBlendFunc setBlendFunc drawPolygon],
CCDirector::[getAccelerometer getKeypadDispatcher getTouchDispatcher setWatcherCallbackFun getOpenGLView getProjection],
CCLayer.*::[didAccelerate (g|s)etBlendFunc],
CCMenu.*::[.*Target getSubItems create initWithItems alignItemsInRows alignItemsInColumns],
CCMenuItem.*::[create],
CCRGBAProtocol::[*],
CCCopying::[*],
CC.*Protocol::[*],
CC.*Delegate::[*],
CCPoolManager::[*],
CCTexture2D::[initWithPVRTCData addPVRTCImage releaseData setTexParameters initWithData keepData],
CCSet::[begin end],
CCIMEDispatcher::[*],
CCSAXParser::[*],
CCThread::[*],
CCProfiler::[*],
CCProfilingTimer::[*],
CCCallFunc::[create],
CCSAXDelegator::[*],
CCColor3bObject::[*],
CCTouchDispatcher::[*],
EGLTouchDelegate::[*],
CCScriptEngineManager::[*],
CCKeypadHandler::[*],
CCInvocation::[*],
CCEGLView::[*],
CCSchedulerScriptHandlerEntry::[*],
CCSize::[*],
CCPoint::[*],
CCRect::[*],
CCSize::[*],
CCString::[*],
CCDictionary::[*],
CCArray::[*],
CCRange::[*],
CCNotificationObserver::[*],
CCListView.*::[*],
CCImage::[initWithString initWithImageData],
CCSequence::[create],
CCSpawn::[create],
CCAnimation::[create],
CCGrid3DAction::[create actionWith.*],
CCTiledGrid3DAction::[create actionWith.*],
CCTMXMapInfo::[startElement endElement textHandler],
CCParticleSystemQuad::[postStep setBatchNode draw setTexture$ setTotalParticles updateQuadWithParticle setupIndices listenBackToForeground initWithTotalParticles particleWithFile node],
CCLayerMultiplex::[create layerWith.* initWithLayers],
CCCatmullRom.*::[create actionWithDuration],
CCBezier.*::[create actionWithDuration],
CCBReader::[^CCBReader$ addOwnerCallbackName isJSControlled readByte getCCBMemberVariableAssigner readFloat getCCBSelectorResolver toLowerCase lastPathComponent deletePathExtension endsWith concat getResolutionScale getAnimatedProperties readBool readInt addOwnerCallbackNode addDocumentCallbackName readCachedString readNodeGraphFromData addDocumentCallbackNode getLoadedSpriteSheet initWithData readFileWithCleanUp getOwner$ readNodeGraphFromFile createSceneWithNodeGraphFromFile getAnimationManagers$ setAnimationManagers],
CCBAnimationManager::[setAnimationCompletedCallback],
CCCardinalSpline.*::[create actionWithDuration setPoints],
CCScheduler::[pause resume unscheduleAllSelectorsForTarget],
CCTextureCache::[addPVRTCImage],
CCTimer::[getSelector],
CC.*Loader$::[*],
*::[copyWith.* onEnter.* onExit.* description getObjectType .*RGB.* .*HSV.*]
rename_functions = CCDirector::[sharedDirector=getInstance],
CCSpriteFrameCache::[sharedSpriteFrameCache=getInstance addSpriteFramesWithFile=addSpriteFrames spriteFrameByName=getSpriteFrame isFlipX=isFlippedX isFlipY=isFlippedY],
CCMenuItemFont::[setFontNameObj=setFontName setFontSizeObj=setFontSize fontSizeObj=fontSize fontNameObj=fontName],
CCProgressTimer::[setReverseProgress=setReverseDirection],
CCTextureCache::[sharedTextureCache=getInstance],
CCAnimation::[addSpriteFrameWithFileName=addSpriteFrameWithFile],
CCAnimationCache::[sharedAnimationCache=getInstance addAnimationsWithFile=addAnimations animationByName=getAnimation removeAnimationByName=removeAnimation],
CCLayerGradient::[initWithColor=init],
CCLayerColor::[initWithColor=init],
CCNode::[boundingBox=getBoundingBox removeFromParentAndCleanup=removeFromParent removeAllChildrenWithCleanup=removeAllChildren],
CCLabelAtlas::[create=_create],
CCTMXLayer::[tileAt=getTileAt tileGIDAt=getTileGIDAt propertyNamed=getProperty],
CCTileMapAtlas::[tileAt=getTileAt],
CCSprite::[isFlipX=isFlippedX isFlipY=isFlippedY],
CCTouch::[getID=getId],
CCScheduler::[unscheduleAllSelectorsForTarget=unscheduleAllCallbacksForTarget unscheduleAll=unscheduleAllCallbacks],
SimpleAudioEngine::[sharedEngine=getInstance preloadBackgroundMusic=preloadMusic setBackgroundMusicVolume=setMusicVolume getBackgroundMusicVolume=getMusicVolume playBackgroundMusic=playMusic stopBackgroundMusic=stopMusic pauseBackgroundMusic=pauseMusic resumeBackgroundMusic=resumeMusic rewindBackgroundMusic=rewindMusic isBackgroundMusicPlaying=isMusicPlaying willPlayBackgroundMusic=willPlayMusic],
CCCamera.*::[setUpXYZ=setUp getUpXYZ=getUp setEyeXYZ=setEye getEyeXYZ=getEye setCenterXYZ=setCenter getCenterXYZ=getCenter],
CCBReader::[getAnimationManager=getActionManager setAnimationManager=setActionManager],
CCTMXTiledMap::[layerNamed=getLayer objectGroupNamed=getObjectGroup propertyNamed=getProperty],
CCUserDefault::[sharedUserDefault=getInstance]
rename_classes = CCParticleSystemQuad::CCParticleSystem,
SimpleAudioEngine::AudioEngine,
CCBReader::CC_Reader,
CCBAnimationManager::CCAnimationManager
# for all class names, should we remove something when registering in the target VM?
remove_prefix = CC
# objects for which there will be no "parent" lookup
base_objects = CCNode CCDirector SimpleAudioEngine
# classes that create no constructor
# CCSet is special and we will use a hand-written constructor
abstract_classes = CCDirector CCSpriteFrameCache CCTransitionEaseScene CCSet SimpleAudioEngine

View File

@ -0,0 +1,63 @@
@echo off
echo./*
echo.* Check VC++ environment...
echo.*/
echo.
set PATH=%PATH%;%cd%
if defined VS110COMNTOOLS (
set VSTOOLS="%VS110COMNTOOLS%"
) else if defined VS100COMNTOOLS (
set VSTOOLS="%VS100COMNTOOLS%"
)
set VSTOOLS=%VSTOOLS:"=%
set "VSTOOLS=%VSTOOLS:\=/%"
set VSVARS="%VSTOOLS%vsvars32.bat"
if not defined VSVARS (
echo Can't find VC2010 or VC2012 installed!
goto ERROR
)
set VS_ROOT=%VSTOOLS%/../..
:: set vs compilation environment
call %VSVARS%
set COCOS2DX_ROOT=%cd%/../..
set "COCOS2DX_ROOT=%COCOS2DX_ROOT:\=/%"
set CXX_GENERATOR_ROOT=%COCOS2DX_ROOT%/tools/cxx-generator
set "CXX_GENERATOR_ROOT=%CXX_GENERATOR_ROOT:\=/%"
:: write userconf.ini
set _CONF_INI_FILE=%cd%\userconf.ini
if exist %_CONF_INI_FILE% del /Q %_CONF_INI_FILE%
echo
echo generating userconf.ini...
echo ---
echo [DEFAULT] > %_CONF_INI_FILE%
echo cocosdir=%COCOS2DX_ROOT% >> %_CONF_INI_FILE%
echo cxxgeneratordir=%CXX_GENERATOR_ROOT% >> %_CONF_INI_FILE%
echo vs_headers="%VS_ROOT%/VC/include" >> %_CONF_INI_FILE%
echo vs_flags= >> %_CONF_INI_FILE%
echo ---
:: Generate bindings for cocos2dx
echo Generating bindings for cocos2dx...
python %CXX_GENERATOR_ROOT%/generator.py cocos2dx-win32.ini -s cocos2d-x -o %COCOS2DX_ROOT%/scripting/javascript/bindings/generated
echo Generating bindings successfully.
:ERROR
pause

View File

@ -0,0 +1 @@
bdb8f0397dc43d13bcc1b5c6bee3ff132c6b230b