summaryrefslogtreecommitdiff
path: root/pcbnew/CMakeLists.txt
diff options
context:
space:
mode:
authorsaurabhb172020-02-26 15:57:49 +0530
committersaurabhb172020-02-26 15:57:49 +0530
commitaa35045840b78d3f48212db45da59a2e5c69b223 (patch)
tree6acee185a4dc19113fcbf0f9a3d6941085dedaf7 /pcbnew/CMakeLists.txt
parent0db48f6533517ecebfd9f0693f89deca28408b76 (diff)
downloadKiCad-eSim-aa35045840b78d3f48212db45da59a2e5c69b223.tar.gz
KiCad-eSim-aa35045840b78d3f48212db45da59a2e5c69b223.tar.bz2
KiCad-eSim-aa35045840b78d3f48212db45da59a2e5c69b223.zip
Added main execs
Diffstat (limited to 'pcbnew/CMakeLists.txt')
-rw-r--r--pcbnew/CMakeLists.txt746
1 files changed, 746 insertions, 0 deletions
diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt
new file mode 100644
index 0000000..acffe80
--- /dev/null
+++ b/pcbnew/CMakeLists.txt
@@ -0,0 +1,746 @@
+# the map generation creates on Windows/gcc a lot of useless warnings
+# so disable it on windows
+if( WIN32 AND NOT CMAKE_CROSSCOMPILING )
+ set( MAKE_LINK_MAPS false )
+else()
+ set( MAKE_LINK_MAPS true )
+endif()
+
+add_definitions( -DPCBNEW )
+add_subdirectory(router)
+
+# psnrouter depends on make_lexer outputs in common (bug # 1285878 )
+add_dependencies( pnsrouter pcbcommon )
+
+
+if( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES )
+ file( MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripting )
+ find_package( SWIG REQUIRED )
+ include( ${SWIG_USE_FILE} )
+
+ # Infrequently needed headers go at end of search paths, append to INC_AFTER
+ set( INC_AFTER ${INC_AFTER} ${CMAKE_CURRENT_SOURCE_DIR}/scripting )
+
+ #message( STATUS "pcbnew INC_AFTER:${INC_AFTER}" )
+endif()
+
+
+if( BUILD_GITHUB_PLUGIN )
+ set( GITHUB_3DLIBRARIES_WIZARD
+ dialogs/wizard_3DShape_Libs_downloader_base.cpp
+ dialogs/wizard_3DShape_Libs_downloader.cpp )
+endif()
+
+include_directories( BEFORE ${INC_BEFORE} )
+include_directories(
+ ./dialogs
+ ./autorouter
+ ../3d-viewer
+ ../common
+ ../polygon
+ ../common/dialogs
+ ./exporters
+ ../lib_dxf
+ ./import_dxf
+ ../utils/idftools
+ ${INC_AFTER}
+ )
+
+set( PCBNEW_DIALOGS
+ dialogs/dialog_block_options_base.cpp
+ dialogs/dialog_cleaning_options_base.cpp
+ dialogs/dialog_cleaning_options.cpp
+ dialogs/dialog_copper_zones.cpp
+ dialogs/dialog_copper_zones_base.cpp
+ dialogs/dialog_create_array.cpp
+ dialogs/dialog_create_array_base.cpp
+ dialogs/dialog_design_rules.cpp
+ dialogs/dialog_design_rules_base.cpp
+ dialogs/dialog_dimension_editor_base.cpp
+ dialogs/dialog_display_options.cpp
+ dialogs/dialog_display_options_base.cpp
+ dialogs/dialog_drc_base.cpp
+ dialogs/dialog_drc.cpp
+ dialogs/dialog_edit_module_for_BoardEditor.cpp
+ dialogs/dialog_edit_module_for_BoardEditor_base.cpp
+ dialogs/dialog_edit_module_for_Modedit_base.cpp
+ dialogs/dialog_edit_module_for_Modedit.cpp
+ dialogs/dialog_edit_module_text.cpp
+ dialogs/dialog_edit_module_text_base.cpp
+ dialogs/dialog_enum_pads.cpp
+ dialogs/dialog_enum_pads_base.cpp
+ dialogs/dialog_exchange_modules_base.cpp
+ dialogs/dialog_export_idf.cpp
+ dialogs/dialog_export_idf_base.cpp
+ dialogs/dialog_export_vrml_base.cpp
+ dialogs/dialog_export_vrml.cpp
+ dialogs/dialog_find_base.cpp
+ dialogs/dialog_find.cpp
+ dialogs/dialog_fp_lib_table_base.cpp
+ dialogs/dialog_fp_lib_table.cpp
+ dialogs/dialog_fp_plugin_options_base.cpp
+ dialogs/dialog_fp_plugin_options.cpp
+ dialogs/dialog_freeroute_exchange.cpp
+ dialogs/dialog_freeroute_exchange_base.cpp
+ dialogs/dialog_gendrill.cpp
+ dialogs/dialog_gendrill_base.cpp
+ dialogs/dialog_gen_module_position_file_base.cpp
+ dialogs/dialog_general_options.cpp
+ dialogs/dialog_general_options_BoardEditor_base.cpp
+ dialogs/dialog_global_edit_tracks_and_vias.cpp
+ dialogs/dialog_global_edit_tracks_and_vias_base.cpp
+ dialogs/dialog_global_modules_fields_edition.cpp
+ dialogs/dialog_global_modules_fields_edition_base.cpp
+ dialogs/dialog_global_pads_edition_base.cpp
+ dialogs/dialog_graphic_items_options.cpp
+ dialogs/dialog_graphic_items_options_base.cpp
+ dialogs/dialog_graphic_item_properties.cpp
+ dialogs/dialog_graphic_item_properties_base.cpp
+ dialogs/dialog_graphic_item_properties_for_Modedit.cpp
+ dialogs/dialog_global_deletion.cpp
+ dialogs/dialog_global_deletion_base.cpp
+ dialogs/dialog_keepout_area_properties.cpp
+ dialogs/dialog_keepout_area_properties_base.cpp
+ dialogs/dialog_layer_selection_base.cpp
+ dialogs/dialog_layers_setup.cpp
+ dialogs/dialog_layers_setup_base.cpp
+ dialogs/dialog_modedit_options.cpp
+ dialogs/dialog_modedit_options_base.cpp
+ dialogs/dialog_netlist.cpp
+ dialogs/dialog_netlist_fbp.cpp
+ dialogs/dialog_pcb_text_properties.cpp
+ dialogs/dialog_pcb_text_properties_base.cpp
+ dialogs/dialog_pns_settings.cpp
+ dialogs/dialog_pns_settings_base.cpp
+ dialogs/dialog_move_exact.cpp
+ dialogs/dialog_move_exact_base.cpp
+ dialogs/dialog_pns_diff_pair_dimensions.cpp
+ dialogs/dialog_pns_diff_pair_dimensions_base.cpp
+ dialogs/dialog_pns_length_tuning_settings.cpp
+ dialogs/dialog_pns_length_tuning_settings_base.cpp
+ dialogs/dialog_non_copper_zones_properties.cpp
+ dialogs/dialog_non_copper_zones_properties_base.cpp
+ dialogs/dialog_pad_properties.cpp
+ dialogs/dialog_pad_properties_base.cpp
+ dialogs/dialog_plot_base.cpp
+ dialogs/dialog_plot.cpp
+ dialogs/dialog_print_for_modedit.cpp
+ dialogs/dialog_print_for_modedit_base.cpp
+ dialogs/dialog_print_using_printer.cpp
+ dialogs/dialog_print_using_printer_base.cpp
+ dialogs/dialog_orient_footprints.cpp
+ dialogs/dialog_orient_footprints_base.cpp
+ dialogs/dialog_mask_clearance.cpp
+ dialogs/dialog_mask_clearance_base.cpp
+ dialogs/dialog_SVG_print.cpp
+ dialogs/dialog_SVG_print_base.cpp
+ dialogs/dialog_select_pretty_lib.cpp
+ dialogs/dialog_select_pretty_lib_base.cpp
+ dialogs/dialog_set_grid.cpp
+ dialogs/dialog_set_grid_base.cpp
+ dialogs/dialog_target_properties_base.cpp
+ dialogs/dialog_track_via_properties.cpp
+ dialogs/dialog_track_via_properties_base.cpp
+ dialogs/dialog_track_via_size.cpp
+ dialogs/dialog_track_via_size_base.cpp
+ footprint_wizard.cpp
+ footprint_wizard_frame.cpp
+ dialogs/dialog_footprint_wizard_list_base.cpp
+ dialogs/dialog_footprint_wizard_list.cpp
+ dialogs/wizard_add_fplib_base.cpp
+ dialogs/wizard_add_fplib.cpp
+ ${GITHUB_3DLIBRARIES_WIZARD}
+ )
+
+set( PCBNEW_IMPORT_DXF
+ import_dxf/dialog_dxf_import_base.cpp
+ import_dxf/dialog_dxf_import.cpp
+ import_dxf/dxf2brd_items.cpp
+ )
+
+set( PCBNEW_EXPORTERS
+ exporters/export_d356.cpp
+ exporters/export_gencad.cpp
+ exporters/export_idf.cpp
+ exporters/export_vrml.cpp
+ exporters/gen_drill_report_files.cpp
+ exporters/gen_modules_placefile.cpp
+ exporters/gendrill_Excellon_writer.cpp
+ )
+
+set( PCBNEW_AUTOROUTER_SRCS
+ autorouter/rect_placement/rect_placement.cpp
+ autorouter/move_and_route_event_functions.cpp
+ autorouter/auto_place_footprints.cpp
+ autorouter/autorout.cpp
+ autorouter/routing_matrix.cpp
+ autorouter/dist.cpp
+ autorouter/queue.cpp
+ autorouter/spread_footprints.cpp
+ autorouter/solve.cpp
+ autorouter/graphpcb.cpp
+ autorouter/work.cpp
+ )
+
+set( PCBNEW_CLASS_SRCS
+ tool_modview.cpp
+ modview_frame.cpp
+ pcbframe.cpp
+ pcb_base_edit_frame.cpp
+ append_board_to_current.cpp
+ attribut.cpp
+ board_items_to_polygon_shape_transform.cpp
+ board_undo_redo.cpp
+ block.cpp
+ block_module_editor.cpp
+ build_BOM_from_board.cpp
+ class_pcb_layer_widget.cpp
+ class_pcb_layer_box_selector.cpp
+ clean.cpp
+ connect.cpp
+ controle.cpp
+ dimension.cpp
+ cross-probing.cpp
+ deltrack.cpp
+ ${PCBNEW_DIALOGS}
+ ${PCBNEW_IMPORT_DXF}
+ ${PCBNEW_EXPORTERS}
+ dragsegm.cpp
+ drc.cpp
+ drc_clearance_test_functions.cpp
+ drc_marker_functions.cpp
+ edgemod.cpp
+ edit.cpp
+ editedge.cpp
+ editmod.cpp
+ editrack.cpp
+ editrack-part2.cpp
+ edit_pcb_text.cpp
+ edit_track_width.cpp
+ edtxtmod.cpp
+ event_handlers_tracks_vias_sizes.cpp
+ files.cpp
+ globaleditpad.cpp
+ highlight.cpp
+ hotkeys.cpp
+ hotkeys_board_editor.cpp
+ hotkeys_module_editor.cpp
+ initpcb.cpp
+ layer_widget.cpp
+ librairi.cpp
+ loadcmp.cpp
+ magnetic_tracks_functions.cpp
+ menubar_modedit.cpp
+ menubar_pcbframe.cpp
+ minimun_spanning_tree.cpp
+ modedit.cpp
+ modedit_onclick.cpp
+ modeditoptions.cpp
+ modedit_undo_redo.cpp
+ moduleframe.cpp
+ modules.cpp
+ move-drag_pads.cpp
+ move_or_drag_track.cpp
+ muonde.cpp
+ muwave_command.cpp
+ netlist.cpp
+ onleftclick.cpp
+ onrightclick.cpp
+ pad_edition_functions.cpp
+ pcbnew_config.cpp
+ pcbplot.cpp
+ pcb_draw_panel_gal.cpp
+ plot_board_layers.cpp
+ plot_brditems_plotter.cpp
+ print_board_functions.cpp
+ printout_controler.cpp
+ ratsnest.cpp
+ ratsnest_viewitem.cpp
+ specctra_import.cpp
+ swap_layers.cpp
+ target_edit.cpp
+ tool_modedit.cpp
+ tool_onrightclick.cpp
+ tool_pcb.cpp
+ toolbars_update_user_interface.cpp
+ tracepcb.cpp
+ tr_modif.cpp
+ xchgmod.cpp
+ zones_convert_brd_items_to_polygons_with_Boost.cpp
+ zones_convert_to_polygons_aux_functions.cpp
+ zones_by_polygon.cpp
+ zones_by_polygon_fill_functions.cpp
+ zone_filling_algorithm.cpp
+ zones_functions_for_undo_redo.cpp
+ zones_polygons_insulated_copper_islands.cpp
+ zones_polygons_test_connections.cpp
+ zones_test_and_combine_areas.cpp
+ class_footprint_wizard.cpp
+
+ tools/selection_tool.cpp
+ tools/selection_area.cpp
+ tools/selection_conditions.cpp
+ tools/conditional_menu.cpp
+ tools/bright_box.cpp
+ tools/edit_points.cpp
+ tools/edit_constraints.cpp
+ tools/point_editor.cpp
+ tools/drawing_tool.cpp
+ tools/edit_tool.cpp
+ tools/pcbnew_control.cpp
+ tools/pcb_editor_control.cpp
+ tools/module_tools.cpp
+ tools/placement_tool.cpp
+ tools/common_actions.cpp
+ tools/grid_helper.cpp
+ tools/picker_tool.cpp
+ tools/tools_common.cpp
+
+ tools/grid_menu.cpp
+ tools/zoom_menu.cpp
+ tools/size_menu.cpp
+ )
+
+set( PCBNEW_SRCS ${PCBNEW_AUTOROUTER_SRCS} ${PCBNEW_CLASS_SRCS} ${PCBNEW_DIALOGS} )
+
+
+# extra sources from common
+set( PCBNEW_COMMON_SRCS
+ ../common/dialogs/dialog_page_settings.cpp
+ ../common/base_units.cpp
+ )
+
+set( PCBNEW_SCRIPTING_DIALOGS
+ dialogs/dialog_scripting_base.cpp
+ dialogs/dialog_scripting.cpp
+ )
+
+set( PCBNEW_SCRIPTING_PYTHON_HELPERS
+ ../scripting/wx_python_helpers.cpp
+ ../scripting/python_scripting.cpp
+ scripting/pcbnew_scripting_helpers.cpp
+ scripting/pcbnew_footprint_wizards.cpp
+ )
+
+if( KICAD_SCRIPTING )
+ set( PCBNEW_SCRIPTING_SRCS
+ ${PCBNEW_SCRIPTING_DIALOGS}
+ pcbnew_wrap.cxx
+ ${PCBNEW_SCRIPTING_PYTHON_HELPERS}
+ )
+endif()
+
+
+if( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES )
+
+ set( SWIG_FLAGS
+ -I${CMAKE_CURRENT_SOURCE_DIR}/../..
+ -I${CMAKE_CURRENT_SOURCE_DIR}
+ -I${CMAKE_CURRENT_SOURCE_DIR}/../include
+ -I${CMAKE_CURRENT_SOURCE_DIR}/../scripting
+ )
+
+ if( DEBUG )
+ set( SWIG_FLAGS ${SWIG_FLAGS} -DDEBUG )
+ endif()
+
+ # collect CFLAGS , and pass them to swig later
+
+ get_directory_property( DirDefs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMPILE_DEFINITIONS )
+ foreach( d ${DirDefs} )
+ set( SWIG_FLAGS ${SWIG_FLAGS} -D${d} )
+ endforeach()
+
+endif()
+
+
+if( KICAD_SCRIPTING )
+
+ set( SWIG_OPTS -python -c++ -outdir ${CMAKE_CURRENT_BINARY_DIR} ${SWIG_FLAGS} )
+
+ if( EXISTS ${CMAKE_CURRENT_BINARY_DIR}/doxygen-xml )
+ set( SWIG_OPTS ${SWIG_OPTS} -DENABLE_DOCSTRINGS_FROM_DOXYGEN )
+ set( SWIG_OPTS ${SWIG_OPTS} -I${CMAKE_CURRENT_BINARY_DIR}/docstrings )
+ endif()
+
+ add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pcbnew_wrap.cxx
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pcbnew.py
+
+ DEPENDS pcbcommon
+ DEPENDS plotcontroller.h
+ DEPENDS exporters/gendrill_Excellon_writer.h
+ DEPENDS scripting/pcbnew.i
+ DEPENDS scripting/board.i
+ DEPENDS scripting/board_item.i
+ DEPENDS scripting/module.i
+ DEPENDS scripting/plugins.i
+ DEPENDS scripting/units.i
+ DEPENDS ../scripting/dlist.i
+ DEPENDS ../scripting/kicad.i
+ DEPENDS ../scripting/wx.i
+ DEPENDS ../scripting/kicadplugins.i
+
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/docstrings
+ COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/docstrings/docstrings.i # this makes docstrings.i available if it doesn't exist
+
+ COMMAND ${SWIG_EXECUTABLE} ${SWIG_OPTS} -o ${CMAKE_CURRENT_BINARY_DIR}/pcbnew_wrap.cxx scripting/pcbnew.i
+ COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/scripting/build_tools/fix_swig_imports.py ${CMAKE_CURRENT_BINARY_DIR}/pcbnew.py
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ )
+
+endif()
+
+
+if( BUILD_GITHUB_PLUGIN )
+ set( GITHUB_PLUGIN_LIBRARIES github_plugin )
+endif()
+
+if( UNIX AND NOT APPLE )
+ list( APPEND PCBNEW_EXTRA_LIBS rt )
+endif()
+
+
+if( KICAD_SCRIPTING_MODULES )
+
+ #message( "building pcbnew scripting" )
+
+ set( CMAKE_SWIG_FLAGS ${SWIG_FLAGS} )
+ set_source_files_properties( scripting/pcbnew.i PROPERTIES CPLUSPLUS ON )
+
+ swig_add_module( pcbnew
+ python
+ scripting/pcbnew.i
+ ${PCBNEW_SCRIPTING_PYTHON_HELPERS}
+ pcbnew.cpp
+ ${PCBNEW_SRCS}
+ ${PCBNEW_COMMON_SRCS}
+ )
+
+ swig_link_libraries( pcbnew
+ 3d-viewer
+ pcbcommon
+ pnsrouter
+ common
+ pcad2kicadpcb
+ lib_dxf
+ idf3
+ polygon
+ bitmaps
+ gal
+ ${wxWidgets_LIBRARIES}
+ ${GITHUB_PLUGIN_LIBRARIES}
+ ${GDI_PLUS_LIBRARIES}
+ ${PYTHON_LIBRARIES}
+ ${PCBNEW_EXTRA_LIBS}
+ ${Boost_LIBRARIES} # must follow GITHUB
+ )
+
+ if( MAKE_LINK_MAPS )
+ set_target_properties( _pcbnew PROPERTIES
+ LINK_FLAGS "${TO_LINKER},-cref ${TO_LINKER},-Map=pcbnew.so.map"
+ )
+ endif()
+
+ if( ${OPENMP_FOUND} )
+ set_property( TARGET _pcbnew APPEND_STRING
+ PROPERTY LINK_FLAGS " ${OpenMP_CXX_FLAGS}"
+ )
+ endif()
+endif()
+
+
+###
+# Doxygen python documentation
+###
+
+find_package( Doxygen )
+if( DOXYGEN_FOUND )
+ if( KICAD_SCRIPTING )
+
+ # create XML files from doxygen parsing
+ add_custom_target( doxygen-python-xml
+ ${CMAKE_COMMAND} -E remove_directory doxygen-python-xml
+ COMMAND SOURCES_DIR=${CMAKE_SOURCE_DIR} ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile_xml
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ DEPENDS Doxyfile_xml
+ COMMENT "building doxygen docs into directory doxygen-python/html"
+ )
+
+ # create .i files from XML doxygen parsing, docstrings.i will include all of them
+ add_custom_target( xml-to-docstrings
+ COMMAND ${CMAKE_COMMAND} -E remove_directory docstrings
+ COMMAND ${CMAKE_COMMAND} -E make_directory docstrings
+ COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/scripting/build_tools/extract_docstrings.py pcbnew.py doxygen-xml/xml docstrings
+ COMMAND ${CMAKE_COMMAND} -E remove pcbnew.py # force removal so it will be recreated later with the new docstrings
+ COMMENT "building docstring files"
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ DEPENDS pcbnew.py
+ DEPENDS doxygen-python-xml
+ )
+
+ # create doxygen-python html
+ add_custom_target( doxygen-python
+ ${CMAKE_COMMAND} -E remove_directory doxygen-python
+ COMMAND PYTHON_SOURCES_TO_DOC=${CMAKE_CURRENT_BINARY_DIR}/pcbnew.py ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile_python
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ DEPENDS Doxyfile_python
+ DEPENDS xml-to-docstrings
+ DEPENDS pcbnew.py
+ COMMENT "building doxygen docs into directory doxygen-python/html"
+ )
+ endif()
+else()
+ message( STATUS "WARNING: Doxygen not found - doxygen-docs (Source Docs) target not created" )
+endif()
+
+
+if( MINGW )
+ # PCBNEW_RESOURCES variable is set by the macro.
+ mingw_resource_compiler( pcbnew )
+else()
+ set( PCBNEW_RESOURCES pcbnew.rc )
+endif()
+
+
+if( APPLE )
+ # setup bundle
+ set( PCBNEW_RESOURCES pcbnew.icns pcbnew_doc.icns )
+ set_source_files_properties( "${CMAKE_CURRENT_SOURCE_DIR}/pcbnew.icns" PROPERTIES
+ MACOSX_PACKAGE_LOCATION Resources
+ )
+ set_source_files_properties( "${CMAKE_CURRENT_SOURCE_DIR}/pcbnew_doc.icns" PROPERTIES
+ MACOSX_PACKAGE_LOCATION Resources
+ )
+ set( MACOSX_BUNDLE_ICON_FILE pcbnew.icns )
+ set( MACOSX_BUNDLE_GUI_IDENTIFIER org.kicad-pcb.kicad )
+ set( MACOSX_BUNDLE_NAME pcbnew )
+endif()
+
+
+# Create a C++ compilable string initializer containing html text into a *.h file:
+add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/dialogs/dialog_freeroute_exchange_help_html.h
+ COMMAND ${CMAKE_COMMAND}
+ -DinputFile=${CMAKE_CURRENT_SOURCE_DIR}/dialogs/dialog_freeroute_exchange_help.html
+ -DoutputFile=${CMAKE_CURRENT_SOURCE_DIR}/dialogs/dialog_freeroute_exchange_help_html.h
+ -P ${CMAKE_MODULE_PATH}/Html2C.cmake
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/dialogs/dialog_freeroute_exchange_help.html
+ COMMENT "creating ${CMAKE_CURRENT_SOURCE_DIR}/dialogs/dialog_freeroute_exchange_help_html.h
+ from ${CMAKE_CURRENT_SOURCE_DIR}/dialogs/dialog_freeroute_exchange_help.html"
+ )
+
+set_source_files_properties( dialogs/dialog_freeroute_exchange.cpp PROPERTIES
+ OBJECT_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/dialogs/dialog_freeroute_exchange_help_html.h
+ )
+
+add_subdirectory( pcad2kicadpcb_plugin )
+
+if( BUILD_GITHUB_PLUGIN )
+ add_subdirectory( github )
+ add_dependencies( github_plugin lib-dependencies )
+endif()
+
+
+# a very small program launcher for pcbnew_kiface
+add_executable( pcbnew WIN32 MACOSX_BUNDLE
+ ../common/single_top.cpp
+ ${PCBNEW_RESOURCES}
+ )
+set_source_files_properties( ../common/single_top.cpp pcbnew.cpp PROPERTIES
+ COMPILE_DEFINITIONS "TOP_FRAME=FRAME_PCB;PGM_DATA_FILE_EXT=\"kicad_pcb\";BUILD_KIWAY_DLL"
+ )
+target_link_libraries( pcbnew
+ #singletop # replaces common, giving us restrictive control and link warnings.
+ # There's way too much crap coming in from common yet.
+ common
+ bitmaps
+ ${wxWidgets_LIBRARIES}
+ )
+
+if( MAKE_LINK_MAPS )
+ set_target_properties( pcbnew PROPERTIES
+ LINK_FLAGS "${TO_LINKER},-cref ${TO_LINKER},-Map=pcbnew.map" )
+endif()
+
+# the main pcbnew program, in DSO form.
+add_library( pcbnew_kiface MODULE
+ pcbnew.cpp
+ ${PCBNEW_SRCS}
+ ${PCBNEW_COMMON_SRCS}
+ ${PCBNEW_SCRIPTING_SRCS}
+ )
+set_target_properties( pcbnew_kiface PROPERTIES
+ # Decorate OUTPUT_NAME with PREFIX and SUFFIX, creating something like
+ # _pcbnew.so, _pcbnew.dll, or _pcbnew.kiface
+ OUTPUT_NAME pcbnew
+ PREFIX ${KIFACE_PREFIX}
+ SUFFIX ${KIFACE_SUFFIX}
+ )
+
+if( ${OPENMP_FOUND} )
+ set_target_properties( pcbnew_kiface PROPERTIES
+ COMPILE_FLAGS ${OpenMP_CXX_FLAGS}
+ )
+endif()
+
+target_link_libraries( pcbnew_kiface
+ 3d-viewer
+ pcbcommon
+ pnsrouter
+ common
+ pcad2kicadpcb
+ polygon
+ bitmaps
+ gal
+ lib_dxf
+ idf3
+ ${wxWidgets_LIBRARIES}
+ ${GITHUB_PLUGIN_LIBRARIES}
+ ${GDI_PLUS_LIBRARIES}
+ ${PYTHON_LIBRARIES}
+ ${Boost_LIBRARIES} # must follow GITHUB
+ ${PCBNEW_EXTRA_LIBS} # -lrt must follow Boost
+ ${OPENMP_LIBRARIES}
+ )
+set_source_files_properties( pcbnew.cpp PROPERTIES
+ # The KIFACE is in pcbnew.cpp, export it:
+ COMPILE_DEFINITIONS "BUILD_KIWAY_DLL;COMPILING_DLL"
+ )
+
+if( MAKE_LINK_MAPS )
+ set_target_properties( pcbnew_kiface PROPERTIES
+ LINK_FLAGS "${TO_LINKER},-cref ${TO_LINKER},-Map=_pcbnew.kiface.map"
+ )
+ set_target_properties( pcbnew PROPERTIES
+ LINK_FLAGS "${TO_LINKER},-cref ${TO_LINKER},-Map=pcbnew.map"
+ )
+endif()
+
+# if building pcbnew, then also build pcbnew_kiface if out of date.
+add_dependencies( pcbnew pcbnew_kiface )
+
+# these 2 binaries are a matched set, keep them together:
+if( APPLE )
+ set_target_properties( pcbnew PROPERTIES
+ MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist
+ )
+
+ # puts binaries into the *.app bundle while linking
+ set_target_properties( pcbnew_kiface PROPERTIES
+ LIBRARY_OUTPUT_DIRECTORY ${OSX_BUNDLE_BUILD_KIFACE_DIR}
+ )
+ # put individual bundle outside of main bundle as a first step
+ # will be pulled into the main bundle when creating main bundle
+ install( TARGETS pcbnew
+ DESTINATION ${KICAD_BIN}
+ COMPONENT binary
+ )
+ install( CODE "
+ # override default embedded path settings
+ ${OSX_BUNDLE_OVERRIDE_PATHS}
+
+ # do all the work
+ include( BundleUtilities )
+ fixup_bundle( ${KICAD_BIN}/pcbnew.app/Contents/MacOS/pcbnew
+ \"\"
+ \"\"
+ )
+ " COMPONENT Runtime
+ )
+else()
+ install( TARGETS pcbnew
+ DESTINATION ${KICAD_BIN}
+ COMPONENT binary
+ )
+ install( TARGETS pcbnew_kiface
+ DESTINATION ${KICAD_BIN}
+ COMPONENT binary
+ )
+endif()
+
+add_dependencies( pcbnew lib-dependencies )
+
+
+if( KICAD_SCRIPTING )
+ if( NOT APPLE )
+ install( FILES ${CMAKE_BINARY_DIR}/pcbnew/pcbnew.py DESTINATION ${PYTHON_DEST} )
+ else()
+ # put into bundle at build time, it is relocated at install
+ add_custom_target( ScriptingPcbnewPyCopy ALL
+ COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/pcbnew/pcbnew.py" "${PYTHON_DEST}/"
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/pcbnew.py
+ COMMENT "Copying pcbnew.py into ${PYTHON_DEST}"
+ )
+ add_dependencies( ScriptingPcbnewPyCopy ScriptingWxpythonCopy )
+ endif()
+
+ # scripting plugins
+ install( DIRECTORY ${PROJECT_SOURCE_DIR}/pcbnew/scripting/plugins/
+ DESTINATION ${KICAD_DATA}/scripting/plugins
+ FILE_PERMISSIONS OWNER_EXECUTE OWNER_READ OWNER_WRITE GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ
+ )
+endif()
+
+if( KICAD_SCRIPTING_MODULES )
+ add_custom_target( FixSwigImportsModuleScripting ALL
+ COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/scripting/build_tools/fix_swig_imports.py ${CMAKE_CURRENT_BINARY_DIR}/pcbnew.py
+ DEPENDS _pcbnew
+ COMMENT "Fixing swig_import_helper in Kicad scripting modules"
+ )
+
+ if( NOT APPLE )
+ install( FILES ${CMAKE_BINARY_DIR}/pcbnew/pcbnew.py DESTINATION ${PYTHON_DEST} )
+ else()
+ # put everything into bundle at build time, it is relocated at install
+ add_custom_target( ScriptingModulesPcbnewPyCopy ALL
+ COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/pcbnew/pcbnew.py" "${PYTHON_DEST}/"
+ DEPENDS FixSwigImportsModuleScripting
+ COMMENT "Copying pcbnew.py into ${PYTHON_DEST}"
+ )
+ add_dependencies( ScriptingModulesPcbnewPyCopy ScriptingWxpythonCopy )
+ endif()
+
+ if( MINGW )
+ install( FILES ${CMAKE_BINARY_DIR}/pcbnew/_pcbnew.pyd DESTINATION ${PYTHON_DEST} )
+ elseif( APPLE )
+ # put everything into bundle at build time, it is relocated at install
+ add_custom_target( ScriptingModulesPcbnewSoCopy ALL
+ COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/pcbnew/_pcbnew.so" "${PYTHON_DEST}/"
+ DEPENDS _pcbnew
+ COMMENT "Copying _pcbnew.so into ${PYTHON_DEST}"
+ )
+ add_dependencies( ScriptingModulesPcbnewSoCopy ScriptingWxpythonCopy )
+ else()
+ install( FILES ${CMAKE_BINARY_DIR}/pcbnew/_pcbnew.so DESTINATION ${PYTHON_DEST} )
+ endif()
+endif()
+
+if( APPLE )
+ if( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES )
+ # find wx-X.Y-osx_cocoa path below PYTHON_SITE_PACKAGE_PATH
+ file( GLOB WXPYTHON_DIR RELATIVE ${PYTHON_SITE_PACKAGE_PATH} ${PYTHON_SITE_PACKAGE_PATH}/wx-?.?-osx_cocoa )
+ if( NOT WXPYTHON_DIR )
+ message( FATAL_ERROR "Could not find 'wx-?.?-osx_cocoa' in '${PYTHON_SITE_PACKAGE_PATH}'" )
+ endif()
+ # copy contents
+ add_custom_target( ScriptingWxpythonCopy ALL
+ COMMAND ${CMAKE_COMMAND} -E copy_directory "${PYTHON_SITE_PACKAGE_PATH}/${WXPYTHON_DIR}" "${PYTHON_DEST}/${WXPYTHON_DIR}"
+ COMMAND ${CMAKE_COMMAND} -E copy "${PYTHON_SITE_PACKAGE_PATH}/wxversion.py" "${PYTHON_DEST}"
+ COMMENT "Copying wxPython into ${PYTHON_DEST}"
+ )
+ endif()
+endif()
+
+
+if( false ) # haven't been used in years.
+ # This one gets made only when testing.
+ add_executable( specctra_test EXCLUDE_FROM_ALL specctra_test.cpp specctra.cpp )
+ target_link_libraries( specctra_test common ${wxWidgets_LIBRARIES} )
+
+
+ # This one gets made only when testing.
+ add_executable( layer_widget_test WIN32 EXCLUDE_FROM_ALL
+ layer_widget.cpp
+ )
+ target_link_libraries( layer_widget_test common ${wxWidgets_LIBRARIES} )
+endif()