Skip to content

Commit

Permalink
Issue chipsalliance#239 (Part 1)
Browse files Browse the repository at this point in the history
Add Windows platform support

Highlights -
* Raise the minimum CXX standard to 14 (this matches what UHDM's requirement)
* Use Python3 package (instead of PythonLibs) to get the runtime library directory
  path. This is required to locate the specific python dll needed to deploy for
  DLL specific platforms like windows.
* For windows specific builds, move the generated library for the surelog binary
  target to the bin folder to avoid collision with the surelog library target.
* For unix only, add dependency on stdc++fs to bring in support for filesystem
  module with gcc7.
* Split the post-build step into two - platform dependent and platform independent
  This is required because Windows doesn't have support for symlinks and so the
  only viable option is to copy over the necessary files. Common post-build would
  penalize unix platform users.
* When installing, use target outputs without naming them so the commands work
  across platforms.
* Decorative change - Fixed a few indenting issues
  • Loading branch information
hs committed May 21, 2020
1 parent b4a360f commit e63ebbe
Showing 1 changed file with 66 additions and 35 deletions.
101 changes: 66 additions & 35 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ add_subdirectory(third_party/antlr4/runtime/Cpp EXCLUDE_FROM_ALL)
add_subdirectory(third_party/UHDM)
add_subdirectory(third_party/googletest EXCLUDE_FROM_ALL)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

Expand All @@ -42,11 +42,12 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin)
find_package(SWIG REQUIRED)

# Python
find_package(PythonLibs 3.3 REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
message(STATUS "PYTHON_LIBRARIES = ${PYTHON_LIBRARIES}")
message(STATUS "PYTHON_EXECUTABLE = ${PYTHON_EXECUTABLE}")
message(STATUS "PYTHON_INCLUDE_DIRS = ${PYTHON_INCLUDE_DIRS}")
find_package(Python3 3.3 REQUIRED COMPONENTS Interpreter Development)
include_directories(${Python3_INCLUDE_DIRS})
message(STATUS "Python3_LIBRARIES = ${Python3_LIBRARIES}")
message(STATUS "Python3_EXECUTABLE = ${Python3_EXECUTABLE}")
message(STATUS "Python3_INCLUDE_DIRS = ${Python3_INCLUDE_DIRS}")
message(STATUS "Python3_RUNTIME_LIBRARY_DIRS = ${Python3_RUNTIME_LIBRARY_DIRS}")

# Includes
include_directories("${PROJECT_SOURCE_DIR}/third_party/antlr4/runtime/Cpp/runtime/src/")
Expand Down Expand Up @@ -154,7 +155,7 @@ set(surelog_grammars-GENERATED_SRC
${PROJECT_SOURCE_DIR}/src/parser/SV3_1aSplitterParserBaseListener.cpp
${PROJECT_SOURCE_DIR}/src/parser/SV3_1aSplitterParser.cpp
${PROJECT_SOURCE_DIR}/src/parser/SV3_1aSplitterParserListener.cpp
)
)

