diff --git a/3d-viewer/CMakeLists.txt b/3d-viewer/CMakeLists.txt index 2eb7648234..7ec25f4cc1 100644 --- a/3d-viewer/CMakeLists.txt +++ b/3d-viewer/CMakeLists.txt @@ -104,13 +104,15 @@ add_library(3d-viewer STATIC ${3D-VIEWER_SRCS}) add_dependencies( 3d-viewer pcbcommon ) target_link_libraries( 3d-viewer - PRIVATE - gal - kimath - nlohmann_json - ${Boost_LIBRARIES} - ${wxWidgets_LIBRARIES} - ${OPENGL_LIBRARIES} - kicad_3dsg ) + gal + kimath + ${Boost_LIBRARIES} + ${wxWidgets_LIBRARIES} + ${OPENGL_LIBRARIES} + kicad_3dsg ) + +target_include_directories( 3d-viewer PRIVATE + $ + ) add_subdirectory( 3d_cache ) diff --git a/CMakeLists.txt b/CMakeLists.txt index aa5b1b2799..c67ef8cf84 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,7 @@ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA # -cmake_minimum_required( VERSION 3.10 FATAL_ERROR ) +cmake_minimum_required( VERSION 3.2 FATAL_ERROR ) # Default to CMAKE_BUILD_TYPE = Release unless overridden on command line # http://www.cmake.org/pipermail/cmake/2008-September/023808.html @@ -190,6 +190,25 @@ endif() # change to add_compile_definitions() after minimum required CMake version is 3.12 set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$:DEBUG> ) +# CMP0063: CMake < 3.3 does not handle hidden visibility for static libraries, +# and 3.3 is backwards compatible when the minimum version is smaller than 3.3. +if( POLICY CMP0063 ) + cmake_policy( GET CMP0063 VISIBILITY_POLICY ) + if( VISIBILITY_POLICY STREQUAL NEW ) + message( WARNING "Compatibility code for CMake < 3.3 can be removed, search for CMP0063" ) + else() + cmake_policy( SET CMP0063 NEW ) + endif() +else() + if( CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY AND NOT APPLE ) + set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY}hidden" ) + endif() + if( CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN AND NOT APPLE ) + set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN}" ) + endif() +endif() + + # Add option to add user directories for linker, if any LINK_DIRECTORIES( ${LINK_DIRECTORIES_PATH} ) @@ -218,7 +237,6 @@ perform_feature_checks() # Setup the compiler warnings include( ${CMAKE_MODULE_PATH}/Warnings.cmake ) - if( WIN32 ) # define UNICODE and_UNICODE definition on Windows. KiCad uses unicode. # Both definitions are required diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index d4cc4afbf3..527c49fdd5 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -72,7 +72,6 @@ add_library( gal STATIC ${GAL_SRCS} ) target_link_libraries( gal common # This is needed until the circular dependency is removed kimath - nlohmann_json bitmaps ${GLEW_LIBRARIES} ${CAIRO_LIBRARIES} @@ -81,6 +80,10 @@ target_link_libraries( gal ${GDI_PLUS_LIBRARIES} ) +target_include_directories( gal PRIVATE + $ + ) + # Only for win32 cross compilation using MXE if( WIN32 AND MSYS ) @@ -461,18 +464,22 @@ set( COMMON_SRCS add_library( common STATIC ${COMMON_SRCS} + $ ) +target_include_directories( common PRIVATE + $ + ) + +add_dependencies( common libcontext ) add_dependencies( common version_header ) add_dependencies( common compoundfilereader ) # used by altium_parser.cpp target_link_libraries( common - libcontext kimath kiplatform bitmaps gal - compoundfilereader ${Boost_LIBRARIES} ${CURL_LIBRARIES} ${OPENSSL_LIBRARIES} # empty on Apple @@ -480,12 +487,14 @@ target_link_libraries( common ${EXTRA_LIBS} ) -target_include_directories( common - PUBLIC - . - ${CMAKE_BINARY_DIR} +target_include_directories( common PUBLIC + $ ) +target_include_directories( common PUBLIC + $ + ) # used by altium_parser.cpp + set( PCB_COMMON_SRCS base_screen.cpp eda_text.cpp @@ -569,6 +578,10 @@ set_source_files_properties( ${PCB_COMMON_SRCS} PROPERTIES add_library( pcbcommon STATIC ${PCB_COMMON_SRCS} ) +target_include_directories( pcbcommon PUBLIC + $ +) + target_link_libraries( pcbcommon PUBLIC common delaunator diff --git a/eeschema/CMakeLists.txt b/eeschema/CMakeLists.txt index 14d18335e4..1d0e6b12a0 100644 --- a/eeschema/CMakeLists.txt +++ b/eeschema/CMakeLists.txt @@ -22,6 +22,7 @@ endif() include_directories( BEFORE ${INC_BEFORE} ) include_directories( ./dialogs + ./netlist_exporters ./widgets symbol_editor ./libview @@ -379,14 +380,12 @@ add_library( eeschema_kiface_objects OBJECT ${EESCHEMA_COMMON_SRCS} ) -target_include_directories( eeschema_kiface_objects - PUBLIC - . - netlist_exporters ) - -target_link_libraries( eeschema_kiface_objects - PUBLIC - common ) +# CMake <3.9 can't link anything to object libraries, +# but we only need include directories, as we will link the kiface MODULE +target_include_directories( eeschema_kiface_objects PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR} + $ +) # Since we're not using target_link_libraries, we need to explicitly # declare the dependency @@ -394,22 +393,24 @@ add_dependencies( eeschema_kiface_objects common ) add_library( eeschema_kiface MODULE eeschema.cpp + $ ) +target_include_directories( eeschema_kiface PUBLIC + $ +) + target_link_libraries( eeschema_kiface - PRIVATE - eeschema_kiface_objects - common - sexpr - markdown_lib - ${wxWidgets_LIBRARIES} - ${GDI_PLUS_LIBRARIES} + common + sexpr + markdown_lib + ${wxWidgets_LIBRARIES} + ${GDI_PLUS_LIBRARIES} ) if( KICAD_SPICE ) target_link_libraries( eeschema_kiface - PRIVATE - ${NGSPICE_LIBRARY} + ${NGSPICE_LIBRARY} ) endif() diff --git a/gerbview/CMakeLists.txt b/gerbview/CMakeLists.txt index 733e479380..72529eb4ac 100644 --- a/gerbview/CMakeLists.txt +++ b/gerbview/CMakeLists.txt @@ -131,10 +131,16 @@ add_library( gerbview_kiface_objects OBJECT ${WIDGET_SRCS} ${GERBVIEW_EXTRA_SRCS} ) -target_link_libraries( gerbview_kiface_objects - PUBLIC - common - gal + +# Since we're not using target_link_libraries, we need to explicitly +# declare the dependency +add_dependencies( gerbview_kiface_objects common ) +add_dependencies( gerbview_kiface_objects gal ) + +# CMake <3.9 can't link anything to object libraries, +# but we only need include directories, as we will link the kiface MODULE +target_include_directories( gerbview_kiface_objects PRIVATE + $ ) # the main gerbview program, in DSO form. @@ -145,7 +151,6 @@ set_target_properties( gerbview_kiface PROPERTIES SUFFIX ${KIFACE_SUFFIX} ) target_link_libraries( gerbview_kiface - nlohmann_json gal common ${wxWidgets_LIBRARIES} @@ -161,6 +166,10 @@ if( MAKE_LINK_MAPS ) LINK_FLAGS "-Wl,-cref,-Map=_gerbview.kiface.map" ) endif() +target_include_directories( gerbview_kiface PRIVATE + $ + ) + # if building gerbview, then also build gerbview_kiface if out of date. add_dependencies( gerbview gerbview_kiface ) diff --git a/kicad/CMakeLists.txt b/kicad/CMakeLists.txt index b9a1899e3f..201932dd1c 100644 --- a/kicad/CMakeLists.txt +++ b/kicad/CMakeLists.txt @@ -57,6 +57,10 @@ add_executable( kicad WIN32 MACOSX_BUNDLE ${KICAD_RESOURCES} ) +target_include_directories( kicad PRIVATE + $ + ) + if( UNIX ) # for build directory: create kiface symlinks so kicad (exe) can be run in-situ add_custom_target( kiface_sym_links @@ -72,13 +76,11 @@ if( APPLE ) MACOSX_BUNDLE_INFO_PLIST ${PROJECT_BINARY_DIR}/kicad/Info.plist ) target_link_libraries( kicad - nlohmann_json common ${wxWidgets_LIBRARIES} ) else() target_link_libraries( kicad - nlohmann_json common gal common #repeated due to a circular dependancy bewteen gal and common diff --git a/libs/kimath/CMakeLists.txt b/libs/kimath/CMakeLists.txt index 2689ada6a5..73950452e2 100644 --- a/libs/kimath/CMakeLists.txt +++ b/libs/kimath/CMakeLists.txt @@ -26,12 +26,15 @@ set( KIMATH_SRCS # Include the other smaller math libraries in this one for convenience add_library( kimath STATIC ${KIMATH_SRCS} + $ + $ ) +add_dependencies( kimath clipper ) +add_dependencies( kimath rtree ) +add_dependencies( kimath othermath ) + target_link_libraries( kimath - clipper - othermath - rtree ${wxWidgets_LIBRARIES} # wxLogDebug, wxASSERT ${Boost_LIBRARIES} # Because of the OPT types ) @@ -39,6 +42,9 @@ target_link_libraries( kimath target_include_directories( kimath PUBLIC ${PROJECT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include + $ + $ + $ ) # core/optional.h is needed for OPT types diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt index 64838ecad4..0b604a4ddb 100644 --- a/pcbnew/CMakeLists.txt +++ b/pcbnew/CMakeLists.txt @@ -624,10 +624,13 @@ target_link_libraries( pcbnew # There's way too much crap coming in from common yet. common gal - nlohmann_json ${wxWidgets_LIBRARIES} ) +target_include_directories( pcbnew INTERFACE + $ + ) + if( PCBNEW_LINK_MAPS ) set_target_properties( pcbnew PROPERTIES LINK_FLAGS "-Wl,-cref,-Map=pcbnew.map" ) @@ -652,16 +655,22 @@ make_lexer( # CMake <3.9 can't link anything to object libraries, # but we only need include directories, as we will link the kiface MODULE -target_link_libraries( pcbnew_kiface_objects - PRIVATE - common - dxflib_qcad - nanosvg - tinyspline_lib - nlohmann_json +target_include_directories( pcbnew_kiface_objects PRIVATE + $ + $ + $ + $ + $ ) -add_library( pcbnew_kiface MODULE ) +# Since we're not using target_link_libraries, we need to explicitly +# declare the dependency +add_dependencies( pcbnew_kiface_objects common ) +add_dependencies( pcbnew_kiface_objects dxflib_qcad ) +add_dependencies( pcbnew_kiface_objects tinyspline_lib ) +add_dependencies( pcbnew_kiface_objects nanosvg ) + +add_library( pcbnew_kiface MODULE $ ) set_target_properties( pcbnew_kiface PROPERTIES # Decorate OUTPUT_NAME with PREFIX and SUFFIX, creating something like @@ -684,7 +693,6 @@ if ( KICAD_BUILD_TESTS ) endif () set( PCBNEW_KIFACE_LIBRARIES - pcbnew_kiface_objects 3d-viewer connectivity pcbcommon @@ -706,10 +714,7 @@ set( PCBNEW_KIFACE_LIBRARIES ) -target_link_libraries( pcbnew_kiface - PRIVATE - ${PCBNEW_KIFACE_LIBRARIES} - ) +target_link_libraries( pcbnew_kiface ${PCBNEW_KIFACE_LIBRARIES} ) set_source_files_properties( pcbnew.cpp PROPERTIES # The KIFACE is in pcbnew.cpp, export it: diff --git a/pcbnew/plugins/altium/CMakeLists.txt b/pcbnew/plugins/altium/CMakeLists.txt index fd36c28723..c7645f7404 100644 --- a/pcbnew/plugins/altium/CMakeLists.txt +++ b/pcbnew/plugins/altium/CMakeLists.txt @@ -11,10 +11,11 @@ set( ALTIUM2PCBNEW_SRCS add_library( altium2pcbnew STATIC ${ALTIUM2PCBNEW_SRCS} ) -target_link_libraries( altium2pcbnew - pcbcommon - compoundfilereader ) +add_dependencies( altium2pcbnew compoundfilereader ) -target_include_directories( altium2pcbnew - PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR} ) +target_link_libraries( altium2pcbnew pcbcommon ) + +target_include_directories( altium2pcbnew PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR} + $ + ) \ No newline at end of file diff --git a/qa/common/CMakeLists.txt b/qa/common/CMakeLists.txt index 8735091474..54a6d3fb73 100644 --- a/qa/common/CMakeLists.txt +++ b/qa/common/CMakeLists.txt @@ -52,7 +52,6 @@ set( common_srcs set( common_libs common - libcontext gal qa_utils unit_test_utils @@ -63,6 +62,10 @@ set( common_libs # Test executable for non-program-specific code add_executable( qa_common ${common_srcs} ) target_link_libraries( qa_common ${common_libs} ) +target_include_directories( qa_common PRIVATE + $ +) + include_directories( ${CMAKE_SOURCE_DIR} diff --git a/qa/common_tools/CMakeLists.txt b/qa/common_tools/CMakeLists.txt index 2a27b34122..8789238727 100644 --- a/qa/common_tools/CMakeLists.txt +++ b/qa/common_tools/CMakeLists.txt @@ -50,7 +50,6 @@ include_directories( target_link_libraries( qa_common_tools common - libcontext gal qa_utils sexpr @@ -62,4 +61,8 @@ target_compile_definitions( qa_common_tools PRIVATE PCBNEW ) +target_include_directories( qa_common_tools PRIVATE + $ +) + kicad_add_utils_executable( qa_common_tools ) diff --git a/qa/eeschema/CMakeLists.txt b/qa/eeschema/CMakeLists.txt index 8926deb35b..5d4c488c9b 100644 --- a/qa/eeschema/CMakeLists.txt +++ b/qa/eeschema/CMakeLists.txt @@ -74,10 +74,18 @@ endif() add_executable( qa_eeschema ${QA_EESCHEMA_SRCS} + + # Older CMakes cannot link OBJECT libraries + # https://cmake.org/pipermail/cmake/2013-November/056263.html + $ ) +# Anytime we link to the kiface_objects, we have to add a dependency on the last object +# to ensure that the generated lexer files are finished being used before the qa runs in a +# multi-threaded build +add_dependencies( qa_eeschema eeschema ) + target_link_libraries( qa_eeschema - eeschema_kiface_objects common pcbcommon kimath @@ -88,6 +96,12 @@ target_link_libraries( qa_eeschema ${Boost_LIBRARIES} ) +target_include_directories( qa_eeschema PUBLIC + # Paths for eeschema lib usage (should really be in eeschema/common + # target_include_directories and made PUBLIC) + $ +) + # Eeschema tests, so pretend to be eeschema (for units, etc) target_compile_definitions( qa_eeschema PUBLIC EESCHEMA diff --git a/qa/pcbnew/CMakeLists.txt b/qa/pcbnew/CMakeLists.txt index ed66371062..913aab77ca 100644 --- a/qa/pcbnew/CMakeLists.txt +++ b/qa/pcbnew/CMakeLists.txt @@ -46,6 +46,10 @@ set( QA_PCBNEW_SRCS add_executable( qa_pcbnew ${QA_PCBNEW_SRCS} + + # Older CMakes cannot link OBJECT libraries + # https://cmake.org/pipermail/cmake/2013-November/056263.html + $ ) # Pcbnew tests, so pretend to be pcbnew (for units, etc) @@ -60,7 +64,6 @@ add_dependencies( qa_pcbnew pcbnew ) target_link_libraries( qa_pcbnew qa_pcbnew_utils - pcbnew_kiface_objects 3d-viewer connectivity pcbcommon