@ -2,18 +2,54 @@ package("box2d")
set_homepage ( " https://box2d.org " )
set_description ( " A 2D Physics Engine for Games " )
set_license ( " MIT " )
set_urls ( " https://github.com/erincatto/box2d/archive/v$(version).zip " )
add_versions ( " 2.4.0 " , " 6aebbc54c93e367c97e382a57ba12546731dcde51526964c2ab97dec2050f8b9 " )
add_versions ( " 2.4.1 " , " 0cb512dfa5be79ca227cd881b279adee61249c85c8b51caf5aa036b71e943002 " )
add_versions ( " 2.4.2 " , " 593f165015fdd07ea521a851105f1c86ae313c5af0a15968ed95f864417fa8a7 " )
if is_arch ( " x64 " , " x86_64 " , " arm64.* " ) then
add_versions ( " 3.0.0 " , " c2983a30a95037c46c19e42f398de6bc375d6ae87f30e0d0bbabb059ec60f8c0 " )
end
if is_arch ( " x64 " , " x86_64 " ) then
add_configs ( " avx2 " , { description = " Enable AVX2. " , default = false , type = " boolean " } )
end
add_deps ( " cmake " )
if on_check then
on_check ( " windows " , function ( package )
if package : version ( ) : ge ( " 3.0.0 " ) then
assert ( not package : is_arch ( " arm64.* " ) , " package(box2d =>3.0.0) Unsupported architecture. " )
local configs = { languages = " c11 " }
if package : has_tool ( " cc " , " cl " ) then
configs.cflags = " /experimental:c11atomics "
end
assert ( package : has_cincludes ( " stdatomic.h " , { configs = configs } ) ,
" package(box2d >=3.0.0) Requires at least C11 and stdatomic.h " )
end
end )
end
on_install ( " windows " , " linux " , " macosx " , " mingw " , function ( package )
local configs = { }
table.insert ( configs , " -DBOX2D_BUILD_UNIT_TESTS=OFF " )
table.insert ( configs , " -DBOX2D_BUILD_TESTBED=OFF " )
table.insert ( configs , " -DBOX2D_BUILD_DOCS=OFF " )
if package : version ( ) : ge ( " 3.0.0 " ) then
table.insert ( configs , " --compile-no-warning-as-error " )
table.insert ( configs , " -DBOX2D_SANITIZE=OFF " )
table.insert ( configs , " -DBOX2D_SAMPLES=OFF " )
table.insert ( configs , " -DBOX2D_BENCHMARKS=OFF " )
table.insert ( configs , " -DBOX2D_DOCS=OFF " )
table.insert ( configs , " -DBOX2D_PROFILE=OFF " )
table.insert ( configs , " -DBOX2D_VALIDATE=OFF " )
table.insert ( configs , " -DBOX2D_UNIT_TESTS=OFF " )
table.insert ( configs , " -DBOX2D_AVX2= " .. ( package : config ( " avx2 " ) and " ON " or " OFF " ) )
else
table.insert ( configs , " -DBOX2D_BUILD_UNIT_TESTS=OFF " )
table.insert ( configs , " -DBOX2D_BUILD_TESTBED=OFF " )
table.insert ( configs , " -DBOX2D_BUILD_DOCS=OFF " )
end
table.insert ( configs , " -DCMAKE_BUILD_TYPE= " .. ( package : debug ( ) and " Debug " or " Release " ) )
import ( " package.tools.cmake " ) . build ( package , configs , { buildir = " build " } )
if package : is_plat ( " windows " ) then
@ -27,29 +63,42 @@ package("box2d")
end )
on_test ( function ( package )
assert ( package : check_cxxsnippets ( { test = [ [
void test ( int argc , char ** argv ) {
b2World world ( b2Vec2 ( 0.0 f , - 10.0 f ) ) ;
b2BodyDef bodyDef ;
bodyDef.type = b2_dynamicBody ;
bodyDef.position . Set ( 0.0 f , 4.0 f ) ;
b2Body * body = world.CreateBody ( & bodyDef ) ;
b2PolygonShape dynamicBox ;
dynamicBox.SetAsBox ( 1.0 f , 1.0 f ) ;
b2FixtureDef fixtureDef ;
fixtureDef.shape = & dynamicBox ;
fixtureDef.density = 1.0 f ;
fixtureDef.friction = 0.3 f ;
body -> CreateFixture ( & fixtureDef ) ;
float timeStep = 1.0 f / 60.0 f ;
int32 velocityIterations = 6 ;
int32 positionIterations = 2 ;
for ( int32 i = 0 ; i < 60 ; ++ i )
{
if package : version ( ) : ge ( " 3.0.0 " ) then
assert ( package : check_csnippets ( { test = [ [
void test ( int argc , char ** argv ) {
b2WorldDef worldDef = b2DefaultWorldDef ( ) ;
b2WorldId worldId = b2CreateWorld ( & worldDef ) ;
b2BodyDef bodyDef = b2DefaultBodyDef ( ) ;
b2BodyId bodyId = b2CreateBody ( worldId , & bodyDef ) ;
b2Polygon box = b2MakeBox ( 1.0 f , 1.0 f ) ;
b2ShapeDef shapeDef = b2DefaultShapeDef ( ) ;
b2CreatePolygonShape ( bodyId , & shapeDef , & box ) ;
float timeStep = 1.0 f / 60.0 f ;
int subStepCount = 4 ;
b2World_Step ( worldId , timeStep , subStepCount ) ;
b2Vec2 position = b2Body_GetPosition ( bodyId ) ;
b2Rot rotation = b2Body_GetRotation ( bodyId ) ;
b2DestroyWorld ( worldId ) ;
}
] ] } , { configs = { languages = " c11 " } , includes = " box2d/box2d.h " } ) )
else
assert ( package : check_cxxsnippets ( { test = [ [
void test ( int argc , char ** argv ) {
b2World world ( b2Vec2 ( 0.0 f , - 10.0 f ) ) ;
b2BodyDef bodyDef ;
b2Body * body = world.CreateBody ( & bodyDef ) ;
b2PolygonShape box ;
box.SetAsBox ( 1.0 f , 1.0 f ) ;
b2FixtureDef fixtureDef ;
fixtureDef.shape = & box ;
body -> CreateFixture ( & fixtureDef ) ;
float timeStep = 1.0 f / 60.0 f ;
int32 velocityIterations = 6 ;
int32 positionIterations = 2 ;
world.Step ( timeStep , velocityIterations , positionIterations ) ;
b2Vec2 position = body -> GetPosition ( ) ;
float angle = body -> GetAngle ( ) ;
}
}
] ] } , { configs = { languages = " c++11 " } , includes = " box2d/box2d.h " } ) )
] ] } , { configs = { languages = " c++11 " } , includes = " box2d/box2d.h " } ) )
end
end )