diff --git a/SofaGLFW/cmake/environment.cmake b/SofaGLFW/cmake/environment.cmake index acfe42a8c9..f3c8d02e5e 100644 --- a/SofaGLFW/cmake/environment.cmake +++ b/SofaGLFW/cmake/environment.cmake @@ -16,16 +16,27 @@ endif() message(STATUS "Install prefix: ${CMAKE_INSTALL_PREFIX}") ## Set the output directories globally -set(ARCHIVE_OUTPUT_DIRECTORY lib) -set(RUNTIME_OUTPUT_DIRECTORY bin) -if(WIN32) - set(LIBRARY_OUTPUT_DIRECTORY ${RUNTIME_OUTPUT_DIRECTORY}) -else() - set(LIBRARY_OUTPUT_DIRECTORY ${ARCHIVE_OUTPUT_DIRECTORY}) + +## Set the output directories globally +if(NOT DEFINED CMAKE_ARCHIVE_OUTPUT_DIRECTORY) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +endif() + +if(NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) endif() -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${ARCHIVE_OUTPUT_DIRECTORY}) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${RUNTIME_OUTPUT_DIRECTORY}) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${LIBRARY_OUTPUT_DIRECTORY}) + +if(NOT DEFINED CMAKE_LIBRARY_OUTPUT_DIRECTORY) + if(WIN32) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) + else() + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) + endif() +endif() + +string(REGEX REPLACE "^${CMAKE_BINARY_DIR}/" "" ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} ) +string(REGEX REPLACE "^${CMAKE_BINARY_DIR}/" "" RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ) +string(REGEX REPLACE "^${CMAKE_BINARY_DIR}/" "" LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ) ## RPATH if(UNIX) diff --git a/SofaImGui/CMakeLists.txt b/SofaImGui/CMakeLists.txt index b06f5aa30c..fe7d71aa8e 100644 --- a/SofaImGui/CMakeLists.txt +++ b/SofaImGui/CMakeLists.txt @@ -1,9 +1,12 @@ cmake_minimum_required(VERSION 3.12) project(SofaImGui LANGUAGES CXX) +include(cmake/environment.cmake) + + # needed to find SofaGLFWConfig.cmake # if building both of them out-of-tree -list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}/lib/cmake) +list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}/${ARCHIVE_OUTPUT_DIRECTORY}/cmake) sofa_find_package(SofaGLFW REQUIRED) sofa_find_package(Sofa.GL.Component.Rendering3D REQUIRED) diff --git a/SofaImGui/cmake/environment.cmake b/SofaImGui/cmake/environment.cmake new file mode 100644 index 0000000000..f3c8d02e5e --- /dev/null +++ b/SofaImGui/cmake/environment.cmake @@ -0,0 +1,67 @@ +# CMake modules path, for our FindXXX.cmake modules +list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) +list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/modules) +list(APPEND CMAKE_PREFIX_PATH ${PROJECT_BINARY_DIR}) +list(APPEND CMAKE_PREFIX_PATH ${PROJECT_BINARY_DIR}/extlibs) + +## Default build type +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Release") +endif() + +## Force default install prefix +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install/${PROJECT_NAME}" CACHE PATH "Install path prefix, prepended onto install directories." FORCE) +endif() +message(STATUS "Install prefix: ${CMAKE_INSTALL_PREFIX}") + +## Set the output directories globally + +## Set the output directories globally +if(NOT DEFINED CMAKE_ARCHIVE_OUTPUT_DIRECTORY) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +endif() + +if(NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +endif() + +if(NOT DEFINED CMAKE_LIBRARY_OUTPUT_DIRECTORY) + if(WIN32) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) + else() + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) + endif() +endif() + +string(REGEX REPLACE "^${CMAKE_BINARY_DIR}/" "" ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} ) +string(REGEX REPLACE "^${CMAKE_BINARY_DIR}/" "" RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ) +string(REGEX REPLACE "^${CMAKE_BINARY_DIR}/" "" LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ) + +## RPATH +if(UNIX) + # RPATH is a field in ELF binaries that is used as a hint by the system + # loader to find needed shared libraries. + # + # In the build directory, cmake creates binaries with absolute paths in + # RPATH. And by default, it strips RPATH from installed binaries. Here we + # use CMAKE_INSTALL_RPATH to set a relative RPATH. By doing so, we avoid + # the need to play with LD_LIBRARY_PATH to get applications to run. + + # see https://cmake.org/Wiki/CMake_RPATH_handling for $ORIGIN doc + set(CMAKE_INSTALL_RPATH + "$ORIGIN/../lib" + "$$ORIGIN/../lib" + ) + + if(APPLE) + set(CMAKE_MACOSX_RPATH ON) + list(APPEND CMAKE_INSTALL_RPATH + "@loader_path" + "@loader_path/../lib" + "@executable_path" + "@executable_path/../lib" + ) + set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + endif() +endif(UNIX)