Commit 9150c0e1 by lvzhengyang

add Util.tcl to Tcl built-in by add it to utl swig scripts

parent 78055054
......@@ -87,7 +87,7 @@ function(swig_lib)
# These includes are always needed.
target_include_directories(${ARG_NAME}
PRIVATE
${OPENROAD_HOME}/include
${MINIEDA_HOME}/include
)
if (${ARG_LANGUAGE} STREQUAL tcl)
......@@ -130,9 +130,9 @@ function(swig_lib)
set(LANG_INIT ${CMAKE_CURRENT_BINARY_DIR}/${ARG_NAME}-${ARG_LANGUAGE}InitVar.cc)
add_custom_command(OUTPUT ${LANG_INIT}
COMMAND ${MINIEDA_HOME}/src/cmake/etc/TclEncode.tcl ${LANG_INIT} ${ARG_NAME}_${ARG_LANGUAGE}_inits ${ARG_SCRIPTS}
COMMAND ${MINIEDA_HOME}/src/cmake/etc/TclEncode.tcl ${LANG_INIT} ${ARG_NAME}_${ARG_LANGUAGE}_inits ${ARG_SCRIPTS}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${ARG_SCRIPTS}
DEPENDS ${ARG_SCRIPTS} ${MINIEDA_HOME}/src/cmake/etc/TclEncode.tcl
)
target_sources(${ARG_NAME}
......
......@@ -25,6 +25,8 @@ target_link_libraries(minieda_swig
odb
)
# swig_lib(NAME util_swig)
add_executable(minieda
${MINIEDA_SOURCE}
)
......
# include cmake functions defined in the path
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/src/cmake")
include("swig_lib")
# paths for submodule
set(odb_HOME ${PROJECT_SOURCE_DIR}/src/odb)
# main program source
set(MINIEDA_SOURCE
MiniEda.cc
Main.cc
)
# Swig Config
# swig_lib(NAME minieda_swig
# NAMESPACE eda
# I_FILE MiniEda.i
# SCRIPTS MiniEda.tcl
# )
set_source_files_properties(MiniEda.i PROPERTIES CPLUSPLUS ON)
set(LANGUAGE_OPTIONS -namespace -prefix eda)
set_property(SOURCE MiniEda.i
PROPERTY COMPILE_OPTIONS ${LANGUAGE_OPTIONS}
-Werror
-w317,325,378,401,402,467,472,503,509)
set_property(SOURCE ${ARG_I_FILE}
PROPERTY SWIG_MODULE_NAME ${ARG_NAME})
set_property(SOURCE ${ARG_I_FILE}
PROPERTY USE_SWIG_DEPENDENCIES TRUE)
swig_add_library(minieda_swig
LANGUAGE tcl
TYPE STATIC
SOURCES MiniEda.i
)
get_target_property(GEN_SRCS minieda_swig SOURCES)
foreach(GEN_SRC ${GEN_SRCS})
set_source_files_properties(${GEN_SRC}
PROPERTIES
COMPILE_OPTIONS "-Wno-cast-qual;-Wno-missing-braces"
)
endforeach()
target_include_directories(minieda_swig
PRIVATE
${MINIEDA_HOME}/include
${TCL_INCLUDE_PATH}
)
set(MINIEDA_INIT ${CMAKE_CURRENT_BINARY_DIR}/minieda_swig-tclInitVar.cc)
set(MINIEDA_TCL_FILES MiniEda.tcl Util.tcl)
add_custom_command(OUTPUT ${MINIEDA_INIT}
COMMAND ${MINIEDA_HOME}/src/cmake/etc/TclEncode.tcl ${MINIEDA_INIT} minieda_swig_tcl_inits ${MINIEDA_TCL_FILES}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${MINIEDA_TCL_FILES} ${MINIEDA_HOME}/src/cmake/etc/TclEncode.tcl
)
target_sources(minieda_swig
PRIVATE
${MINIEDA_INIT}
)
target_link_libraries(minieda_swig
PRIVATE
utl
odb
)
add_executable(minieda
${MINIEDA_SOURCE}
)
target_compile_options(minieda
PRIVATE
-Wextra -pedantic -Wcast-qual
)
set_target_properties(minieda PROPERTIES
# Disable compiler specific extensions like gnu++11.
CXX_EXTENSIONS OFF
# Export symbols for stack trace printing
ENABLE_EXPORTS ON
)
target_compile_features(minieda PUBLIC cxx_std_17)
target_include_directories(minieda
PUBLIC
${MINIEDA_HOME}/include
${MINIEDA_HOME}/pkgs/include
${MINIEDA_HOME}/pkgs/boost_1_78_0
)
# Link Libraries
target_link_libraries(minieda
minieda_swig
utl
odb
${CMAKE_THREAD_LIBS_INIT}
${TCL_LIBRARY}
)
# tclReadline
if (TCL_READLINE_LIBRARY AND TCL_READLINE_H)
target_compile_definitions(minieda PRIVATE ENABLE_READLINE)
target_link_libraries(minieda ${TCL_READLINE_LIBRARY})
target_include_directories(minieda PRIVATE ${TCL_READLINE_H})
message(STATUS "TCL readline enabled")
else()
message(STATUS "TCL readline disabled")
endif()
if (BUILD_TCLX AND TCLX_LIBRARY AND TCLX_H)
target_compile_definitions(minieda PRIVATE ENABLE_TCLX)
target_link_libraries(minieda ${TCLX_LIBRARY})
target_include_directories(minieda PRIVATE ${TCLX_H})
message(STATUS "Tcl Extended enabled")
else()
message(STATUS "Tcl Extended disabled")
endif()
if (ZLIB_FOUND)
target_link_libraries(minieda ${ZLIB_LIBRARIES})
endif()
install(TARGETS minieda DESTINATION bin)
add_custom_target(minieda_tags etags -o TAGS
${MINIEDA_SOURCE}
${MINIEDA_HOME}/include/eda/*.hh
WORKING_DIRECTORY ${MINIEDA_HOME}/src
DEPENDS ${MINIEDA_SOURCE} ${MINIEDA_HEADERS} ${MINIEDA_TCL_FILES}
)
......@@ -6,7 +6,7 @@
#include "utl/tcl_utl.h"
namespace eda {
extern const char *minieda_swig_tcl_inits[];
extern const char* minieda_swig_tcl_inits[];
}
// Swig uses C linkage for init functions.
......@@ -22,6 +22,7 @@ extern const char* metrics_filename;
namespace eda {
using utl::evalTclInit;
using utl::initTclUtil;
MiniEda::MiniEda()
: tcl_interp_(nullptr),
......@@ -67,6 +68,7 @@ void MiniEda::init(Tcl_Interp* interp)
// Init components.
Minieda_swig_Init(interp);
// Import TCL scripts
initTclUtil(interp);
evalTclInit(interp, eda::minieda_swig_tcl_inits);
// defined in MakeModuleXX.h
......
proc logger_echo { usr_input } {
eda::logger_echo $usr_input
}
define_cmd_args "simple_test" {[-tmp tmp]}
proc simple_test {args} {
parse_key_args "simple_test" args keys {-tmp}
logger_echo $keys(-tmp)
}
......@@ -18,6 +18,7 @@ include("swig_lib")
swig_lib(NAME utl
NAMESPACE utl
I_FILE src/Logger.i
SCRIPTS Util.tcl
)
target_sources(utl
......
......@@ -11,5 +11,6 @@ namespace utl {
// separate files that have to be located and loaded at run time.
void evalTclInit(Tcl_Interp *interp, const char *inits[]);
char* unencode(const char *inits[]);
void initTclUtil(Tcl_Interp* interp);
} // namespace utl
......@@ -4,6 +4,10 @@
#include "utl/tcl_utl.h"
namespace eda {
extern const char* utl_tcl_inits[];
}
namespace utl {
void evalTclInit(Tcl_Interp *interp,
......@@ -43,5 +47,10 @@ char* unencode(const char *inits[])
return unencoded;
}
void initTclUtil(Tcl_Interp* interp)
{
evalTclInit(interp, eda::utl_tcl_inits);
}
} // namespace utl
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment