Revert "Bump minimum required CMake version to 3.10"

This reverts commit a475f45753.
This commit is contained in:
Marek Roszko 2021-02-09 18:46:13 -05:00
parent 09be44a352
commit 872184fe8b
13 changed files with 148 additions and 68 deletions

View File

@ -104,13 +104,15 @@ add_library(3d-viewer STATIC ${3D-VIEWER_SRCS})
add_dependencies( 3d-viewer pcbcommon ) add_dependencies( 3d-viewer pcbcommon )
target_link_libraries( 3d-viewer target_link_libraries( 3d-viewer
PRIVATE
gal gal
kimath kimath
nlohmann_json
${Boost_LIBRARIES} ${Boost_LIBRARIES}
${wxWidgets_LIBRARIES} ${wxWidgets_LIBRARIES}
${OPENGL_LIBRARIES} ${OPENGL_LIBRARIES}
kicad_3dsg ) kicad_3dsg )
target_include_directories( 3d-viewer PRIVATE
$<TARGET_PROPERTY:nlohmann_json,INTERFACE_INCLUDE_DIRECTORIES>
)
add_subdirectory( 3d_cache ) add_subdirectory( 3d_cache )

View File

@ -21,7 +21,7 @@
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA # 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 # Default to CMAKE_BUILD_TYPE = Release unless overridden on command line
# http://www.cmake.org/pipermail/cmake/2008-September/023808.html # 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 # change to add_compile_definitions() after minimum required CMake version is 3.12
set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:Debug>:DEBUG> ) set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:Debug>: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 # Add option to add user directories for linker, if any
LINK_DIRECTORIES( ${LINK_DIRECTORIES_PATH} ) LINK_DIRECTORIES( ${LINK_DIRECTORIES_PATH} )
@ -218,7 +237,6 @@ perform_feature_checks()
# Setup the compiler warnings # Setup the compiler warnings
include( ${CMAKE_MODULE_PATH}/Warnings.cmake ) include( ${CMAKE_MODULE_PATH}/Warnings.cmake )
if( WIN32 ) if( WIN32 )
# define UNICODE and_UNICODE definition on Windows. KiCad uses unicode. # define UNICODE and_UNICODE definition on Windows. KiCad uses unicode.
# Both definitions are required # Both definitions are required

View File

