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) ...@@ -87,7 +87,7 @@ function(swig_lib)
# These includes are always needed. # These includes are always needed.
target_include_directories(${ARG_NAME} target_include_directories(${ARG_NAME}
PRIVATE PRIVATE
${OPENROAD_HOME}/include ${MINIEDA_HOME}/include
) )
if (${ARG_LANGUAGE} STREQUAL tcl) if (${ARG_LANGUAGE} STREQUAL tcl)
...@@ -130,9 +130,9 @@ function(swig_lib) ...@@ -130,9 +130,9 @@ function(swig_lib)
set(LANG_INIT ${CMAKE_CURRENT_BINARY_DIR}/${ARG_NAME}-${ARG_LANGUAGE}InitVar.cc) set(LANG_INIT ${CMAKE_CURRENT_BINARY_DIR}/${ARG_NAME}-${ARG_LANGUAGE}InitVar.cc)
add_custom_command(OUTPUT ${LANG_INIT} 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} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${ARG_SCRIPTS} DEPENDS ${ARG_SCRIPTS} ${MINIEDA_HOME}/src/cmake/etc/TclEncode.tcl
) )
target_sources(${ARG_NAME} target_sources(${ARG_NAME}
......
...@@ -25,6 +25,8 @@ target_link_libraries(minieda_swig ...@@ -25,6 +25,8 @@ target_link_libraries(minieda_swig
odb odb
) )
# swig_lib(NAME util_swig)
add_executable(minieda add_executable(minieda
${MINIEDA_SOURCE} ${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 @@ ...@@ -6,7 +6,7 @@
#include "utl/tcl_utl.h" #include "utl/tcl_utl.h"
namespace eda { namespace eda {
extern const char *minieda_swig_tcl_inits[]; extern const char* minieda_swig_tcl_inits[];
} }
// Swig uses C linkage for init functions. // Swig uses C linkage for init functions.
...@@ -22,6 +22,7 @@ extern const char* metrics_filename; ...@@ -22,6 +22,7 @@ extern const char* metrics_filename;
namespace eda { namespace eda {
using utl::evalTclInit; using utl::evalTclInit;
using utl::initTclUtil;
MiniEda::MiniEda() MiniEda::MiniEda()
: tcl_interp_(nullptr), : tcl_interp_(nullptr),
...@@ -67,6 +68,7 @@ void MiniEda::init(Tcl_Interp* interp) ...@@ -67,6 +68,7 @@ void MiniEda::init(Tcl_Interp* interp)
// Init components. // Init components.
Minieda_swig_Init(interp); Minieda_swig_Init(interp);
// Import TCL scripts // Import TCL scripts
initTclUtil(interp);
evalTclInit(interp, eda::minieda_swig_tcl_inits); evalTclInit(interp, eda::minieda_swig_tcl_inits);
// defined in MakeModuleXX.h // defined in MakeModuleXX.h
......
proc logger_echo { usr_input } { proc logger_echo { usr_input } {
eda::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") ...@@ -18,6 +18,7 @@ include("swig_lib")
swig_lib(NAME utl swig_lib(NAME utl
NAMESPACE utl NAMESPACE utl
I_FILE src/Logger.i I_FILE src/Logger.i
SCRIPTS Util.tcl
) )
target_sources(utl target_sources(utl
......
...@@ -11,5 +11,6 @@ namespace utl { ...@@ -11,5 +11,6 @@ namespace utl {
// separate files that have to be located and loaded at run time. // separate files that have to be located and loaded at run time.
void evalTclInit(Tcl_Interp *interp, const char *inits[]); void evalTclInit(Tcl_Interp *interp, const char *inits[]);
char* unencode(const char *inits[]); char* unencode(const char *inits[]);
void initTclUtil(Tcl_Interp* interp);
} // namespace utl } // namespace utl
...@@ -4,6 +4,10 @@ ...@@ -4,6 +4,10 @@
#include "utl/tcl_utl.h" #include "utl/tcl_utl.h"
namespace eda {
extern const char* utl_tcl_inits[];
}
namespace utl { namespace utl {
void evalTclInit(Tcl_Interp *interp, void evalTclInit(Tcl_Interp *interp,
...@@ -43,5 +47,10 @@ char* unencode(const char *inits[]) ...@@ -43,5 +47,10 @@ char* unencode(const char *inits[])
return unencoded; return unencoded;
} }
void initTclUtil(Tcl_Interp* interp)
{
evalTclInit(interp, eda::utl_tcl_inits);
}
} // namespace utl } // 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