Skip to content

Commit

Permalink
ofs umd: add ofs umd framework (#1909)
Browse files Browse the repository at this point in the history
* ofs umd: add ofs umd framework

ofs umd (user mode driver) is a framework to take driver specs in yml
format and turn it into C data structure, and function
prototypes/implementations.
This commit adds:
* ofs_parse.py script that parses an ofs umd spec in .yml format and
  generates a header file for the given driver.
* ofs_add_driver CMake macro that, given the .yml, driver name, and list
  of sources it will:
  * call ofs_parse.py to generate the .h
  * create a cmake library named after the driver name and use given
    source to compile.
* sample unit tests in tests/ofs_driver that exercise:
  * The cmake macro
  * The functions generated by ofs_parse.py

TODO:
ofs_parse.py is mostly prototype-leve code and will need to be
refactored and cleaned up.
  • Loading branch information
r-rojo committed Mar 12, 2021
1 parent e62592b commit 15bac6c
Show file tree
Hide file tree
Showing 6 changed files with 674 additions and 0 deletions.
53 changes: 53 additions & 0 deletions cmake/modules/OFS.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#!/usr/bin/cmake -P
## Copyright(c) 2021, Intel Corporation
##
## Redistribution and use in source and binary forms, with or without
## modification, are permitted provided that the following conditions are met:
##
## * Redistributions of source code must retain the above copyright notice,
## this list of conditions and the following disclaimer.
## * Redistributions in binary form must reproduce the above copyright notice,
## this list of conditions and the following disclaimer in the documentation
## and/or other materials provided with the distribution.
## * Neither the name of Intel Corporation nor the names of its contributors
## may be used to endorse or promote products derived from this software
## without specific prior written permission.
##
## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
## ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
## LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
## CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
## SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
## INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
## CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
## ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
## POSSIBILITY OF SUCH DAMAGE.

macro(ofs_add_driver yml_file driver)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${driver}.h
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/scripts/ofs_parse.py ${CMAKE_CURRENT_LIST_DIR}/${yml_file} headers c ${CMAKE_CURRENT_BINARY_DIR} --driver ${driver}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS
${CMAKE_CURRENT_LIST_DIR}/${yml_file}
${CMAKE_SOURCE_DIR}/scripts/ofs_parse.py
)
add_library(${driver} SHARED
${CMAKE_CURRENT_BINARY_DIR}/${driver}.h
${ARGN}
)
target_include_directories(${driver} PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/ofs/libofs>
$<BUILD_INTERFACE:${OPAE_INCLUDE_PATH}>
$<INSTALL_INTERFACE:opae>
)

target_link_libraries(${driver} PUBLIC
opae-c
)
endmacro(ofs_add_driver yml_file)


Loading

0 comments on commit 15bac6c

Please sign in to comment.