diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d467fb0..78e9ef09 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -508,7 +508,13 @@ add_custom_command(OUTPUT ${STA_TCL_INIT} # ################################################################ -find_package(TCL) +if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") + # OSX tcl is deprecated and prints a warning, so look for a user installed + # version before using the system version. + include(FindTcl) +else() + find_package(TCL REQUIRED) +endif() # Zlib include(FindZLIB) @@ -638,7 +644,7 @@ add_executable(sta app/Main.cc ${STA_WRAP}) target_link_libraries(sta OpenSTA - tcl + ${TCL_LIBRARY} ${CUDD_LIB} ) diff --git a/cmake/FindTcl.cmake b/cmake/FindTcl.cmake new file mode 100644 index 00000000..8f4c698c --- /dev/null +++ b/cmake/FindTcl.cmake @@ -0,0 +1,76 @@ +# OpenSTA, Static Timing Analyzer +# Copyright (c) 2019, Parallax Software, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +################################################################ +# +# Locate TCL library. +# +# Note that the cmake findTcl module is hopeless for OSX +# because there doesn't appear to be a way to override +# searching OSX system directories before unix directories. + +set(TCL_POSSIBLE_NAMES tcl87 tcl8.7 + tcl86 tcl8.6 + tcl85 tcl8.5 + tcl84 tcl8.4 + tcl83 tcl8.3 + tcl82 tcl8.2 + ) + +# tcl lib path guesses. +if (NOT TCL_LIB_PATHS) + if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") + set(TCL_LIB_PATHS /usr/local/lib) + set(TCL_NO_DEFAULT_PATH TRUE) + endif() +elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(TCL_LIB_PATHS /usr/lib + /usr/local/lib + ) + set(TCL_NO_DEFAULT_PATH FALSE) +endif() + +if (NOT TCL_LIBRARY) + # bagbiter cmake doesn't have a way to pass NO_DEFAULT_PATH as a parameter. + if (TCL_NO_DEFAULT_PATH) + find_library(TCL_LIBRARY + NAMES tcl ${TCL_POSSIBLE_NAMES} + PATHS ${TCL_LIB_PATHS} + NO_DEFAULT_PATH + ) + else() + find_library(TCL_LIBRARY + NAMES tcl ${TCL_POSSIBLE_NAMES} + PATHS ${TCL_LIB_PATHS} + ) + endif() +endif() +message(STATUS "TCL library: ${TCL_LIBRARY}") + +get_filename_component(TCL_LIB_DIR "${TCL_LIBRARY}" PATH) +get_filename_component(TCL_LIB_PARENT1 "${TCL_LIB_DIR}" PATH) +get_filename_component(TCL_LIB_PARENT2 "${TCL_LIB_PARENT1}" PATH) + +# Locate tcl.h +if (NOT TCL_HEADER) + find_file(TCL_HEADER tcl.h + PATHS ${TCL_LIB_PARENT1} ${TCL_LIB_PARENT2} + PATH_SUFFIXES include include/tcl + NO_DEFAULT_PATH + ) +endif() +message(STATUS "TCL header: ${TCL_HEADER}") +get_filename_component(TCL_HEADER_DIR "${TCL_HEADER}" PATH)