hdl / conda-eda

Conda recipes for FPGA EDA tools for simulation, synthesis, place and route and bitstream generation.
https://anaconda.org/LiteX-Hub
Apache License 2.0
95 stars 26 forks source link

pnr/openroad: fix dependencies #294

Closed proppy closed 1 year ago

proppy commented 1 year ago
xobs commented 1 year ago

This renames disable-mpl2.patch to disable-mpl2-and-par.patch inside meta.yaml, but doesn't change the filename. Is there another patchfile that's missing?

proppy commented 1 year ago

This renames disable-mpl2.patch to disable-mpl2-and-par.patch inside meta.yaml, but doesn't change the filename. Is there another patchfile that's missing?

Ah yes, nice catch!

proppy commented 1 year ago

@xobs update, PTAL

xobs commented 1 year ago

The file exists now, but there is still no change when building on osx-arm64:

-- Found FLEX: $BUILD_PREFIX/bin/flex (found version "2.6.4")
-- TCL library: TCL_LIBRARY-NOTFOUND
-- TCL header: TCL_HEADER-NOTFOUND
-- SSTA: 0
-- STA executable: $SRC_DIR/src/sta/app/sta
-- GPU is not enabled
CMake Error at src/par/CMakeLists.txt:44 (find_package):
  By not providing "Findortools.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "ortools", but
  CMake did not find one.

  Could not find a package configuration file provided by "ortools" with any
  of the following names:

    ortoolsConfig.cmake
    ortools-config.cmake

  Add the installation prefix of "ortools" to CMAKE_PREFIX_PATH or set
  "ortools_DIR" to a directory containing one of the above files.  If
  "ortools" provides a separate development package or SDK, be sure it has
  been installed.

-- Configuring incomplete, errors occurred!
See also "$SRC_DIR/build/CMakeFiles/CMakeOutput.log".
See also "$SRC_DIR/build/CMakeFiles/CMakeError.log".
proppy commented 1 year ago

@xobs another good catch :) https://github.com/hdl/conda-eda/pull/294/commits/b7c364a43f8675fcf60f21dc910e802a8a0fffc2 should address this.

xobs commented 1 year ago

It gets slightly further! Now it dies on openmp not existing as a dependency,

My current patch looks like:

diff --git a/pnr/openroad/meta.yaml b/pnr/openroad/meta.yaml
index f052c91..c30a479 100644
--- a/pnr/openroad/meta.yaml
+++ b/pnr/openroad/meta.yaml
@@ -41,12 +41,14 @@ requirements:
     - python
     - libboost 1.73
     - eigen 3.3
-    - spdlog 1.8.1
+    - spdlog 1.11
     - readline
     - tk
     - zlib
     - fmt
-    - libgomp
+    - libgomp                 [not osx]
+    - libprotobuf             [osx]
+    - llvm-openmp             [osx]
   run:
     # missing run_exports
     - {{ pin_compatible('libboost', min_pin='x.x', max_pin='x.x') }}

Now it's looking for vtune, which I guess is an Intel product? No surprise that doesn't exist for arm64...

proppy commented 1 year ago

Does it work with the non -openmpm version of llvm?

xobs commented 1 year ago

If I remove llvm-llvm-openmp then it complains about libopenmp not existing. Adding that as a dependency allows it to get further.

My mistake, the vtune error was directly above a boost error. Boost is listed as 1.73 but the oldest version is 1.78. Let me keep going...

xobs commented 1 year ago

It looks like there's a file in utl that still requires boost 1.78, but conda only provides 1.73:

diff --git a/pnr/openroad/boost-set-version.patch b/pnr/openroad/boost-set-version.patch
index d9f8066..6accd56 100644
--- a/pnr/openroad/boost-set-version.patch
+++ b/pnr/openroad/boost-set-version.patch
@@ -11,3 +11,16 @@ index 293ea212c..425d1ca4b 100755
  message(STATUS "boost: ${Boost_VERSION}")
  find_package(Python3 COMPONENTS Development REQUIRED)
  option(BUILD_PYTHON "Build the Python3 interface" ON)
