TDM-GCC64(MinGW-w64) 処理系で bullet をビルドする CMake/ExternalProject の記述例
概説
Bullet を TDM-GCC64 や mingw-w64 でビルドするには一手間必要だった。本項ではその一手間について解説し、 bullet を用いたい何らかのプロジェクトに対し CMake/ExternalProject により対応する方法を示す。
必要な一手間
Bullet のソース一式を github から回収して CMake しようとするとオプションをライブラリーのビルドに必要な最小限としてもソースコードへのパッチ(または翻訳時のエラーの無効化)が必要となる。
Bullet のソースディレクトリー src/Bullet3Serialize/Bullet2FileLoader/
に含まれる b3DNA.cpp
と b3File.cpp
についてほぼ同様のソース部分として、 long nr
の宣言に対してポインター型の cp
から nr = (long)cp;
のようにポインターサイズのオブジェクトを long
サイズのオブジェクトへ押し込んでしまうことになるコードが存在する。このコード部分について TDM-GCC64 などでも問題が起こらないようパッチする。
パッチは下記に具体的に例示し、適用は CMake/ExternalProject 機能の PATCH_COMMAND から patch
コマンドにて行い CMake 処理で Bullet のソースコード一式の取得、パッチ、ビルドまでを簡単に対応する。
CMake/ExternalProject 記述例
bullet.cmake
include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
link_directories(${CMAKE_CURRENT_BINARY_DIR}/lib)
include(ExternalProject)
set(bullet_cxx_flags "${CMAKE_CXX_FLAGS} -DUSE_ADDR64 -DBT_NO_PROFILE")
ExternalProject_Add(external_bullet
GIT_REPOSITORY [email protected]:bulletphysics/bullet3.git
PATCH_COMMAND COMMAND patch -p0 < ${CMAKE_CURRENT_SOURCE_DIR}/patch/bullet.patch
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/external/bullet
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}
CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_CXX_FLAGS=${bullet_cxx_flags}
-DBUILD_CPU_DEMOS=off
-DUSE_GLUT=off
-DBUILD_OPENGL3_DEMOS=off
-DBUILD_BULLET2_DEMOS=off
-DBUILD_EXTRAS=off
-DBUILD_UNIT_TESTS=off
)
patch/bullet.patch
diff --git src/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp src/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp
index 6b332f5..d9b5784 100644
--- src/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp
+++ src/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp
@@ -348,7 +348,7 @@ static int name_is_array(char* name, int* dim1, int* dim2) {
void bDNA::init(char *data, int len, bool swap)
{
int *intPtr=0;short *shtPtr=0;
- char *cp = 0;int dataLen =0;long nr=0;
+ char *cp = 0;int dataLen =0;size_t nr=0;
intPtr = (int*)data;
/*
@@ -390,7 +390,7 @@ void bDNA::init(char *data, int len, bool swap)
{
- nr= (long)cp;
+ nr= (size_t)cp;
//long mask=3;
nr= ((nr+3)&~3)-nr;
while (nr--)
@@ -426,7 +426,7 @@ void bDNA::init(char *data, int len, bool swap)
}
{
- nr= (long)cp;
+ nr= (size_t)cp;
// long mask=3;
nr= ((nr+3)&~3)-nr;
while (nr--)
diff --git src/Bullet3Serialize/Bullet2FileLoader/b3File.cpp src/Bullet3Serialize/Bullet2FileLoader/b3File.cpp
index 01d3a69..4666927 100644
--- src/Bullet3Serialize/Bullet2FileLoader/b3File.cpp
+++ src/Bullet3Serialize/Bullet2FileLoader/b3File.cpp
@@ -391,7 +391,7 @@ void bFile::swapDNA(char* ptr)
char* data = &ptr[20];
// void bDNA::init(char *data, int len, bool swap)
int *intPtr=0;short *shtPtr=0;
- char *cp = 0;int dataLen =0;long nr=0;
+ char *cp = 0;int dataLen =0;size_t nr=0;
intPtr = (int*)data;
/*
@@ -429,7 +429,7 @@ void bFile::swapDNA(char* ptr)
{
- nr= (long)cp;
+ nr= (size_t)cp;
//long mask=3;
nr= ((nr+3)&~3)-nr;
while (nr--)
@@ -466,7 +466,7 @@ void bFile::swapDNA(char* ptr)
}
{
- nr= (long)cp;
+ nr= (size_t)cp;
// long mask=3;
nr= ((nr+3)&~3)-nr;
while (nr--)
Reference
include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
link_directories(${CMAKE_CURRENT_BINARY_DIR}/lib)
include(ExternalProject)
set(bullet_cxx_flags "${CMAKE_CXX_FLAGS} -DUSE_ADDR64 -DBT_NO_PROFILE")
ExternalProject_Add(external_bullet
GIT_REPOSITORY [email protected]:bulletphysics/bullet3.git
PATCH_COMMAND COMMAND patch -p0 < ${CMAKE_CURRENT_SOURCE_DIR}/patch/bullet.patch
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/external/bullet
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}
CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_CXX_FLAGS=${bullet_cxx_flags}
-DBUILD_CPU_DEMOS=off
-DUSE_GLUT=off
-DBUILD_OPENGL3_DEMOS=off
-DBUILD_BULLET2_DEMOS=off
-DBUILD_EXTRAS=off
-DBUILD_UNIT_TESTS=off
)
diff --git src/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp src/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp
index 6b332f5..d9b5784 100644
--- src/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp
+++ src/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp
@@ -348,7 +348,7 @@ static int name_is_array(char* name, int* dim1, int* dim2) {
void bDNA::init(char *data, int len, bool swap)
{
int *intPtr=0;short *shtPtr=0;
- char *cp = 0;int dataLen =0;long nr=0;
+ char *cp = 0;int dataLen =0;size_t nr=0;
intPtr = (int*)data;
/*
@@ -390,7 +390,7 @@ void bDNA::init(char *data, int len, bool swap)
{
- nr= (long)cp;
+ nr= (size_t)cp;
//long mask=3;
nr= ((nr+3)&~3)-nr;
while (nr--)
@@ -426,7 +426,7 @@ void bDNA::init(char *data, int len, bool swap)
}
{
- nr= (long)cp;
+ nr= (size_t)cp;
// long mask=3;
nr= ((nr+3)&~3)-nr;
while (nr--)
diff --git src/Bullet3Serialize/Bullet2FileLoader/b3File.cpp src/Bullet3Serialize/Bullet2FileLoader/b3File.cpp
index 01d3a69..4666927 100644
--- src/Bullet3Serialize/Bullet2FileLoader/b3File.cpp
+++ src/Bullet3Serialize/Bullet2FileLoader/b3File.cpp
@@ -391,7 +391,7 @@ void bFile::swapDNA(char* ptr)
char* data = &ptr[20];
// void bDNA::init(char *data, int len, bool swap)
int *intPtr=0;short *shtPtr=0;
- char *cp = 0;int dataLen =0;long nr=0;
+ char *cp = 0;int dataLen =0;size_t nr=0;
intPtr = (int*)data;
/*
@@ -429,7 +429,7 @@ void bFile::swapDNA(char* ptr)
{
- nr= (long)cp;
+ nr= (size_t)cp;
//long mask=3;
nr= ((nr+3)&~3)-nr;
while (nr--)
@@ -466,7 +466,7 @@ void bFile::swapDNA(char* ptr)
}
{
- nr= (long)cp;
+ nr= (size_t)cp;
// long mask=3;
nr= ((nr+3)&~3)-nr;
while (nr--)
Author And Source
この問題について(TDM-GCC64(MinGW-w64) 処理系で bullet をビルドする CMake/ExternalProject の記述例), 我々は、より多くの情報をここで見つけました https://qiita.com/usagi/items/ab0475d60d0246c41a76著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .