@@ -22,7 +22,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2222SOFTWARE.
2323]]
2424
25- cmake_minimum_required (VERSION 3.5...4.0.2 )
25+ cmake_minimum_required (VERSION 3.5...4.2.0 )
2626
2727function (set_output_directories DIR)
2828 set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${DIR} PARENT_SCOPE)
@@ -39,37 +39,54 @@ include(CheckLinkerFlag)
3939set (BUILD_DEBUG OFF CACHE BOOL "Turn on to build a debug release" )
4040option (DISTRIBUTE_SOURCE "Include source code in addon" ON )
4141option (WITH_MIXBOX "Compile with Mixbox pigment mixing feature" OFF )
42- set (LIBRARY_SUFFIX "" CACHE STRING "Optional suffix to add to the end of the library name" )
4342
4443# Configure Project
4544project (bl_flip_fluids)
4645set (CMAKE_BUILD_TYPE Release)
46+
4747if (APPLE )
4848 set (MACOSX_DEPLOYMENT_TARGET 10.10) # OS X Yosemite
4949endif ()
5050
5151# Set Version Info
52- set (FLUIDENGINE_VERSION_TYPE_IS_STABLE_BUILD TRUE )
53- set (FLUIDENGINE_VERSION_MAJOR 1)
54- set (FLUIDENGINE_VERSION_MINOR 8)
55- set (FLUIDENGINE_VERSION_REVISION 4)
56- set (FLUIDENGINE_VERSION_DATE_YYYY "2025" )
57- set (FLUIDENGINE_VERSION_DATE_MM "07" )
58- set (FLUIDENGINE_VERSION_DATE_DD "14" )
59-
60- if (FLUIDENGINE_VERSION_TYPE_IS_STABLE_BUILD)
61- set (FLUIDENGINE_VERSION_TYPE_LABEL "Demo" )
62- set (FLUIDENGINE_VERSION_TYPE_IS_STABLE_BUILD_PYTHON "True" )
52+ set (FFENGINE_VERSION_TYPE_IS_STABLE_BUILD TRUE )
53+ set (FFENGINE_VERSION_MAJOR 1)
54+ set (FFENGINE_VERSION_MINOR 8)
55+ set (FFENGINE_VERSION_REVISION 5)
56+ set (FFENGINE_VERSION_DATE_YYYY "2025" )
57+ set (FFENGINE_VERSION_DATE_MM "11" )
58+ set (FFENGINE_VERSION_DATE_DD "18" )
59+ set (FFENGINE_VERSION_SUPPORT_LICENSE_TYPE "Demo" )
60+ set (FFENGINE_VERSION_RELEASE_TYPE "Release" )
61+
62+ # Format Version Info
63+ if (FFENGINE_VERSION_TYPE_IS_STABLE_BUILD)
64+ if (FFENGINE_VERSION_IS_FULL_RELEASE)
65+ else ()
66+ endif ()
67+ set (FFENGINE_VERSION_TYPE_LABEL ${FFENGINE_VERSION_RELEASE_TYPE} )
68+ set (FFENGINE_VERSION_TYPE_IS_STABLE_BUILD_PYTHON "True" )
6369else ()
64- set (FLUIDENGINE_VERSION_TYPE_LABEL "Experimental" )
65- set (FLUIDENGINE_VERSION_TYPE_IS_STABLE_BUILD_PYTHON "False" )
70+ set (FFENGINE_VERSION_TYPE_LABEL "Experimental" )
71+ set (FFENGINE_VERSION_TYPE_IS_STABLE_BUILD_PYTHON "False" )
6672endif ()
6773
68- set (FLUIDENGINE_VERSION_DATE "${FLUIDENGINE_VERSION_DATE_YYYY} -${FLUIDENGINE_VERSION_DATE_MM} -${FLUIDENGINE_VERSION_DATE_DD} " )
69- set (FLUIDENGINE_VERSION_LABEL "${FLUIDENGINE_VERSION_MAJOR} .${FLUIDENGINE_VERSION_MINOR} .${FLUIDENGINE_VERSION_REVISION} ${FLUIDENGINE_VERSION_TYPE_LABEL} ${FLUIDENGINE_VERSION_DATE} " )
74+ set (FFENGINE_VERSION_DATE "${FFENGINE_VERSION_DATE_YYYY} -${FFENGINE_VERSION_DATE_MM} -${FFENGINE_VERSION_DATE_DD} " )
75+ set (FFENGINE_VERSION_LABEL "\
76+ ${FFENGINE_VERSION_MAJOR} .${FFENGINE_VERSION_MINOR} .${FFENGINE_VERSION_REVISION} \
77+ ${FFENGINE_VERSION_SUPPORT_LICENSE_TYPE} \
78+ ${FFENGINE_VERSION_TYPE_LABEL} \
79+ ${FFENGINE_VERSION_DATE} \
80+ " )
81+
82+ string (RANDOM LENGTH 1 ALPHABET "123456789" RANDOM_DIGITS_1)
83+ string (RANDOM LENGTH 2 ALPHABET "0123456789" RANDOM_DIGITS_2)
84+ string (RANDOM LENGTH 1 ALPHABET "ABCEGJKLMNPRTVXY" RANDOM_LETTERS_1)
85+ string (RANDOM LENGTH 1 ALPHABET "ABCEGJKLMNPRTVWXYZ" RANDOM_LETTERS_2)
86+ set (FFENGINE_VERSION_SUPPORT_LICENSE_ID "${RANDOM_DIGITS_1}${RANDOM_DIGITS_2}${RANDOM_LETTERS_1}${RANDOM_LETTERS_2} " )
7087
7188# Begin Build
72- message (STATUS "FLIP Fluids version ${FLUIDENGINE_VERSION_LABEL } " )
89+ message (STATUS "FLIP Fluids Version ${FFENGINE_VERSION_LABEL } " )
7390if (BUILD_DEBUG)
7491 message (STATUS "Building in debug mode" )
7592else ()
@@ -78,11 +95,11 @@ endif()
7895
7996# Configure Mixbox
8097if (WITH_MIXBOX)
81- set (FLUIDENGINE_IS_MIXBOX_SUPPORTED "True" )
98+ set (FFENGINE_IS_MIXBOX_SUPPORTED "True" )
8299 add_definitions (-DWITH_MIXBOX=1)
83100 set (MIXBOX_SOURCE_CPP "src/engine/mixbox/mixbox.cpp" )
84101else ()
85- set (FLUIDENGINE_IS_MIXBOX_SUPPORTED "False" )
102+ set (FFENGINE_IS_MIXBOX_SUPPORTED "False" )
86103 add_definitions (-DWITH_MIXBOX=0)
87104 set (MIXBOX_SOURCE_CPP "src/engine/mixbox/mixbox_stub.cpp" )
88105endif ()
@@ -100,6 +117,9 @@ elseif(MINGW)
100117 set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--enable-stdcall-fixup" )
101118elseif (APPLE )
102119 set (CMAKE_MACOSX_RPATH ON )
120+ set (CMAKE_SKIP_BUILD_RPATH FALSE )
121+ set (CMAKE_INSTALL_RPATH "@loader_path" )
122+ set (CMAKE_BUILD_RPATH "@loader_path" )
103123 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -std=c++17 -Wall -Wno-return-type-c-linkage" )
104124
105125 # Older compiler versions may not support or require -lstdc++fs linker flag
@@ -108,6 +128,12 @@ elseif(APPLE)
108128 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lstdc++fs" )
109129 endif ()
110130elseif (UNIX AND NOT APPLE )
131+ set (CMAKE_SKIP_BUILD_RPATH FALSE )
132+ set (CMAKE_BUILD_WITH_INSTALL_RPATH FALSE )
133+ set (CMAKE_INSTALL_RPATH "$ORIGIN" )
134+ set (CMAKE_BUILD_RPATH "$ORIGIN" )
135+ set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE )
136+
111137 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -lstdc++fs -D_GLIBCXX_USE_NANOSLEEP -fopenmp -O3 -Wall -fPIC -pthread" )
112138 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include ${PROJECT_SOURCE_DIR} /src/engine/glibc_version_header/force_link_glibc_2.5.h" )
113139else ()
@@ -143,67 +169,109 @@ configure_file(
143169 "${PROJECT_SOURCE_DIR} /src/addon/utils/installation_utils.py"
144170)
145171
172+ # Sources
173+ set (SOURCES_FLUID_ENGINE_LIBRARY
174+ src/engine/aabb.cpp
175+ src/engine/collision.cpp
176+ src/engine/diffuseparticlesimulation.cpp
177+ src/engine/fluidmaterialgrid.cpp
178+ src/engine/fluidsimulation.cpp
179+ src/engine/forcefield.cpp
180+ src/engine/forcefieldcurve.cpp
181+ src/engine/forcefieldgrid.cpp
182+ src/engine/forcefieldpoint.cpp
183+ src/engine/forcefieldsurface.cpp
184+ src/engine/forcefieldutils.cpp
185+ src/engine/forcefieldvolume.cpp
186+ src/engine/gridindexkeymap.cpp
187+ src/engine/gridindexvector.cpp
188+ src/engine/gridutils.cpp
189+ src/engine/influencegrid.cpp
190+ src/engine/interpolation.cpp
191+ src/engine/levelsetsolver.cpp
192+ src/engine/levelsetutils.cpp
193+ src/engine/logfile.cpp
194+ src/engine/macvelocityfield.cpp
195+ src/engine/meshfluidsource.cpp
196+ src/engine/meshlevelset.cpp
197+ src/engine/meshobject.cpp
198+ src/engine/meshutils.cpp
199+ src/engine/noisegenerationutils.cpp
200+ src/engine/particlelevelset.cpp
201+ src/engine/particlemaskgrid.cpp
202+ src/engine/particlemesher.cpp
203+ src/engine/particlesheeter.cpp
204+ src/engine/particlesystem.cpp
205+ src/engine/polygonizer3d.cpp
206+ src/engine/pressuresolver.cpp
207+ src/engine/scalarfield.cpp
208+ src/engine/spatialpointgrid.cpp
209+ src/engine/stopwatch.cpp
210+ src/engine/threadutils.cpp
211+ src/engine/trianglemesh.cpp
212+ src/engine/turbulencefield.cpp
213+ src/engine/velocityadvector.cpp
214+ src/engine/versionutils.cpp
215+ src/engine/viscositysolver.cpp
216+ src/engine/vmath.cpp
217+ src/engine/c_bindings/cbindings.cpp
218+ src/engine/c_bindings/fluidsimulation_c.cpp
219+ src/engine/c_bindings/forcefield_c.cpp
220+ src/engine/c_bindings/forcefieldcurve_c.cpp
221+ src/engine/c_bindings/forcefieldgrid_c.cpp
222+ src/engine/c_bindings/forcefieldpoint_c.cpp
223+ src/engine/c_bindings/forcefieldsurface_c.cpp
224+ src/engine/c_bindings/forcefieldvolume_c.cpp
225+ src/engine/c_bindings/meshfluidsource_c.cpp
226+ src/engine/c_bindings/meshobject_c.cpp
227+ src/engine/c_bindings/mixbox_c.cpp
228+ ${MIXBOX_SOURCE_CPP}
229+ )
230+
231+ set (SOURCES_ALEMBIC_IO
232+ src/alembic_io/src/alembic_io.cpp
233+ src/alembic_io/src/c_bindings/alembic_io_c.cpp
234+ )
235+
236+ set (SOURCES_ALEMBIC_IO_LIBRARY
237+ ${SOURCES_FLUID_ENGINE_LIBRARY}
238+ ${SOURCES_ALEMBIC_IO}
239+ )
240+
146241# Configure Output Directories
147242set (BLENDER_ADDON_DIR "${CMAKE_BINARY_DIR} /bl_flip_fluids/flip_fluids_addon" )
148243set_output_directories("${BLENDER_ADDON_DIR} /ffengine/lib" )
149244
150- # Alembic Exporter
151- set (CMAKE_SKIP_BUILD_RPATH FALSE )
152- set (CMAKE_INSTALL_RPATH "@executable_path" )
153-
245+ # Add Alembic Dependency
154246if (ALEMBIC_PACKAGE_ROOT)
155247 message (STATUS "Using ALEMBIC_PACKAGE_ROOT=" ${ALEMBIC_PACKAGE_ROOT} )
156248 find_package (Alembic REQUIRED PATHS ${ALEMBIC_PACKAGE_ROOT} NO_DEFAULT_PATH)
157249else ()
158250 find_package (Alembic REQUIRED)
159251endif ()
160252
161- file (GLOB ALEMBIC_IO_SOURCES "src/alembic_io/src/*.cpp" )
162-
163- add_library (alembic_io_objects OBJECT ${ALEMBIC_IO_SOURCES} )
164- set_target_properties (alembic_io_objects PROPERTIES INSTALL_RPATH "@executable_path" )
165- set_target_properties (alembic_io_objects PROPERTIES BUILD_RPATH "@executable_path" )
166- target_link_libraries (alembic_io_objects PUBLIC Alembic::Alembic)
167- target_compile_features (alembic_io_objects PRIVATE cxx_std_17)
168-
169- if (MSVC OR MSYS OR MINGW)
170- set (ALEMBIC_EXECUTABLE_NAME "ff_alembic_exporter_windows" )
171- elseif (APPLE )
172- set (ALEMBIC_EXECUTABLE_NAME "ff_alembic_exporter_macos" )
173- elseif (UNIX AND NOT APPLE )
174- set (ALEMBIC_EXECUTABLE_NAME "ff_alembic_exporter_linux" )
175- endif ()
176-
177- add_executable (${ALEMBIC_EXECUTABLE_NAME} $<TARGET_OBJECTS:alembic_io_objects>)
178- set_target_properties (${ALEMBIC_EXECUTABLE_NAME} PROPERTIES INSTALL_RPATH "@executable_path" )
179- set_target_properties (${ALEMBIC_EXECUTABLE_NAME} PROPERTIES BUILD_RPATH "@executable_path" )
180- target_link_libraries (${ALEMBIC_EXECUTABLE_NAME} PUBLIC Alembic::Alembic)
181-
182253# Alembic IO Engine Objects
183254file (GLOB ALEMBIC_IO_LIBRARY_SOURCES
184255 "src/engine/*.cpp"
185256 "src/engine/c_bindings/*.cpp"
186257 "src/alembic_io/src/alembic_io.cpp"
187258 "src/alembic_io/src/c_bindings/*.cpp"
188- ${MIXBOX_SOURCE_CPP} )
259+ ${MIXBOX_SOURCE_CPP}
260+ )
189261
190262add_library (alembic_objects OBJECT ${ALEMBIC_IO_LIBRARY_SOURCES} )
191- target_link_libraries (alembic_objects PUBLIC Alembic::Alembic)
263+ target_link_libraries (alembic_objects PRIVATE Alembic::Alembic)
192264target_compile_features (alembic_objects PRIVATE cxx_std_17)
193265
194266# Alembic IO Engine Library
195- add_library (" ffalembicengine${LIBRARY_SUFFIX} " SHARED $<TARGET_OBJECTS:alembic_objects>)
196- target_link_libraries (" ffalembicengine${LIBRARY_SUFFIX} " PUBLIC Alembic::Alembic)
267+ add_library (ffalembicengine SHARED $<TARGET_OBJECTS:alembic_objects>)
268+ target_link_libraries (ffalembicengine PRIVATE Alembic::Alembic)
197269
198270# FLIP Fluids Engine Objects
199- file (GLOB SOURCES
200- "src/engine/*.cpp"
201- "src/engine/c_bindings/*.cpp"
202- ${MIXBOX_SOURCE_CPP} )
203- add_library (objects OBJECT ${SOURCES} )
271+ add_library (fluid_engine_objects OBJECT ${SOURCES_FLUID_ENGINE_LIBRARY} )
204272
205273# FLIP Fluids Engine Library
206- add_library (" ffengine${LIBRARY_SUFFIX} " SHARED $<TARGET_OBJECTS:objects >)
274+ add_library (ffengine SHARED $<TARGET_OBJECTS:fluid_engine_objects >)
207275
208276# Copy Libraries To Addon
209277file (COPY "${CMAKE_SOURCE_DIR} /src/addon/" DESTINATION "${BLENDER_ADDON_DIR} " )
0 commit comments