+diff --git a/src/utl/CMakeLists.txt b/src/utl/CMakeLists.txt
+index a795da4d1..db52c9dd4 100644
+--- a/src/utl/CMakeLists.txt
++++ b/src/utl/CMakeLists.txt
+@@ -35,7 +35,7 @@
+
+ include("openroad")
+
+-find_package(Boost 1.78 REQUIRED)
++find_package(Boost 1.73 REQUIRED)
+
+ swig_lib(NAME      utl
+          NAMESPACE utl
proppy commented 1 year ago

@xobs reworked the patches to remove boost 1.78 requirements (span was only used in a test), see: https://github.com/hdl/conda-eda/pull/294/commits/c1c9d9b1df33289c2ba9402df411497fffca1730#diff-7f8bcde4a2b216107b41a1d494d696f6c9f62379bdbd55db93b259cc54aa91b0

xobs commented 1 year ago

This builds on osx-arm64 with the following patch:

diff --git a/pnr/openroad/build.sh b/pnr/openroad/build.sh
index 125619d..7134c03 100644
--- a/pnr/openroad/build.sh
+++ b/pnr/openroad/build.sh
@@ -22,5 +22,5 @@ cmake -B build  -DCMAKE_INSTALL_PREFIX=$PREFIX .
 cmake --build build -j $CPU_COUNT --target install

 cd $SRC_DIR
-cmake -B build -DCMAKE_FIND_ROOT_PATH="$BUILD_PREFIX;$PREFIX" -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=ONLY -DUSE_SYSTEM_BOOST=ON -DINSTALL_LIBOPENSTA=OFF -DBUILD_GUI=OFF -DBUILD_MPL2=OFF -DBUILD_PAR=OFF -DCMAKE_INSTALL_PREFIX=$PREFIX .
+cmake -B build -DTCL_LIB_PATHS="$BUILD_PREFIX;$PREFIX" -DCMAKE_FIND_ROOT_PATH="$BUILD_PREFIX;$PREFIX" -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=ONLY -DUSE_SYSTEM_BOOST=ON -DINSTALL_LIBOPENSTA=OFF -DBUILD_GUI=OFF -DBUILD_MPL2=OFF -DBUILD_PAR=OFF -DCMAKE_INSTALL_PREFIX=$PREFIX .
 cmake --build build -j $CPU_COUNT --target install
diff --git a/pnr/openroad/meta.yaml b/pnr/openroad/meta.yaml
index 2c26d3e..9fc58ff 100644
--- a/pnr/openroad/meta.yaml
+++ b/pnr/openroad/meta.yaml
@@ -41,12 +41,13 @@ requirements:
     - python
     - libboost 1.73
     - eigen 3.3
-    - spdlog 1.8.1
+    - spdlog 1.9
     - readline
     - tk
     - zlib
     - fmt
-    - libgomp
+    - libgomp                 [not osx]
+    - llvm-openmp             [osx]
   run:
     # missing run_exports
     - {{ pin_compatible('libboost', min_pin='x.x', max_pin='x.x') }}

However, when I install the resulting package it installs spd-1.11.0, which doesn't work:

❯  openroad -version                                                                                                                                           (eda)
dyld[6457]: Library not loaded: @rpath/libspdlog.1.dylib
  Referenced from: <3648B3B4-D7C9-36C1-84CA-6AF9A987C84E> /opt/homebrew/Caskroom/miniconda/base/envs/eda/bin/openroad
  Reason: tried: '/opt/or-tools/lib64/libspdlog.1.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/or-tools/lib64/libspdlog.1.dylib' (no such file), '/opt/or-tools/lib/libspdlog.1.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/or-tools/lib/libspdlog.1.dylib' (no such file), '/opt/homebrew/Caskroom/miniconda/base/envs/eda/bin/../lib/libspdlog.1.dylib' (no such file), '/opt/or-tools/lib64/libspdlog.1.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/or-tools/lib64/libspdlog.1.dylib' (no such file), '/opt/or-tools/lib/libspdlog.1.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/or-tools/lib/libspdlog.1.dylib' (no such file), '/opt/homebrew/Caskroom/miniconda/base/envs/eda/bin/../lib/libspdlog.1.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS@rpath/libspdlog.1.dylib' (no such file), '/opt/or-tools/lib64/libspdlog.1.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/or-tools/lib64/libspdlog.1.dylib' (no such file), '/opt/or-tools/lib/libspdlog.1.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/or-tools/lib/libspdlog.1.dylib' (no such file), '/opt/homebrew/Caskroom/miniconda/base/envs/eda/bin/../lib/libspdlog.1.dylib' (no such file), '/opt/or-tools/lib64/libspdlog.1.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/or-tools/lib64/libspdlog.1.dylib' (no such file), '/opt/or-tools/lib/libspdlog.1.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/or-tools/lib/libspdlog.1.dylib' (no such file), '/opt/homebrew/Caskroom/miniconda/base/envs/eda/bin/../lib/libspdlog.1.dylib' (no such file), '/usr/local/lib/libspdlog.1.dylib' (no such file), '/usr/lib/libspdlog.1.dylib' (no such file, not in dyld cache)
fish: Job 1, 'openroad -version' terminated by signal SIGABRT (Abort)

Installing spdlog=1.9 fixes the issue:

❯ conda install spdlog=1.9                                                                                                                                     (eda)
Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Collecting package metadata (repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /opt/homebrew/Caskroom/miniconda/base/envs/eda

  added / updated specs:
    - spdlog=1.9

The following packages will be DOWNGRADED:

  fmt                                      9.1.0-h48ca7d4_0 --> 8.1.1-h525c30c_1
  spdlog                                  1.11.0-h48ca7d4_0 --> 1.9.2-h525c30c_0

Proceed ([y]/n)?

Downloading and Extracting Packages

Preparing transaction: done
Verifying transaction: done
Executing transaction: done

sean in 🌐 Garlemald in conda-eda on  fix-openroad [$!?] via 🅒 eda  took 4s
❯ openroad -version                                                                                                                                            (eda)
5c85b36f8d50975d4e57af6678a0bbfe62046f0e

sean in 🌐 Garlemald in conda-eda on  fix-openroad [$!?] via 🅒 eda
❯     
xobs commented 1 year ago

We can apply those patches in another PR. For now, LGTM!

proppy commented 1 year ago

rebased and squashed.