@ -72,7 +72,6 @@ add_library( gal STATIC ${GAL_SRCS} )
target_link_libraries( gal target_link_libraries( gal
common # This is needed until the circular dependency is removed common # This is needed until the circular dependency is removed
kimath kimath
nlohmann_json
bitmaps bitmaps
${GLEW_LIBRARIES} ${GLEW_LIBRARIES}
${CAIRO_LIBRARIES} ${CAIRO_LIBRARIES}
@ -81,6 +80,10 @@ target_link_libraries( gal
${GDI_PLUS_LIBRARIES} ${GDI_PLUS_LIBRARIES}
) )
target_include_directories( gal PRIVATE
$<TARGET_PROPERTY:nlohmann_json,INTERFACE_INCLUDE_DIRECTORIES>
)
# Only for win32 cross compilation using MXE # Only for win32 cross compilation using MXE
if( WIN32 AND MSYS ) if( WIN32 AND MSYS )
@ -461,18 +464,22 @@ set( COMMON_SRCS
add_library( common STATIC add_library( common STATIC
${COMMON_SRCS} ${COMMON_SRCS}
$<TARGET_OBJECTS:libcontext>
) )
target_include_directories( common PRIVATE
$<TARGET_PROPERTY:libcontext,INTERFACE_INCLUDE_DIRECTORIES>
)
add_dependencies( common libcontext )
add_dependencies( common version_header ) add_dependencies( common version_header )
add_dependencies( common compoundfilereader ) # used by altium_parser.cpp add_dependencies( common compoundfilereader ) # used by altium_parser.cpp
target_link_libraries( common target_link_libraries( common
libcontext
kimath kimath
kiplatform kiplatform
bitmaps bitmaps
gal gal
compoundfilereader
${Boost_LIBRARIES} ${Boost_LIBRARIES}
${CURL_LIBRARIES} ${CURL_LIBRARIES}
${OPENSSL_LIBRARIES} # empty on Apple ${OPENSSL_LIBRARIES} # empty on Apple
@ -480,12 +487,14 @@ target_link_libraries( common
${EXTRA_LIBS} ${EXTRA_LIBS}
) )
target_include_directories( common target_include_directories( common PUBLIC
PUBLIC $<TARGET_PROPERTY:nlohmann_json,INTERFACE_INCLUDE_DIRECTORIES>
.
${CMAKE_BINARY_DIR}
) )
target_include_directories( common PUBLIC
$<TARGET_PROPERTY:compoundfilereader,INTERFACE_INCLUDE_DIRECTORIES>
) # used by altium_parser.cpp
set( PCB_COMMON_SRCS set( PCB_COMMON_SRCS
base_screen.cpp base_screen.cpp
eda_text.cpp eda_text.cpp
@ -569,6 +578,10 @@ set_source_files_properties( ${PCB_COMMON_SRCS} PROPERTIES
add_library( pcbcommon STATIC ${PCB_COMMON_SRCS} ) add_library( pcbcommon STATIC ${PCB_COMMON_SRCS} )
target_include_directories( pcbcommon PUBLIC
$<TARGET_PROPERTY:delaunator,INTERFACE_INCLUDE_DIRECTORIES>
)
target_link_libraries( pcbcommon PUBLIC target_link_libraries( pcbcommon PUBLIC
common common
delaunator delaunator

View File

@ -22,6 +22,7 @@ endif()
include_directories( BEFORE ${INC_BEFORE} ) include_directories( BEFORE ${INC_BEFORE} )
include_directories( include_directories(
./dialogs ./dialogs
./netlist_exporters
./widgets ./widgets
symbol_editor symbol_editor
./libview ./libview
@ -379,14 +380,12 @@ add_library( eeschema_kiface_objects OBJECT
${EESCHEMA_COMMON_SRCS} ${EESCHEMA_COMMON_SRCS}
) )
target_include_directories( eeschema_kiface_objects # CMake <3.9 can't link anything to object libraries,
PUBLIC # but we only need include directories, as we will link the kiface MODULE
. target_include_directories( eeschema_kiface_objects PUBLIC
netlist_exporters ) ${CMAKE_CURRENT_SOURCE_DIR}
$<TARGET_PROPERTY:common,INTERFACE_INCLUDE_DIRECTORIES>
target_link_libraries( eeschema_kiface_objects )
PUBLIC
common )
# Since we're not using target_link_libraries, we need to explicitly # Since we're not using target_link_libraries, we need to explicitly
# declare the dependency # declare the dependency
@ -394,11 +393,14 @@ add_dependencies( eeschema_kiface_objects common )
add_library( eeschema_kiface MODULE add_library( eeschema_kiface MODULE
eeschema.cpp eeschema.cpp
$<TARGET_OBJECTS:eeschema_kiface_objects>
)
target_include_directories( eeschema_kiface PUBLIC
$<TARGET_PROPERTY:eeschema_kiface_objects,INTERFACE_INCLUDE_DIRECTORIES>
) )
target_link_libraries( eeschema_kiface target_link_libraries( eeschema_kiface
PRIVATE
eeschema_kiface_objects
common common
sexpr sexpr
markdown_lib markdown_lib
@ -408,7 +410,6 @@ target_link_libraries( eeschema_kiface
if( KICAD_SPICE ) if( KICAD_SPICE )
target_link_libraries( eeschema_kiface target_link_libraries( eeschema_kiface
PRIVATE
${NGSPICE_LIBRARY} ${NGSPICE_LIBRARY}
) )
endif() endif()

View File

@ -131,10 +131,16 @@ add_library( gerbview_kiface_objects OBJECT
${WIDGET_SRCS} ${WIDGET_SRCS}
${GERBVIEW_EXTRA_SRCS} ${GERBVIEW_EXTRA_SRCS}
) )
target_link_libraries( gerbview_kiface_objects
PUBLIC # Since we're not using target_link_libraries, we need to explicitly
common # declare the dependency
gal 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
$<TARGET_PROPERTY:common,INTERFACE_INCLUDE_DIRECTORIES>
) )
# the main gerbview program, in DSO form. # the main gerbview program, in DSO form.
@ -145,7 +151,6 @@ set_target_properties( gerbview_kiface PROPERTIES
SUFFIX ${KIFACE_SUFFIX} SUFFIX ${KIFACE_SUFFIX}
) )
target_link_libraries( gerbview_kiface target_link_libraries( gerbview_kiface
nlohmann_json
gal gal
common common
${wxWidgets_LIBRARIES} ${wxWidgets_LIBRARIES}
@ -161,6 +166,10 @@ if( MAKE_LINK_MAPS )
LINK_FLAGS "-Wl,-cref,-Map=_gerbview.kiface.map" ) LINK_FLAGS "-Wl,-cref,-Map=_gerbview.kiface.map" )
endif() endif()
target_include_directories( gerbview_kiface PRIVATE
$<TARGET_PROPERTY:nlohmann_json,INTERFACE_INCLUDE_DIRECTORIES>
)
# if building gerbview, then also build gerbview_kiface if out of date. # if building gerbview, then also build gerbview_kiface if out of date.
add_dependencies( gerbview gerbview_kiface ) add_dependencies( gerbview gerbview_kiface )

View File

@ -57,6 +57,10 @@ add_executable( kicad WIN32 MACOSX_BUNDLE
${KICAD_RESOURCES} ${KICAD_RESOURCES}
) )
target_include_directories( kicad PRIVATE
$<TARGET_PROPERTY:nlohmann_json,INTERFACE_INCLUDE_DIRECTORIES>
)
if( UNIX ) if( UNIX )
# for build directory: create kiface symlinks so kicad (exe) can be run in-situ # for build directory: create kiface symlinks so kicad (exe) can be run in-situ
add_custom_target( kiface_sym_links add_custom_target( kiface_sym_links
@ -72,13 +76,11 @@ if( APPLE )
MACOSX_BUNDLE_INFO_PLIST ${PROJECT_BINARY_DIR}/kicad/Info.plist MACOSX_BUNDLE_INFO_PLIST ${PROJECT_BINARY_DIR}/kicad/Info.plist
) )
target_link_libraries( kicad target_link_libraries( kicad
nlohmann_json
common common
${wxWidgets_LIBRARIES} ${wxWidgets_LIBRARIES}
) )
else() else()
target_link_libraries( kicad target_link_libraries( kicad
nlohmann_json
common common
gal gal
common #repeated due to a circular dependancy bewteen gal and common common #repeated due to a circular dependancy bewteen gal and common

View File

@ -26,12 +26,15 @@ set( KIMATH_SRCS
# Include the other smaller math libraries in this one for convenience # Include the other smaller math libraries in this one for convenience
add_library( kimath STATIC add_library( kimath STATIC
${KIMATH_SRCS} ${KIMATH_SRCS}
$<TARGET_OBJECTS:clipper>
$<TARGET_OBJECTS:othermath>
) )
add_dependencies( kimath clipper )
add_dependencies( kimath rtree )
add_dependencies( kimath othermath )
target_link_libraries( kimath target_link_libraries( kimath
clipper
othermath
rtree
${wxWidgets_LIBRARIES} # wxLogDebug, wxASSERT ${wxWidgets_LIBRARIES} # wxLogDebug, wxASSERT
${Boost_LIBRARIES} # Because of the OPT types ${Boost_LIBRARIES} # Because of the OPT types
) )
@ -39,6 +42,9 @@ target_link_libraries( kimath
target_include_directories( kimath PUBLIC target_include_directories( kimath PUBLIC
${PROJECT_BINARY_DIR} ${PROJECT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/include
$<TARGET_PROPERTY:clipper,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:othermath,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:rtree,INTERFACE_INCLUDE_DIRECTORIES>
) )
# core/optional.h is needed for OPT types # core/optional.h is needed for OPT types

View File

@ -624,10 +624,13 @@ target_link_libraries( pcbnew
# There's way too much crap coming in from common yet. # There's way too much crap coming in from common yet.
common common
gal gal
nlohmann_json
${wxWidgets_LIBRARIES} ${wxWidgets_LIBRARIES}
) )
target_include_directories( pcbnew INTERFACE
$<TARGET_PROPERTY:nlohmann_json,INTERFACE_INCLUDE_DIRECTORIES>
)
if( PCBNEW_LINK_MAPS ) if( PCBNEW_LINK_MAPS )
set_target_properties( pcbnew PROPERTIES set_target_properties( pcbnew PROPERTIES
LINK_FLAGS "-Wl,-cref,-Map=pcbnew.map" ) LINK_FLAGS "-Wl,-cref,-Map=pcbnew.map" )
@ -652,16 +655,22 @@ make_lexer(
# CMake <3.9 can't link anything to object libraries, # CMake <3.9 can't link anything to object libraries,
# but we only need include directories, as we will link the kiface MODULE # but we only need include directories, as we will link the kiface MODULE
target_link_libraries( pcbnew_kiface_objects target_include_directories( pcbnew_kiface_objects PRIVATE
PRIVATE $<TARGET_PROPERTY:common,INTERFACE_INCLUDE_DIRECTORIES>
common $<TARGET_PROPERTY:dxflib_qcad,INTERFACE_INCLUDE_DIRECTORIES>
dxflib_qcad $<TARGET_PROPERTY:nanosvg,INTERFACE_INCLUDE_DIRECTORIES>
nanosvg $<TARGET_PROPERTY:tinyspline_lib,INTERFACE_INCLUDE_DIRECTORIES>
tinyspline_lib $<TARGET_PROPERTY:nlohmann_json,INTERFACE_INCLUDE_DIRECTORIES>
nlohmann_json
) )
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 $<TARGET_OBJECTS:pcbnew_kiface_objects> )
set_target_properties( pcbnew_kiface PROPERTIES set_target_properties( pcbnew_kiface PROPERTIES
# Decorate OUTPUT_NAME with PREFIX and SUFFIX, creating something like # Decorate OUTPUT_NAME with PREFIX and SUFFIX, creating something like
@ -684,7 +693,6 @@ if ( KICAD_BUILD_TESTS )
endif () endif ()
set( PCBNEW_KIFACE_LIBRARIES set( PCBNEW_KIFACE_LIBRARIES
pcbnew_kiface_objects
3d-viewer 3d-viewer
connectivity connectivity
pcbcommon pcbcommon
@ -706,10 +714,7 @@ set( PCBNEW_KIFACE_LIBRARIES
) )
target_link_libraries( pcbnew_kiface target_link_libraries( pcbnew_kiface ${PCBNEW_KIFACE_LIBRARIES} )
PRIVATE
${PCBNEW_KIFACE_LIBRARIES}
)
set_source_files_properties( pcbnew.cpp PROPERTIES set_source_files_properties( pcbnew.cpp PROPERTIES
# The KIFACE is in pcbnew.cpp, export it: # The KIFACE is in pcbnew.cpp, export it:

View File

@ -11,10 +11,11 @@ set( ALTIUM2PCBNEW_SRCS
add_library( altium2pcbnew STATIC ${ALTIUM2PCBNEW_SRCS} ) add_library( altium2pcbnew STATIC ${ALTIUM2PCBNEW_SRCS} )
target_link_libraries( altium2pcbnew add_dependencies( altium2pcbnew compoundfilereader )
pcbcommon
compoundfilereader )
target_include_directories( altium2pcbnew target_link_libraries( altium2pcbnew pcbcommon )
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR} ) target_include_directories( altium2pcbnew PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
$<TARGET_PROPERTY:compoundfilereader,INTERFACE_INCLUDE_DIRECTORIES>
)

View File

@ -52,7 +52,6 @@ set( common_srcs
set( common_libs set( common_libs
common common
libcontext
gal gal
qa_utils qa_utils
unit_test_utils unit_test_utils
@ -63,6 +62,10 @@ set( common_libs
# Test executable for non-program-specific code # Test executable for non-program-specific code
add_executable( qa_common ${common_srcs} ) add_executable( qa_common ${common_srcs} )
target_link_libraries( qa_common ${common_libs} ) target_link_libraries( qa_common ${common_libs} )
target_include_directories( qa_common PRIVATE
$<TARGET_PROPERTY:libcontext,INTERFACE_INCLUDE_DIRECTORIES>
)
include_directories( include_directories(
${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}

View File

@ -50,7 +50,6 @@ include_directories(
target_link_libraries( qa_common_tools target_link_libraries( qa_common_tools
common common
libcontext
gal gal
qa_utils qa_utils
sexpr sexpr
@ -62,4 +61,8 @@ target_compile_definitions( qa_common_tools
PRIVATE PCBNEW PRIVATE PCBNEW
) )
target_include_directories( qa_common_tools PRIVATE
$<TARGET_PROPERTY:libcontext,INTERFACE_INCLUDE_DIRECTORIES>
)
kicad_add_utils_executable( qa_common_tools ) kicad_add_utils_executable( qa_common_tools )

View File

@ -74,10 +74,18 @@ endif()
add_executable( qa_eeschema add_executable( qa_eeschema
${QA_EESCHEMA_SRCS} ${QA_EESCHEMA_SRCS}
# Older CMakes cannot link OBJECT libraries
# https://cmake.org/pipermail/cmake/2013-November/056263.html
$<TARGET_OBJECTS:eeschema_kiface_objects>
) )
# 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 target_link_libraries( qa_eeschema
eeschema_kiface_objects
common common
pcbcommon pcbcommon
kimath kimath
@ -88,6 +96,12 @@ target_link_libraries( qa_eeschema
${Boost_LIBRARIES} ${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)
$<TARGET_PROPERTY:eeschema_kiface_objects,INCLUDE_DIRECTORIES>
)
# Eeschema tests, so pretend to be eeschema (for units, etc) # Eeschema tests, so pretend to be eeschema (for units, etc)
target_compile_definitions( qa_eeschema target_compile_definitions( qa_eeschema
PUBLIC EESCHEMA PUBLIC EESCHEMA

View File

@ -46,6 +46,10 @@ set( QA_PCBNEW_SRCS
add_executable( qa_pcbnew add_executable( qa_pcbnew
${QA_PCBNEW_SRCS} ${QA_PCBNEW_SRCS}
# Older CMakes cannot link OBJECT libraries
# https://cmake.org/pipermail/cmake/2013-November/056263.html
$<TARGET_OBJECTS:pcbnew_kiface_objects>
) )
# Pcbnew tests, so pretend to be pcbnew (for units, etc) # Pcbnew tests, so pretend to be pcbnew (for units, etc)
@ -60,7 +64,6 @@ add_dependencies( qa_pcbnew pcbnew )
target_link_libraries( qa_pcbnew target_link_libraries( qa_pcbnew
qa_pcbnew_utils qa_pcbnew_utils
pcbnew_kiface_objects
3d-viewer 3d-viewer
connectivity connectivity
pcbcommon pcbcommon