# -*- mode:cmake -*-
cmake_minimum_required (VERSION 3.0)
# 2.8 needed because of ExternalProject

add_subdirectory(third_party/flatbuffers EXCLUDE_FROM_ALL)
add_subdirectory(third_party/antlr4/runtime/Cpp EXCLUDE_FROM_ALL)

FIND_PACKAGE(SWIG REQUIRED)

# Detect build type, fallback to release and throw a warning if use didn't specify any
if(NOT CMAKE_BUILD_TYPE)
  message(WARNING "Build type not set, falling back to Release mode.
 To specify build type use:
 -DCMAKE_BUILD_TYPE=<mode> where <mode> is Debug or Release.")
  set(CMAKE_BUILD_TYPE "Release" CACHE STRING
       "Choose the type of build, options are: Debug Release."
       FORCE)
endif(NOT CMAKE_BUILD_TYPE)

if(NOT NO_TCMALLOC)
  message(WARNING "USING TCMALLOC, IF YOU HAVE RUNTIME ISSUES, DISABLE -DNO_TCMALLOC")
endif(NOT NO_TCMALLOC)


option(WITH_LIBCXX "Building with clang++ and libc++(in Linux). To enable with: -DWITH_LIBCXX=On" On)

project(SURELOG)

set(CMAKE_CXX_STANDARD 11)

# Python
find_package(PythonLibs 3.3 REQUIRED)
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_DIRS})
INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/third_party/antlr4/runtime/Cpp/runtime/src/")
INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/third_party/flatbuffers/include/")
message(STATUS "PYTHON_LIBRARIES = ${PYTHON_LIBRARIES}")
message(STATUS "PYTHON_EXECUTABLE = ${PYTHON_EXECUTABLE}")
message(STATUS "PYTHON_INCLUDE_DIRS = ${PYTHON_INCLUDE_DIRS}")

# Directories
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/)
set(CMAKE_BUILD_FILES_DIRECTORY ${dir})
set(CMAKE_BUILD_DIRECTORY ${dir})

# C++ Compilation line
if(NOT NO_TCMALLOC)
  set (TCMALLOC_COMPILE_OPTIONS "-fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free")
endif(NOT NO_TCMALLOC)

set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} ${TCMALLOC_COMPILE_OPTIONS} ${MY_CXX_WARNING_FLAGS}")
set(CMAKE_CXX_FLAGS_DEBUG  "${CMAKE_CXX_FLAGS_DEBUG} ${TCMALLOC_COMPILE_OPTIONS} -Wall -O0 -g ${MY_CXX_WARNING_FLAGS}")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${TCMALLOC_COMPILE_OPTIONS} -Wall -O3 -DNDEBUG ${MY_CXX_WARNING_FLAGS}")

# Flatbuffer
set(flatbuffer-GENERATED_SRC
  ${PROJECT_SOURCE_DIR}/src/Cache/header_generated.h
  ${PROJECT_SOURCE_DIR}/src/Cache/parser_generated.h
  ${PROJECT_SOURCE_DIR}/src/Cache/preproc_generated.h
  ${PROJECT_SOURCE_DIR}/src/Cache/python_api_generated.h
 )

foreach( header_file ${flatbuffer-GENERATED_SRC} )
      set_source_files_properties(
          ${header_file}
          PROPERTIES
          GENERATED TRUE
          )
endforeach( header_file ${flatbuffer-GENERATED_SRC} )
add_custom_target(GenerateSerializer DEPENDS ${flatbuffer-GENERATED_SRC})
add_custom_command(
   OUTPUT ${flatbuffer-GENERATED_SRC}
   COMMAND
   flatc --cpp --binary -o ${PROJECT_SOURCE_DIR}/src/Cache/ ${PROJECT_SOURCE_DIR}/src/Cache/header.fbs ${PROJECT_SOURCE_DIR}/src/Cache/parser.fbs ${PROJECT_SOURCE_DIR}/src/Cache/preproc.fbs ${PROJECT_SOURCE_DIR}/src/Cache/python_api.fbs
   WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
   DEPENDS ${PROJECT_SOURCE_DIR}/src/Cache/parser.fbs ${PROJECT_SOURCE_DIR}/src/Cache/header.fbs ${FLATBUFFERS_FLATC_EXECUTABLE}
   )