add_custom_command(
OUTPUT ${surelog_grammars-GENERATED_SRC} ${PROJECT_SOURCE_DIR}/src/parser/generated-parsers.tstamp
Expand All @@ -169,18 +170,18 @@ add_custom_command(
COMMAND java -jar ${ANTLR_JAR_LOCATION} -Werror -Dlanguage=Cpp
-o ${PROJECT_SOURCE_DIR}/src/parser/
SV3_1aLexer.g4 SV3_1aParser.g4
SV3_1aPpLexer.g4 SV3_1aPpParser.g4
SV3_1aSplitterLexer.g4 SV3_1aSplitterParser.g4
SV3_1aPpLexer.g4 SV3_1aPpParser.g4
SV3_1aSplitterLexer.g4 SV3_1aSplitterParser.g4
DEPENDS ${surelog_grammars}
COMMAND touch ${PROJECT_SOURCE_DIR}/src/parser/generated-parsers.tstamp
)

add_custom_command(
OUTPUT ${PROJECT_SOURCE_DIR}/src/SourceCompile/VObjectTypes.h
${PROJECT_SOURCE_DIR}/src/SourceCompile/VObjectTypes.cpp
${PROJECT_SOURCE_DIR}/src/API/vobjecttypes_py.h
${PROJECT_SOURCE_DIR}/src/API/vobjecttypes_py.h
${PROJECT_SOURCE_DIR}/src/SourceCompile/SV3_1aTreeShapeListener.h
${PROJECT_SOURCE_DIR}/src/SourceCompile/SV3_1aPpTreeShapeListener.h
${PROJECT_SOURCE_DIR}/src/SourceCompile/SV3_1aPpTreeShapeListener.h
DEPENDS ${PROJECT_SOURCE_DIR}/src/parser/generated-parsers.tstamp
${PROJECT_SOURCE_DIR}/src/SourceCompile/generate_parser_listener.tcl

Expand All @@ -193,15 +194,15 @@ add_custom_command(

add_custom_command(
OUTPUT ${PROJECT_SOURCE_DIR}/src/API/SV3_1aPythonListener.h
${PROJECT_SOURCE_DIR}/src/API/slSV3_1aPythonListener.py
${PROJECT_SOURCE_DIR}/src/API/slapi_wrap.cxx
${PROJECT_SOURCE_DIR}/src/API/slSV3_1aPythonListener.py
${PROJECT_SOURCE_DIR}/src/API/slapi_wrap.cxx
${PROJECT_SOURCE_DIR}/src/API/slapi_scripts.h
${PROJECT_SOURCE_DIR}/src/API/slapi.py
${PROJECT_SOURCE_DIR}/src/API/slapi.py
DEPENDS ${PROJECT_SOURCE_DIR}/src/API/slapi_scripts.i
${PROJECT_SOURCE_DIR}/src/API/vobjecttypes_py.h
${PROJECT_SOURCE_DIR}/src/parser/generated-parsers.tstamp
${PROJECT_SOURCE_DIR}/src/API/generate_python_listener_api.tcl
${PROJECT_SOURCE_DIR}/src/API/embed_python_api.tcl
${PROJECT_SOURCE_DIR}/src/API/generate_python_listener_api.tcl
${PROJECT_SOURCE_DIR}/src/API/embed_python_api.tcl

WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/src/"
COMMAND echo "---------- Python API generation"
Expand Down Expand Up @@ -291,11 +292,17 @@ endforeach()
set(SURELOG_PUBLIC_HEADERS ${PROJECT_SOURCE_DIR}/src/surelog.h)

add_library(surelog STATIC ${surelog_SRC} ${surelog_generated_SRC})
set_target_properties(surelog PROPERTIES PUBLIC_HEADER
"${SURELOG_PUBLIC_HEADERS}")
set_target_properties(surelog PROPERTIES PUBLIC_HEADER "${SURELOG_PUBLIC_HEADERS}")

add_executable(surelog-bin ${PROJECT_SOURCE_DIR}/src/main.cpp)
set_target_properties(surelog-bin PROPERTIES OUTPUT_NAME surelog)
if(MSVC)
# We have two files named "surelog.lib" and both getting generated in the lib folder
# One is the surelog.lib generated by the surelog target and the other is the one generated
# becaues of /IMPLIB option when linking the executable. Unfortunately, there is no documented
# way to disable the latter in CMake. So, moving the library to the bin directory (right next to the exe)
set_target_properties(surelog-bin PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin)
endif()

add_executable(hellosureworld ${PROJECT_SOURCE_DIR}/src/hellosureworld.cpp)
add_executable(hellouhdm ${PROJECT_SOURCE_DIR}/src/hellouhdm.cpp)
Expand All @@ -310,10 +317,11 @@ add_dependencies(GenerateParser antlr4_static)
add_dependencies(surelog GenerateParser)
add_dependencies(surelog GenerateSerializer)

target_link_libraries(surelog PRIVATE ${PYTHON_LIBRARIES})
target_link_libraries(surelog PRIVATE ${Python3_LIBRARIES})
target_link_libraries(surelog PRIVATE ${TCMALLOC_LIBRARY})

if (UNIX)
target_link_libraries(surelog PRIVATE stdc++fs)
target_link_libraries(surelog PRIVATE dl)
target_link_libraries(surelog PRIVATE util)
target_link_libraries(surelog PRIVATE m)
Expand Down Expand Up @@ -346,23 +354,47 @@ target_link_libraries(hellouhdm surelog)
add_custom_command(
TARGET surelog-bin
POST_BUILD
COMMAND echo " Creating staging for precompiled packages"
COMMAND mkdir -p ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/sv
COMMAND mkdir -p ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/python
COMMAND ln -fs ${PROJECT_SOURCE_DIR}/third_party/UVM/ovm-2.1.2 ovm-2.1.2
COMMAND ln -fs ${PROJECT_SOURCE_DIR}/third_party/UVM/1800.2-2017-1.0 1800.2-2017-1.0
COMMAND ln -fs ${PROJECT_SOURCE_DIR}/third_party/UVM/vmm-1.1.1a vmm-1.1.1a
COMMAND rm -rf slpp_all slpp_unit
COMMAND cp -f ${PROJECT_SOURCE_DIR}/src/API/builtin.sv ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/sv/builtin.sv
COMMAND cp -f ${PROJECT_SOURCE_DIR}/src/API/slSV3_1aPythonListener.py
COMMAND echo " Creating platform independent staging for precompiled packages"
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/sv
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/python
COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/slpp_all
COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/slpp_unit
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PROJECT_SOURCE_DIR}/src/API/builtin.sv
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/sv/builtin.sv
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PROJECT_SOURCE_DIR}/src/API/slSV3_1aPythonListener.py
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/python/slSV3_1aPythonListener.py
COMMAND cp -f ${PROJECT_SOURCE_DIR}/src/API/slformatmsg.py
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PROJECT_SOURCE_DIR}/src/API/slformatmsg.py
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/python/slformatmsg.py
COMMAND cp -f ${PROJECT_SOURCE_DIR}/src/API/slwaivers.py
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PROJECT_SOURCE_DIR}/src/API/slwaivers.py
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/python/slwaivers.py
COMMAND echo " Staging created"
COMMAND echo " Platform independent staging completed"
WORKING_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")

if (WIN32)
add_custom_command(
TARGET surelog-bin
POST_BUILD
COMMAND echo " Creating platform depdendent staging for precompiled packages"
COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/third_party/UVM/ovm-2.1.2 ovm-2.1.2
COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/third_party/UVM/1800.2-2017-1.0 1800.2-2017-1.0
COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/third_party/UVM/vmm-1.1.1a vmm-1.1.1a
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${Python3_RUNTIME_LIBRARY_DIRS}/python3${Python3_VERSION_MINOR}$<$<CONFIG:Debug>:_d>.dll
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
COMMAND echo " Platform depdendent staging completed"
WORKING_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
else()
add_custom_command(
TARGET surelog-bin
POST_BUILD
COMMAND echo " Creating platform depdendent staging for precompiled packages"
COMMAND ln -fs ${PROJECT_SOURCE_DIR}/third_party/UVM/ovm-2.1.2 ovm-2.1.2
COMMAND ln -fs ${PROJECT_SOURCE_DIR}/third_party/UVM/1800.2-2017-1.0 1800.2-2017-1.0
COMMAND ln -fs ${PROJECT_SOURCE_DIR}/third_party/UVM/vmm-1.1.1a vmm-1.1.1a
COMMAND echo " Platform depdendent staging completed"
WORKING_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
endif()

add_custom_target(PrecompileOVM DEPENDS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/pkg/work/ovm_pkg.sv.slpa)
add_custom_command(
#TARGET surelog-bin
Expand Down Expand Up @@ -399,6 +431,9 @@ install(
TARGETS surelog
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/surelog
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog)
install(
TARGETS antlr4_static flatbuffers
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/surelog)
install(
DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/python
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/sv
Expand All @@ -417,10 +452,6 @@ install(
${PROJECT_SOURCE_DIR}/src/ErrorReporting/Report.h
${PROJECT_SOURCE_DIR}/src/ErrorReporting/Waiver.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/ErrorReporting)
install(
FILES ${PROJECT_SOURCE_DIR}/dist/libantlr4-runtime.a
${CMAKE_BINARY_DIR}/third_party/flatbuffers/libflatbuffers.a
DESTINATION ${CMAKE_INSTALL_LIBDIR}/surelog)
install(
FILES ${PROJECT_SOURCE_DIR}/src/API/PythonAPI.h
${PROJECT_SOURCE_DIR}/src/API/SLAPI.h
Expand Down

0 comments on commit e63ebbe

Please sign in to comment.