Skip to content

Commit

Permalink
Ryans work on refactoring base64 additions
Browse files Browse the repository at this point in the history
  • Loading branch information
Ryan S. Elliott authored and nav-mohan committed Feb 2, 2025
1 parent d94a36a commit 2dfaa69
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 74 deletions.
12 changes: 0 additions & 12 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -167,32 +167,20 @@ if(NOT WIN32 OR CYGWIN)
endif()


# Keeping the name XXD for now, as otherwise this will result in much larger refactoring
# But everywhere, XXD = base64-encode
set(XXD_EXECUTABLE $<TARGET_FILE:base64-encode>)
set(LIBB64_PATH cpp/src/libb64/libb64) # PATH to LIBB64 SRC
set(BUFFERSIZE 16777216)

add_subdirectory(${CMAKE_SOURCE_DIR}/${LIBB64_PATH}) # compile the libb64
add_executable(base64-encode utils/base64-encode.cpp) # compile bas64-encode

target_include_directories(base64-encode PUBLIC
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/${LIBB64_PATH}/include>) # include files for base64-encode
target_include_directories(kim-api PUBLIC
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/${LIBB64_PATH}/include>) # include files for kim-api decode

target_link_libraries(base64-encode PRIVATE b64)
target_link_libraries(kim-api PRIVATE b64)

target_compile_definitions(kim-api PUBLIC
-DBUFFERSIZE=${BUFFERSIZE}) # shall we just pick a buffersize and discard this option?

add_dependencies(kim-api base64-encode)
add_dependencies(kim-api b64)
add_dependencies(base64-encode b64)

install(TARGETS base64-encode
RUNTIME DESTINATION ${CMAKE_INSTALL_RELOC_BINDIR})

# Add install rules for kim-api
#
Expand Down
1 change: 1 addition & 0 deletions cmake/build-tree-config.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ if("${KIM-API_FIND_VERSION}" VERSION_GREATER "2.1.99")
add_executable(KIM-API::portable-model-info ALIAS portable-model-info)
add_executable(KIM-API::simulator-model ALIAS simulator-model)
add_executable(KIM-API::collections-info ALIAS collections-info)
add_executable(KIM-API::base64-encode ALIAS base64-encode)
add_executable(KIM-API::shared-library-test ALIAS shared-library-test)
endif()

Expand Down
103 changes: 42 additions & 61 deletions cmake/items-macros.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -502,63 +502,44 @@ endmacro()
# Sets _blob_to_c_command to string for use with add_custom_command()
#
function(_add_custom_command_blob_to_cpp _dirin _filein _fileout)
include(FindPackageMessage)
find_program(XXD_EXECUTABLE "base64-encode")
if(XXD_EXECUTABLE)
find_package_message(xxd "Found base64-encode: (${XXD_EXECUTABLE})" "found")

string(MAKE_C_IDENTIFIER ${_filein} _cfilein)
set(_edit_xxd_output "${CMAKE_CURRENT_BINARY_DIR}/EditXXDOutput.cmake")
if(NOT EXISTS "${_edit_xxd_output}")
file(WRITE "${_edit_xxd_output}" # use a bracket argument to avoid ugly escaping
[=[
# This file was automatically generated by CMake; do not edit.
file(READ "${fileout}" _content)
string(REGEX REPLACE "unsigned char.*[[][]]" "unsigned char const ${varname}[]" _content "${_content}")
string(REGEX REPLACE "unsigned int.*=" "unsigned int const ${varname}_len =" _content "${_content}")
file(WRITE "${fileout}" "${_content}")
unset(_content)
]=]
)
get_property(_IMPORTED TARGET KIM-API::base64-encode PROPERTY "IMPORTED")
if(_IMPORTED) # using install tree config
if("${CMAKE_BUILD_TYPE}" STREQUAL "")
set(_BUILD_TYPE "NOCONFIG")
else()
string(TOUPPER "${CMAKE_BUILD_TYPE}" _BUILD_TYPE)
endif()
add_custom_command(OUTPUT ${_fileout}
COMMAND ${XXD_EXECUTABLE} -i "${_filein}" "${_fileout}"
COMMAND ${CMAKE_COMMAND} "-Dvarname=${_cfilein}" "-Dfilein=${_filein}" "-Dfileout=${_fileout}" -P "${_edit_xxd_output}"
DEPENDS "${_dirin}/${_filein}" "${_edit_xxd_output}"
WORKING_DIRECTORY "${_dirin}"
)
unset(_cfilein)
unset(_edit_xxd_output)
else()
# No backup yet
# Possible Solutions: 1) CMAKE only implementation of base64 encoding?
# 2) use system base64/openssl binaries?
message(FATAL_ERROR "Missing base64-encode: Please check the KIM-API installation.")
# find_package_message(xxd "Missing xxd: Falling back to less efficient cmake implementation." "missing")