# Java
find_package(Java)
find_package(Java COMPONENTS Runtime)
set(ANTLR_JAR_LOCATION ${PROJECT_SOURCE_DIR}/third_party/antlr4/antlr4-4.7.2-complete.jar)

add_custom_target(GenerateParser DEPENDS ${PROJECT_SOURCE_DIR}/src/parser/dummy1 ${PROJECT_SOURCE_DIR}/src/SourceCompile/dummy2)

add_custom_command(OUTPUT ${PROJECT_SOURCE_DIR}/src/parser/dummy1
  WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/grammar/"
  COMMAND echo "       Parser Generation..."
  COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_SOURCE_DIR}/src/parser/
  COMMAND java -jar ${ANTLR_JAR_LOCATION} -Werror -Dlanguage=Cpp -o ${PROJECT_SOURCE_DIR}/src/parser/ SV3_1aPpLexer.g4 SV3_1aLexer.g4 SV3_1aSplitterLexer.g4 SV3_1aPpParser.g4 SV3_1aParser.g4 SV3_1aSplitterParser.g4
  DEPENDS  ${PROJECT_SOURCE_DIR}/grammar/SV3_1aPpLexer.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aLexer.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aSplitterLexer.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aPpParser.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aParser.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aSplitterParser.g4
  COMMAND touch ${PROJECT_SOURCE_DIR}/src/parser/dummy1
  COMMAND echo "       Parser Generated."
)

add_custom_command(OUTPUT ${PROJECT_SOURCE_DIR}/src/SourceCompile/dummy2
  WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/src/"
  COMMAND echo "       Serializer, Parser Listener, code generation..."
  COMMAND SourceCompile/generate_parser_listener.tcl ;
  COMMAND API/generate_python_listener_api.tcl ;
  COMMAND echo "       Python API Generation..."
  COMMAND ${SWIG_EXECUTABLE}  -c++ -python -o API/slapi_wrap.cxx API/slapi.i ;
  COMMAND API/embed_python_api.tcl
  COMMAND touch ${PROJECT_SOURCE_DIR}/src/SourceCompile/dummy2
  COMMAND echo "       Code Generation completed"
  DEPENDS ${PROJECT_SOURCE_DIR}/grammar/SV3_1aPpLexer.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aLexer.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aSplitterLexer.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aPpParser.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aParser.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aSplitterParser.g4 ${PROJECT_SOURCE_DIR}/src/API/slapi.i ${PROJECT_SOURCE_DIR}/src/parser/dummy1
 )

include_directories(${PROJECT_SOURCE_DIR}/src)

