2014-02-03 15:10:37 +00:00
|
|
|
|
|
|
|
# Default to CMAKE_BUILD_TYPE = Release unless overridden on command line
|
|
|
|
# http://www.cmake.org/pipermail/cmake/2008-September/023808.html
|
|
|
|
if( DEFINED CMAKE_BUILD_TYPE )
|
|
|
|
set( CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "Set to either \"Release\" or \"Debug\"" )
|
|
|
|
else()
|
|
|
|
set( CMAKE_BUILD_TYPE Release CACHE STRING "Set to either \"Release\" or \"Debug\"" )
|
|
|
|
endif()
|
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
project( kicad )
|
2008-01-06 21:56:45 +00:00
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
cmake_minimum_required( VERSION 2.8.4 FATAL_ERROR )
|
2013-05-31 21:22:34 +00:00
|
|
|
# because of http://public.kitware.com/Bug/view.php?id=10395
|
2008-01-06 21:56:45 +00:00
|
|
|
|
2008-03-31 01:32:15 +00:00
|
|
|
# Path to local CMake modules.
|
2013-08-20 18:03:21 +00:00
|
|
|
set( CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeModules )
|
2007-11-08 07:17:37 +00:00
|
|
|
|
2011-10-05 18:26:22 +00:00
|
|
|
#
|
2011-10-07 14:41:30 +00:00
|
|
|
# KiCad build options should be added below.
|
2011-10-05 18:26:22 +00:00
|
|
|
#
|
|
|
|
# If you add a new build option, please add it's state to the CopyVersionInfoToClipboard()
|
2012-10-16 01:42:50 +00:00
|
|
|
# function in common/basicframe.cpp so that build option settings can be included in bug
|
2011-10-05 18:26:22 +00:00
|
|
|
# reports.
|
|
|
|
#
|
|
|
|
|
2014-09-17 16:04:04 +00:00
|
|
|
# The desire is to migrate designs *away from* case independence, and to create designs which use
|
|
|
|
# literally (case specific) interpreted component names. But for backwards compatibility,
|
|
|
|
# you may turn OFF this option if you really must. (Remember that with KiCad using text
|
|
|
|
# data files, typically you would be better off simply doctoring those files into
|
|
|
|
# a case literal state with a text editor and move forward into the brave new
|
|
|
|
# world of case specificity. Also, BOM generators may not work properly when you
|
|
|
|
# have this option turned OFF, the xml export's referential integrity is broken
|
|
|
|
# on library part name. Hence the default is ON now, as of 29-Jan-2014.
|
|
|
|
option( KICAD_KEEPCASE
|
2014-09-26 21:52:56 +00:00
|
|
|
"Use case sensitive string matching for component names (default ON)."
|
2014-09-17 16:04:04 +00:00
|
|
|
ON
|
|
|
|
)
|
|
|
|
|
2014-12-23 13:50:42 +00:00
|
|
|
# The footprint library wizard uses wxWebview, which needs a system webkit to be built
|
|
|
|
# The default build option in wxWidgets is to build wxWebview, but it could be not built
|
2014-12-21 14:13:14 +00:00
|
|
|
# if web kit devel tools are missing
|
2014-12-23 13:50:42 +00:00
|
|
|
# So this option disable use of wxWebview, if building wxWebview creates issues
|
2014-12-21 14:13:14 +00:00
|
|
|
# see:
|
|
|
|
# http://docs.wxwidgets.org/3.0/classwx_web_view.html
|
2014-12-23 13:01:59 +00:00
|
|
|
# * No issues on Windows.
|
|
|
|
# * needs webkitgtk-devel package installed on Linux, and wxWidgets rebuilt with this package.
|
|
|
|
# * Seems also OK on OSX.
|
2014-12-23 13:50:42 +00:00
|
|
|
# However the default option is on and has effect only if BUILD_GITHUB_PLUGIN is ON
|
|
|
|
# This option could be removed soon, if no serious issue happens on Linux
|
2014-12-21 14:13:14 +00:00
|
|
|
option( KICAD_USE_WEBKIT
|
|
|
|
"Use system web kit to build a web viewer in footprint library wizard to easily select github libraries (default ON)."
|
|
|
|
ON
|
|
|
|
)
|
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
option( USE_WX_GRAPHICS_CONTEXT
|
2014-09-26 21:52:56 +00:00
|
|
|
"Use wxGraphicsContext for rendering (default OFF). Warning, this is experimental" )
|
2009-11-05 08:52:41 +00:00
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
option( USE_WX_OVERLAY
|
2014-09-26 21:52:56 +00:00
|
|
|
"Use wxOverlay: Always ON for MAC (default OFF). Warning, this is experimental" )
|
2010-10-09 08:08:29 +00:00
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
option( KICAD_SCRIPTING
|
2014-09-26 21:52:56 +00:00
|
|
|
"Build the Python scripting support inside KiCad binaries (default OFF)."
|
2013-02-14 13:12:54 +00:00
|
|
|
)
|
2012-03-17 15:17:13 +00:00
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
option( KICAD_SCRIPTING_MODULES
|
2014-09-26 21:52:56 +00:00
|
|
|
"Build KiCad Python modules that can be used from scripting languages (default OFF)."
|
2013-02-14 13:12:54 +00:00
|
|
|
)
|
2012-08-04 11:47:24 +00:00
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
option( KICAD_SCRIPTING_WXPYTHON
|
2014-09-26 21:52:56 +00:00
|
|
|
"Build wxPython implementation for wx interface building in Python and py.shell (default OFF)."
|
2013-02-14 13:12:54 +00:00
|
|
|
)
|
2013-11-01 12:56:20 +00:00
|
|
|
|
2013-12-30 00:27:03 +00:00
|
|
|
option( KICAD_BUILD_STATIC
|
2014-09-26 21:52:56 +00:00
|
|
|
"Build dependencies as static libraries. OSX only. (default OFF)."
|
2013-12-30 00:27:03 +00:00
|
|
|
)
|
|
|
|
|
2014-02-07 18:53:54 +00:00
|
|
|
option( KICAD_BUILD_DYNAMIC
|
2014-09-26 21:52:56 +00:00
|
|
|
"Build dependencies as shared libraries. Required for wxPython support. OXS only. (default OFF)."
|
2014-02-07 18:53:54 +00:00
|
|
|
)
|
|
|
|
|
2014-09-26 21:52:56 +00:00
|
|
|
option( USE_OSX_DEPS_BUILDER
|
|
|
|
"Build dependencies from source instead of dependencies installed on system. OSX only. (default OFF)."
|
|
|
|
)
|
2014-02-07 18:53:54 +00:00
|
|
|
|
2014-01-08 02:00:47 +00:00
|
|
|
# WARNING: KiCad developers strongly advise you to build Boost with supplied patches,
|
|
|
|
# as it is known to work with KiCad. Other versions may contain bugs that may result
|
|
|
|
# in KiCad errors.
|
2014-01-08 01:52:19 +00:00
|
|
|
option( KICAD_SKIP_BOOST
|
2014-01-08 02:00:47 +00:00
|
|
|
"Skip building downloaded Boost library components, use Boost from your system."
|
2014-01-08 01:52:19 +00:00
|
|
|
)
|
2014-01-08 02:00:47 +00:00
|
|
|
mark_as_advanced( KICAD_SKIP_BOOST ) # Normal builders should build Boost.
|
2014-01-08 01:52:19 +00:00
|
|
|
|
|
|
|
|
2012-09-30 17:50:17 +00:00
|
|
|
# when option KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES is enabled:
|
|
|
|
# PYTHON_EXECUTABLE can be defined when invoking cmake
|
|
|
|
# ( use -DPYTHON_EXECUTABLE=<python path>/python.exe or python2 )
|
|
|
|
# when not defined by user, the default is python.exe under Windows and python2 for others
|
2013-02-11 00:41:49 +00:00
|
|
|
# python binary file should be is exec path.
|
2012-09-30 17:50:17 +00:00
|
|
|
|
2014-03-21 12:20:54 +00:00
|
|
|
option( BUILD_GITHUB_PLUGIN "Build the GITHUB_PLUGIN for pcbnew." ON )
|
2013-02-23 19:30:43 +00:00
|
|
|
|
2014-01-08 14:47:39 +00:00
|
|
|
# This can be set to a custom name to brag about a particular branch in the "About" dialog:
|
|
|
|
set( KICAD_REPO_NAME "product" CACHE STRING "Name of the tree from which this build came." )
|
|
|
|
|
|
|
|
|
2013-06-05 14:24:03 +00:00
|
|
|
# All CMake downloads go here. Suggested is up in the source tree, not in the build dir where they
|
|
|
|
# would have to be downloaded over and over again. The default is to choose a directory that is
|
|
|
|
# hidden on linux (starts with a '.') because there is a way to exclude this directory when grepping
|
|
|
|
# the source tree.
|
|
|
|
set( DOWNLOAD_DIR ${PROJECT_SOURCE_DIR}/.downloads-by-cmake
|
|
|
|
CACHE PATH "Location of KiCad downloads, suggested is a dir common to all builds, i.e. global." )
|
|
|
|
|
2013-11-01 12:56:20 +00:00
|
|
|
#Add option to add user directories for linker, if any
|
|
|
|
LINK_DIRECTORIES( ${LINK_DIRECTORIES_PATH} )
|
|
|
|
|
2013-10-17 19:03:36 +00:00
|
|
|
if( UNIX )
|
2014-02-22 23:17:36 +00:00
|
|
|
set( KICAD_USER_CONFIG_DIR $ENV{HOME} CACHE PATH "Location of user specific KiCad config files" )
|
2013-10-17 19:03:36 +00:00
|
|
|
elseif( MINGW )
|
2014-12-29 18:06:09 +00:00
|
|
|
set( KICAD_USER_CONFIG_DIR $ENV{APPDATA} CACHE PATH "Location of user specific KiCad config files" )
|
2013-10-17 19:03:36 +00:00
|
|
|
endif()
|
|
|
|
mark_as_advanced( KICAD_USER_CONFIG_DIR )
|
|
|
|
|
2011-04-09 18:53:39 +00:00
|
|
|
|
2008-08-11 11:45:29 +00:00
|
|
|
#================================================
|
2013-12-22 14:55:05 +00:00
|
|
|
# Set flags for GCC, or treat llvm as GCC
|
2008-08-11 11:45:29 +00:00
|
|
|
#================================================
|
|
|
|
|
2013-12-22 14:55:05 +00:00
|
|
|
if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
2013-02-14 13:12:54 +00:00
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
execute_process( COMMAND ${CMAKE_C_COMPILER} -dumpversion
|
2012-10-16 01:42:50 +00:00
|
|
|
OUTPUT_VARIABLE GCC_VERSION
|
2013-08-20 18:03:21 +00:00
|
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
2012-10-16 01:42:50 +00:00
|
|
|
|
* KIWAY Milestone A): Make major modules into DLL/DSOs.
! The initial testing of this commit should be done using a Debug build so that
all the wxASSERT()s are enabled. Also, be sure and keep enabled the
USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it
off is senseless anyways. If you want stable code, go back to a prior version,
the one tagged with "stable".
* Relocate all functionality out of the wxApp derivative into more finely
targeted purposes:
a) DLL/DSO specific
b) PROJECT specific
c) EXE or process specific
d) configuration file specific data
e) configuration file manipulations functions.
All of this functionality was blended into an extremely large wxApp derivative
and that was incompatible with the desire to support multiple concurrently
loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects.
An amazing amount of organization come from simply sorting each bit of
functionality into the proper box.
* Switch to wxConfigBase from wxConfig everywhere except instantiation.
* Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD,
PGM_SINGLE_TOP,
* Remove "Return" prefix on many function names.
* Remove obvious comments from CMakeLists.txt files, and from else() and endif()s.
* Fix building boost for use in a DSO on linux.
* Remove some of the assumptions in the CMakeLists.txt files that windows had
to be the host platform when building windows binaries.
* Reduce the number of wxStrings being constructed at program load time via
static construction.
* Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that
these functions are useful even when the wxConfigBase comes from another
source, as is the case in the KICAD_MANAGER_FRAME.
* Move the setting of the KIPRJMOD environment variable into class PROJECT,
so that it can be moved into a project variable soon, and out of FP_LIB_TABLE.
* Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all
its child wxFrames and wxDialogs now have a Kiway() member function which
returns a KIWAY& that that window tree branch is in support of. This is like
wxWindows DNA in that child windows get this member with proper value at time
of construction.
* Anticipate some of the needs for milestones B) and C) and make code
adjustments now in an effort to reduce work in those milestones.
* No testing has been done for python scripting, since milestone C) has that
being largely reworked and re-thought-out.
2014-03-20 00:42:08 +00:00
|
|
|
if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
|
|
|
set( TO_LINKER -XLinker )
|
|
|
|
else()
|
|
|
|
set( TO_LINKER -Wl )
|
|
|
|
endif()
|
|
|
|
|
2013-10-22 19:29:37 +00:00
|
|
|
# Establish -Wall early, so specialized relaxations of this may come
|
|
|
|
# subsequently on the command line, such as in pcbnew/github/CMakeLists.txt
|
2013-11-15 14:10:29 +00:00
|
|
|
set( CMAKE_C_FLAGS "-Wall ${CMAKE_C_FLAGS}" )
|
|
|
|
set( CMAKE_CXX_FLAGS "-Wall ${CMAKE_CXX_FLAGS}" )
|
2012-10-16 01:42:50 +00:00
|
|
|
|
2013-10-22 14:26:26 +00:00
|
|
|
# The optimization level is -O1 instead of the usual -O2 level because
|
|
|
|
# boost::polygon has a function (inflate polygon) broken by the -O2 level
|
|
|
|
# with GCC 4.7.0 to 4.7.2 (works fine with with GCC 4.6 and 4.7.3).
|
|
|
|
# This lower optimization level does not have a significant change on the speed.
|
|
|
|
# See also:
|
|
|
|
# https://bugs.launchpad.net/kicad/+bug/1056926
|
|
|
|
# https://svn.boost.org/trac/boost/ticket/7983
|
|
|
|
if( GCC_VERSION VERSION_EQUAL 4.7.0 OR ( GCC_VERSION VERSION_GREATER 4.7.0 AND GCC_VERSION VERSION_LESS 4.7.3 ) )
|
2013-10-22 19:29:37 +00:00
|
|
|
set( CMAKE_C_FLAGS_RELEASE "-O1" )
|
2013-10-22 14:26:26 +00:00
|
|
|
set( CMAKE_CXX_FLAGS_RELEASE "-O1" )
|
2013-02-14 13:12:54 +00:00
|
|
|
else()
|
2013-10-22 19:29:37 +00:00
|
|
|
set( CMAKE_C_FLAGS_RELEASE "-O2" )
|
2013-10-22 14:26:26 +00:00
|
|
|
set( CMAKE_CXX_FLAGS_RELEASE "-O2" )
|
2013-02-14 13:12:54 +00:00
|
|
|
endif()
|
2012-10-16 01:42:50 +00:00
|
|
|
|
2013-10-22 19:29:37 +00:00
|
|
|
set( CMAKE_C_FLAGS_DEBUG "-g3 -ggdb3 -DDEBUG" )
|
2014-01-18 09:04:12 +00:00
|
|
|
set( CMAKE_CXX_FLAGS_DEBUG "-g3 -ggdb3 -DDEBUG -Wno-deprecated-declarations" )
|
2013-10-22 14:26:26 +00:00
|
|
|
|
2013-10-22 19:29:37 +00:00
|
|
|
set( CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNDEBUG" )
|
2013-10-22 14:26:26 +00:00
|
|
|
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG" )
|
2013-02-14 15:31:56 +00:00
|
|
|
|
2013-12-31 10:42:25 +00:00
|
|
|
if( GXX_HAS_VISIBILITY_FLAG AND NOT APPLE )
|
2013-12-30 17:53:12 +00:00
|
|
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden" )
|
|
|
|
endif()
|
|
|
|
|
2013-12-31 10:42:25 +00:00
|
|
|
if( GXX_HAS_VISIBILITY_INLINES_FLAG AND NOT APPLE )
|
2013-12-30 17:53:12 +00:00
|
|
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-inlines-hidden" )
|
|
|
|
endif()
|
|
|
|
|
2014-01-31 17:27:06 +00:00
|
|
|
find_package( OpenMP QUIET )
|
2014-04-01 02:38:19 +00:00
|
|
|
|
2014-01-31 17:27:06 +00:00
|
|
|
if( OPENMP_FOUND )
|
|
|
|
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}" )
|
|
|
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}" )
|
|
|
|
add_definitions( -DUSE_OPENMP )
|
2014-04-01 02:38:19 +00:00
|
|
|
|
|
|
|
# MinGW does not include the OpenMP link library and FindOpenMP.cmake does not
|
|
|
|
# set it either. Not sure this is the most elegant solution but it works.
|
|
|
|
if( MINGW )
|
|
|
|
set( OPENMP_LIBRARIES gomp )
|
|
|
|
endif()
|
2014-01-31 17:27:06 +00:00
|
|
|
endif()
|
|
|
|
|
2013-09-21 07:30:23 +00:00
|
|
|
if( MINGW )
|
2013-11-07 14:26:32 +00:00
|
|
|
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "-s" )
|
2013-01-04 23:02:10 +00:00
|
|
|
|
2013-11-10 19:15:09 +00:00
|
|
|
# _UNICODE definition seems needed under mingw/gcc 4.8
|
|
|
|
# (Kicad uses unicode, and on Windows, wxWidgets >= 2.9.4 is mandatory
|
|
|
|
# and uses unicode)
|
|
|
|
if( GCC_VERSION VERSION_EQUAL 4.8.0 OR GCC_VERSION VERSION_GREATER 4.8.0 )
|
|
|
|
add_definitions(-D_UNICODE)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# Since version 2.8.5, Cmake uses a response file (.rsp) to
|
|
|
|
# pass the list of include paths to gcc
|
|
|
|
# unfortunately, under mingw32+msys, at least with gcc 4.8 and previous,
|
|
|
|
# this file is not expanded and include paths defined in this file are not taken in account
|
|
|
|
# this is the case of wxWidgets includes
|
|
|
|
# Disable this response file for includes ( See Windows-GNU.cmake module )
|
|
|
|
if( WIN32 AND MSYS AND NOT CMAKE_CROSSCOMPILING )
|
|
|
|
# fixme: it is needed only with MSYS+MINGW32? or always under MINGW
|
2013-12-30 17:53:12 +00:00
|
|
|
if( ${CMAKE_SIZEOF_VOID_P} MATCHES 4 )
|
|
|
|
set( CMAKE_CXX_USE_RESPONSE_FILE_FOR_INCLUDES 0 )
|
2013-11-10 19:15:09 +00:00
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2013-02-14 13:12:54 +00:00
|
|
|
else()
|
2014-01-21 06:59:32 +00:00
|
|
|
# We build DLL/DSOs from static libraries, so create position independent
|
|
|
|
# code for all cases, since we do not have DLL/DSO specific static
|
|
|
|
# libraries. Subdirectories via add_subdirectores() reference this
|
|
|
|
# variable, and it is either set or empty, empty for Windows.
|
2013-09-23 15:19:39 +00:00
|
|
|
set( PIC_FLAG -fPIC )
|
|
|
|
|
2014-01-21 06:59:32 +00:00
|
|
|
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PIC_FLAG}" )
|
2013-09-23 15:19:39 +00:00
|
|
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PIC_FLAG}" )
|
2013-02-14 15:31:56 +00:00
|
|
|
|
2014-02-11 23:13:14 +00:00
|
|
|
if( NOT APPLE )
|
2014-05-28 04:33:00 +00:00
|
|
|
# Thou shalt not link vaporware and tell us it's a valid DSO (apple ld doesn't support it)
|
2014-02-11 23:13:14 +00:00
|
|
|
set( CMAKE_SHARED_LINKER_FLAGS "${TO_LINKER},--no-undefined" )
|
|
|
|
set( CMAKE_MODULE_LINKER_FLAGS "${TO_LINKER},--no-undefined" )
|
2014-03-13 23:44:46 +00:00
|
|
|
|
|
|
|
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "-s" )
|
2014-05-28 04:33:00 +00:00
|
|
|
|
|
|
|
# Defeat ELF's ability to use the GOT to replace locally implemented functions
|
|
|
|
# with ones from another module.
|
2014-06-03 15:59:52 +00:00
|
|
|
# https://bugs.launchpad.net/kicad/+bug/1322354
|
2014-05-28 04:33:00 +00:00
|
|
|
set( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${TO_LINKER},-Bsymbolic" )
|
|
|
|
set( CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${TO_LINKER},-Bsymbolic" )
|
2014-02-11 23:13:14 +00:00
|
|
|
endif()
|
2013-01-04 23:02:10 +00:00
|
|
|
|
2013-02-14 13:12:54 +00:00
|
|
|
endif()
|
2011-09-10 17:48:35 +00:00
|
|
|
|
2014-01-25 12:23:29 +00:00
|
|
|
# quiet GCC while in boost
|
2013-06-05 14:24:03 +00:00
|
|
|
if( GCC_VERSION VERSION_GREATER 4.8 OR GCC_VERSION VERSION_EQUAL 4.8 )
|
|
|
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-local-typedefs" )
|
|
|
|
endif()
|
2014-01-25 12:23:29 +00:00
|
|
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-strict-aliasing" )
|
2013-12-30 17:53:12 +00:00
|
|
|
|
|
|
|
if( APPLE )
|
2014-01-24 21:09:31 +00:00
|
|
|
|
2014-11-28 17:34:00 +00:00
|
|
|
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__ASSERTMACROS__" )
|
|
|
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__ASSERTMACROS__" )
|
2014-01-24 21:09:31 +00:00
|
|
|
|
2014-03-13 23:44:46 +00:00
|
|
|
# Allows .dylib relocation in the future - needed by fixbundle
|
2014-01-27 22:24:04 +00:00
|
|
|
set( CMAKE_LD_FLAGS "${CMAKE_LD_FLAGS} -headerpad_max_install_names")
|
|
|
|
|
2014-01-24 21:09:31 +00:00
|
|
|
if( NOT CMAKE_CXX_COMPILER )
|
|
|
|
EXEC_PROGRAM( wx-config ARGS --cc OUTPUT_VARIABLE CMAKE_C_COMPILER )
|
* KIWAY Milestone A): Make major modules into DLL/DSOs.
! The initial testing of this commit should be done using a Debug build so that
all the wxASSERT()s are enabled. Also, be sure and keep enabled the
USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it
off is senseless anyways. If you want stable code, go back to a prior version,
the one tagged with "stable".
* Relocate all functionality out of the wxApp derivative into more finely
targeted purposes:
a) DLL/DSO specific
b) PROJECT specific
c) EXE or process specific
d) configuration file specific data
e) configuration file manipulations functions.
All of this functionality was blended into an extremely large wxApp derivative
and that was incompatible with the desire to support multiple concurrently
loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects.
An amazing amount of organization come from simply sorting each bit of
functionality into the proper box.
* Switch to wxConfigBase from wxConfig everywhere except instantiation.
* Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD,
PGM_SINGLE_TOP,
* Remove "Return" prefix on many function names.
* Remove obvious comments from CMakeLists.txt files, and from else() and endif()s.
* Fix building boost for use in a DSO on linux.
* Remove some of the assumptions in the CMakeLists.txt files that windows had
to be the host platform when building windows binaries.
* Reduce the number of wxStrings being constructed at program load time via
static construction.
* Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that
these functions are useful even when the wxConfigBase comes from another
source, as is the case in the KICAD_MANAGER_FRAME.
* Move the setting of the KIPRJMOD environment variable into class PROJECT,
so that it can be moved into a project variable soon, and out of FP_LIB_TABLE.
* Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all
its child wxFrames and wxDialogs now have a Kiway() member function which
returns a KIWAY& that that window tree branch is in support of. This is like
wxWindows DNA in that child windows get this member with proper value at time
of construction.
* Anticipate some of the needs for milestones B) and C) and make code
adjustments now in an effort to reduce work in those milestones.
* No testing has been done for python scripting, since milestone C) has that
being largely reworked and re-thought-out.
2014-03-20 00:42:08 +00:00
|
|
|
endif()
|
2014-01-25 12:23:29 +00:00
|
|
|
|
2014-01-24 21:09:31 +00:00
|
|
|
if( NOT CMAKE_CXX_COMPILER )
|
|
|
|
EXEC_PROGRAM( wx-config ARGS --cxx OUTPUT_VARIABLE CMAKE_CXX_COMPILER )
|
* KIWAY Milestone A): Make major modules into DLL/DSOs.
! The initial testing of this commit should be done using a Debug build so that
all the wxASSERT()s are enabled. Also, be sure and keep enabled the
USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it
off is senseless anyways. If you want stable code, go back to a prior version,
the one tagged with "stable".
* Relocate all functionality out of the wxApp derivative into more finely
targeted purposes:
a) DLL/DSO specific
b) PROJECT specific
c) EXE or process specific
d) configuration file specific data
e) configuration file manipulations functions.
All of this functionality was blended into an extremely large wxApp derivative
and that was incompatible with the desire to support multiple concurrently
loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects.
An amazing amount of organization come from simply sorting each bit of
functionality into the proper box.
* Switch to wxConfigBase from wxConfig everywhere except instantiation.
* Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD,
PGM_SINGLE_TOP,
* Remove "Return" prefix on many function names.
* Remove obvious comments from CMakeLists.txt files, and from else() and endif()s.
* Fix building boost for use in a DSO on linux.
* Remove some of the assumptions in the CMakeLists.txt files that windows had
to be the host platform when building windows binaries.
* Reduce the number of wxStrings being constructed at program load time via
static construction.
* Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that
these functions are useful even when the wxConfigBase comes from another
source, as is the case in the KICAD_MANAGER_FRAME.
* Move the setting of the KIPRJMOD environment variable into class PROJECT,
so that it can be moved into a project variable soon, and out of FP_LIB_TABLE.
* Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all
its child wxFrames and wxDialogs now have a Kiway() member function which
returns a KIWAY& that that window tree branch is in support of. This is like
wxWindows DNA in that child windows get this member with proper value at time
of construction.
* Anticipate some of the needs for milestones B) and C) and make code
adjustments now in an effort to reduce work in those milestones.
* No testing has been done for python scripting, since milestone C) has that
being largely reworked and re-thought-out.
2014-03-20 00:42:08 +00:00
|
|
|
endif()
|
2014-01-24 21:09:31 +00:00
|
|
|
|
2014-11-28 17:34:00 +00:00
|
|
|
# There seems to be no consistent behavior when -mmacosx-min-version is
|
|
|
|
# not specified, so force user to set minimum OSX version to build for
|
|
|
|
if( NOT CMAKE_OSX_DEPLOYMENT_TARGET )
|
|
|
|
message( FATAL_ERROR "Please specify target OS X version using -DCMAKE_OSX_DEPLOYMENT_TARGET=10.x" )
|
|
|
|
endif()
|
|
|
|
|
2013-12-30 00:27:03 +00:00
|
|
|
endif()
|
2013-12-30 17:53:12 +00:00
|
|
|
|
|
|
|
endif( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
2007-11-08 07:17:37 +00:00
|
|
|
|
2014-09-17 16:04:04 +00:00
|
|
|
if( KICAD_KEEPCASE )
|
|
|
|
add_definitions( -DKICAD_KEEPCASE )
|
|
|
|
endif()
|
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
if( USE_WX_OVERLAY OR APPLE )
|
|
|
|
add_definitions( -DUSE_WX_OVERLAY )
|
2013-02-14 13:12:54 +00:00
|
|
|
endif()
|
2010-10-09 08:08:29 +00:00
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
if( KICAD_SCRIPTING )
|
|
|
|
add_definitions( -DKICAD_SCRIPTING )
|
2013-02-14 13:12:54 +00:00
|
|
|
endif()
|
2012-07-22 12:15:38 +00:00
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
if( KICAD_SCRIPTING_MODULES )
|
|
|
|
add_definitions( -DKICAD_SCRIPTING_MODULES )
|
2013-02-14 13:12:54 +00:00
|
|
|
endif()
|
2012-08-01 11:54:20 +00:00
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
if( KICAD_SCRIPTING_WXPYTHON )
|
|
|
|
add_definitions( -DKICAD_SCRIPTING_WXPYTHON )
|
2013-02-14 13:12:54 +00:00
|
|
|
endif()
|
2010-10-09 08:08:29 +00:00
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
if( USE_WX_GRAPHICS_CONTEXT )
|
|
|
|
add_definitions( -DUSE_WX_GRAPHICS_CONTEXT )
|
2013-02-14 13:12:54 +00:00
|
|
|
endif()
|
2010-02-08 18:15:42 +00:00
|
|
|
|
2014-02-03 19:26:18 +00:00
|
|
|
|
2014-11-05 16:39:36 +00:00
|
|
|
# By default images in menu items are enabled on all platforms except OSX.
|
|
|
|
if( NOT APPLE )
|
2014-11-13 02:09:47 +00:00
|
|
|
set( USE_IMAGES_IN_MENUS ON CACHE BOOL "Enable images in menus" )
|
2013-02-14 13:12:54 +00:00
|
|
|
else()
|
2014-11-13 02:09:47 +00:00
|
|
|
set( USE_IMAGES_IN_MENUS OFF CACHE BOOL "Enable images in menus" )
|
2013-02-14 13:12:54 +00:00
|
|
|
endif()
|
2011-08-29 19:50:05 +00:00
|
|
|
|
2014-02-03 19:26:18 +00:00
|
|
|
|
2014-11-05 16:39:36 +00:00
|
|
|
|
2014-02-03 19:26:18 +00:00
|
|
|
# KIFACE_SUFFIX is the file extension used for top level program modules which
|
|
|
|
# implement the KIFACE interface. A valid suffix starts with a period '.'.
|
|
|
|
|
|
|
|
if( false )
|
|
|
|
# This is the eventual situation near milestone C) of modular-kicad blueprint.
|
|
|
|
# Until then we use .kiface extension so we don't collide with python DSO.
|
|
|
|
set( KIFACE_SUFFIX ${CMAKE_SHARED_MODULE_SUFFIX} )
|
|
|
|
else()
|
|
|
|
# Temporary situation until we can dovetail the python DSO into the kiface DSO.
|
|
|
|
set( KIFACE_SUFFIX ".kiface" )
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# KIFACE_PREFIX is a basename prefix used for top level program modules which
|
|
|
|
# implement the KIFACE.
|
|
|
|
set( KIFACE_PREFIX "_" )
|
|
|
|
#message( STATUS "KIFACE_SUFFIX:${KIFACE_SUFFIX} KIFACE_PREFIX:${KIFACE_PREFIX}" )
|
|
|
|
|
|
|
|
|
2013-09-06 12:17:33 +00:00
|
|
|
#================================================
|
2007-12-25 20:48:58 +00:00
|
|
|
# Locations for install targets.
|
2014-10-31 20:44:09 +00:00
|
|
|
#================================================
|
|
|
|
if( NOT APPLE )
|
2008-06-15 16:31:32 +00:00
|
|
|
# Everything without leading / is relative to CMAKE_INSTALL_PREFIX.
|
2014-10-31 20:44:09 +00:00
|
|
|
set( KICAD_BIN bin
|
|
|
|
CACHE PATH "Location of KiCad binaries." )
|
2013-08-20 18:03:21 +00:00
|
|
|
set( KICAD_PLUGINS lib/kicad/plugins
|
|
|
|
CACHE PATH "Location of KiCad plugins." )
|
|
|
|
set( KICAD_DATA share/kicad
|
|
|
|
CACHE PATH "Location of KiCad data files." )
|
|
|
|
set( KICAD_DOCS share/doc/kicad
|
|
|
|
CACHE PATH "Location of KiCad documentation files." )
|
2014-10-31 20:44:09 +00:00
|
|
|
set( KICAD_DEMOS ${KICAD_DATA}/demos
|
|
|
|
CACHE PATH "Location of KiCad demo files." )
|
|
|
|
set( KICAD_TEMPLATE ${KICAD_DATA}/template
|
|
|
|
CACHE PATH "Location of KiCad template files." )
|
|
|
|
else()
|
2014-10-08 18:41:36 +00:00
|
|
|
# everything without leading / is relative to CMAKE_INSTALL_PREFIX.
|
2014-10-02 23:03:52 +00:00
|
|
|
# CMAKE_INSTALL_PREFIX is root of .dmg image
|
|
|
|
set( KICAD_BIN ${CMAKE_INSTALL_PREFIX}
|
|
|
|
CACHE PATH "Location of KiCad binaries." FORCE )
|
|
|
|
|
2014-10-08 18:41:36 +00:00
|
|
|
# some paths to single app bundle
|
|
|
|
set( OSX_BUNDLE_MAIN "kicad.app" )
|
|
|
|
set( OSX_BUNDLE_BIN_DIR "Contents/MacOS" )
|
|
|
|
set( OSX_BUNDLE_LIB_DIR "Contents/Frameworks" )
|
2014-10-17 17:45:33 +00:00
|
|
|
set( OSX_BUNDLE_KIFACE_DIR "Contents/PlugIns" )
|
2014-10-08 18:41:36 +00:00
|
|
|
set( OSX_BUNDLE_SUP_DIR "Contents/SharedSupport" )
|
2014-10-17 17:45:33 +00:00
|
|
|
set( OSX_BUNDLE_APP_DIR "Contents/Applications" )
|
2014-10-08 18:41:36 +00:00
|
|
|
set( OSX_BUNDLE_BUILD_DIR "${CMAKE_BINARY_DIR}/kicad/${OSX_BUNDLE_MAIN}" )
|
|
|
|
set( OSX_BUNDLE_BUILD_BIN_DIR "${OSX_BUNDLE_BUILD_DIR}/${OSX_BUNDLE_BIN_DIR}" )
|
|
|
|
set( OSX_BUNDLE_BUILD_LIB_DIR "${OSX_BUNDLE_BUILD_DIR}/${OSX_BUNDLE_LIB_DIR}" )
|
|
|
|
set( OSX_BUNDLE_BUILD_KIFACE_DIR "${OSX_BUNDLE_BUILD_DIR}/${OSX_BUNDLE_KIFACE_DIR}" )
|
|
|
|
set( OSX_BUNDLE_INSTALL_DIR "${KICAD_BIN}/${OSX_BUNDLE_MAIN}" )
|
|
|
|
set( OSX_BUNDLE_INSTALL_BIN_DIR "${OSX_BUNDLE_INSTALL_DIR}/${OSX_BUNDLE_BIN_DIR}" )
|
|
|
|
set( OSX_BUNDLE_INSTALL_LIB_DIR "${OSX_BUNDLE_INSTALL_DIR}/${OSX_BUNDLE_LIB_DIR}" )
|
|
|
|
set( OSX_BUNDLE_INSTALL_KIFACE_DIR "${OSX_BUNDLE_INSTALL_DIR}/${OSX_BUNDLE_KIFACE_DIR}" )
|
|
|
|
|
2014-10-02 23:03:52 +00:00
|
|
|
# everything provided with the application bundle goes into
|
|
|
|
# kicad.app/Contents/SharedSupport => accessible via GetDataDir()
|
|
|
|
# everything else to the .dmg image
|
2014-10-08 18:41:36 +00:00
|
|
|
set( KICAD_DATA ${OSX_BUNDLE_INSTALL_DIR}/${OSX_BUNDLE_SUP_DIR}
|
2014-10-02 23:03:52 +00:00
|
|
|
CACHE PATH "Location of KiCad data files." FORCE )
|
2014-10-08 18:41:36 +00:00
|
|
|
set( KICAD_TEMPLATE ${KICAD_DATA}/template
|
|
|
|
CACHE PATH "Location of KiCad template files." FORCE )
|
2014-10-02 23:03:52 +00:00
|
|
|
set( KICAD_PLUGINS ${KICAD_DATA}/plugins
|
|
|
|
CACHE PATH "Location of KiCad plugins." FORCE )
|
|
|
|
set( KICAD_DOCS doc
|
|
|
|
CACHE PATH "Location of KiCad documentation files." FORCE )
|
|
|
|
set( KICAD_DEMOS demos
|
|
|
|
CACHE PATH "Location of KiCad demo files." FORCE )
|
|
|
|
|
2014-10-17 17:45:33 +00:00
|
|
|
# Override default paths for fixup_bundle
|
|
|
|
set( OSX_BUNDLE_OVERRIDE_PATHS "
|
|
|
|
function( gp_item_default_embedded_path_override item default_embedded_path_var )
|
|
|
|
# by default, embed things right next to the main bundle executable:
|
|
|
|
set( path \"@executable_path/../../Contents/MacOS\" )
|
|
|
|
set( overridden 0 )
|
|
|
|
|
|
|
|
# embed .dylibs right next to the main bundle executable:
|
|
|
|
if( item MATCHES \"\\\\.dylib$\" )
|
|
|
|
set( path \"@executable_path/../Frameworks\" )
|
|
|
|
set( overridden 1 )
|
|
|
|
endif()
|
|
|
|
|
|
|
|
set( \${default_embedded_path_var} \"\${path}\" PARENT_SCOPE )
|
|
|
|
endfunction(gp_item_default_embedded_path_override)
|
|
|
|
"
|
|
|
|
)
|
2014-10-02 23:03:52 +00:00
|
|
|
endif()
|
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
mark_as_advanced( KICAD_BIN
|
2013-02-14 13:12:54 +00:00
|
|
|
KICAD_PLUGINS
|
|
|
|
KICAD_DATA
|
|
|
|
KICAD_DOCS
|
|
|
|
KICAD_DEMOS
|
2013-08-20 18:03:21 +00:00
|
|
|
KICAD_TEMPLATE )
|
2008-03-31 01:32:15 +00:00
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
include( Functions )
|
2008-03-11 15:57:54 +00:00
|
|
|
|
2013-05-31 04:46:02 +00:00
|
|
|
include( ExternalProject )
|
|
|
|
|
2008-08-11 11:45:29 +00:00
|
|
|
#================================================
|
2008-04-13 14:00:01 +00:00
|
|
|
# Find libraries that are needed to build KiCad.
|
2008-08-11 11:45:29 +00:00
|
|
|
#================================================
|
2013-08-20 18:03:21 +00:00
|
|
|
include( CheckFindPackageResult )
|
2008-04-13 14:00:01 +00:00
|
|
|
|
2014-09-26 21:52:56 +00:00
|
|
|
##########################
|
|
|
|
# Find wxWidgets library #
|
|
|
|
##########################
|
|
|
|
# Here you can define what libraries of wxWidgets you need for your
|
|
|
|
# application. You can figure out what libraries you need here;
|
|
|
|
# http://www.wxwidgets.org/manuals/2.8/wx_librarieslist.html
|
|
|
|
|
2013-11-01 12:56:20 +00:00
|
|
|
# Turn on wxWidgets compatibility mode for some classes
|
* KIWAY Milestone A): Make major modules into DLL/DSOs.
! The initial testing of this commit should be done using a Debug build so that
all the wxASSERT()s are enabled. Also, be sure and keep enabled the
USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it
off is senseless anyways. If you want stable code, go back to a prior version,
the one tagged with "stable".
* Relocate all functionality out of the wxApp derivative into more finely
targeted purposes:
a) DLL/DSO specific
b) PROJECT specific
c) EXE or process specific
d) configuration file specific data
e) configuration file manipulations functions.
All of this functionality was blended into an extremely large wxApp derivative
and that was incompatible with the desire to support multiple concurrently
loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects.
An amazing amount of organization come from simply sorting each bit of
functionality into the proper box.
* Switch to wxConfigBase from wxConfig everywhere except instantiation.
* Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD,
PGM_SINGLE_TOP,
* Remove "Return" prefix on many function names.
* Remove obvious comments from CMakeLists.txt files, and from else() and endif()s.
* Fix building boost for use in a DSO on linux.
* Remove some of the assumptions in the CMakeLists.txt files that windows had
to be the host platform when building windows binaries.
* Reduce the number of wxStrings being constructed at program load time via
static construction.
* Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that
these functions are useful even when the wxConfigBase comes from another
source, as is the case in the KICAD_MANAGER_FRAME.
* Move the setting of the KIPRJMOD environment variable into class PROJECT,
so that it can be moved into a project variable soon, and out of FP_LIB_TABLE.
* Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all
its child wxFrames and wxDialogs now have a Kiway() member function which
returns a KIWAY& that that window tree branch is in support of. This is like
wxWindows DNA in that child windows get this member with proper value at time
of construction.
* Anticipate some of the needs for milestones B) and C) and make code
adjustments now in an effort to reduce work in those milestones.
* No testing has been done for python scripting, since milestone C) has that
being largely reworked and re-thought-out.
2014-03-20 00:42:08 +00:00
|
|
|
add_definitions( -DWX_COMPATIBILITY )
|
2013-03-28 16:30:09 +00:00
|
|
|
|
2014-09-26 21:52:56 +00:00
|
|
|
# See line 41 of CMakeModules/FindwxWidgets.cmake
|
|
|
|
set( wxWidgets_CONFIG_OPTIONS --static=no )
|
|
|
|
|
2014-12-23 13:50:42 +00:00
|
|
|
if( KICAD_USE_WEBKIT AND BUILD_GITHUB_PLUGIN )
|
2014-12-21 14:13:14 +00:00
|
|
|
set( webkitlib "webview" )
|
2015-01-17 08:01:16 +00:00
|
|
|
add_definitions( -DKICAD_USE_WEBKIT )
|
2014-12-21 14:13:14 +00:00
|
|
|
else()
|
|
|
|
set( webkitlib "" )
|
|
|
|
endif()
|
|
|
|
|
|
|
|
find_package( wxWidgets 3.0.0 COMPONENTS gl aui adv html core net base xml ${webkitlib} stc REQUIRED )
|
2014-09-26 21:52:56 +00:00
|
|
|
|
|
|
|
# Include wxWidgets macros.
|
|
|
|
include( ${wxWidgets_USE_FILE} )
|
|
|
|
|
2008-08-11 11:45:29 +00:00
|
|
|
#######################
|
|
|
|
# Find OpenGL library #
|
|
|
|
#######################
|
2013-08-20 18:03:21 +00:00
|
|
|
find_package( OpenGL QUIET )
|
|
|
|
check_find_package_result( OPENGL_FOUND "OpenGL" )
|
2008-03-11 15:57:54 +00:00
|
|
|
|
* KIWAY Milestone A): Make major modules into DLL/DSOs.
! The initial testing of this commit should be done using a Debug build so that
all the wxASSERT()s are enabled. Also, be sure and keep enabled the
USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it
off is senseless anyways. If you want stable code, go back to a prior version,
the one tagged with "stable".
* Relocate all functionality out of the wxApp derivative into more finely
targeted purposes:
a) DLL/DSO specific
b) PROJECT specific
c) EXE or process specific
d) configuration file specific data
e) configuration file manipulations functions.
All of this functionality was blended into an extremely large wxApp derivative
and that was incompatible with the desire to support multiple concurrently
loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects.
An amazing amount of organization come from simply sorting each bit of
functionality into the proper box.
* Switch to wxConfigBase from wxConfig everywhere except instantiation.
* Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD,
PGM_SINGLE_TOP,
* Remove "Return" prefix on many function names.
* Remove obvious comments from CMakeLists.txt files, and from else() and endif()s.
* Fix building boost for use in a DSO on linux.
* Remove some of the assumptions in the CMakeLists.txt files that windows had
to be the host platform when building windows binaries.
* Reduce the number of wxStrings being constructed at program load time via
static construction.
* Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that
these functions are useful even when the wxConfigBase comes from another
source, as is the case in the KICAD_MANAGER_FRAME.
* Move the setting of the KIPRJMOD environment variable into class PROJECT,
so that it can be moved into a project variable soon, and out of FP_LIB_TABLE.
* Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all
its child wxFrames and wxDialogs now have a Kiway() member function which
returns a KIWAY& that that window tree branch is in support of. This is like
wxWindows DNA in that child windows get this member with proper value at time
of construction.
* Anticipate some of the needs for milestones B) and C) and make code
adjustments now in an effort to reduce work in those milestones.
* No testing has been done for python scripting, since milestone C) has that
being largely reworked and re-thought-out.
2014-03-20 00:42:08 +00:00
|
|
|
# Dick 5-Feb-2014:
|
2014-03-20 06:24:33 +00:00
|
|
|
# Marco: We cannot use both ExternalProject_Add() add and find_package()
|
* KIWAY Milestone A): Make major modules into DLL/DSOs.
! The initial testing of this commit should be done using a Debug build so that
all the wxASSERT()s are enabled. Also, be sure and keep enabled the
USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it
off is senseless anyways. If you want stable code, go back to a prior version,
the one tagged with "stable".
* Relocate all functionality out of the wxApp derivative into more finely
targeted purposes:
a) DLL/DSO specific
b) PROJECT specific
c) EXE or process specific
d) configuration file specific data
e) configuration file manipulations functions.
All of this functionality was blended into an extremely large wxApp derivative
and that was incompatible with the desire to support multiple concurrently
loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects.
An amazing amount of organization come from simply sorting each bit of
functionality into the proper box.
* Switch to wxConfigBase from wxConfig everywhere except instantiation.
* Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD,
PGM_SINGLE_TOP,
* Remove "Return" prefix on many function names.
* Remove obvious comments from CMakeLists.txt files, and from else() and endif()s.
* Fix building boost for use in a DSO on linux.
* Remove some of the assumptions in the CMakeLists.txt files that windows had
to be the host platform when building windows binaries.
* Reduce the number of wxStrings being constructed at program load time via
static construction.
* Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that
these functions are useful even when the wxConfigBase comes from another
source, as is the case in the KICAD_MANAGER_FRAME.
* Move the setting of the KIPRJMOD environment variable into class PROJECT,
so that it can be moved into a project variable soon, and out of FP_LIB_TABLE.
* Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all
its child wxFrames and wxDialogs now have a Kiway() member function which
returns a KIWAY& that that window tree branch is in support of. This is like
wxWindows DNA in that child windows get this member with proper value at time
of construction.
* Anticipate some of the needs for milestones B) and C) and make code
adjustments now in an effort to reduce work in those milestones.
* No testing has been done for python scripting, since milestone C) has that
being largely reworked and re-thought-out.
2014-03-20 00:42:08 +00:00
|
|
|
# in the same CMake tree and have them both reference the same package:
|
|
|
|
# http://stackoverflow.com/questions/6351609/cmake-linking-to-library-downloaded-from-externalproject-add
|
|
|
|
# https://www.mail-archive.com/cmake@cmake.org/msg47501.html
|
2014-03-20 06:24:33 +00:00
|
|
|
|
2014-02-19 21:39:21 +00:00
|
|
|
# Handle target used to specify if a target needs wx-widgets or other libraries
|
2014-04-08 04:55:53 +00:00
|
|
|
# Always defined, empty if no libraries are to be built
|
2014-02-19 21:39:21 +00:00
|
|
|
add_custom_target( lib-dependencies )
|
2014-02-08 15:15:06 +00:00
|
|
|
|
2014-09-26 21:52:56 +00:00
|
|
|
# Only download and build all dependencies from source on OSX if the user specifically requests
|
|
|
|
# it. Otherwise, respect the developers wishes to use the dependencies already installed on
|
2014-10-02 23:03:52 +00:00
|
|
|
# their system
|
2014-09-26 21:52:56 +00:00
|
|
|
if( APPLE AND USE_OSX_DEPS_BUILDER )
|
2013-12-30 00:27:03 +00:00
|
|
|
|
2014-10-02 23:03:52 +00:00
|
|
|
# This should be built in all cases, if swig exec is not available
|
2014-04-08 04:55:53 +00:00
|
|
|
# will be impossible also enable SCRIPTING being for PCBNEW required immediately
|
2014-02-19 21:39:21 +00:00
|
|
|
|
2014-02-14 21:09:48 +00:00
|
|
|
include( download_pcre )
|
|
|
|
include( download_swig )
|
2014-02-07 18:53:54 +00:00
|
|
|
|
2013-12-30 00:27:03 +00:00
|
|
|
|
|
|
|
#set(CMAKE_FIND_LIBRARY_SUFFIXES ".a;.so;.dylib;.dll")
|
|
|
|
|
2014-01-24 21:09:31 +00:00
|
|
|
if( KICAD_BUILD_STATIC AND KICAD_BUILD_DYNAMIC )
|
|
|
|
message(FATAL_ERROR "You can't build STATIC and DYNAMIC together")
|
|
|
|
endif()
|
|
|
|
|
2014-01-26 13:09:36 +00:00
|
|
|
if( KICAD_BUILD_STATIC )
|
|
|
|
message(STATUS "KICAD_BUILD_STATIC set")
|
2014-02-11 23:13:14 +00:00
|
|
|
if( KICAD_SCRIPTING OR KICAD_SCRIPTING_WXPYTHON OR KICAD_SCRIPTING_MODULES )
|
|
|
|
message(FATAL_ERROR "KICAD_SCRIPTING* is not supported with KICAD_BUILD_STATIC, please select KICAD_BUILD_DYNAMIC" )
|
|
|
|
endif()
|
2014-01-26 13:09:36 +00:00
|
|
|
endif()
|
|
|
|
|
2014-01-24 21:09:31 +00:00
|
|
|
if( KICAD_BUILD_DYNAMIC )
|
2014-01-26 13:09:36 +00:00
|
|
|
message(STATUS "KICAD_BUILD_DYNAMIC set")
|
2014-01-24 21:09:31 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
|
2014-02-07 18:53:54 +00:00
|
|
|
if( KICAD_SCRIPTING OR KICAD_SCRIPTING_WXPYTHON OR KICAD_SCRIPTING_MODULES )
|
2014-03-20 06:24:33 +00:00
|
|
|
|
|
|
|
message(STATUS "Scripting ENABLED")
|
2014-02-19 21:39:21 +00:00
|
|
|
include( download_wxpython )
|
2014-02-11 23:13:14 +00:00
|
|
|
|
2014-02-07 18:53:54 +00:00
|
|
|
set( SWIG_EXECUTABLE ${SWIG_ROOT}/bin/swig )
|
|
|
|
set( SWIG_INCLUDE ${SWIG_ROOT}/include )
|
|
|
|
set( PYTHON_DEST ${LIBWXPYTHON_ROOT}/wxPython/lib/python2.6/site-packages )
|
|
|
|
|
|
|
|
if( NOT EXISTS ${SWIG_EXECUTABLE} )
|
|
|
|
set(KICAD_SCRIPTING CACHE OFF FORCE "Disabling KICAD_SCRIPTING")
|
2014-02-19 21:39:21 +00:00
|
|
|
message( STATUS "KICAD_SCRIPTING Enabled but SWIG not found, please disable and before reenabling execute: make swig")
|
2014-02-07 18:53:54 +00:00
|
|
|
message( FATAL_ERROR "Missing SWIG!")
|
|
|
|
endif()
|
|
|
|
message(STATUS "SWIG_EXECUTABLE: ${SWIG_EXECUTABLE}")
|
|
|
|
|
|
|
|
set( PYTHON_DEST ${LIBWXPYTHON_ROOT}/wxPython/lib/python2.6/site-packages )
|
|
|
|
|
|
|
|
add_dependencies( lib-dependencies libwxpython )
|
2014-02-19 21:39:21 +00:00
|
|
|
add_dependencies( lib-dependencies swig )
|
2014-01-24 21:09:31 +00:00
|
|
|
else()
|
|
|
|
include( download_wxwidgets )
|
2014-01-26 13:09:36 +00:00
|
|
|
add_dependencies( lib-dependencies libwx )
|
2014-02-03 19:26:18 +00:00
|
|
|
endif()
|
2014-01-24 21:09:31 +00:00
|
|
|
|
2014-02-19 21:39:21 +00:00
|
|
|
include( download_libpng )
|
2013-12-30 00:27:03 +00:00
|
|
|
include( download_pkgconfig )
|
2014-09-26 21:52:56 +00:00
|
|
|
set( PKG_CONFIG_EXECUTABLE "${PKGCONFIG_ROOT}/bin/pkg-config" )
|
2013-12-30 00:27:03 +00:00
|
|
|
include( download_glew )
|
2014-09-26 21:52:56 +00:00
|
|
|
set( GLEW_GLEW_LIBRARY "${GLEW_ROOT}/lib/libGLEW.a" )
|
|
|
|
set( GLEW_INCLUDE_DIR "${GLEW_ROOT}/include" )
|
2013-12-30 00:27:03 +00:00
|
|
|
include( download_pixman )
|
2014-09-26 21:52:56 +00:00
|
|
|
set( PIXMAN_LIBRARY "${PIXMAN_ROOT}/lib/libpixman-1.a" )
|
2013-12-30 00:27:03 +00:00
|
|
|
include( download_cairo )
|
2014-09-26 21:52:56 +00:00
|
|
|
set( CAIRO_INCLUDE_DIR "${CAIRO_ROOT}/include/cairo" )
|
|
|
|
set( CAIRO_LIBRARY "${CAIRO_ROOT}/lib/libcairo.a" )
|
2014-01-25 12:23:29 +00:00
|
|
|
|
2014-02-19 21:39:21 +00:00
|
|
|
add_dependencies( lib-dependencies boost )
|
|
|
|
add_dependencies( lib-dependencies cairo )
|
|
|
|
add_dependencies( lib-dependencies libpng )
|
|
|
|
add_dependencies( lib-dependencies pixman )
|
|
|
|
add_dependencies( lib-dependencies pkgconfig )
|
|
|
|
|
2014-01-29 18:02:02 +00:00
|
|
|
if( KICAD_BUILD_DYNAMIC AND APPLE )
|
2014-09-26 21:52:56 +00:00
|
|
|
add_custom_target( osx_fix_bundles ALL DEPENDS
|
|
|
|
cvpcb eeschema gerbview kicad pcbnew bitmap2component pcb_calculator pl_editor)
|
|
|
|
add_custom_command(TARGET osx_fix_bundles
|
|
|
|
POST_BUILD COMMAND ${PROJECT_SOURCE_DIR}/scripts/osx_fixbundle.sh ${PROJECT_SOURCE_DIR}
|
|
|
|
COMMENT "Migrating dylibs to bundles")
|
2014-01-27 22:24:04 +00:00
|
|
|
endif()
|
2014-09-26 21:52:56 +00:00
|
|
|
endif()
|
2013-12-30 00:27:03 +00:00
|
|
|
|
Introduction of Graphics Abstraction Layer based rendering for pcbnew.
New classes:
- VIEW - represents view that is seen by user, takes care of layer ordering & visibility and how it is displayed (which location, how much zoomed, etc.)
- VIEW_ITEM - Base class for every item that can be displayed on VIEW (the biggest change is that now it may be necessary to override ViewBBox & ViewGetLayers method for derived classes).
- EDA_DRAW_PANEL_GAL - Inherits after EDA_DRAW_PANEL, displays VIEW output, right now it is not editable (in opposite to usual EDA_DRAW_PANEL).
- GAL/OPENGL_GAL/CAIRO_GAL - Base Graphics Abstraction Layer class + two different flavours (Cairo is not fully supported yet), that offers methods to draw primitives using different libraries.
- WX_VIEW_CONTROLS - Controller for VIEW, handles user events, allows zooming, panning, etc.
- PAINTER/PCB_PAINTER - Classes that uses GAL interface to draw items (as you may have already guessed - PCB_PAINTER is a class for drawing PCB specific object, PAINTER is an abstract class). Its methods are invoked by VIEW, when an item has to be drawn. To display a new type of item - you need to implement draw(ITEM_TYPE*) method that draws it using GAL methods.
- STROKE_FONT - Implements stroke font drawing using GAL methods.
Most important changes to Kicad original code:
* EDA_ITEM now inherits from VIEW_ITEM, which is a base class for all drawable objects.
* EDA_DRAW_FRAME contains both usual EDA_DRAW_PANEL and new EDA_DRAW_PANEL_GAL, that can be switched anytime.
* There are some new layers for displaying multilayer pads, vias & pads holes (these are not shown yet on the right sidebar in pcbnew)
* Display order of layers is different than in previous versions (if you are curious - you may check m_galLayerOrder@pcbnew/basepcbframe.cpp). Preserving usual order would result in not very natural display, such as showing silkscreen texts on the bottom.
* Introduced new hotkey (Alt+F12) and new menu option (View->Switch canvas) for switching canvas during runtime.
* Some of classes (mostly derived from BOARD_ITEM) now includes ViewBBox & ViewGetLayers methods.
* Removed tools/class_painter.h, as now it is extended and included in source code.
Build changes:
* GAL-based rendering option is turned on by a new compilation CMake option KICAD_GAL.
* When compiling with CMake option KICAD_GAL=ON, GLEW and Cairo libraries are required.
* GAL-related code is compiled into a static library (common/libgal).
* Build with KICAD_GAL=OFF should not need any new libraries and should come out as a standard version of Kicad
Currently most of items in pcbnew can be displayed using OpenGL (to be done are DIMENSIONS and MARKERS).
More details about GAL can be found in: http://www.ohwr.org/attachments/1884/view-spec.pdf
2013-04-02 06:54:03 +00:00
|
|
|
#####################
|
|
|
|
# Find GLEW library #
|
|
|
|
#####################
|
* KIWAY Milestone A): Make major modules into DLL/DSOs.
! The initial testing of this commit should be done using a Debug build so that
all the wxASSERT()s are enabled. Also, be sure and keep enabled the
USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it
off is senseless anyways. If you want stable code, go back to a prior version,
the one tagged with "stable".
* Relocate all functionality out of the wxApp derivative into more finely
targeted purposes:
a) DLL/DSO specific
b) PROJECT specific
c) EXE or process specific
d) configuration file specific data
e) configuration file manipulations functions.
All of this functionality was blended into an extremely large wxApp derivative
and that was incompatible with the desire to support multiple concurrently
loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects.
An amazing amount of organization come from simply sorting each bit of
functionality into the proper box.
* Switch to wxConfigBase from wxConfig everywhere except instantiation.
* Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD,
PGM_SINGLE_TOP,
* Remove "Return" prefix on many function names.
* Remove obvious comments from CMakeLists.txt files, and from else() and endif()s.
* Fix building boost for use in a DSO on linux.
* Remove some of the assumptions in the CMakeLists.txt files that windows had
to be the host platform when building windows binaries.
* Reduce the number of wxStrings being constructed at program load time via
static construction.
* Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that
these functions are useful even when the wxConfigBase comes from another
source, as is the case in the KICAD_MANAGER_FRAME.
* Move the setting of the KIPRJMOD environment variable into class PROJECT,
so that it can be moved into a project variable soon, and out of FP_LIB_TABLE.
* Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all
its child wxFrames and wxDialogs now have a Kiway() member function which
returns a KIWAY& that that window tree branch is in support of. This is like
wxWindows DNA in that child windows get this member with proper value at time
of construction.
* Anticipate some of the needs for milestones B) and C) and make code
adjustments now in an effort to reduce work in those milestones.
* No testing has been done for python scripting, since milestone C) has that
being largely reworked and re-thought-out.
2014-03-20 00:42:08 +00:00
|
|
|
if( NOT GLEW_FOUND )
|
|
|
|
find_package( GLEW )
|
|
|
|
check_find_package_result( GLEW_FOUND "GLEW" )
|
|
|
|
endif()
|
Introduction of Graphics Abstraction Layer based rendering for pcbnew.
New classes:
- VIEW - represents view that is seen by user, takes care of layer ordering & visibility and how it is displayed (which location, how much zoomed, etc.)
- VIEW_ITEM - Base class for every item that can be displayed on VIEW (the biggest change is that now it may be necessary to override ViewBBox & ViewGetLayers method for derived classes).
- EDA_DRAW_PANEL_GAL - Inherits after EDA_DRAW_PANEL, displays VIEW output, right now it is not editable (in opposite to usual EDA_DRAW_PANEL).
- GAL/OPENGL_GAL/CAIRO_GAL - Base Graphics Abstraction Layer class + two different flavours (Cairo is not fully supported yet), that offers methods to draw primitives using different libraries.
- WX_VIEW_CONTROLS - Controller for VIEW, handles user events, allows zooming, panning, etc.
- PAINTER/PCB_PAINTER - Classes that uses GAL interface to draw items (as you may have already guessed - PCB_PAINTER is a class for drawing PCB specific object, PAINTER is an abstract class). Its methods are invoked by VIEW, when an item has to be drawn. To display a new type of item - you need to implement draw(ITEM_TYPE*) method that draws it using GAL methods.
- STROKE_FONT - Implements stroke font drawing using GAL methods.
Most important changes to Kicad original code:
* EDA_ITEM now inherits from VIEW_ITEM, which is a base class for all drawable objects.
* EDA_DRAW_FRAME contains both usual EDA_DRAW_PANEL and new EDA_DRAW_PANEL_GAL, that can be switched anytime.
* There are some new layers for displaying multilayer pads, vias & pads holes (these are not shown yet on the right sidebar in pcbnew)
* Display order of layers is different than in previous versions (if you are curious - you may check m_galLayerOrder@pcbnew/basepcbframe.cpp). Preserving usual order would result in not very natural display, such as showing silkscreen texts on the bottom.
* Introduced new hotkey (Alt+F12) and new menu option (View->Switch canvas) for switching canvas during runtime.
* Some of classes (mostly derived from BOARD_ITEM) now includes ViewBBox & ViewGetLayers methods.
* Removed tools/class_painter.h, as now it is extended and included in source code.
Build changes:
* GAL-based rendering option is turned on by a new compilation CMake option KICAD_GAL.
* When compiling with CMake option KICAD_GAL=ON, GLEW and Cairo libraries are required.
* GAL-related code is compiled into a static library (common/libgal).
* Build with KICAD_GAL=OFF should not need any new libraries and should come out as a standard version of Kicad
Currently most of items in pcbnew can be displayed using OpenGL (to be done are DIMENSIONS and MARKERS).
More details about GAL can be found in: http://www.ohwr.org/attachments/1884/view-spec.pdf
2013-04-02 06:54:03 +00:00
|
|
|
|
|
|
|
######################
|
|
|
|
# Find Cairo library #
|
|
|
|
######################
|
* KIWAY Milestone A): Make major modules into DLL/DSOs.
! The initial testing of this commit should be done using a Debug build so that
all the wxASSERT()s are enabled. Also, be sure and keep enabled the
USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it
off is senseless anyways. If you want stable code, go back to a prior version,
the one tagged with "stable".
* Relocate all functionality out of the wxApp derivative into more finely
targeted purposes:
a) DLL/DSO specific
b) PROJECT specific
c) EXE or process specific
d) configuration file specific data
e) configuration file manipulations functions.
All of this functionality was blended into an extremely large wxApp derivative
and that was incompatible with the desire to support multiple concurrently
loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects.
An amazing amount of organization come from simply sorting each bit of
functionality into the proper box.
* Switch to wxConfigBase from wxConfig everywhere except instantiation.
* Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD,
PGM_SINGLE_TOP,
* Remove "Return" prefix on many function names.
* Remove obvious comments from CMakeLists.txt files, and from else() and endif()s.
* Fix building boost for use in a DSO on linux.
* Remove some of the assumptions in the CMakeLists.txt files that windows had
to be the host platform when building windows binaries.
* Reduce the number of wxStrings being constructed at program load time via
static construction.
* Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that
these functions are useful even when the wxConfigBase comes from another
source, as is the case in the KICAD_MANAGER_FRAME.
* Move the setting of the KIPRJMOD environment variable into class PROJECT,
so that it can be moved into a project variable soon, and out of FP_LIB_TABLE.
* Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all
its child wxFrames and wxDialogs now have a Kiway() member function which
returns a KIWAY& that that window tree branch is in support of. This is like
wxWindows DNA in that child windows get this member with proper value at time
of construction.
* Anticipate some of the needs for milestones B) and C) and make code
adjustments now in an effort to reduce work in those milestones.
* No testing has been done for python scripting, since milestone C) has that
being largely reworked and re-thought-out.
2014-03-20 00:42:08 +00:00
|
|
|
if( NOT CAIRO_FOUND )
|
|
|
|
find_package( Cairo 1.8.1 QUIET )
|
|
|
|
check_find_package_result( CAIRO_FOUND "Cairo" )
|
|
|
|
endif()
|
Introduction of Graphics Abstraction Layer based rendering for pcbnew.
New classes:
- VIEW - represents view that is seen by user, takes care of layer ordering & visibility and how it is displayed (which location, how much zoomed, etc.)
- VIEW_ITEM - Base class for every item that can be displayed on VIEW (the biggest change is that now it may be necessary to override ViewBBox & ViewGetLayers method for derived classes).
- EDA_DRAW_PANEL_GAL - Inherits after EDA_DRAW_PANEL, displays VIEW output, right now it is not editable (in opposite to usual EDA_DRAW_PANEL).
- GAL/OPENGL_GAL/CAIRO_GAL - Base Graphics Abstraction Layer class + two different flavours (Cairo is not fully supported yet), that offers methods to draw primitives using different libraries.
- WX_VIEW_CONTROLS - Controller for VIEW, handles user events, allows zooming, panning, etc.
- PAINTER/PCB_PAINTER - Classes that uses GAL interface to draw items (as you may have already guessed - PCB_PAINTER is a class for drawing PCB specific object, PAINTER is an abstract class). Its methods are invoked by VIEW, when an item has to be drawn. To display a new type of item - you need to implement draw(ITEM_TYPE*) method that draws it using GAL methods.
- STROKE_FONT - Implements stroke font drawing using GAL methods.
Most important changes to Kicad original code:
* EDA_ITEM now inherits from VIEW_ITEM, which is a base class for all drawable objects.
* EDA_DRAW_FRAME contains both usual EDA_DRAW_PANEL and new EDA_DRAW_PANEL_GAL, that can be switched anytime.
* There are some new layers for displaying multilayer pads, vias & pads holes (these are not shown yet on the right sidebar in pcbnew)
* Display order of layers is different than in previous versions (if you are curious - you may check m_galLayerOrder@pcbnew/basepcbframe.cpp). Preserving usual order would result in not very natural display, such as showing silkscreen texts on the bottom.
* Introduced new hotkey (Alt+F12) and new menu option (View->Switch canvas) for switching canvas during runtime.
* Some of classes (mostly derived from BOARD_ITEM) now includes ViewBBox & ViewGetLayers methods.
* Removed tools/class_painter.h, as now it is extended and included in source code.
Build changes:
* GAL-based rendering option is turned on by a new compilation CMake option KICAD_GAL.
* When compiling with CMake option KICAD_GAL=ON, GLEW and Cairo libraries are required.
* GAL-related code is compiled into a static library (common/libgal).
* Build with KICAD_GAL=OFF should not need any new libraries and should come out as a standard version of Kicad
Currently most of items in pcbnew can be displayed using OpenGL (to be done are DIMENSIONS and MARKERS).
More details about GAL can be found in: http://www.ohwr.org/attachments/1884/view-spec.pdf
2013-04-02 06:54:03 +00:00
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
# Download boost and possibly build parts of it
|
|
|
|
#################################################
|
2014-01-08 01:52:19 +00:00
|
|
|
if( KICAD_SKIP_BOOST )
|
|
|
|
find_package( Boost 1.54.0 REQUIRED COMPONENTS context date_time filesystem iostreams locale
|
|
|
|
program_options regex system thread )
|
|
|
|
|
|
|
|
if( NOT Boost_FOUND )
|
|
|
|
message( FATAL_ERROR "Boost 1.54+ libraries are required." )
|
|
|
|
endif()
|
|
|
|
|
2014-10-31 21:22:37 +00:00
|
|
|
# Keeps CMake from complaining about undefined boost dependencies even though Boost was
|
|
|
|
# found. Sigh!!!!!
|
|
|
|
add_custom_target( boost )
|
|
|
|
|
2014-01-08 01:52:19 +00:00
|
|
|
message( WARNING "
|
|
|
|
WARNING: You decided to skip building boost library.
|
|
|
|
KiCad developers strongly advise you to build the bundled boost library, as it is known to work with KiCad.
|
|
|
|
Other versions may contain bugs that may result in KiCad errors." )
|
|
|
|
else()
|
2014-10-22 23:25:59 +00:00
|
|
|
add_dependencies( lib-dependencies boost )
|
2014-01-08 01:52:19 +00:00
|
|
|
include( download_boost )
|
|
|
|
endif()
|
2013-05-31 04:46:02 +00:00
|
|
|
|
2008-04-13 19:07:32 +00:00
|
|
|
# Include MinGW resource compiler.
|
2013-08-20 18:03:21 +00:00
|
|
|
include( MinGWResourceCompiler )
|
2008-04-13 19:07:32 +00:00
|
|
|
|
2009-05-21 17:42:42 +00:00
|
|
|
# Generate build system specific header file.
|
2013-08-20 18:03:21 +00:00
|
|
|
include( PerformFeatureChecks )
|
2009-05-21 17:42:42 +00:00
|
|
|
perform_feature_checks()
|
|
|
|
|
2010-02-08 18:15:42 +00:00
|
|
|
# Find GDI+ on windows if wxGraphicsContext is available.
|
2013-08-20 18:03:21 +00:00
|
|
|
if( MINGW AND USE_WX_GRAPHICS_CONTEXT )
|
|
|
|
find_package( GdiPlus )
|
|
|
|
check_find_package_result( GDI_PLUS_FOUND "GDI+" )
|
2013-02-14 13:12:54 +00:00
|
|
|
endif()
|
2010-02-08 18:15:42 +00:00
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
# Assist with header file searching optimization:
|
|
|
|
# INC_BEFORE and INC_AFTER are two lists which go at the front and back of the
|
|
|
|
# header file search lists, respectively.
|
|
|
|
# INC_BEFORE is for use with "include_directories( BEFORE ...)", which _reverses_
|
|
|
|
# the order during insertion. (So put first wanted last, which is
|
|
|
|
# ${CMAKE_SOURCE_DIR/include.) Use '.' for current source dir since
|
|
|
|
# we don't want expansion here and now, which would happen if using ${CMAKE_CURRENT_SOURCE_DIR}.
|
|
|
|
# Instead we use '.' which is applicable to any source directory below here as a result of
|
|
|
|
# this lack of expansion.
|
|
|
|
set( INC_BEFORE
|
|
|
|
.
|
|
|
|
${CMAKE_SOURCE_DIR}/include
|
|
|
|
)
|
|
|
|
|
|
|
|
set( INC_AFTER
|
|
|
|
${Boost_INCLUDE_DIR}
|
|
|
|
#include <config.h>
|
|
|
|
${CMAKE_BINARY_DIR}
|
|
|
|
)
|
|
|
|
|
|
|
|
|
2012-08-02 07:47:30 +00:00
|
|
|
# Find Python and other scripting resources
|
2013-08-20 18:03:21 +00:00
|
|
|
if( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES )
|
2014-02-12 21:17:19 +00:00
|
|
|
# force a python version < 3.0
|
2014-09-26 21:52:56 +00:00
|
|
|
set( PythonInterp_FIND_VERSION 2.6 )
|
2014-02-12 21:17:19 +00:00
|
|
|
set( PythonLibs_FIND_VERSION 2.6 )
|
2014-02-07 23:40:11 +00:00
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
find_package( PythonInterp )
|
2014-03-20 06:24:33 +00:00
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
check_find_package_result( PYTHONINTERP_FOUND "Python Interpreter" )
|
2013-02-11 00:41:49 +00:00
|
|
|
|
2014-02-12 21:17:19 +00:00
|
|
|
if( NOT PYTHON_VERSION_MAJOR EQUAL 2 )
|
|
|
|
message( FATAL_ERROR "Python 2.x is required." )
|
|
|
|
endif()
|
2014-09-26 21:52:56 +00:00
|
|
|
|
2013-02-11 00:41:49 +00:00
|
|
|
# Get the correct Python site package install path from the Python interpreter found by
|
|
|
|
# FindPythonInterp unless the user specifically defined a custom path.
|
2013-08-20 18:03:21 +00:00
|
|
|
if( NOT PYTHON_SITE_PACKAGE_PATH )
|
2014-10-19 18:36:41 +00:00
|
|
|
execute_process( COMMAND ${PYTHON_EXECUTABLE} -c "import distutils.sysconfig;print\"%s\"%distutils.sysconfig.get_python_lib(plat_specific=0, standard_lib=0, prefix='')"
|
|
|
|
# execute_process( COMMAND ${PYTHON_EXECUTABLE} -c "import distutils.sysconfig;print\"%s\"%distutils.sysconfig.get_python_lib()"
|
2013-02-11 00:41:49 +00:00
|
|
|
OUTPUT_VARIABLE PYTHON_SITE_PACKAGE_PATH
|
|
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
|
)
|
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
if( NOT PYTHON_SITE_PACKAGE_PATH )
|
2014-10-02 23:03:52 +00:00
|
|
|
message( FATAL_ERROR "Error occurred while attempting to find the Python site library path." )
|
2013-02-14 13:12:54 +00:00
|
|
|
endif()
|
|
|
|
endif()
|
2013-02-11 00:41:49 +00:00
|
|
|
|
2014-10-08 18:41:36 +00:00
|
|
|
if( NOT APPLE )
|
|
|
|
set( PYTHON_DEST "${PYTHON_SITE_PACKAGE_PATH}"
|
|
|
|
CACHE PATH "Python module install path."
|
|
|
|
)
|
|
|
|
else()
|
|
|
|
# relative path for python in bundle
|
2014-10-17 17:45:33 +00:00
|
|
|
set( PYTHON_LIB_DIR "python/site-packages" )
|
2014-10-08 18:41:36 +00:00
|
|
|
# install into bundle Frameworks folder
|
|
|
|
set( PYTHON_DEST "${OSX_BUNDLE_BUILD_LIB_DIR}/${PYTHON_LIB_DIR}"
|
|
|
|
CACHE PATH "Python module install path."
|
|
|
|
)
|
|
|
|
endif()
|
2013-08-20 18:03:21 +00:00
|
|
|
mark_as_advanced( PYTHON_DEST )
|
|
|
|
message( STATUS "Python module install path: ${PYTHON_DEST}" )
|
2012-08-02 07:47:30 +00:00
|
|
|
|
2014-02-12 21:17:19 +00:00
|
|
|
find_package( PythonLibs 2.6 )
|
2013-08-20 18:03:21 +00:00
|
|
|
|
|
|
|
#message( STATUS "PYTHON_INCLUDE_DIRS:${PYTHON_INCLUDE_DIRS}" )
|
2012-08-02 07:47:30 +00:00
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
# Infrequently needed headers go at end of search paths, append to INC_AFTER which
|
|
|
|
# although is used for all components, should be a harmless hit for something like eeschema
|
|
|
|
# so long as unused search paths are at the end like this.
|
|
|
|
set( INC_AFTER ${INC_AFTER} ${PYTHON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/scripting )
|
|
|
|
|
|
|
|
#message( STATUS "/ INC_AFTER:${INC_AFTER}" )
|
|
|
|
|
|
|
|
endif()
|
2012-08-02 07:47:30 +00:00
|
|
|
|
|
|
|
|
2008-06-06 12:39:00 +00:00
|
|
|
# Automagically create version header file.
|
2013-08-20 18:03:21 +00:00
|
|
|
include( CreateBzrVersionHeader )
|
2010-04-21 12:25:16 +00:00
|
|
|
create_bzr_version_header()
|
2008-05-05 13:26:46 +00:00
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
if( EXISTS ${CMAKE_SOURCE_DIR}/include/config.h )
|
|
|
|
# This file may exist ( created by an alternate process to the svn test above),
|
2008-09-07 19:32:07 +00:00
|
|
|
# e.g. could be created by a checkout script that produces a source tar file.
|
|
|
|
# This directive means the about box will have the svn date & revision in it,
|
2013-08-20 18:03:21 +00:00
|
|
|
# but the hard coded release date ( program version) will be preserved.
|
|
|
|
add_definitions( -DHAVE_SVN_REVISION )
|
2013-02-14 13:12:54 +00:00
|
|
|
endif()
|
2008-08-29 14:06:19 +00:00
|
|
|
|
2008-01-06 12:03:13 +00:00
|
|
|
|
2008-08-11 11:45:29 +00:00
|
|
|
#================================================
|
|
|
|
# Let CMake look in these directories for nested
|
|
|
|
# 'CMakeLists.txt' files to process
|
|
|
|
#================================================
|
|
|
|
|
2014-10-17 17:45:33 +00:00
|
|
|
if( APPLE )
|
|
|
|
# Remove app bundles in ${KICAD_BIN} before installing anything new.
|
|
|
|
# Must be defined before all includes so that it is executed first.
|
|
|
|
install( CODE "
|
|
|
|
message( STATUS \"Removing existing application bundles...\" )
|
|
|
|
# Remove links to standalone apps
|
|
|
|
file( REMOVE ${KICAD_BIN}/bitmap2component.app )
|
|
|
|
file( REMOVE ${KICAD_BIN}/eeschema.app )
|
|
|
|
file( REMOVE ${KICAD_BIN}/cvpcb.app )
|
|
|
|
file( REMOVE ${KICAD_BIN}/gerbview.app )
|
|
|
|
file( REMOVE ${KICAD_BIN}/pcb_calculator.app )
|
|
|
|
file( REMOVE ${KICAD_BIN}/pcbnew.app )
|
|
|
|
file( REMOVE ${KICAD_BIN}/pl_editor.app )
|
|
|
|
# Remove main bundle
|
|
|
|
file( REMOVE_RECURSE ${KICAD_BIN}/${OSX_BUNDLE_MAIN} )
|
|
|
|
" COMPONENT Runtime
|
|
|
|
)
|
|
|
|
endif()
|
|
|
|
|
2013-05-31 21:22:34 +00:00
|
|
|
############################
|
2013-08-20 18:03:21 +00:00
|
|
|
# Binaries ( CMake targets ) #
|
2013-05-31 21:22:34 +00:00
|
|
|
############################
|
2012-01-23 04:33:36 +00:00
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
add_subdirectory( bitmaps_png )
|
|
|
|
add_subdirectory( common )
|
|
|
|
add_subdirectory( 3d-viewer )
|
|
|
|
add_subdirectory( cvpcb )
|
|
|
|
add_subdirectory( eeschema )
|
|
|
|
add_subdirectory( gerbview )
|
2013-10-24 16:44:38 +00:00
|
|
|
add_subdirectory( lib_dxf )
|
2014-12-21 14:13:14 +00:00
|
|
|
if( KICAD_USE_WEBKIT )
|
|
|
|
add_subdirectory( webviewer )
|
|
|
|
endif()
|
2013-08-20 18:03:21 +00:00
|
|
|
add_subdirectory( pcbnew )
|
|
|
|
add_subdirectory( polygon )
|
|
|
|
add_subdirectory( pagelayout_editor )
|
|
|
|
add_subdirectory( potrace )
|
|
|
|
add_subdirectory( bitmap2component )
|
|
|
|
add_subdirectory( pcb_calculator )
|
2014-04-24 17:25:57 +00:00
|
|
|
add_subdirectory( kicad ) # should follow pcbnew, eeschema
|
2013-08-20 18:03:21 +00:00
|
|
|
add_subdirectory( tools )
|
2014-02-05 09:27:21 +00:00
|
|
|
add_subdirectory( utils )
|
2014-02-02 21:50:45 +00:00
|
|
|
add_subdirectory( qa )
|
2014-04-24 17:25:57 +00:00
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
#add_subdirectory( new )
|
2008-08-11 11:45:29 +00:00
|
|
|
|
2012-01-04 06:18:38 +00:00
|
|
|
|
2013-05-31 21:22:34 +00:00
|
|
|
# Make all libs and executables depend on ExternalProject_Add( boost ),
|
2013-08-20 18:03:21 +00:00
|
|
|
# except perhaps bitmap lib. This allows a multi-threaded build to succeed.
|
2013-05-31 21:22:34 +00:00
|
|
|
add_dependencies( pcbnew boost )
|
|
|
|
add_dependencies( eeschema boost )
|
|
|
|
add_dependencies( cvpcb boost )
|
2013-08-05 15:53:13 +00:00
|
|
|
add_dependencies( gal boost )
|
2013-05-31 21:22:34 +00:00
|
|
|
add_dependencies( common boost )
|
|
|
|
add_dependencies( pcbcommon boost )
|
|
|
|
add_dependencies( 3d-viewer boost )
|
|
|
|
add_dependencies( pcad2kicadpcb boost )
|
|
|
|
add_dependencies( polygon boost )
|
2013-07-19 18:27:22 +00:00
|
|
|
add_dependencies( pl_editor boost )
|
2013-10-14 06:37:58 +00:00
|
|
|
add_dependencies( pnsrouter boost )
|
2013-05-31 21:22:34 +00:00
|
|
|
|
|
|
|
|
2014-10-06 01:18:24 +00:00
|
|
|
if( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC )
|
2014-04-24 17:25:57 +00:00
|
|
|
add_dependencies( pcbnew lib-dependencies )
|
|
|
|
add_dependencies( eeschema lib-dependencies )
|
|
|
|
add_dependencies( cvpcb lib-dependencies )
|
|
|
|
add_dependencies( common lib-dependencies )
|
|
|
|
add_dependencies( gal lib-dependencies )
|
|
|
|
add_dependencies( pcbcommon lib-dependencies )
|
|
|
|
add_dependencies( 3d-viewer lib-dependencies )
|
|
|
|
add_dependencies( pcad2kicadpcb lib-dependencies )
|
|
|
|
add_dependencies( pl_editor lib-dependencies )
|
|
|
|
add_dependencies( pnsrouter lib-dependencies )
|
2014-01-26 13:09:36 +00:00
|
|
|
endif()
|
|
|
|
|
2014-10-06 01:18:24 +00:00
|
|
|
if( KICAD_BUILD_DYNAMIC )
|
2014-01-27 22:24:04 +00:00
|
|
|
endif()
|
2014-01-26 13:09:36 +00:00
|
|
|
|
2008-08-11 11:45:29 +00:00
|
|
|
#############
|
|
|
|
# Resources #
|
|
|
|
#############
|
2013-08-20 18:03:21 +00:00
|
|
|
add_subdirectory( demos )
|
|
|
|
add_subdirectory( template )
|
2008-03-18 21:16:49 +00:00
|
|
|
|
2010-06-13 04:10:16 +00:00
|
|
|
#================================================
|
|
|
|
# Doxygen Output
|
|
|
|
#================================================
|
2013-08-20 18:03:21 +00:00
|
|
|
find_package( Doxygen )
|
|
|
|
if( DOXYGEN_FOUND )
|
2011-12-10 05:33:24 +00:00
|
|
|
add_custom_target( doxygen-docs
|
|
|
|
${CMAKE_COMMAND} -E remove_directory Documentation/doxygen
|
|
|
|
COMMAND ${DOXYGEN_EXECUTABLE}
|
2010-06-13 04:10:16 +00:00
|
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
2011-12-10 05:33:24 +00:00
|
|
|
DEPENDS Doxyfile
|
|
|
|
COMMENT "building doxygen docs into directory Documentation/doxygen/html"
|
|
|
|
)
|
2014-05-18 23:37:45 +00:00
|
|
|
add_custom_target( dev-docs
|
|
|
|
${CMAKE_COMMAND} -E remove_directory Documentation/development/doxygen
|
|
|
|
COMMAND ${DOXYGEN_EXECUTABLE}
|
|
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Documentation/development
|
|
|
|
DEPENDS Doxyfile
|
|
|
|
COMMENT "building developer's resource docs into directory Documentation/development/doxygen/html"
|
|
|
|
)
|
2013-02-14 13:12:54 +00:00
|
|
|
else()
|
2010-06-13 04:10:16 +00:00
|
|
|
message( STATUS "WARNING: Doxygen not found - doxygen-docs (Source Docs) target not created" )
|
|
|
|
endif()
|
|
|
|
|
2008-08-11 11:45:29 +00:00
|
|
|
|
2010-10-12 10:20:28 +00:00
|
|
|
#================================================
|
2013-10-17 19:03:36 +00:00
|
|
|
# "make uninstall" rules
|
2010-10-12 10:20:28 +00:00
|
|
|
#================================================
|
2010-10-12 18:42:29 +00:00
|
|
|
configure_file(
|
2013-10-17 19:03:36 +00:00
|
|
|
"${CMAKE_MODULE_PATH}/cmake_uninstall.cmake.in"
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
|
|
|
IMMEDIATE @ONLY )
|
2010-10-12 10:20:28 +00:00
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
add_custom_target( uninstall
|
2013-10-17 19:03:36 +00:00
|
|
|
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" )
|
2010-10-12 10:20:28 +00:00
|
|
|
|
|
|
|
|
2008-08-11 11:45:29 +00:00
|
|
|
#================================================
|
2013-10-17 19:03:36 +00:00
|
|
|
# Installation
|
2008-08-11 11:45:29 +00:00
|
|
|
#================================================
|
2013-10-17 19:03:36 +00:00
|
|
|
|
2013-08-20 18:03:21 +00:00
|
|
|
install( FILES INSTALL.txt
|
2013-02-14 13:12:54 +00:00
|
|
|
DESTINATION ${KICAD_DOCS}
|
2013-08-20 18:03:21 +00:00
|
|
|
COMPONENT resources )
|
2013-02-14 13:12:54 +00:00
|
|
|
|
2009-06-02 19:18:09 +00:00
|
|
|
###
|
|
|
|
# Install scripts
|
|
|
|
###
|
2013-08-20 18:03:21 +00:00
|
|
|
if( UNIX )
|
|
|
|
install( DIRECTORY scripts
|
2013-10-17 19:03:36 +00:00
|
|
|
DESTINATION ${KICAD_DOCS}
|
|
|
|
COMPONENT resources
|
|
|
|
)
|
2013-02-14 13:12:54 +00:00
|
|
|
endif()
|
|
|
|
|
2009-06-02 13:51:57 +00:00
|
|
|
###
|
|
|
|
# FreeDesktop .desktop and MIME resources
|
|
|
|
###
|
2014-10-02 23:03:52 +00:00
|
|
|
if( UNIX AND NOT APPLE )
|
2013-10-17 19:03:36 +00:00
|
|
|
|
2009-06-21 13:37:27 +00:00
|
|
|
# Set paths
|
2013-08-20 18:03:21 +00:00
|
|
|
set( UNIX_MIME_DIR resources/linux/mime )
|
|
|
|
set( UNIX_MIMELNK_FILES ${UNIX_MIME_DIR}/mimelnk )
|
|
|
|
set( UNIX_MIME_FILES ${UNIX_MIME_DIR}/mime )
|
2013-12-24 19:07:17 +00:00
|
|
|
set( UNIX_ICON_FILES ${UNIX_MIME_DIR}/icons )
|
2013-08-20 18:03:21 +00:00
|
|
|
set( UNIX_APPLICATIONS_FILES ${UNIX_MIME_DIR}/applications )
|
2009-06-21 13:37:27 +00:00
|
|
|
|
|
|
|
# Install Mimelnk directory
|
2013-08-20 18:03:21 +00:00
|
|
|
install( DIRECTORY ${UNIX_MIMELNK_FILES}
|
2013-02-14 13:12:54 +00:00
|
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/share
|
|
|
|
COMPONENT resources
|
2013-10-17 19:03:36 +00:00
|
|
|
)
|
2009-06-21 13:37:27 +00:00
|
|
|
|
|
|
|
# Install Mime directory
|
2013-12-24 19:07:17 +00:00
|
|
|
install( DIRECTORY ${UNIX_ICON_FILES}
|
2013-02-14 13:12:54 +00:00
|
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/share
|
|
|
|
COMPONENT resources
|
2013-10-17 19:03:36 +00:00
|
|
|
)
|
2009-06-21 13:37:27 +00:00
|
|
|
|
|
|
|
# Install Icons
|
2013-08-20 18:03:21 +00:00
|
|
|
install( DIRECTORY ${UNIX_MIME_FILES}
|
2013-02-14 13:12:54 +00:00
|
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/share
|
|
|
|
COMPONENT resources
|
2013-10-17 19:03:36 +00:00
|
|
|
)
|
2009-06-21 13:37:27 +00:00
|
|
|
|
|
|
|
# Install Applications directory (.desktop files)
|
2013-08-20 18:03:21 +00:00
|
|
|
install( DIRECTORY ${UNIX_APPLICATIONS_FILES}
|
2013-02-14 13:12:54 +00:00
|
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/share
|
|
|
|
COMPONENT resources
|
2013-10-17 19:03:36 +00:00
|
|
|
)
|
2013-02-14 13:12:54 +00:00
|
|
|
endif()
|
2010-02-12 23:12:00 +00:00
|
|
|
|
2013-10-17 19:03:36 +00:00
|
|
|
#include( CTest )
|
|
|
|
|
|
|
|
|
|
|
|
if( UNIX AND NOT APPLE )
|
|
|
|
|
|
|
|
# Create a *.deb file:
|
|
|
|
set( CPACK_GENERATOR "DEB" )
|
|
|
|
set( CPACK_DEBIAN_PACKAGE_MAINTAINER "http://launchpad.net/kicad" )
|
|
|
|
|
|
|
|
set( CPACK_PACKAGE_VERSION_MAJOR 1 )
|
|
|
|
set( CPACK_PACKAGE_VERSION_MINOR 0 )
|
|
|
|
set( CPACK_PACKAGE_VERSION_PATCH 0 )
|
|
|
|
#set( CPACK_PACKAGE_CONTACT Firstname Lastname <email@company.com> )
|
|
|
|
set( CPACK_PACKAGE_DESCRIPTION_SUMMARY "KiCad built by CMake build system." )
|
|
|
|
|
|
|
|
include( CPack )
|
|
|
|
|
|
|
|
endif()
|