# string(MAKE_C_IDENTIFIER ${_filein} _cfilein)
# set(_blob_to_source "${CMAKE_CURRENT_BINARY_DIR}/BlobToCSource.cmake")
# if(NOT EXISTS "${_blob_to_source}")
# file(WRITE "${_blob_to_source}" # use a bracket argument to avoid ugly escaping
# [=[
# # This file was automatically generated by CMake; do not edit.
# file(READ "${filein}" _content HEX)
# string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1," _content "${_content}")
# string(REGEX REPLACE ",$" "" _content "${_content}")
# file(WRITE "${fileout}" "unsigned char const ${varname}[] = { ${_content} };\n")
# file(APPEND "${fileout}" "unsigned int const ${varname}_len = sizeof( ${varname} );\n")
# unset(_content)
# ]=]
# )
# endif()
# add_custom_command(OUTPUT ${_fileout}
# COMMAND ${CMAKE_COMMAND} "-Dvarname=${_cfilein}" "-Dfilein=${_filein}" "-Dfileout=${_fileout}" -P "${_blob_to_source}"
# DEPENDS "${_dirin}/${_filein}" "${_blob_to_source}"
# WORKING_DIRECTORY "${_dirin}"
# )
# unset(_cfilein)
# unset(_blob_to_source)
get_property(_BASE64_ENCODE TARGET KIM-API::base64-encode PROPERTY "IMPORTED_LOCATION_${_BUILD_TYPE}")
unset(_BUILD_TYPE)
if("${_BASE64_ENCODE}" STREQUAL "")
message(FATAL_ERROR "Unable to locate 'base64-encode' utility")
endif()
else() # using build tree config
set(_BASE64_ENCODE KIM-API::base64-encode)
endif()
string(MAKE_C_IDENTIFIER ${_filein} _cfilein)
set(_edit_encode_output "${CMAKE_CURRENT_BINARY_DIR}/EditEncodeOutput.cmake")
if(NOT EXISTS "${_edit_encode_output}")
file(WRITE "${_edit_encode_output}" # use a bracket argument to avoid ugly escaping
[=[
# This file was automatically generated by CMake; do not edit.
file(READ "${fileout}" _content)
string(REGEX REPLACE "unsigned char.*[[][]]" "unsigned char const ${varname}[]" _content "${_content}")
string(REGEX REPLACE "unsigned int.*=" "unsigned int const ${varname}_len =" _content "${_content}")
file(WRITE "${fileout}" "${_content}")
unset(_content)
]=]
)
endif()
add_custom_command(OUTPUT ${_fileout}
COMMAND ${_BASE64_ENCODE} -i "${_filein}" "${_fileout}"
COMMAND ${CMAKE_COMMAND} "-Dvarname=${_cfilein}" "-Dfilein=${_filein}" "-Dfileout=${_fileout}" -P "${_edit_encode_output}"
DEPENDS "${_dirin}/${_filein}" "${_edit_encode_output}"
WORKING_DIRECTORY "${_dirin}"
)
unset(_cfilein)
unset(_edit_encode_output)
unset(_BASE64_ENCODE)
endfunction(_add_custom_command_blob_to_cpp)

