mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-11 02:02:22 +00:00
Fixes for WASM build (some temporary)
This commit is contained in:
@@ -119,10 +119,6 @@ if(MINIMAL_BUILD)
|
||||
set(USD_SUPPORT OFF)
|
||||
endif()
|
||||
|
||||
if(NOT BUILD_SHARED_LIBS)
|
||||
message(FATAL_ERROR "BUILD_SHARED_LIBS=OFF is not supported. Configure with -DBUILD_SHARED_LIBS=ON.")
|
||||
endif()
|
||||
|
||||
if((BUILD_CONVERT OR BUILD_GEOMSERVER OR BUILD_IFCPYTHON) AND(NOT BUILD_IFCGEOM))
|
||||
message(STATUS "'IfcGeom' is required with current outputs")
|
||||
set(BUILD_IFCGEOM ON)
|
||||
|
||||
+9
-4
@@ -591,6 +591,10 @@ def run_cmake(arg1, cmake_args: "list[str]", cmake_dir: Union[str, None] = None,
|
||||
f"-DBUILD_SHARED_LIBS={OFF_ON[not BUILD_STATIC]}",
|
||||
)
|
||||
|
||||
module_flags = []
|
||||
if "wasm" in flags:
|
||||
module_flags.append(f"-DCMAKE_MODULE_LINKER_FLAGS={os.environ['LDFLAGS']}")
|
||||
|
||||
run(
|
||||
[
|
||||
*wasm,
|
||||
@@ -600,6 +604,7 @@ def run_cmake(arg1, cmake_args: "list[str]", cmake_dir: Union[str, None] = None,
|
||||
*cmake_args,
|
||||
f"-DCMAKE_BUILD_TYPE={BUILD_CFG}",
|
||||
f"-DCMAKE_SHARED_LINKER_FLAGS={os.environ['LDFLAGS']}",
|
||||
*module_flags
|
||||
],
|
||||
cwd=cwd,
|
||||
)
|
||||
@@ -1341,7 +1346,7 @@ os.makedirs(ifcos_build_dir, exist_ok=True)
|
||||
cmake_args = [
|
||||
"-DUSE_MMAP=OFF",
|
||||
"-DBUILD_EXAMPLES=OFF",
|
||||
"-DBUILD_SHARED_LIBS=ON",
|
||||
"-DBUILD_SHARED_LIBS=" + OFF_ON[not BUILD_STATIC],
|
||||
"-DGLTF_SUPPORT=ON",
|
||||
"-DBoost_NO_BOOST_CMAKE=On",
|
||||
"-DCREATE_BUNDLE=On",
|
||||
@@ -1394,9 +1399,9 @@ elif "occ" in targets:
|
||||
occ_library_dir = f"{DEPS_DIR}/install/oce-{OCE_VERSION}/lib"
|
||||
cmake_args.extend(["-DOCC_INCLUDE_DIR=" + occ_include_dir, "-DOCC_LIBRARY_DIR=" + occ_library_dir])
|
||||
|
||||
if "manifold" in targets:
|
||||
cmake_args_prefix_path.append(f"{DEPS_DIR}/install/manifold-{MANIFOLD_VERSION}")
|
||||
cmake_args.append("-DWITH_MANIFOLD=On")
|
||||
# if "manifold" in targets:
|
||||
# cmake_args_prefix_path.append(f"{DEPS_DIR}/install/manifold-{MANIFOLD_VERSION}")
|
||||
# cmake_args.append("-DWITH_MANIFOLD=On")
|
||||
|
||||
if "OpenCOLLADA" in targets:
|
||||
# pcre is a dependency of OpenCOLLADA, but since we `find_package`,
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ source:
|
||||
|
||||
build:
|
||||
script: |
|
||||
BUILD_CFG=Release python nix/build-all.py -v --wasm --py313
|
||||
CFLAGS="-O0 -g" CXXFLAGS="-O0 -g" LDFLAGS="-O0 -g" IFCOS_SCHEMAS=4 BUILD_CFG=Debug python nix/build-all.py -v --wasm --py313
|
||||
|
||||
about:
|
||||
home: http://ifcopenshell.org
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
if (NOT WASM_BUILD)
|
||||
|
||||
foreach(schema ${SCHEMA_VERSIONS})
|
||||
add_library(geometry_serializer_ifc${schema} SHARED Serialization.cpp plugin.cpp)
|
||||
target_link_libraries(geometry_serializer_ifc${schema} PRIVATE plugin geometry_serializer IfcGeom IfcParse ${OpenCASCADE_LIBRARIES})
|
||||
@@ -10,3 +12,5 @@ foreach(schema ${SCHEMA_VERSIONS})
|
||||
list(APPEND geometry_serializer_libraries geometry_serializer_ifc${schema})
|
||||
endforeach()
|
||||
set(geometry_serializer_libraries ${geometry_serializer_libraries} PARENT_SCOPE)
|
||||
|
||||
endif()
|
||||
|
||||
@@ -2,6 +2,12 @@ message(STATUS "GEOMETRY_KERNELS ${GEOMETRY_KERNELS}")
|
||||
|
||||
set(kernel_plugin_runtime_dir "${CMAKE_BINARY_DIR}/ifcgeom/$<CONFIG>")
|
||||
|
||||
if (NOT WASM_BUILD)
|
||||
# wasm-ld (?) trips up on multiple defined symbols. IfcParse already brings
|
||||
# in plugin so we skip it here.
|
||||
set(plugin_when_not_wasm plugin)
|
||||
endif()
|
||||
|
||||
foreach(kernel ${GEOMETRY_KERNELS})
|
||||
string(TOUPPER ${kernel} KERNEL_UPPER)
|
||||
file(GLOB IFCGEOM_H_FILES ${kernel}/*.h)
|
||||
@@ -16,6 +22,14 @@ foreach(kernel ${GEOMETRY_KERNELS})
|
||||
|
||||
set(KERNEL_TARGET "geometry_kernel_${kernel}")
|
||||
add_library(${KERNEL_TARGET} SHARED ${IFCGEOM_FILES})
|
||||
|
||||
if (WASM_BUILD)
|
||||
target_link_options(
|
||||
${KERNEL_TARGET}
|
||||
PRIVATE "SHELL:-s -s SIDE_MODULE=1"
|
||||
)
|
||||
endif()
|
||||
|
||||
set_target_properties(${KERNEL_TARGET} PROPERTIES
|
||||
COMPILE_FLAGS "-DIFC_GEOMLIBRARY_EXPORTS"
|
||||
OUTPUT_NAME "geometry.kernel.${kernel}"
|
||||
@@ -23,7 +37,7 @@ foreach(kernel ${GEOMETRY_KERNELS})
|
||||
LIBRARY_OUTPUT_DIRECTORY "${kernel_plugin_runtime_dir}"
|
||||
)
|
||||
list(APPEND kernel_libraries ${KERNEL_TARGET})
|
||||
target_link_libraries(${KERNEL_TARGET} PRIVATE plugin IfcGeom ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen)
|
||||
target_link_libraries(${KERNEL_TARGET} PRIVATE ${plugin_when_not_wasm} IfcGeom ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen)
|
||||
|
||||
install(TARGETS ${KERNEL_TARGET})
|
||||
|
||||
@@ -32,6 +46,14 @@ foreach(kernel ${GEOMETRY_KERNELS})
|
||||
|
||||
set(KERNEL_TARGET_SIMPLE "${KERNEL_TARGET}_simple")
|
||||
add_library(${KERNEL_TARGET_SIMPLE} SHARED ${IFCGEOM_FILES})
|
||||
|
||||
if (WASM_BUILD)
|
||||
target_link_options(
|
||||
${KERNEL_TARGET_SIMPLE}
|
||||
PRIVATE "SHELL:-s -s SIDE_MODULE=1"
|
||||
)
|
||||
endif()
|
||||
|
||||
set_target_properties(${KERNEL_TARGET_SIMPLE} PROPERTIES
|
||||
COMPILE_FLAGS "-DIFC_GEOMLIBRARY_EXPORTS -DIFOPSH_SIMPLE_KERNEL -DCGAL_HAS_THREADS"
|
||||
OUTPUT_NAME "geometry.kernel.cgalsimple"
|
||||
@@ -39,11 +61,20 @@ foreach(kernel ${GEOMETRY_KERNELS})
|
||||
LIBRARY_OUTPUT_DIRECTORY "${kernel_plugin_runtime_dir}"
|
||||
)
|
||||
list(APPEND kernel_libraries ${KERNEL_TARGET_SIMPLE})
|
||||
target_link_libraries(${KERNEL_TARGET_SIMPLE} PRIVATE plugin IfcGeom ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen)
|
||||
target_link_libraries(${KERNEL_TARGET_SIMPLE} PRIVATE ${plugin_when_not_wasm} IfcGeom ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen)
|
||||
install(TARGETS ${KERNEL_TARGET_SIMPLE})
|
||||
elseif(${kernel} STREQUAL "opencascade")
|
||||
target_link_libraries(${KERNEL_TARGET} PRIVATE ${OpenCASCADE_LIBRARIES})
|
||||
if (WASM_BUILD)
|
||||
# exclude due to duplicate symbols tripping up wasm-ld
|
||||
set(OCCT_LIBS_FILTERED ${OpenCASCADE_LIBRARIES})
|
||||
list(FILTER OCCT_LIBS_FILTERED EXCLUDE REGEX "(^|;)TKXMesh($|;)")
|
||||
target_link_libraries(${KERNEL_TARGET} PRIVATE ${OCCT_LIBS_FILTERED})
|
||||
# message(FATAL_ERROR "OCCT_LIBS_FILTERED ${OCCT_LIBS_FILTERED}")
|
||||
else()
|
||||
target_link_libraries(${KERNEL_TARGET} PRIVATE ${OpenCASCADE_LIBRARIES})
|
||||
endif()
|
||||
|
||||
if (NOT WASM_BUILD)
|
||||
foreach(tree_backend brep trianglebvh)
|
||||
set(TREE_TARGET "geometry_tree_opencascade_${tree_backend}")
|
||||
add_library(${TREE_TARGET} SHARED
|
||||
@@ -60,6 +91,7 @@ foreach(kernel ${GEOMETRY_KERNELS})
|
||||
target_link_libraries(${TREE_TARGET} PRIVATE plugin IfcGeom geometry_kernel_opencascade ${OpenCASCADE_LIBRARIES} Eigen3::Eigen)
|
||||
install(TARGETS ${TREE_TARGET})
|
||||
endforeach()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
install(FILES ${IFCGEOM_H_FILES}
|
||||
|
||||
@@ -2,6 +2,12 @@ find_package(Eigen3 REQUIRED)
|
||||
|
||||
set(mapping_plugin_runtime_dir "${CMAKE_BINARY_DIR}/ifcgeom/$<CONFIG>")
|
||||
|
||||
if (NOT WASM_BUILD)
|
||||
# wasm-ld (?) trips up on multiple defined symbols. IfcParse already brings
|
||||
# in plugin so we skip it here.
|
||||
set(plugin_when_not_wasm plugin)
|
||||
endif()
|
||||
|
||||
foreach(schema ${SCHEMA_VERSIONS})
|
||||
file(GLOB IFCGEOM_I_FILES *.i)
|
||||
file(GLOB IFCGEOM_H_FILES *.h)
|
||||
@@ -15,7 +21,15 @@ foreach(schema ${SCHEMA_VERSIONS})
|
||||
RUNTIME_OUTPUT_DIRECTORY "${mapping_plugin_runtime_dir}"
|
||||
LIBRARY_OUTPUT_DIRECTORY "${mapping_plugin_runtime_dir}"
|
||||
)
|
||||
target_link_libraries(geometry_mapping_ifc${schema} PRIVATE plugin IfcGeom IfcParse Eigen3::Eigen ${OpenCASCADE_LIBRARIES})
|
||||
|
||||
if (WASM_BUILD)
|
||||
target_link_options(
|
||||
geometry_mapping_ifc${schema}
|
||||
PRIVATE "SHELL:-s -s SIDE_MODULE=1"
|
||||
)
|
||||
endif()
|
||||
|
||||
target_link_libraries(geometry_mapping_ifc${schema} PRIVATE ${plugin_when_not_wasm} IfcGeom IfcParse Eigen3::Eigen)
|
||||
|
||||
list(APPEND mapping_libraries geometry_mapping_ifc${schema})
|
||||
|
||||
|
||||
@@ -311,11 +311,11 @@ std::string character_decoder<Reader>::get(size_t& ptr) {
|
||||
return s;
|
||||
}
|
||||
|
||||
template class IFC_PARSE_API character_decoder<file_reader<full_buffer_impl>>;
|
||||
template class IFC_PARSE_API character_decoder<file_reader<paged_file_impl>>;
|
||||
template class IFC_PARSE_API character_decoder<file_reader<pushed_sequential_impl>>;
|
||||
template class IFC_PARSE_API ifcopenshell::character_decoder<file_reader<full_buffer_impl>>;
|
||||
template class IFC_PARSE_API ifcopenshell::character_decoder<file_reader<paged_file_impl>>;
|
||||
template class IFC_PARSE_API ifcopenshell::character_decoder<file_reader<pushed_sequential_impl>>;
|
||||
#ifdef USE_MMAP
|
||||
template class IFC_PARSE_API character_decoder<file_reader<mmap_impl>>;
|
||||
template class IFC_PARSE_API ifcopenshell::character_decoder<file_reader<mmap_impl>>;
|
||||
#endif
|
||||
|
||||
character_encoder::character_encoder(const std::string& input)
|
||||
|
||||
@@ -412,16 +412,6 @@ public:
|
||||
|
||||
void build_inverses_(const express::Base& entity);
|
||||
|
||||
// @nb this does not support id assignment
|
||||
template <typename T, typename... Ts>
|
||||
T create(Ts&&... args) {
|
||||
T t = create(&T::Class()).template as<T>();
|
||||
if constexpr (sizeof...(Ts) > 0) {
|
||||
t.initialize(std::forward<Ts>(args)...);
|
||||
}
|
||||
return t;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T create(int instance_id = -1) {
|
||||
return create(&T::Class(), instance_id).template as<T>();
|
||||
|
||||
@@ -411,11 +411,11 @@ token spf_lexer<Reader>::next() {
|
||||
}
|
||||
}
|
||||
|
||||
template class IFC_PARSE_API spf_lexer<file_reader<full_buffer_impl>>;
|
||||
template class IFC_PARSE_API spf_lexer<file_reader<paged_file_impl>>;
|
||||
template class IFC_PARSE_API spf_lexer<file_reader<pushed_sequential_impl>>;
|
||||
template class IFC_PARSE_API ifcopenshell::spf_lexer<file_reader<full_buffer_impl>>;
|
||||
template class IFC_PARSE_API ifcopenshell::spf_lexer<file_reader<paged_file_impl>>;
|
||||
template class IFC_PARSE_API ifcopenshell::spf_lexer<file_reader<pushed_sequential_impl>>;
|
||||
#ifdef USE_MMAP
|
||||
template class IFC_PARSE_API spf_lexer<file_reader<mmap_impl>>;
|
||||
template class IFC_PARSE_API ifcopenshell::spf_lexer<file_reader<mmap_impl>>;
|
||||
#endif
|
||||
|
||||
bool token::is_operator() {
|
||||
|
||||
@@ -4,12 +4,18 @@ set(geometry_serializer_plugin_runtime_dir "${CMAKE_BINARY_DIR}/serializers/$<CO
|
||||
file(GLOB SERIALIZERS_H_FILES *.h)
|
||||
file(GLOB SERIALIZERS_S_H_FILES schema_dependent/*.h)
|
||||
|
||||
if (NOT WASM_BUILD)
|
||||
# wasm-ld (?) trips up on multiple defined symbols. IfcParse already brings
|
||||
# in plugin so we skip it here.
|
||||
set(plugin_when_not_wasm plugin)
|
||||
endif()
|
||||
|
||||
function(add_document_serializer_plugin target output_name)
|
||||
cmake_parse_arguments(PLUGIN "" "" "SOURCES;LIBRARIES;DEFINITIONS" ${ARGN})
|
||||
|
||||
add_library(${target} SHARED ${PLUGIN_SOURCES})
|
||||
target_compile_definitions(${target} PRIVATE SERIALIZERS_EXPORTS BOOST_DLL_USE_STD_FS ${PLUGIN_DEFINITIONS})
|
||||
target_link_libraries(${target} PRIVATE plugin IfcGeom IfcParse ${PLUGIN_LIBRARIES})
|
||||
target_link_libraries(${target} PRIVATE ${plugin_when_not_wasm} IfcGeom IfcParse ${PLUGIN_LIBRARIES})
|
||||
set_target_properties(${target} PROPERTIES
|
||||
OUTPUT_NAME "${output_name}"
|
||||
RUNTIME_OUTPUT_DIRECTORY "${document_serializer_plugin_runtime_dir}"
|
||||
@@ -18,6 +24,13 @@ function(add_document_serializer_plugin target output_name)
|
||||
|
||||
list(APPEND document_serializer_libraries ${target})
|
||||
set(document_serializer_libraries ${document_serializer_libraries} PARENT_SCOPE)
|
||||
|
||||
if (WASM_BUILD)
|
||||
target_link_options(
|
||||
${target}
|
||||
PRIVATE "SHELL:-s -s SIDE_MODULE=1"
|
||||
)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(add_geometry_serializer_plugin target output_name)
|
||||
@@ -25,7 +38,7 @@ function(add_geometry_serializer_plugin target output_name)
|
||||
|
||||
add_library(${target} SHARED ${PLUGIN_SOURCES})
|
||||
target_compile_definitions(${target} PRIVATE SERIALIZERS_EXPORTS BOOST_DLL_USE_STD_FS ${PLUGIN_DEFINITIONS})
|
||||
target_link_libraries(${target} PRIVATE plugin IfcGeom IfcParse ${PLUGIN_LIBRARIES})
|
||||
target_link_libraries(${target} PRIVATE ${plugin_when_not_wasm} IfcGeom IfcParse ${PLUGIN_LIBRARIES})
|
||||
if(WITH_PROJ)
|
||||
find_package(proj REQUIRED)
|
||||
target_compile_definitions(${target} PRIVATE "WITH_PROJ")
|
||||
@@ -42,6 +55,14 @@ function(add_geometry_serializer_plugin target output_name)
|
||||
|
||||
list(APPEND geometry_serializer_libraries ${target})
|
||||
set(geometry_serializer_libraries ${geometry_serializer_libraries} PARENT_SCOPE)
|
||||
|
||||
if (WASM_BUILD)
|
||||
target_link_options(
|
||||
${target}
|
||||
PRIVATE "SHELL:-s -s SIDE_MODULE=1"
|
||||
)
|
||||
endif()
|
||||
|
||||
endfunction()
|
||||
|
||||
if(WITH_ROCKSDB)
|
||||
@@ -50,13 +71,15 @@ endif()
|
||||
|
||||
add_subdirectory(schema_dependent)
|
||||
|
||||
if (NOT WASM_BUILD)
|
||||
set(ttl_geometry_serializer_libraries)
|
||||
if(WITH_OPENCASCADE)
|
||||
set(ttl_geometry_serializer_libraries geometry_kernel_opencascade ${OpenCASCADE_LIBRARIES})
|
||||
endif()
|
||||
add_geometry_serializer_plugin(geometry_serializer_ttl "geometry.ttl" SOURCES geometry_ttl_plugin.cpp TtlWktSerializer.cpp LIBRARIES ${ttl_geometry_serializer_libraries})
|
||||
endif()
|
||||
|
||||
add_geometry_serializer_plugin(geometry_serializer_obj "geometry.obj" SOURCES geometry_obj_plugin.cpp WavefrontObjSerializer.cpp)
|
||||
add_geometry_serializer_plugin(geometry_serializer_ttl "geometry.ttl" SOURCES geometry_ttl_plugin.cpp TtlWktSerializer.cpp LIBRARIES ${ttl_geometry_serializer_libraries})
|
||||
|
||||
if(OPENCOLLADA_FOUND)
|
||||
add_geometry_serializer_plugin(geometry_serializer_dae "geometry.dae" SOURCES geometry_dae_plugin.cpp ColladaSerializer.cpp LIBRARIES OpenCOLLADA::OpenCOLLADA DEFINITIONS WITH_OPENCOLLADA)
|
||||
@@ -70,7 +93,7 @@ if(USD_SUPPORT)
|
||||
add_geometry_serializer_plugin(geometry_serializer_usd "geometry.usd" SOURCES geometry_usd_plugin.cpp USDSerializer.cpp LIBRARIES pxr::USD)
|
||||
endif()
|
||||
|
||||
if(WITH_OPENCASCADE)
|
||||
if(WITH_OPENCASCADE AND NOT WASM_BUILD)
|
||||
set(opencascade_geometry_serializer_libraries geometry_kernel_opencascade ${OpenCASCADE_LIBRARIES})
|
||||
add_geometry_serializer_plugin(geometry_serializer_stp "geometry.stp" SOURCES geometry_stp_plugin.cpp OpenCascadeBasedSerializer.cpp LIBRARIES ${opencascade_geometry_serializer_libraries})
|
||||
add_geometry_serializer_plugin(geometry_serializer_igs "geometry.igs" SOURCES geometry_igs_plugin.cpp OpenCascadeBasedSerializer.cpp LIBRARIES ${opencascade_geometry_serializer_libraries})
|
||||
|
||||
Reference in New Issue
Block a user