| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- function(build_dependency DEPENDENCY_NAME BUILD_CONFIG BUILD_OPTIONS)
- set(DEPENDENCY_BUILD_DIR "${CMAKE_SOURCE_DIR}/../Dependencies/Build/${DEPENDENCY_NAME}/${BUILD_CONFIG}")
-
- # Make the build folder
- execute_process(COMMAND "${CMAKE_COMMAND}"
- -E make_directory ${DEPENDENCY_BUILD_DIR}
- WORKING_DIRECTORY "${DEPENDENCY_BUILD_DIR}")
-
- # Make build files
- execute_process(COMMAND "${CMAKE_COMMAND}"
- -G "${CMAKE_GENERATOR}"
- ${BUILD_OPTIONS}
- "${CMAKE_SOURCE_DIR}/External/${DEPENDENCY_NAME}"
- WORKING_DIRECTORY "${DEPENDENCY_BUILD_DIR}")
-
- # Execute the build and install
- execute_process(COMMAND "${CMAKE_COMMAND}"
- --build "${DEPENDENCY_BUILD_DIR}"
- --config ${BUILD_CONFIG})
- execute_process(COMMAND "${CMAKE_COMMAND}"
- --build "${DEPENDENCY_BUILD_DIR}"
- --config ${BUILD_CONFIG}
- --target Install)
- endfunction()
- function(find_package_or_build DEPENDENCY_NAME DEPENDENCY_INCLUDE_PATH BUILD_OPTIONS)
- set(DEPENDENCIES_BUILD_DIR "${CMAKE_SOURCE_DIR}/../Dependencies/Build")
- set(DEPENDENCY_BUILD_DIR "${DEPENDENCIES_BUILD_DIR}/${DEPENDENCY_NAME}")
- set(DEPENDENCY_SOURCE_DIR "${CMAKE_SOURCE_DIR}/External/${DEPENDENCY_NAME}")
- # Look for dependency binaries
- find_package(${DEPENDENCY_NAME} QUIET)
- # Cannot find binaries, see if we can compile them
- if(NOT ${DEPENDENCY_NAME}_FOUND)
- message(STATUS "...${DEPENDENCY_NAME} binaries cannot be found, building from source and retrying.")
- # See if we have the source code for the dependency, and if not fetch them from git
- find_path(SUBMODULE_SOURCES ${DEPENDENCY_INCLUDE_PATH} ${DEPENDENCY_SOURCE_DIR})
- if(NOT SUBMODULE_SOURCES)
- execute_process(COMMAND git submodule update
- --init
- -- External/${DEPENDENCY_NAME}
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
- else()
- execute_process(COMMAND git submodule update
- -- External/${DEPENDENCY_NAME}
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
- endif()
- # Build
- build_dependency(${DEPENDENCY_NAME} Release "${BUILD_OPTIONS}")
- build_dependency(${DEPENDENCY_NAME} Debug "${BUILD_OPTIONS}")
-
- # Update the dependencies version
- file(WRITE ${DEPENDENCIES_BUILD_DIR}/.version ${BS_SRC_DEPENDENCIES_VERSION})
-
- # Now try finding the package again, this time it's required
- find_package(${DEPENDENCY_NAME} REQUIRED)
-
- mark_as_advanced(SUBMODULE_SOURCES)
- endif()
- endfunction()
|