#
Expand All @@ -568,13 +549,13 @@ endfunction(_add_custom_command_blob_to_cpp)
# Sets ITEM_*_SOURCES, ITEM_*_DECLARATIONS, ITEM_*_EMBEDDED_FILE_IDENTIFIER,
# and ITEM_*_EMBEDDED_FILE_INITIALIZER_LIST variables in parent scope.
#
function(_xxd_process_files)
function(_encode_process_files)
set(_options "")
set(_oneValueArgs FILE_TYPE)
set(_multiValueArgs FILE_NAMES)
cmake_parse_arguments(_ITEM "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN})
if(_ITEM_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "Unparsed arguments found in macro '_xxd_process_files'")
message(FATAL_ERROR "Unparsed arguments found in macro '_encode_process_files'")
endif()
unset(_options)
unset(_oneValueArgs)
Expand Down Expand Up @@ -624,7 +605,7 @@ function(_xxd_process_files)
set(ITEM_${_ITEM_FILE_TYPE}_DECLARATIONS "${_ITEM_DECLARATIONS}" PARENT_SCOPE)
set(ITEM_${_ITEM_FILE_TYPE}_EMBEDDED_FILE_IDENTIFIER "${_ITEM_EMBEDDED_FILE_IDENTIFIER}" PARENT_SCOPE)
set(ITEM_${_ITEM_FILE_TYPE}_EMBEDDED_FILE_INITIALIZER_LIST "${_ITEM_EMBEDDED_FILE_INITIALIZER_LIST}" PARENT_SCOPE)
endfunction(_xxd_process_files)
endfunction(_encode_process_files)

#
# Function to set collection install prefix and item library file name.
Expand Down Expand Up @@ -797,11 +778,11 @@ function(_add_kim_api_library)
endif()

set(_ITEM_SOURCES "")
_xxd_process_files(FILE_TYPE SM_SPEC_FILE FILE_NAMES "${ITEM_SM_SPEC_FILE}")
_encode_process_files(FILE_TYPE SM_SPEC_FILE FILE_NAMES "${ITEM_SM_SPEC_FILE}")
list(APPEND _ITEM_SOURCES ${ITEM_SM_SPEC_FILE_SOURCES})
_xxd_process_files(FILE_TYPE PARAMETER_FILE FILE_NAMES "${ITEM_PARAMETER_FILES}")
_encode_process_files(FILE_TYPE PARAMETER_FILE FILE_NAMES "${ITEM_PARAMETER_FILES}")
list(APPEND _ITEM_SOURCES ${ITEM_PARAMETER_FILE_SOURCES})
_xxd_process_files(FILE_TYPE METADATA_FILE FILE_NAMES "${ITEM_METADATA_FILES}")
_encode_process_files(FILE_TYPE METADATA_FILE FILE_NAMES "${ITEM_METADATA_FILES}")
list(APPEND _ITEM_SOURCES ${ITEM_METADATA_FILE_SOURCES})

configure_file(${KIM-API-ITEMS_DIR}/item-info.txt.in ${CMAKE_CURRENT_BINARY_DIR}/item-info.txt @ONLY)
Expand Down
11 changes: 10 additions & 1 deletion utils/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ include(RelocatablePath)
set(PORTABLE_MODEL_INFO ${PROJECT_NAME}-portable-model-info)
set(SIMULATOR_MODEL ${PROJECT_NAME}-simulator-model)
set(COLLECTIONS_INFO ${PROJECT_NAME}-collections-info)
set(BASE64_ENCODE ${PROJECT_NAME}-base64-encode)
set(COLLECTIONS_MANAGEMENT ${PROJECT_NAME}-collections-management)
set(SHARED_LIBRARY_TEST ${PROJECT_NAME}-shared-library-test)
set(ACTIVATE_SCRIPT ${PROJECT_NAME}-activate)
Expand Down Expand Up @@ -126,6 +127,14 @@ target_include_directories(collections-info PRIVATE "${PROJECT_SOURCE_DIR}/cpp/s
target_link_libraries(collections-info kim-api)
set_target_properties(collections-info PROPERTIES OUTPUT_NAME ${COLLECTIONS_INFO})

add_executable(base64-encode base64-encode.cpp)
target_include_directories(base64-encode PUBLIC
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/${LIBB64_PATH}/include>) # include files for base64-encode
target_link_libraries(base64-encode PRIVATE b64)
set_target_properties(base64-encode PROPERTIES OUTPUT_NAME ${BASE64_ENCODE})
add_dependencies(kim-api base64-encode)
add_dependencies(base64-encode b64)

add_executable(shared-library-test shared-library-test.cpp)
target_include_directories(shared-library-test PRIVATE "${PROJECT_BINARY_DIR}/cpp/include")
target_link_libraries(shared-library-test ${CMAKE_DL_LIBS})
Expand All @@ -138,7 +147,7 @@ else()
set(_dir "${CMAKE_INSTALL_RELOC_BINDIR}")
endif()
install(
TARGETS portable-model-info simulator-model collections-info shared-library-test
TARGETS portable-model-info simulator-model collections-info base64-encode shared-library-test
EXPORT KIM_API_Targets
DESTINATION "${_dir}"
)
Expand Down

0 comments on commit 2dfaa69

Please sign in to comment.