Skip to content
Command-line tool for isolation, routing and drilling of PCBs
C++ M4 Python Makefile
Branch: master
Clone or download
eyal0 Merge pull request #394 from eyal0/options_coverage
Increase coverage in options.cpp
Latest commit 513cdb4 Jan 10, 2020
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Decrease EasyCov verbosity Jan 9, 2020
extras More graphics for the wiki Feb 21, 2019
m4 this macro isn't stock on all platforms Nov 12, 2019
man Set vectorial to be true by default (#132) Jun 12, 2018
testing Use g64 option Dec 3, 2019
.gitignore Add wkt_to_svg to .gitignore Oct 11, 2019
AUTHORS Clean build files Sep 28, 2016
COPYING Fix #5 Nov 10, 2014
INSTALL WIP - vectorial core Jun 3, 2016
Makefile.am Make -Werror optional but use it in TravisCI Nov 11, 2019
README.md Update README.md Dec 31, 2019
autoleveller.cpp Clean up the throw logic around prepareWorkarea Mar 6, 2019
autoleveller.hpp Clean up the throw logic around prepareWorkarea Mar 6, 2019
autoleveller_tests.cpp Remove extra semicolons Nov 3, 2019
available_drills.hpp Fix Werror=implicit-fallthrough Nov 3, 2019
available_drills_tests.cpp Remove extra semicolons Nov 3, 2019
bg_helpers.hpp Improve comments and make a new form of bg_helpers::buffer Nov 7, 2019
board.cpp Remove importer.hpp Mar 6, 2019
board.hpp Remove importer.hpp Mar 6, 2019
common.cpp Put build_filename into common.cpp Oct 31, 2019
common.hpp Remove unused variables to decrease warnings. Nov 3, 2019
common_tests.cpp Remove extra semicolons Nov 3, 2019
configure.ac
drill.cpp Remove unused variables to decrease warnings. Nov 3, 2019
drill.hpp
eulerian_paths.cpp
eulerian_paths.hpp Remove extra semicolons Nov 3, 2019
eulerian_paths_tests.cpp Remove unused operator overload Nov 4, 2019
geometry.hpp Move coordinate_type from geometry.hpp to geometry_int.hpp Oct 30, 2019
geometry_int.hpp Move coordinate_type from geometry.hpp to geometry_int.hpp Oct 30, 2019
gerberimporter.cpp Improve comments and make a new form of bg_helpers::buffer Nov 7, 2019
gerberimporter.hpp Don't depend on the symbol case making it through unmangled. Nov 14, 2019
gerberimporter_tests.cpp Merge branch 'master' into check_valgrind Nov 5, 2019
integration_tests.py Test negative spinup Jan 5, 2020
layer.cpp Remove core.cpp and core.hpp Mar 6, 2019
layer.hpp Remove core.cpp and core.hpp Mar 6, 2019
main.cpp Catch as const reference to prevent warnings Oct 29, 2019
merge_near_points.cpp merge points that are near one another in gerberimporter Feb 21, 2019
merge_near_points.hpp merge points that are near one another in gerberimporter Feb 21, 2019
mill.hpp
millproject_example Remove executable bit from millproject_example Jul 4, 2016
ngc_exporter.cpp Delete exporter.hpp because it doesn't do anything. Nov 3, 2019
ngc_exporter.hpp Delete exporter.hpp because it doesn't do anything. Nov 3, 2019
options.cpp Remove dpi option Mar 6, 2019
options.hpp Make all boost::noncopyable have private inheritance Feb 25, 2019
options.svg Add options.svg Sep 27, 2016
options_tests.cpp Fix warning: ISO C++ forbids variable length array 'argc' [-Werror=vla] Nov 3, 2019
outline_bridges.cpp Use a better bridge-finding algorithm. Nov 4, 2019
outline_bridges.hpp Remove extra semicolons Nov 3, 2019
path_finding.cpp Remove ignored qualifier Nov 3, 2019
path_finding.hpp Add GiveUp exception and include chrono Feb 17, 2019
path_finding_tests.cpp Remove extra semicolons Nov 3, 2019
segmentize.cpp Move coordinate_type from geometry.hpp to geometry_int.hpp Oct 30, 2019
segmentize.hpp Move coordinate_type from geometry.hpp to geometry_int.hpp Oct 30, 2019
segmentize_tests.cpp Use PRId64 as the correct printf string for int64_t Nov 4, 2019
surface_vectorial.cpp Remove unused variables to decrease warnings. Nov 3, 2019
surface_vectorial.hpp Remove unused variables to decrease warnings. Nov 3, 2019
tile.cpp Remove unused variables to decrease warnings. Nov 3, 2019
tile.hpp Remove unused variables to decrease warnings. Nov 3, 2019
tsp_solver.hpp Remove unused variables to decrease warnings. Nov 3, 2019
tsp_solver_tests.cpp Remove extra semicolons Nov 3, 2019
unique_codes.hpp Cleaned O codes and global varibale defines Nov 16, 2015
units.hpp Remove extra semicolons Nov 3, 2019
units_tests.cpp Mark unused result in units_tests to remove warning Nov 4, 2019
voronoi.cpp Remove using from voronoi.hpp Feb 4, 2019
voronoi.hpp Move coordinate_type from geometry.hpp to geometry_int.hpp Oct 30, 2019
voronoi_tests.cpp Remove extra semicolons Nov 3, 2019
voronoi_visual_utils.hpp Add TSP solver in surface_vectorial Jun 4, 2016
wkt_to_svg.cpp Add wkt_to_svg helper utility Aug 15, 2019

README.md

pcb2gcode Build Status Coverage Status Donate

pcb2gcode is a command-line software for the isolation, routing and drilling of PCBs. It takes Gerber files as input and it outputs gcode files, suitable for the milling of PCBs. It also includes an Autoleveller, useful for the automatic dynamic calibration of the milling depth.

pcb2gcodeGUI, the official GUI for pcb2gcode, is available here.

If you find this project useful, consider donating money to charity.

Quick Installation

This development version of pcb2gcode does not get into repositories of distros. If you want to test this version, you will have to go to the section below (installation from GIT).

Archlinux:

Fedora:

  • Download the latest tarball from https://github.com/pcb2gcode/pcb2gcode/releases

  • Open a terminal and cd to the extracted tarball

  • type the following:

    su
    <the root password>
    yum groupinstall "Development Tools"
    yum install automake autoconf libtool boost-devel gtkmm24-devel gerbv-devel
    exit
    ./configure
    make
    su -c 'make install'
    
  • done.

Debian, Ubuntu:

There are pcb2gcode packages in the official repositories. You can install the with

sudo apt-get install pcb2gcode

Unfortunately, these packages are seriously outdated. If you want to download the latest development version, go to "Installation from GIT".

Windows

Windows prebuilt binaries (with all the required DLLs) are available in the release page.

Mac OS X

pcb2gcode is available in Homebrew. To install it open the "Terminal" app and run the following commands; pcb2gcode and the required dependencies will be automatically downloaded and installed:

 $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
 $ brew install pcb2gcode

Installation from GIT (latest development version):

If you want to install the latest version from git you'll need the autotools, Boost with the program_options library (dev, >= 1.56), gtkmm2.4 (dev) and libgerbv (dev).

Unfortunately pcb2gcode requires a rather new version of Boost (1.56), often not included in the oldest distros (like Ubuntu < 15.10 or Debian Stable). Moreover Boost 1.56 sometimes freezes pcb2gcode, while Boost 1.59, 1.60 and 1.61 are affected by a program options bug. You can download a working version of Boost (1.57 and 1.58 work well) and build it manually with:

$ ./bootstrap.sh --with-libraries=program_options --prefix=<somewhere>
$ ./b2 variant=release link=static
$ ./b2 install

Then add --with-boost=<boost install directory> --enable-static-boost to the ./configure command.

To build with coverage outputs, add --enable-code-coverage to ./configure and then later run make check-code-coverage to run unit tests to collect coverage. The last line of the output will include a URL to view the coverage.

Ubuntu 12.04 does not include gcc 4.8 (needed for the C++11 support); you can install it with:

$ sudo apt-get update
$ sudo apt-get install software-properties-common python-software-properties
$ sudo add-apt-repository "ppa:ubuntu-toolchain-r/test"
$ sudo apt-get update
$ sudo apt-get install g++-4.8
$ export CXX=g++-4.8

Debian Testing or newer, Ubuntu Wily or newer

$ sudo apt-get update
$ sudo apt-get install build-essential automake autoconf autoconf-archive libtool libboost-program-options-dev libgtkmm-2.4-dev gerbv git librsvg2-dev
$ git clone https://github.com/pcb2gcode/pcb2gcode.git
$ cd pcb2gcode

Then follow the common build steps

Fedora

su
<the root password>
yum groupinstall "Development Tools"
yum install automake autoconf libtool boost-devel gtkmm24-devel gerbv-devel git
exit

Then follow the common build steps

Common build steps

$ autoreconf -fvi
$ ./configure
$ make
$ sudo make install

Windows

You can easily build pcb2gcode for Windows with MSYS2 (http://sourceforge.net/projects/msys2/). Download MSYS2 and install it somewhere, then run "MinGW-w64 Win32 Shell" (if you want a i686 binary) or "MinGW-w64 Win64 Shell" (if you want a x86_64 binary). The following commands are for the i686 binary, if you want the x86_64 binary replace all the "/mingw32" with "/mingw64" and all the mingw-w64-i686-* packages with mingw-w64-x86_64-*

$ pacman -Sy
$ pacman --needed -S bash pacman pacman-mirrors msys2-runtime

Close and reopen the shell

$ pacman -Su
$ pacman --needed -S base-devel git mingw-w64-i686-gcc mingw-w64-i686-boost mingw-w64-i686-gtkmm

Now let's download, build and install gerbv (version 2.6.1 is broken, don't use it)

$ wget downloads.sourceforge.net/gerbv/gerbv-2.6.0.tar.gz
$ tar -xzf gerbv-2.6.0.tar.gz
$ cd gerbv-2.6.0/    
$ ./configure --prefix=/mingw32 --disable-update-desktop-database
$ make
$ make install

Finally, download and build pcb2gcode

$ cd ..
$ git clone https://github.com/pcb2gcode/pcb2gcode.git
$ cd pcb2gcode/
$ autoreconf -fvi
$ ./configure --prefix=/mingw32
$ make LDFLAGS='-s'

The dynamically linked binary is <msys2 installation folder>/home/<user>/pcb2gcode/.libs/pcb2gcode.exe. You can find all the DLLs in <msys2 installation folder>/mingw32/bin; copy them in the same folder of pcb2gcode. The required DLLs are:

  • libatk-1.0-0.dll
  • libboost_program_options-mt.dll
  • libbz2-1.dll
  • libcairo-2.dll
  • libcairomm-1.0-1.dll
  • libexpat-1.dll
  • libffi-6.dll
  • libfontconfig-1.dll
  • libfreetype-6.dll
  • libgcc_s_dw2-1.dll (for the i686 binary)
  • libgcc_s_seh-1.dll (for the x86_64 binary)
  • libgdkmm-2.4-1.dll
  • libgdk_pixbuf-2.0-0.dll
  • libgdk-win32-2.0-0.dll
  • libgerbv-1.dll
  • libgio-2.0-0.dll
  • libglib-2.0-0.dll
  • libglibmm-2.4-1.dll
  • libgmodule-2.0-0.dll
  • libgobject-2.0-0.dll
  • libgtk-win32-2.0-0.dll
  • libharfbuzz-0.dll
  • libiconv-2.dll
  • libintl-8.dll
  • libpango-1.0-0.dll
  • libpangocairo-1.0-0.dll
  • libpangoft2-1.0-0.dll
  • libpangomm-1.4-1.dll
  • libpangowin32-1.0-0.dll
  • libpixman-1-0.dll
  • libpng16-16.dll
  • libsigc-2.0-0.dll
  • libstdc++-6.dll
  • libwinpthread-1.dll
  • zlib1.dll

Mac OS X

You can build the latest pcb2gcode version with Homebrew. If Homebrew is not installed yet, install it with the following command:

 $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

You might need some build tools that typically are not present:

 $ brew install autoconf automake libtool

Then you can download and build the git version with

 $ brew install --HEAD pcb2gcode

or (if pcb2gcode is already installed)

 $ brew upgrade --HEAD pcb2gcode

For further details, see INSTALL.

You can’t perform that action at this time.