file(GLOB surelog_SRC
  ${PROJECT_SOURCE_DIR}/src/parser/SV3_1aLexer.cpp
  ${PROJECT_SOURCE_DIR}/src/parser/SV3_1aParserBaseListener.cpp
  ${PROJECT_SOURCE_DIR}/src/parser/SV3_1aParser.cpp
  ${PROJECT_SOURCE_DIR}/src/parser/SV3_1aParserListener.cpp
  ${PROJECT_SOURCE_DIR}/src/parser/SV3_1aPpLexer.cpp
  ${PROJECT_SOURCE_DIR}/src/parser/SV3_1aPpParserBaseListener.cpp
  ${PROJECT_SOURCE_DIR}/src/parser/SV3_1aPpParser.cpp
  ${PROJECT_SOURCE_DIR}/src/parser/SV3_1aPpParserListener.cpp
  ${PROJECT_SOURCE_DIR}/src/parser/SV3_1aSplitterLexer.cpp
  ${PROJECT_SOURCE_DIR}/src/parser/SV3_1aSplitterParserBaseListener.cpp
  ${PROJECT_SOURCE_DIR}/src/parser/SV3_1aSplitterParser.cpp
  ${PROJECT_SOURCE_DIR}/src/parser/SV3_1aSplitterParserListener.cpp
  ${PROJECT_SOURCE_DIR}/src/SourceCompile/VObjectTypes.cpp
  ${PROJECT_SOURCE_DIR}/src/API/*.cpp
  ${PROJECT_SOURCE_DIR}/src/Design/*.cpp
  ${PROJECT_SOURCE_DIR}/src/Library/*.cpp
  ${PROJECT_SOURCE_DIR}/src/SourceCompile/AnalyzeFile.cpp
  ${PROJECT_SOURCE_DIR}/src/SourceCompile/Compiler.cpp
  ${PROJECT_SOURCE_DIR}/src/SourceCompile/PreprocessFile.cpp
  ${PROJECT_SOURCE_DIR}/src/SourceCompile/SymbolTable.cpp
  ${PROJECT_SOURCE_DIR}/src/SourceCompile/AntlrParserErrorListener.cpp
  ${PROJECT_SOURCE_DIR}/src/SourceCompile/CompileSourceFile.cpp
  ${PROJECT_SOURCE_DIR}/src/SourceCompile/PythonListen.cpp
  ${PROJECT_SOURCE_DIR}/src/SourceCompile/AntlrParserHandler.cpp
  ${PROJECT_SOURCE_DIR}/src/SourceCompile/LoopCheck.cpp
  ${PROJECT_SOURCE_DIR}/src/SourceCompile/SV3_1aPpTreeShapeListener.cpp
  ${PROJECT_SOURCE_DIR}/src/SourceCompile/CheckCompile.cpp
  ${PROJECT_SOURCE_DIR}/src/SourceCompile/MacroInfo.cpp
  ${PROJECT_SOURCE_DIR}/src/SourceCompile/SV3_1aTreeShapeHelper.cpp
  ${PROJECT_SOURCE_DIR}/src/SourceCompile/CompilationUnit.cpp
  ${PROJECT_SOURCE_DIR}/src/SourceCompile/ParseFile.cpp
  ${PROJECT_SOURCE_DIR}/src/SourceCompile/SV3_1aTreeShapeListener.cpp
  ${PROJECT_SOURCE_DIR}/src/DesignCompile/*.cpp
  ${PROJECT_SOURCE_DIR}/src/Testbench/*.cpp
  ${PROJECT_SOURCE_DIR}/src/CommandLine/*.cpp
  ${PROJECT_SOURCE_DIR}/src/Common/*.cpp
  ${PROJECT_SOURCE_DIR}/src/ErrorReporting/*.cpp
  ${PROJECT_SOURCE_DIR}/src/Utils/*.cpp
  ${PROJECT_SOURCE_DIR}/src/Cache/*.cpp
  ${PROJECT_SOURCE_DIR}/src/Config/*.cpp
  ${PROJECT_SOURCE_DIR}/src/Expression/*.cpp
  ${PROJECT_SOURCE_DIR}/src/Package/*.cpp
  )

set (SURELOG_PUBLIC_HEADERS
  ${PROJECT_SOURCE_DIR}/src/surelog.h
) 
  
add_library(surelog STATIC ${surelog_SRC})
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
)

add_executable(hellosureworld ${PROJECT_SOURCE_DIR}/src/hellosureworld.cpp)

add_dependencies(surelog-bin surelog)
add_dependencies(surelog flatc)
add_dependencies(surelog antlr4_static)
add_dependencies(surelog flatbuffers)
add_dependencies(GenerateParser antlr4_static)
add_dependencies(surelog GenerateParser)
add_dependencies(surelog GenerateSerializer)

if(NOT NO_TCMALLOC)
  set (TCMALLOC_LIBRARY tcmalloc)
endif(NOT NO_TCMALLOC)

set (ALL_LIBRARIES_FOR_SURELOG
  surelog
  ${PYTHON_LIBRARIES}
  -L${PROJECT_SOURCE_DIR}/dist/ libantlr4-runtime.a
  -L${PROJECT_SOURCE_DIR}/build/third_party/flatbuffers libflatbuffers.a
  dl util m rt pthread ${TCMALLOC_LIBRARY}
)

# Linkage instructions
target_link_libraries(
  surelog-bin ${ALL_LIBRARIES_FOR_SURELOG} 
)

add_dependencies(hellosureworld surelog)
add_dependencies(hellosureworld flatc)
add_dependencies(hellosureworld antlr4_static)
add_dependencies(hellosureworld flatbuffers)
add_dependencies(hellosureworld GenerateParser)
add_dependencies(hellosureworld GenerateSerializer)
target_link_libraries(
  hellosureworld ${ALL_LIBRARIES_FOR_SURELOG} 
)

# Creation of the distribution directory,
# Precompiled package creation
add_custom_command(TARGET surelog-bin POST_BUILD
  COMMAND echo "       Creating staging for precompiled packages"
  COMMAND mkdir -p ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/sv
  COMMAND mkdir -p ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/python
  COMMAND cp -f ${CMAKE_BINARY_DIR}/../src/API/builtin.sv ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/sv
  COMMAND ln -fs ${CMAKE_BINARY_DIR}/../third_party/UVM/ovm-2.1.2  ovm-2.1.2
  COMMAND ln -fs ${CMAKE_BINARY_DIR}/../third_party/UVM/uvm-1.2    uvm-1.2
  COMMAND ln -fs ${CMAKE_BINARY_DIR}/../third_party/UVM/vmm-1.1.1a vmm-1.1.1a
  COMMAND rm -rf slpp_all slpp_unit
  COMMAND cp -f ${CMAKE_BINARY_DIR}/../src/API/slSV3_1aPythonListener.py ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/python/
  COMMAND cp -f ${CMAKE_BINARY_DIR}/../src/API/slformatmsg.py ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/python/slformatmsg.py
  COMMAND cp -f ${CMAKE_BINARY_DIR}/../src/API/slwaivers.py ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/python/
  COMMAND echo "       Creating OVM precompiled package..."
  COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/surelog -nobuiltin -createcache +incdir+ovm-2.1.2/src/ +incdir+vmm-1.1.1a/sv ovm-2.1.2/src/ovm_pkg.sv -writepp  -mt 0 -parse -nocomp -noelab -nostdout
  COMMAND echo "       Creating UVM precompiled package..."
  COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/surelog -nobuiltin -createcache +incdir+.+uvm-1.2/src/ uvm-1.2/src/uvm_pkg.sv -writepp   -mt 0 -parse -nocomp -noelab -nostdout
  COMMAND echo "       Packages created"

  WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
 )


# Installation target
INSTALL(
  TARGETS surelog-bin
  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  )
INSTALL(
  TARGETS surelog
  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/surelog
  PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog
)
INSTALL(
  DIRECTORY   ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/python
              ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/sv
              ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/pkg
  DESTINATION ${CMAKE_INSTALL_LIBDIR}/surelog
)
INSTALL(
  FILES  ${PROJECT_SOURCE_DIR}/src/CommandLine/CommandLineParser.h
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/CommandLine
)
INSTALL(
  FILES  
  ${PROJECT_SOURCE_DIR}/src/SourceCompile/SymbolTable.h
  ${PROJECT_SOURCE_DIR}/src/SourceCompile/VObjectTypes.h
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/SourceCompile
  )
INSTALL(
  FILES
  ${PROJECT_SOURCE_DIR}/src/ErrorReporting/Location.h
  ${PROJECT_SOURCE_DIR}/src/ErrorReporting/Error.h
  ${PROJECT_SOURCE_DIR}/src/ErrorReporting/ErrorDefinition.h
  ${PROJECT_SOURCE_DIR}/src/ErrorReporting/ErrorContainer.h
  ${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
  ${PROJECT_SOURCE_DIR}/build/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
  ${PROJECT_SOURCE_DIR}/src/API/Surelog.h
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/API
  )
INSTALL(
  FILES
  ${PROJECT_SOURCE_DIR}/src/Common/ClockingBlockHolder.h
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/Common
  )
INSTALL(
  FILES
  ${PROJECT_SOURCE_DIR}/src/DesignCompile/CompileHelper.h
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/DesignCompile
  )
INSTALL(
  FILES
  ${PROJECT_SOURCE_DIR}/src/Design/ClockingBlock.h
  ${PROJECT_SOURCE_DIR}/src/Design/Design.h
  ${PROJECT_SOURCE_DIR}/src/Design/Instance.h
  ${PROJECT_SOURCE_DIR}/src/Design/Signal.h
  ${PROJECT_SOURCE_DIR}/src/Design/ValuedComponentI.h
  ${PROJECT_SOURCE_DIR}/src/Design/DataType.h
  ${PROJECT_SOURCE_DIR}/src/Design/Enum.h
  ${PROJECT_SOURCE_DIR}/src/Design/ModuleDefinition.h
  ${PROJECT_SOURCE_DIR}/src/Design/Statement.h
  ${PROJECT_SOURCE_DIR}/src/Design/VObject.h
  ${PROJECT_SOURCE_DIR}/src/Design/DefParam.h
  ${PROJECT_SOURCE_DIR}/src/Design/FileCNodeId.h
  ${PROJECT_SOURCE_DIR}/src/Design/ModuleInstance.h
  ${PROJECT_SOURCE_DIR}/src/Design/Task.h
  ${PROJECT_SOURCE_DIR}/src/Design/DesignComponent.h
  ${PROJECT_SOURCE_DIR}/src/Design/FileContent.h
  ${PROJECT_SOURCE_DIR}/src/Design/Parameter.h
  ${PROJECT_SOURCE_DIR}/src/Design/TfPortItem.h
  ${PROJECT_SOURCE_DIR}/src/Design/DesignElement.h
  ${PROJECT_SOURCE_DIR}/src/Design/Function.h
  ${PROJECT_SOURCE_DIR}/src/Design/Scope.h
  ${PROJECT_SOURCE_DIR}/src/Design/TimeInfo.h
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/Design
  )
INSTALL(
  FILES
  ${PROJECT_SOURCE_DIR}/src/Testbench/ClassDefinition.h
  ${PROJECT_SOURCE_DIR}/src/Testbench/CoverGroupDefinition.h
  ${PROJECT_SOURCE_DIR}/src/Testbench/Property.h
  ${PROJECT_SOURCE_DIR}/src/Testbench/Variable.h
  ${PROJECT_SOURCE_DIR}/src/Testbench/ClassObject.h
  ${PROJECT_SOURCE_DIR}/src/Testbench/FunctionMethod.h
  ${PROJECT_SOURCE_DIR}/src/Testbench/TaskMethod.h
  ${PROJECT_SOURCE_DIR}/src/Testbench/Constraint.h
  ${PROJECT_SOURCE_DIR}/src/Testbench/Program.h
  ${PROJECT_SOURCE_DIR}/src/Testbench/TypeDef.h
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/Testbench
  )
INSTALL(
  FILES
  ${PROJECT_SOURCE_DIR}/src/Package/Package.h
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/Package
)
INSTALL(
  FILES
  ${PROJECT_SOURCE_DIR}/src/Library/Library.h
  ${PROJECT_SOURCE_DIR}/src/Library/LibrarySet.h
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/Library
  )
INSTALL(
  FILES
  ${PROJECT_SOURCE_DIR}/src/Config/Config.h
  ${PROJECT_SOURCE_DIR}/src/Config/ConfigSet.h
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/Config
  )
INSTALL(
  FILES
  ${PROJECT_SOURCE_DIR}/src/Expression/ExprBuilder.h
  ${PROJECT_SOURCE_DIR}/src/Expression/Expr.h
  ${PROJECT_SOURCE_DIR}/src/Expression/Value.h
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/Expression
  )
