From 08b155146ae0dd867ab724cd3f3eeef9777f6a60 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 15 Apr 2015 12:12:21 -0700 Subject: [PATCH 1/7] move externals from build-ext inside the build folder --- cmake/macros/SetupExternalsBinaryDir.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/macros/SetupExternalsBinaryDir.cmake b/cmake/macros/SetupExternalsBinaryDir.cmake index 04bd00643c..a118dcf543 100644 --- a/cmake/macros/SetupExternalsBinaryDir.cmake +++ b/cmake/macros/SetupExternalsBinaryDir.cmake @@ -22,11 +22,11 @@ macro(SETUP_EXTERNALS_BINARY_DIR) endif () endif () - set(EXTERNALS_BINARY_ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/build-ext") + set(EXTERNALS_BINARY_ROOT_DIR "${CMAKE_CURRENT_BINARY_DIR}/ext") if (ANDROID) set(EXTERNALS_BINARY_DIR "${EXTERNALS_BINARY_ROOT_DIR}/android/${CMAKE_GENERATOR_FOLDER_NAME}") else () set(EXTERNALS_BINARY_DIR "${EXTERNALS_BINARY_ROOT_DIR}/${CMAKE_GENERATOR_FOLDER_NAME}") endif () -endmacro() \ No newline at end of file +endmacro() From 8b41a952b32e6dc4adc00f4877cf23d1e7c824b8 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 15 Apr 2015 12:19:38 -0700 Subject: [PATCH 2/7] update instructions for new build folder placement --- .gitignore | 1 + BUILD.md | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index f2f259a0c2..b774d7cdbd 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ CMakeFiles/ CMakeScripts/ cmake_install.cmake build*/ +ext/ Makefile *.user diff --git a/BUILD.md b/BUILD.md index fe0459e7db..ed3fea5c5f 100644 --- a/BUILD.md +++ b/BUILD.md @@ -19,9 +19,9 @@ The following external projects are optional dependencies. You can indicate to C * [SDL2](https://www.libsdl.org/download-2.0.php) ~> 2.0.3 * Enables game controller support in Interface -The above dependencies will be downloaded, built, linked and included automatically by CMake where we require them. The CMakeLists files that handle grabbing each of the following external dependencies can be found in the [cmake/externals folder](cmake/externals). The resulting downloads, source files and binaries will be placed in the `build-ext` directory in each of the subfolders for each external project. +The above dependencies will be downloaded, built, linked and included automatically by CMake where we require them. The CMakeLists files that handle grabbing each of the following external dependencies can be found in the [cmake/externals folder](cmake/externals). The resulting downloads, source files and binaries will be placed in the `build/ext` folder in each of the subfolders for each external project. -These are not placed in your normal build tree when doing an out of source build so that they do not need to be re-downloaded and re-compiled every time the CMake build folder is cleared. Should you want to force a re-download and re-compile of a specific external, you can simply remove that directory from the appropriate subfolder in `build-ext`. Should you want to force a re-download and re-compile of all externals, just remove the `build-ext` folder. +These are not placed in your normal build tree when doing an out of source build so that they do not need to be re-downloaded and re-compiled every time the CMake build folder is cleared. Should you want to force a re-download and re-compile of a specific external, you can simply remove that directory from the appropriate subfolder in `build/ext`. Should you want to force a re-download and re-compile of all externals, just remove the `build/ext` folder. If you would like to use a specific install of a dependency instead of the version that would be grabbed as a CMake ExternalProject, you can pass -DGET_$NAME=0 (where $NAME is the name of the subfolder in [cmake/externals](cmake/externals)) when you run CMake to tell it not to get that dependency as an external project. From 03129f98d4605635a5ecb75c556b1c0b0cb7d903 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 15 Apr 2015 13:51:51 -0700 Subject: [PATCH 3/7] make VHACD an external project --- CMakeLists.txt | 1 + cmake/externals/vhacd/CMakeLists.txt | 30 ++++++++++++++++ cmake/modules/FindVHACD.cmake | 34 ++----------------- tools/CMakeLists.txt | 8 ++--- tools/vhacd-util/CMakeLists.txt | 21 ++++++++++++ tools/{vhacd => vhacd-util}/src/VHACDUtil.cpp | 0 tools/{vhacd => vhacd-util}/src/VHACDUtil.h | 0 .../src/VHACDUtilApp.cpp | 0 .../{vhacd => vhacd-util}/src/VHACDUtilApp.h | 0 tools/{vhacd => vhacd-util}/src/main.cpp | 0 tools/vhacd/CMakeLists.txt | 23 ------------- 11 files changed, 57 insertions(+), 60 deletions(-) create mode 100644 cmake/externals/vhacd/CMakeLists.txt create mode 100644 tools/vhacd-util/CMakeLists.txt rename tools/{vhacd => vhacd-util}/src/VHACDUtil.cpp (100%) rename tools/{vhacd => vhacd-util}/src/VHACDUtil.h (100%) rename tools/{vhacd => vhacd-util}/src/VHACDUtilApp.cpp (100%) rename tools/{vhacd => vhacd-util}/src/VHACDUtilApp.h (100%) rename tools/{vhacd => vhacd-util}/src/main.cpp (100%) delete mode 100644 tools/vhacd/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 81d532fbe2..ebf830e354 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -168,6 +168,7 @@ option(GET_SOXR "Get Soxr library automatically as external project" 1) option(GET_TBB "Get Threading Building Blocks library automatically as external project" 1) option(GET_LIBOVR "Get LibOVR library automatically as external project" 1) option(USE_NSIGHT "Attempt to find the nSight libraries" 1) +option(GET_VHACD "Get V-HACD library automatically as external project" 1) if (WIN32) option(GET_GLEW "Get GLEW library automatically as external project" 1) diff --git a/cmake/externals/vhacd/CMakeLists.txt b/cmake/externals/vhacd/CMakeLists.txt new file mode 100644 index 0000000000..eae9d7e59a --- /dev/null +++ b/cmake/externals/vhacd/CMakeLists.txt @@ -0,0 +1,30 @@ +set(EXTERNAL_NAME vhacd) + +if (ANDROID) + set(ANDROID_CMAKE_ARGS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}" "-DANDROID_NATIVE_API_LEVEL=19") +endif () + +include(ExternalProject) +ExternalProject_Add( + ${EXTERNAL_NAME} + URL http://hifi-public.s3.amazonaws.com/dependencies/v-hacd-master.zip + URL_MD5 81d6244ac204db5ba27305e2e8e210ad + CMAKE_ARGS ${ANDROID_CMAKE_ARGS} -DCMAKE_INSTALL_PREFIX:PATH= + BINARY_DIR ${EXTERNAL_PROJECT_PREFIX}/build + LOG_DOWNLOAD 1 + LOG_CONFIGURE 1 + LOG_BUILD 1 +) + +ExternalProject_Get_Property(${EXTERNAL_NAME} INSTALL_DIR) + +string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) + +if (WIN32) + set(LIBRARY_FILENAME ${EXTERNAL_NAME_UPPER}.lib) +else () + set(LIBRARY_FILENAME lib${EXTERNAL_NAME_UPPER}.a) +endif () + +set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${INSTALL_DIR}/include CACHE FILEPATH "Path to V-HACD include directory") +set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${INSTALL_DIR}/lib/${LIBRARY_FILENAME} CACHE FILEPATH "Path to V-HACD library") diff --git a/cmake/modules/FindVHACD.cmake b/cmake/modules/FindVHACD.cmake index 03e30b41d4..2a920381d7 100644 --- a/cmake/modules/FindVHACD.cmake +++ b/cmake/modules/FindVHACD.cmake @@ -19,38 +19,8 @@ include("${MACRO_DIR}/HifiLibrarySearchHints.cmake") hifi_library_search_hints("vhacd") -macro(_FIND_VHACD_LIBRARY _var) - set(_${_var}_NAMES ${ARGN}) - find_library(${_var}_LIBRARY_RELEASE - NAMES ${_${_var}_NAMES} - HINTS - ${VHACD_SEARCH_DIRS} - $ENV{VHACD_ROOT_DIR} - PATH_SUFFIXES lib lib/Release - ) - - find_library(${_var}_LIBRARY_DEBUG - NAMES ${_${_var}_NAMES} - HINTS - ${VHACD_SEARCH_DIRS} - $ENV{VHACD_ROOT_DIR} - PATH_SUFFIXES lib lib/Debug - ) - - select_library_configurations(${_var}) - - mark_as_advanced(${_var}_LIBRARY) - mark_as_advanced(${_var}_LIBRARY) -endmacro() - - -find_path(VHACD_INCLUDE_DIRS VHACD.h PATH_SUFFIXES include HINTS ${VHACD_SEARCH_DIRS} $ENV{VHACD_ROOT_DIR}) -if(NOT WIN32) -_FIND_VHACD_LIBRARY(VHACD libVHACD.a) -else() -_FIND_VHACD_LIBRARY(VHACD VHACD_LIB) -endif() -set(VHACD_LIBRARIES ${VHACD_LIBRARY}) +find_path(VHACD_INCLUDE_DIRS VHACD.h PATH_SUFFIXES include HINTS ${VHACD_SEARCH_DIRS}) +find_library(VHACD_LIBRARIES VHACD PATH_SUFFIXES lib HINTS ${VHACD_SEARCH_DIRS}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(VHACD "Could NOT find VHACD, try to set the path to VHACD root folder in the system variable VHACD_ROOT_DIR or create a directory vhacd in HIFI_LIB_DIR and paste the necessary files there" diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index ba2938aaa6..55994f3d89 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -1,12 +1,10 @@ # add the tool directories add_subdirectory(mtc) set_target_properties(mtc PROPERTIES FOLDER "Tools") + add_subdirectory(scribe) set_target_properties(scribe PROPERTIES FOLDER "Tools") +add_subdirectory(vhacd-util) +set_target_properties(vhacd-util PROPERTIES FOLDER "Tools") -find_package(VHACD) -if(VHACD_FOUND) -add_subdirectory(vhacd) -# set_target_properties(vhacd PROPERTIES FOLDER "Tools") -endif() diff --git a/tools/vhacd-util/CMakeLists.txt b/tools/vhacd-util/CMakeLists.txt new file mode 100644 index 0000000000..b511922520 --- /dev/null +++ b/tools/vhacd-util/CMakeLists.txt @@ -0,0 +1,21 @@ +set(TARGET_NAME vhacd-util) +setup_hifi_project(Core Widgets) +link_hifi_libraries(shared fbx model gpu) + +add_dependency_external_projects(vhacd) + +find_package(VHACD REQUIRED) +target_include_directories(${TARGET_NAME} PUBLIC ${VHACD_INCLUDE_DIRS}) +target_link_libraries(${TARGET_NAME} ${VHACD_LIBRARIES}) + +if (NOT WIN32) + find_package(Threads) + target_link_libraries(${TARGET_NAME} ${CMAKE_THREAD_LIBS_INIT}) + + # include(FindOpenMP) + # if(OPENMP_FOUND) + # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") + # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") + # set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") + # endif() +endif () diff --git a/tools/vhacd/src/VHACDUtil.cpp b/tools/vhacd-util/src/VHACDUtil.cpp similarity index 100% rename from tools/vhacd/src/VHACDUtil.cpp rename to tools/vhacd-util/src/VHACDUtil.cpp diff --git a/tools/vhacd/src/VHACDUtil.h b/tools/vhacd-util/src/VHACDUtil.h similarity index 100% rename from tools/vhacd/src/VHACDUtil.h rename to tools/vhacd-util/src/VHACDUtil.h diff --git a/tools/vhacd/src/VHACDUtilApp.cpp b/tools/vhacd-util/src/VHACDUtilApp.cpp similarity index 100% rename from tools/vhacd/src/VHACDUtilApp.cpp rename to tools/vhacd-util/src/VHACDUtilApp.cpp diff --git a/tools/vhacd/src/VHACDUtilApp.h b/tools/vhacd-util/src/VHACDUtilApp.h similarity index 100% rename from tools/vhacd/src/VHACDUtilApp.h rename to tools/vhacd-util/src/VHACDUtilApp.h diff --git a/tools/vhacd/src/main.cpp b/tools/vhacd-util/src/main.cpp similarity index 100% rename from tools/vhacd/src/main.cpp rename to tools/vhacd-util/src/main.cpp diff --git a/tools/vhacd/CMakeLists.txt b/tools/vhacd/CMakeLists.txt deleted file mode 100644 index f003b685e0..0000000000 --- a/tools/vhacd/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -set(TARGET_NAME vhacd-util) -setup_hifi_project(Core Widgets) -link_hifi_libraries(shared model fbx gpu networking octree) - -#find_package(VHACD REQUIRED) done in CMakeList.txt in parent directory -target_include_directories(${TARGET_NAME} PUBLIC ${VHACD_INCLUDE_DIRS}) -target_link_libraries(${TARGET_NAME} ${VHACD_LIBRARIES}) - -if(NOT WIN32) - find_package( Threads) - target_link_libraries(${TARGET_NAME} ${CMAKE_THREAD_LIBS_INIT}) - - include(FindOpenMP) - if(OPENMP_FOUND) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") - endif() -endif() - -add_dependency_external_projects(glm) -find_package(GLM REQUIRED) -target_include_directories(${TARGET_NAME} PUBLIC ${GLM_INCLUDE_DIRS}) From b25d22aa53858b2bf549b987883a03b00292e669 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 15 Apr 2015 14:38:24 -0700 Subject: [PATCH 4/7] use debug/release for IDE handling of V-HACD --- cmake/externals/vhacd/CMakeLists.txt | 9 +++++---- cmake/modules/FindVHACD.cmake | 10 ++++++++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/cmake/externals/vhacd/CMakeLists.txt b/cmake/externals/vhacd/CMakeLists.txt index eae9d7e59a..3bd17937d7 100644 --- a/cmake/externals/vhacd/CMakeLists.txt +++ b/cmake/externals/vhacd/CMakeLists.txt @@ -8,7 +8,7 @@ include(ExternalProject) ExternalProject_Add( ${EXTERNAL_NAME} URL http://hifi-public.s3.amazonaws.com/dependencies/v-hacd-master.zip - URL_MD5 81d6244ac204db5ba27305e2e8e210ad + URL_MD5 3bfc94f8dd3dfbfe8f4dc088f4820b3e CMAKE_ARGS ${ANDROID_CMAKE_ARGS} -DCMAKE_INSTALL_PREFIX:PATH= BINARY_DIR ${EXTERNAL_PROJECT_PREFIX}/build LOG_DOWNLOAD 1 @@ -21,10 +21,11 @@ ExternalProject_Get_Property(${EXTERNAL_NAME} INSTALL_DIR) string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) if (WIN32) - set(LIBRARY_FILENAME ${EXTERNAL_NAME_UPPER}.lib) + set(${EXTERNAL_NAME_UPPER}_LIBRARY_DEBUG ${INSTALL_DIR}/lib/Debug/VHACD_LIB.lib CACHE FILEPATH "Path to V-HACD debug library") + set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${INSTALL_DIR}/lib/Release/VHACD_LIB.lib CACHE FILEPATH "Path to V-HACD release library") else () - set(LIBRARY_FILENAME lib${EXTERNAL_NAME_UPPER}.a) + set(${EXTERNAL_NAME_UPPER}_LIBRARY_DEBUG "" CACHE FILEPATH "Path to V-HACD debug library") + set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${INSTALL_DIR}/lib/libVHACD.a CACHE FILEPATH "Path to V-HACD release library") endif () set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${INSTALL_DIR}/include CACHE FILEPATH "Path to V-HACD include directory") -set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${INSTALL_DIR}/lib/${LIBRARY_FILENAME} CACHE FILEPATH "Path to V-HACD library") diff --git a/cmake/modules/FindVHACD.cmake b/cmake/modules/FindVHACD.cmake index 2a920381d7..8572387f91 100644 --- a/cmake/modules/FindVHACD.cmake +++ b/cmake/modules/FindVHACD.cmake @@ -20,9 +20,15 @@ include("${MACRO_DIR}/HifiLibrarySearchHints.cmake") hifi_library_search_hints("vhacd") find_path(VHACD_INCLUDE_DIRS VHACD.h PATH_SUFFIXES include HINTS ${VHACD_SEARCH_DIRS}) -find_library(VHACD_LIBRARIES VHACD PATH_SUFFIXES lib HINTS ${VHACD_SEARCH_DIRS}) -include(FindPackageHandleStandardArgs) +find_library(VHACD_LIBRARY_DEBUG NAMES VHACD VHACD_LIB PATH_SUFFIXES lib/Debug HINTS ${VHACD_SEARCH_DIRS}) +find_library(VHACD_LIBRARY_RELEASE NAMES VHACD VHACD_LIB PATH_SUFFIXES lib/Release lib HINTS ${VHACD_SEARCH_DIRS}) + +include(SelectLibraryConfigurations) +select_library_configurations(VHACD) + +set(VHACD_LIBRARIES ${VHACD_LIBRARY}) + find_package_handle_standard_args(VHACD "Could NOT find VHACD, try to set the path to VHACD root folder in the system variable VHACD_ROOT_DIR or create a directory vhacd in HIFI_LIB_DIR and paste the necessary files there" VHACD_INCLUDE_DIRS VHACD_LIBRARIES) From 6d53bb28096df7fb9d7aa7a0d2db7bd3080cafbe Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 15 Apr 2015 14:48:42 -0700 Subject: [PATCH 5/7] remove extra directives from vhacd-util cmake --- tools/vhacd-util/CMakeLists.txt | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/tools/vhacd-util/CMakeLists.txt b/tools/vhacd-util/CMakeLists.txt index b511922520..73233a1fd8 100644 --- a/tools/vhacd-util/CMakeLists.txt +++ b/tools/vhacd-util/CMakeLists.txt @@ -7,15 +7,3 @@ add_dependency_external_projects(vhacd) find_package(VHACD REQUIRED) target_include_directories(${TARGET_NAME} PUBLIC ${VHACD_INCLUDE_DIRS}) target_link_libraries(${TARGET_NAME} ${VHACD_LIBRARIES}) - -if (NOT WIN32) - find_package(Threads) - target_link_libraries(${TARGET_NAME} ${CMAKE_THREAD_LIBS_INIT}) - - # include(FindOpenMP) - # if(OPENMP_FOUND) - # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") - # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") - # set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") - # endif() -endif () From 134704412ac3f0ac103439834d3c32dd2f3adb94 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 15 Apr 2015 15:13:39 -0700 Subject: [PATCH 6/7] check for OpenMP on non Win32 platforms --- tools/vhacd-util/CMakeLists.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tools/vhacd-util/CMakeLists.txt b/tools/vhacd-util/CMakeLists.txt index 73233a1fd8..4c3f1cbcef 100644 --- a/tools/vhacd-util/CMakeLists.txt +++ b/tools/vhacd-util/CMakeLists.txt @@ -7,3 +7,12 @@ add_dependency_external_projects(vhacd) find_package(VHACD REQUIRED) target_include_directories(${TARGET_NAME} PUBLIC ${VHACD_INCLUDE_DIRS}) target_link_libraries(${TARGET_NAME} ${VHACD_LIBRARIES}) + +if (NOT WIN32) + include(FindOpenMP) + if(OPENMP_FOUND) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") + endif() +endif () From 1058a61ddd09d4bc4cac60b3ca318a188bd63917 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 15 Apr 2015 15:21:35 -0700 Subject: [PATCH 7/7] only look for OpenMP on UNIX --- tools/vhacd-util/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/vhacd-util/CMakeLists.txt b/tools/vhacd-util/CMakeLists.txt index 4c3f1cbcef..c94b2ad083 100644 --- a/tools/vhacd-util/CMakeLists.txt +++ b/tools/vhacd-util/CMakeLists.txt @@ -8,7 +8,7 @@ find_package(VHACD REQUIRED) target_include_directories(${TARGET_NAME} PUBLIC ${VHACD_INCLUDE_DIRS}) target_link_libraries(${TARGET_NAME} ${VHACD_LIBRARIES}) -if (NOT WIN32) +if (UNIX AND NOT APPLE) include(FindOpenMP) if(OPENMP_FOUND) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")