|
| 1 | +#[[ |
| 2 | +Copyright (c) 2019 Ryan L. Guy |
| 3 | +
|
| 4 | +Permission is hereby granted, free of charge, to any person obtaining a copy |
| 5 | +of this software and associated documentation files (the "Software"), to deal |
| 6 | +in the Software without restriction, including without limitation the rights |
| 7 | +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| 8 | +copies of the Software, and to permit persons to whom the Software is |
| 9 | +furnished to do so, subject to the following conditions: |
| 10 | +
|
| 11 | +The above copyright notice and this permission notice shall be included in all |
| 12 | +copies or substantial portions of the Software. |
| 13 | +
|
| 14 | +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| 15 | +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| 16 | +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| 17 | +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| 18 | +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| 19 | +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| 20 | +SOFTWARE. |
| 21 | +]] |
| 22 | + |
| 23 | +cmake_minimum_required(VERSION 2.8.9) |
| 24 | + |
| 25 | +function(set_output_directories DIR) |
| 26 | + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${DIR} PARENT_SCOPE) |
| 27 | + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${DIR} PARENT_SCOPE) |
| 28 | + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${DIR} PARENT_SCOPE) |
| 29 | + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${DIR} PARENT_SCOPE) |
| 30 | + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${DIR} PARENT_SCOPE) |
| 31 | + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${DIR} PARENT_SCOPE) |
| 32 | +endfunction(set_output_directories) |
| 33 | + |
| 34 | +option(DISTRIBUTE_SOURCE "Include source code in addon" OFF) |
| 35 | +option(WITH_OPENCL "Compile project with OpenCL features" OFF) |
| 36 | + |
| 37 | +project(bl_flip_fluids) |
| 38 | +set(CMAKE_BUILD_TYPE Release) |
| 39 | + |
| 40 | +set(FLUIDENGINE_VERSION_MAJOR 0) |
| 41 | +set(FLUIDENGINE_VERSION_MINOR 0) |
| 42 | +set(FLUIDENGINE_VERSION_REVISION 5) |
| 43 | +set(FLUIDENGINE_VERSION_LABEL "0.0.5 Demo 04-JUN-2019") |
| 44 | + |
| 45 | +# Configure OpenCL |
| 46 | +if(WITH_OPENCL) |
| 47 | + find_package(OpenCL) |
| 48 | + if(NOT OpenCL_FOUND) |
| 49 | + message(WARNING "WARNING: OpenCL was not found on your system.\nInstall an OpenCL SDK specific to your GPU vender (AMD, NVIDIA, Intel, etc.). This project will be built with OpenCL features disabled.") |
| 50 | + set(WITH_OPENCL OFF) |
| 51 | + endif() |
| 52 | +endif() |
| 53 | + |
| 54 | +if(WITH_OPENCL) |
| 55 | + if(MSVC OR MINGW) |
| 56 | + # Set to OpenCL ICD loader instead of vendor library |
| 57 | + set(OpenCL_LIBRARY "C:/Windows/System32/OpenCL.dll") |
| 58 | + endif() |
| 59 | + |
| 60 | + # Allows use os clCreateCommandQueue in OpenCL versions >= 2.0 |
| 61 | + add_definitions(-DCL_USE_DEPRECATED_OPENCL_1_2_APIS) |
| 62 | + |
| 63 | + add_definitions(-DWITH_OPENCL=1) |
| 64 | + include_directories(src ${OpenCL_INCLUDE_DIRS}) |
| 65 | +else() |
| 66 | + add_definitions(-DWITH_OPENCL=0) |
| 67 | +endif() |
| 68 | + |
| 69 | +# Configure compiler/OS specific flags |
| 70 | +if(MSVC) |
| 71 | + message(WARNING "WARNING: Compilation using MSVC (Microsoft Visual Studio) is experimental and not officially supported. Building with MSVC may result in errors and performance issues.") |
| 72 | + add_definitions(-DCL_USE_DEPRECATED_OPENCL_1_1_APIS -DNOMINMAX -D_CRT_SECURE_NO_WARNINGS) |
| 73 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /O2 /W4 /EHsc /wd4244") |
| 74 | + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE") |
| 75 | + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /LARGEADDRESSAWARE") |
| 76 | +elseif(MINGW) |
| 77 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static -static-libgcc -static-libstdc++ -O3 -std=c++11 -Wall") |
| 78 | + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--enable-stdcall-fixup") |
| 79 | + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--enable-stdcall-fixup") |
| 80 | +elseif(APPLE) |
| 81 | + set(CMAKE_MACOSX_RPATH ON) |
| 82 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -std=c++11 -Wall -Wno-return-type-c-linkage") |
| 83 | +else() |
| 84 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -std=c++11 -Wall -fPIC -pthread") |
| 85 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include ${PROJECT_SOURCE_DIR}/src/engine/glibc_version_header/force_link_glibc_2.5.h") |
| 86 | +endif() |
| 87 | + |
| 88 | +# Configure Version |
| 89 | +configure_file( |
| 90 | + "${PROJECT_SOURCE_DIR}/src/engine/versionutils.cpp.in" |
| 91 | + "${PROJECT_SOURCE_DIR}/src/engine/versionutils.cpp" |
| 92 | +) |
| 93 | +configure_file( |
| 94 | + "${PROJECT_SOURCE_DIR}/src/addon/__init__.py.in" |
| 95 | + "${PROJECT_SOURCE_DIR}/src/addon/__init__.py" |
| 96 | +) |
| 97 | + |
| 98 | +# Generate kernels.cpp |
| 99 | +file(READ "src/engine/kernels/trilinearinterpolate.cl" TRILINEAR_INTERPOLATE_KERNEL_STRING) |
| 100 | +file(READ "src/engine/kernels/scalarfield.cl" SCALAR_FIELD_KERNEL_STRING) |
| 101 | +configure_file( |
| 102 | + "${PROJECT_SOURCE_DIR}/src/engine/kernels/kernels.cpp.in" |
| 103 | + "${PROJECT_SOURCE_DIR}/src/engine/kernels/kernels.cpp" |
| 104 | +) |
| 105 | + |
| 106 | +# Object library |
| 107 | +file(GLOB SOURCES "src/engine/*.cpp" "src/engine/c_bindings/*.cpp" "src/engine/kernels/*.cpp" "src/engine/opencl_bindings/*.cpp") |
| 108 | +add_library(objects OBJECT ${SOURCES}) |
| 109 | + |
| 110 | +# Test executable |
| 111 | +set(TEST_DIR "${CMAKE_BINARY_DIR}/bl_flip_fluids/test") |
| 112 | +set_output_directories("${TEST_DIR}") |
| 113 | +add_executable(bl_flip_fluids $<TARGET_OBJECTS:objects>) |
| 114 | +set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "engine_test") |
| 115 | +if(WITH_OPENCL) |
| 116 | + target_link_libraries(bl_flip_fluids "${OpenCL_LIBRARY}") |
| 117 | +endif() |
| 118 | + |
| 119 | +# Pyfluid library |
| 120 | +set(PYTHON_MODULE_DIR "${CMAKE_BINARY_DIR}/bl_flip_fluids/pyfluid") |
| 121 | +set(PYTHON_MODULE_LIB_DIR "${CMAKE_BINARY_DIR}/bl_flip_fluids/pyfluid/lib") |
| 122 | +set_output_directories("${PYTHON_MODULE_LIB_DIR}") |
| 123 | +add_library(pyfluid SHARED $<TARGET_OBJECTS:objects>) |
| 124 | +if(WITH_OPENCL) |
| 125 | + target_link_libraries(pyfluid "${OpenCL_LIBRARY}") |
| 126 | +endif() |
| 127 | +file(COPY "${CMAKE_SOURCE_DIR}/src/engine/pyfluid/" DESTINATION "${PYTHON_MODULE_DIR}") |
| 128 | + |
| 129 | +# Blender addon |
| 130 | +set(BLENDER_ADDON_DIR "${CMAKE_BINARY_DIR}/bl_flip_fluids/flip_fluids_addon") |
| 131 | +set_output_directories("${BLENDER_ADDON_DIR}/pyfluid/lib") |
| 132 | +add_library(blpyfluid SHARED $<TARGET_OBJECTS:objects>) |
| 133 | +if(WITH_OPENCL) |
| 134 | + target_link_libraries(blpyfluid "${OpenCL_LIBRARY}") |
| 135 | +endif() |
| 136 | +file(COPY "${CMAKE_SOURCE_DIR}/src/addon/" DESTINATION "${BLENDER_ADDON_DIR}") |
| 137 | +file(COPY "${CMAKE_SOURCE_DIR}/src/engine/pyfluid/" DESTINATION "${BLENDER_ADDON_DIR}/pyfluid") |
| 138 | + |
| 139 | +if(DISTRIBUTE_SOURCE) |
| 140 | + set(SOURCE_COPY_PATHS |
| 141 | + "${CMAKE_SOURCE_DIR}/src" |
| 142 | + "${CMAKE_SOURCE_DIR}/.gitignore" |
| 143 | + "${CMAKE_SOURCE_DIR}/CMakeLists.txt" |
| 144 | + "${CMAKE_SOURCE_DIR}/LICENSE_GPLv3.md" |
| 145 | + "${CMAKE_SOURCE_DIR}/LICENSE_MIT.md" |
| 146 | + "${CMAKE_SOURCE_DIR}/LICENSE_Standard_Royalty_Free.md" |
| 147 | + "${CMAKE_SOURCE_DIR}/README.md" |
| 148 | + ) |
| 149 | + |
| 150 | + foreach(SOURCE_PATH ${SOURCE_COPY_PATHS}) |
| 151 | + file(COPY "${SOURCE_PATH}" DESTINATION "${BLENDER_ADDON_DIR}/source/") |
| 152 | + endforeach(SOURCE_PATH) |
| 153 | +endif() |
0 commit comments