Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
93 changes: 71 additions & 22 deletions cmake/CDTMacros.cmake.in
Original file line number Diff line number Diff line change
@@ -1,4 +1,42 @@

# Search CDT_CONTRACT_INCLUDE_PATH (semicolon-delimited list) for a matching
# directory or file suffix.
#
# Usage:
# find_in_cdt_contract_paths(_result MATCH magic_enum DIRECTORY)
# find_in_cdt_contract_paths(_result MATCH magic_enum/magic_enum.hpp FILE
# MATCH_VAR_FULL _full_path)
#
# Sets <out_var> to the matching base path, or empty string if not found.
# MATCH_VAR_FULL optionally receives the full path including the suffix.
macro(find_in_cdt_contract_paths _out_var)
cmake_parse_arguments(_FICCP "" "MATCH;MATCH_VAR_FULL" "" ${ARGN})
# Remaining unparsed args: first is DIRECTORY or FILE
list(GET _FICCP_UNPARSED_ARGUMENTS 0 _ficcp_mode)

set(${_out_var} "")
if(_FICCP_MATCH_VAR_FULL)
set(${_FICCP_MATCH_VAR_FULL} "")
endif()

foreach(_ficcp_dir IN LISTS CDT_CONTRACT_INCLUDE_PATH)
set(_ficcp_candidate "${_ficcp_dir}/${_FICCP_MATCH}")
if("${_ficcp_mode}" STREQUAL "DIRECTORY" AND IS_DIRECTORY "${_ficcp_candidate}")
set(${_out_var} "${_ficcp_dir}")
if(_FICCP_MATCH_VAR_FULL)
set(${_FICCP_MATCH_VAR_FULL} "${_ficcp_candidate}")
endif()
break()
elseif("${_ficcp_mode}" STREQUAL "FILE" AND EXISTS "${_ficcp_candidate}")
set(${_out_var} "${_ficcp_dir}")
if(_FICCP_MATCH_VAR_FULL)
set(${_FICCP_MATCH_VAR_FULL} "${_ficcp_candidate}")
endif()
break()
endif()
endforeach()
endmacro()

macro(find_cdt_magic_enum)
if(NOT TARGET magic_enum::magic_enum)
if(IS_DIRECTORY "${CDT_ROOT}/include/magic_enum")
Expand All @@ -7,30 +45,41 @@ macro(find_cdt_magic_enum)
INTERFACE_INCLUDE_DIRECTORIES "${CDT_ROOT}/include"
)

# elseif(IS_DIRECTORY "${CDT_CONTRACT_INCLUDE_PATH}/magic_enum")
# add_library(magic_enum::magic_enum INTERFACE IMPORTED)
# set_target_properties(magic_enum::magic_enum PROPERTIES
# INTERFACE_INCLUDE_DIRECTORIES "${CDT_CONTRACT_INCLUDE_PATH}"
# )
else()
get_property(all_includes DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
message(STATUS "Searching for magic_enum in include directories: ${all_includes}")
foreach(dir IN LISTS all_includes)
file(GLOB_RECURSE matches "${dir}/magic_enum/*.hpp")
if(matches)
message(NOTICE "Found ${HEADER_TO_FIND} in: ${matches}")
add_library(magic_enum::magic_enum INTERFACE IMPORTED)
set_target_properties(magic_enum::magic_enum PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${dir}"
)
break()
find_in_cdt_contract_paths(_magic_enum_inc MATCH magic_enum DIRECTORY)
if(_magic_enum_inc)
add_library(magic_enum::magic_enum INTERFACE IMPORTED)
set_target_properties(magic_enum::magic_enum PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${_magic_enum_inc}"
)

elseif(VCPKG_INSTALLED_DIR AND VCPKG_TARGET_TRIPLET AND IS_DIRECTORY "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include/magic_enum")
set(_vcpkg_include "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include")
message(NOTICE "Using vcpkg magic_enum include directory: ${_vcpkg_include}")
add_library(magic_enum::magic_enum INTERFACE IMPORTED)
set_target_properties(magic_enum::magic_enum PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${_vcpkg_include}"
)
else()
get_property(all_includes DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
message(STATUS "Searching for magic_enum in include directories: ${all_includes}")
foreach(dir IN LISTS all_includes)
file(GLOB_RECURSE matches "${dir}/magic_enum/*.hpp")
if(matches)
message(NOTICE "Found magic_enum in: ${matches}")
add_library(magic_enum::magic_enum INTERFACE IMPORTED)
set_target_properties(magic_enum::magic_enum PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${dir}"
)
break()
endif()
endforeach()

if(NOT TARGET magic_enum::magic_enum)
message(FATAL_ERROR "magic_enum library not found. Please ensure it is installed and available in either
${CDT_ROOT}/include
${CDT_CONTRACT_INCLUDE_PATH}")
endif()
endforeach()

if(NOT TARGET magic_enum::magic_enum)
message(FATAL_ERROR "magic_enum library not found. Please ensure it is installed and available in either
${CDT_ROOT}/include
${CDT_CONTRACT_INCLUDE_PATH}")
endif()
endif()
endif()
Expand Down
1 change: 1 addition & 0 deletions cmake/CDTWasmToolchain.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,6 @@ set(CMAKE_OSX_DEPLOYMENT_TARGET="")
# ADD ANY PROVIDED INCLUDE DIRECTORIES
# `-DCDT_CONTRACT_INCLUDE_PATH=<semicolon delimited include paths>`
if(IS_DIRECTORY ${CDT_CONTRACT_INCLUDE_PATH})
message(NOTICE "Adding CDT contract include path: ${CDT_CONTRACT_INCLUDE_PATH}")
include_directories(BEFORE ${CDT_CONTRACT_INCLUDE_PATH})
endif()
20 changes: 18 additions & 2 deletions cmake/ToolsExternalProject.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,24 @@ endif()

ExternalProject_Add(
CDTTools
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DVERSION_FULL=${VERSION_FULL} -DCMAKE_INSTALL_BINDIR=${CMAKE_INSTALL_BINDIR} -DVERSION_MAJOR=${VERSION_MAJOR} -DVERSION_MINOR=${VERSION_MINOR} -DVERSION_PATCH=${VERSION_PATCH} -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DVCPKG_INSTALLED_DIR=${CMAKE_BINARY_DIR}/vcpkg_installed -DCDT_INSTALL_PREFIX=${CDT_INSTALL_PREFIX} -DLLVM_DIR=${LLVM_DIR} -DClang_DIR=${Clang_DIR} -DCMAKE_EXPORT_COMPILE_COMMANDS=ON

CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
-DCMAKE_PREFIX_PATH=${_vcpkg_share}/..
-DCMAKE_INSTALL_BINDIR=${CMAKE_INSTALL_BINDIR}
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
-DVCPKG_INSTALLED_DIR=${CMAKE_BINARY_DIR}/vcpkg_installed
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use the VCPKG variable instead of vpkg_installed

-DCDT_INSTALL_PREFIX=${CDT_INSTALL_PREFIX}
-DLLVM_DIR=${LLVM_DIR}
-DClang_DIR=${Clang_DIR}
-DVERSION_FULL=${VERSION_FULL}
-DVERSION_MAJOR=${VERSION_MAJOR}
-DVERSION_MINOR=${VERSION_MINOR}
-DVERSION_PATCH=${VERSION_PATCH}
SOURCE_DIR "${CMAKE_SOURCE_DIR}/tools"
BINARY_DIR "${CMAKE_BINARY_DIR}/tools"
UPDATE_COMMAND ""
Expand Down
Loading