Skip to content

Commit d24abfa

Browse files
wyasudaWataru Yasudalinoal
authored
iOSビルド対応 (Synesthesias#143)
* first try * second try * 3rd try * tesselator.h use OpenGL * use tesselator_dummy for iOS * fix .xcodeproj errors * fix libz.a path * fix libxml2 build parameters * set FBXSDK_LIB_PATH_SUFFIXES for ios * use fbx_writer_dummy for iOS * skip fbx,zlib and libxml2 for ios * readme追記 * update libcitygml * edit DLLUtil.cs for iOS * use public for DllName * delete mesh_extractor_dummy.cpp * Update submodule --------- Co-authored-by: Wataru Yasuda <yasuda@WatarunoMacBook-Air.local> Co-authored-by: linoal <1321932+linoal@users.noreply.github.com>
1 parent f981e91 commit d24abfa

File tree

10 files changed

+165
-92
lines changed

10 files changed

+165
-92
lines changed

3rdparty/glTF-SDK/CMakeLists.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@ if(UNIX AND NOT APPLE)
55
link_libraries(stdc++fs)
66
endif()
77

8-
option(ENABLE_UNIT_TESTS "ENABLE_UNIT_TESTS" ON)
8+
if(NOT CMAKE_SYSTEM_NAME STREQUAL "iOS")
9+
option(ENABLE_UNIT_TESTS "ENABLE_UNIT_TESTS" ON)
10+
else()
11+
option(ENABLE_UNIT_TESTS "ENABLE_UNIT_TESTS" OFF)
12+
endif()
913
if(ENABLE_UNIT_TESTS)
1014
enable_testing()
1115
endif()

CMakeLists.txt

Lines changed: 97 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -68,16 +68,18 @@ endif()
6868
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
6969
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
7070

71-
## ユニットテスト
72-
add_subdirectory("test")
73-
74-
# dependencies
75-
## Xerces-C をビルドします。
76-
### libcitygmlのFindXercesを通すために全てキャッシュ化
77-
set(BUILD_SHARED_LIBS false CACHE BOOL "" FORCE)
78-
add_subdirectory("3rdparty/xerces-c")
79-
set(XERCESC_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/xerces-c/src" "${libplateau_BINARY_DIR}/3rdparty/xerces-c/src" CACHE STRING "" FORCE)
80-
set(XERCESC_LIBRARY xerces-c CACHE STRING "" FORCE)
71+
if(NOT CMAKE_SYSTEM_NAME STREQUAL "iOS")
72+
## ユニットテスト
73+
add_subdirectory("test")
74+
75+
# dependencies
76+
## Xerces-C をビルドします。
77+
### libcitygmlのFindXercesを通すために全てキャッシュ化
78+
set(BUILD_SHARED_LIBS false CACHE BOOL "" FORCE)
79+
add_subdirectory("3rdparty/xerces-c")
80+
set(XERCESC_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/xerces-c/src" "${libplateau_BINARY_DIR}/3rdparty/xerces-c/src" CACHE STRING "" FORCE)
81+
set(XERCESC_LIBRARY xerces-c CACHE STRING "" FORCE)
82+
endif()
8183

8284
## libcitygml をビルドします。
8385
### TODO: GDAL Support
@@ -93,78 +95,80 @@ set(LIBCITYGML_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/libcitygml/sources/
9395
add_subdirectory("3rdparty/glTF-SDK")
9496
set(GLTFSDK_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/glTF-SDK/glTF-SDK/GLTFSDK/Inc")
9597

96-
# FBX SDK 以下のディレクトリで debug と release のどちらを利用するか決めます。
97-
# debug なら debug/*-md.lib を使い、release なら release/*-mt.lib を使います。
98-
if(${CMAKE_BUILD_TYPE} STREQUAL "Debug")
99-
set(FBXSDK_LAST_DIR_NAME "debug")
100-
set(FBXSDK_MT_OR_MD "md")
101-
else()
102-
set(FBXSDK_LAST_DIR_NAME "release")
103-
set(FBXSDK_MT_OR_MD "mt")
104-
endif()
105-
106-
## zlib(FBX SDKの依存関係)
107-
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/zlib")
108-
add_subdirectory("3rdparty/zlib")
109-
set(ZLIB_INCLUDE_DIR "${CMAKE_BINARY_DIR}/3rdparty/zlib")
110-
111-
if(UNIX)
112-
set(ZLIB_LIBRARY "${CMAKE_BINARY_DIR}/3rdparty/zlib/libz.a" CACHE STRING "" FORCE)
113-
elseif(WIN32)
114-
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
115-
set(ZLIB_LIBRARY "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/FBX/2020.3.1/lib/win64/${FBXSDK_LAST_DIR_NAME}/zlib-${FBXSDK_MT_OR_MD}.lib" CACHE STRING "" FORCE)
116-
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
117-
set(ZLIB_LIBRARY "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/FBX/2020.3.1/lib/win32/${FBXSDK_LAST_DIR_NAME}/zlib-${FBXSDK_MT_OR_MD}.lib" CACHE STRING "" FORCE)
98+
if(NOT CMAKE_SYSTEM_NAME STREQUAL "iOS")
99+
# FBX SDK 以下のディレクトリで debug と release のどちらを利用するか決めます。
100+
# debug なら debug/*-md.lib を使い、release なら release/*-mt.lib を使います。
101+
if(${CMAKE_BUILD_TYPE} STREQUAL "Debug")
102+
set(FBXSDK_LAST_DIR_NAME "debug")
103+
set(FBXSDK_MT_OR_MD "md")
104+
else()
105+
set(FBXSDK_LAST_DIR_NAME "release")
106+
set(FBXSDK_MT_OR_MD "mt")
118107
endif()
119-
endif(UNIX)
120-
121-
## libxml2(FBX SDKの依存関係)
122-
if(UNIX)
123-
# FBX SDKのLinux, macOS向けライブラリではiconvが必要
124-
set(LIBXML2_WITH_ICONV ON CACHE BOOL "" FORCE)
125-
elseif(WIN32)
126-
set(LIBXML2_WITH_ICONV OFF CACHE BOOL "" FORCE)
127-
endif()
128-
set(LIBXML2_WITH_LZMA OFF CACHE BOOL "" FORCE)
129-
set(LIBXML2_WITH_PYTHON OFF CACHE BOOL "" FORCE)
130-
set(LIBXML2_WITH_TESTS OFF CACHE BOOL "" FORCE)
131-
132-
add_subdirectory("3rdparty/libxml2")
133108

134-
## FBX SDK
135-
set(FBXSDK_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/FBX/2020.3.1/include")
109+
## zlib(FBX SDKの依存関係)
110+
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/zlib")
111+
add_subdirectory("3rdparty/zlib")
112+
set(ZLIB_INCLUDE_DIR "${CMAKE_BINARY_DIR}/3rdparty/zlib")
136113

137-
if(UNIX)
138-
if (APPLE)
139-
set(FBXSDK_LIB_PATH_SUFFIXES mac)
140-
else()
114+
if(UNIX)
115+
set(ZLIB_LIBRARY "${CMAKE_BINARY_DIR}/3rdparty/zlib/libz.a" CACHE STRING "" FORCE)
116+
elseif(WIN32)
141117
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
142-
set(FBXSDK_LIB_PATH_SUFFIXES linux64)
118+
set(ZLIB_LIBRARY "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/FBX/2020.3.1/lib/win64/${FBXSDK_LAST_DIR_NAME}/zlib-${FBXSDK_MT_OR_MD}.lib" CACHE STRING "" FORCE)
143119
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
144-
set(FBXSDK_LIB_PATH_SUFFIXES linux32)
120+
set(ZLIB_LIBRARY "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/FBX/2020.3.1/lib/win32/${FBXSDK_LAST_DIR_NAME}/zlib-${FBXSDK_MT_OR_MD}.lib" CACHE STRING "" FORCE)
145121
endif()
122+
endif(UNIX)
123+
124+
## libxml2(FBX SDKの依存関係)
125+
if(UNIX)
126+
# FBX SDKのLinux, macOS向けライブラリではiconvが必要
127+
set(LIBXML2_WITH_ICONV ON CACHE BOOL "" FORCE)
128+
elseif(WIN32)
129+
set(LIBXML2_WITH_ICONV OFF CACHE BOOL "" FORCE)
146130
endif()
147-
elseif(WIN32)
148-
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
149-
set(FBXSDK_LIB_PATH_SUFFIXES win64)
150-
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
151-
set(FBXSDK_LIB_PATH_SUFFIXES win32)
131+
set(LIBXML2_WITH_LZMA OFF CACHE BOOL "" FORCE)
132+
set(LIBXML2_WITH_PYTHON OFF CACHE BOOL "" FORCE)
133+
set(LIBXML2_WITH_TESTS OFF CACHE BOOL "" FORCE)
134+
135+
add_subdirectory("3rdparty/libxml2")
136+
137+
## FBX SDK
138+
set(FBXSDK_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/FBX/2020.3.1/include")
139+
140+
if(UNIX)
141+
if (APPLE)
142+
set(FBXSDK_LIB_PATH_SUFFIXES mac)
143+
else()
144+
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
145+
set(FBXSDK_LIB_PATH_SUFFIXES linux64)
146+
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
147+
set(FBXSDK_LIB_PATH_SUFFIXES linux32)
148+
endif()
149+
endif()
150+
elseif(WIN32)
151+
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
152+
set(FBXSDK_LIB_PATH_SUFFIXES win64)
153+
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
154+
set(FBXSDK_LIB_PATH_SUFFIXES win32)
155+
endif()
152156
endif()
153-
endif()
154157

155-
set(FBXSDK_LIB_PATH_SUFFIXES "${FBXSDK_LIB_PATH_SUFFIXES}/${FBXSDK_LAST_DIR_NAME}")
156-
157-
find_library(FBXSDK_LIBRARIES
158-
NAMES
159-
libfbxsdk-md libfbxsdk-mt libfbxsdk.a
160-
PATHS
161-
${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/FBX/2020.3.1/lib
162-
PATH_SUFFIXES
163-
${FBXSDK_LIB_PATH_SUFFIXES}
164-
NO_DEFAULT_PATH
165-
NO_CMAKE_FIND_ROOT_PATH
166-
)
167-
message("${FBXSDK_LIB_PATH_SUFFIXES} , ${FBXSDK_LIBRARIES}")
158+
set(FBXSDK_LIB_PATH_SUFFIXES "${FBXSDK_LIB_PATH_SUFFIXES}/${FBXSDK_LAST_DIR_NAME}")
159+
160+
find_library(FBXSDK_LIBRARIES
161+
NAMES
162+
libfbxsdk-md libfbxsdk-mt libfbxsdk.a
163+
PATHS
164+
${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/FBX/2020.3.1/lib
165+
PATH_SUFFIXES
166+
${FBXSDK_LIB_PATH_SUFFIXES}
167+
NO_DEFAULT_PATH
168+
NO_CMAKE_FIND_ROOT_PATH
169+
)
170+
message("${FBXSDK_LIB_PATH_SUFFIXES} , ${FBXSDK_LIBRARIES}")
171+
endif()
168172

169173
# cpp-httplib
170174
add_subdirectory("3rdparty/cpp-httplib")
@@ -175,12 +179,15 @@ add_subdirectory("3rdparty/openssl-cmake")
175179

176180
# libplateau をビルドします。
177181
add_subdirectory("src")
178-
## Examples
179-
add_subdirectory("examples/log_skipped_elements")
180-
add_subdirectory("examples/export_obj")
181-
add_subdirectory("examples/export_gltf")
182-
add_subdirectory("examples/export_fbx")
183-
add_subdirectory("examples/https_mock_test")
182+
183+
if(NOT CMAKE_SYSTEM_NAME STREQUAL "iOS")
184+
## Examples
185+
add_subdirectory("examples/log_skipped_elements")
186+
add_subdirectory("examples/export_obj")
187+
add_subdirectory("examples/export_gltf")
188+
add_subdirectory("examples/export_fbx")
189+
add_subdirectory("examples/https_mock_test")
190+
endif()
184191

185192
# python
186193
option(BUILD_PYTHON "Build python wrapper" OFF)
@@ -190,3 +197,14 @@ endif(BUILD_PYTHON)
190197

191198
# Copy data for testing
192199
file(COPY data/ DESTINATION "${CMAKE_BINARY_DIR}/data")
200+
201+
if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
202+
set_target_properties(ssl PROPERTIES
203+
XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO"
204+
XCODE_ATTRIBUTE_ENABLE_BITCODE "NO"
205+
)
206+
set_target_properties(crypto PROPERTIES
207+
XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO"
208+
XCODE_ATTRIBUTE_ENABLE_BITCODE "NO"
209+
)
210+
endif()

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,15 @@ Windows, Mac, Linux でのテストと成果物のダウンロードができま
162162
- .cppファイル内での利用は可
163163
- パスの受け渡しは string(中身はutf8形式) で行い、`.cpp`内で `auto path = std::filesystem::u8path(path_str)` で path に直すのが良い
164164

165+
# トラブルシューティング
166+
- **Q.** 手元のマシンではユニットテストが通るのに、CIサーバーの自動テストが通りません。
167+
- **A.** 手元のマシンとCIサーバーでの設定の差によるバグを疑ってみましょう。例えば:
168+
- Windowsの設定で 言語の設定 → 管理用言語の設定 → システムロケールの変更 について、 CIサーバーでは英語(米国)ですが、
169+
手元のマシンでは日本語になっているケースです。これはパスなどの文字コードに影響します。
170+
パスの文字列をUTF8で扱えていれば、システムロケールが英語でも日本語でも日本語を含むパス文字列に対応します。
171+
しかし、パス文字列をUTF8で扱えていなければ、システムロケールが英語のとき、日本語名を含むパス文字列は文字化けします。
172+
173+
165174
# ライセンス
166175
- libplateau本体
167176
- 未定

src/CMakeLists.txt

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,23 @@
11
add_compile_definitions(LIBPLATEAU_BUILD)
22

3-
43
add_library(plateau SHARED "")
5-
target_link_libraries(plateau PUBLIC citygml xerces-c GLTFSDK crypto ssl "${FBXSDK_LIBRARIES}" LibXml2 "${ZLIB_LIBRARY}")
6-
target_include_directories(plateau PUBLIC "${CMAKE_SOURCE_DIR}/include" "${LIBCITYGML_INCLUDE}" "${GLTFSDK_INCLUDE}" "${CPPHTTPLIB_INCLUDE}" "${FBXSDK_INCLUDE}")
4+
if(NOT CMAKE_SYSTEM_NAME STREQUAL "iOS")
5+
target_link_libraries(plateau PUBLIC citygml xerces-c GLTFSDK crypto ssl "${FBXSDK_LIBRARIES}" LibXml2 "${ZLIB_LIBRARY}" c_wrapper)
6+
target_include_directories(plateau PUBLIC "${CMAKE_SOURCE_DIR}/include" "${LIBCITYGML_INCLUDE}" "${GLTFSDK_INCLUDE}" "${CPPHTTPLIB_INCLUDE}" "${FBXSDK_INCLUDE}")
7+
else()
8+
target_link_libraries(plateau PUBLIC
9+
"citygml"
10+
"GLTFSDK"
11+
"crypto"
12+
"ssl"
13+
"c_wrapper"
14+
)
15+
set_target_properties(plateau PROPERTIES
16+
FRAMEWORK TRUE
17+
MACOSX_FRAMEWORK_IDENTIFIER jp.synesthesias.libplateau
18+
)
19+
target_include_directories(plateau PUBLIC "${CMAKE_SOURCE_DIR}/include" "${LIBCITYGML_INCLUDE}" "${GLTFSDK_INCLUDE}" "${CPPHTTPLIB_INCLUDE}")
20+
endif()
721

822
set_target_properties(plateau PROPERTIES RUNTIME_OUTPUT_DIRECTORY
923
${LIBPLATEAU_BINARY_DIR})
@@ -16,4 +30,3 @@ add_subdirectory(basemap)
1630
add_subdirectory(c_wrapper)
1731
add_subdirectory(dataset)
1832
add_subdirectory(network)
19-
target_link_libraries(plateau PUBLIC c_wrapper)

src/mesh_writer/CMakeLists.txt

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
1-
target_sources(plateau PRIVATE
2-
"obj_writer.cpp"
3-
"gltf_writer.cpp"
4-
"fbx_writer.cpp"
1+
if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
2+
target_sources(plateau PRIVATE
3+
"obj_writer.cpp"
4+
"gltf_writer.cpp"
5+
"fbx_writer_dummy.cpp"
56
)
7+
else()
8+
target_sources(plateau PRIVATE
9+
"obj_writer.cpp"
10+
"gltf_writer.cpp"
11+
"fbx_writer.cpp"
12+
)
13+
endif()
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#include <stdexcept>
2+
#include <filesystem>
3+
#include <cassert>
4+
5+
#include <plateau/mesh_writer/fbx_writer.h>
6+
7+
//#include <fbxsdk.h>
8+
#include <set>
9+
10+
namespace fs = std::filesystem;
11+
12+
namespace plateau::meshWriter {
13+
bool FbxWriter::write(const std::string& fbx_file_path, const plateau::polygonMesh::Model& model, const FbxWriteOptions& options) {
14+
return false;
15+
}
16+
}

src/polygon_mesh/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ target_sources(plateau PRIVATE
77
"grid_merger.cpp"
88
"polygon_mesh_utils.cpp"
99
"mesh_merger.cpp"
10-
)
10+
)

src/polygon_mesh/mesh_extractor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include <plateau/polygon_mesh/mesh_extractor.h>
22
#include <plateau/polygon_mesh/primary_city_object_types.h>
3-
#include "citygml/tesselator.h"
3+
#include "citygml/vecs.hpp"
44
#include "citygml/texture.h"
55
#include "../src/polygon_mesh/grid_merger.h"
66
#include "citygml/cityobject.h"

wrappers/csharp/LibPLATEAU.NET/CSharpPLATEAU/Interop/DLLUtil.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,12 @@ internal enum APIResult
2222
/// </summary>
2323
internal static class DLLUtil
2424
{
25-
public const string DllName = "plateau";
25+
#if UNITY_IOS && !UNITY_EDITOR_OSX
26+
public const string DllName = "__Internal";
27+
#else
28+
public const string DllName = "plateau";
29+
#endif
30+
2631
/// <summary>
2732
/// NativeMethods で頻出するメソッドの型を delegate で登録しておくことで、delegate で呼び出せるようにします。
2833
/// ただし、すべてのメソッドがこのような型をしているわけではないので、対応していないメソッドもあります。

0 commit comments

Comments
 (0)