kicad-developers team mailing list archive
-
kicad-developers team
-
Mailing list archive
-
Message #34339
Re: RPATH issue on _pcbnew.so
We can test it for macOS as well. I'm spending some time on it every day
at this point to get it ready for v5, so now is the perfect time :)
On Feb 25, 2018 4:16 PM, "Wayne Stambaugh" <stambaughw@xxxxxxxxx> wrote:
> hauptmech,
>
> Would you please attach this change as a committed patch when you get a
> chance? I want to test this on windows and linux and maybe we can get one
> of our macos devs to test it there as well. I would like to work out any
> packaging issues as soon as possible to give our package devs as much time
> as possible to work out any issue for the stable release.
>
> Thanks,
>
> Wayne
>
> On 02/24/2018 08:49 PM, hauptmech wrote:
>
>> I don't have enough understanding of all the platforms to suggest a full
>> patch. However the following works for me on linux (two targets, but shared
>> object files so there should be no significant change in compile time)
>>
>> diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt
>> index 520dc1166..78bd19cee 100644
>> --- a/pcbnew/CMakeLists.txt
>> +++ b/pcbnew/CMakeLists.txt
>> @@ -608,12 +608,14 @@ if( PCBNEW_LINK_MAPS )
>> endif()
>>
>> # the main pcbnew program, in DSO form.
>> -add_library( pcbnew_kiface MODULE
>> +add_library( pcbnew_kiface_objects OBJECT
>> pcbnew.cpp
>> ${PCBNEW_SRCS}
>> ${PCBNEW_COMMON_SRCS}
>> ${PCBNEW_SCRIPTING_SRCS}
>> )
>> +add_library( pcbnew_kiface MODULE $<TARGET_OBJECTS:pcbnew_kiface_objects>
>> )
>> +
>> set_target_properties( pcbnew_kiface PROPERTIES
>> # Decorate OUTPUT_NAME with PREFIX and SUFFIX, creating something
>> like
>> # _pcbnew.so, _pcbnew.dll, or _pcbnew.kiface
>> @@ -640,7 +642,7 @@ if( ${OPENMP_FOUND} )
>> )
>> endif()
>>
>> -target_link_libraries( pcbnew_kiface
>> +set( PCBNEW_KIFACE_LIBRARIES
>> 3d-viewer
>> pcbcommon
>> pnsrouter
>> @@ -660,6 +662,9 @@ target_link_libraries( pcbnew_kiface
>> ${OPENMP_LIBRARIES}
>> )
>>
>> +
>> +target_link_libraries( pcbnew_kiface ${PCBNEW_KIFACE_LIBRARIES})
>> +
>> set_source_files_properties( pcbnew.cpp PROPERTIES
>> # The KIFACE is in pcbnew.cpp, export it:
>> COMPILE_DEFINITIONS "BUILD_KIWAY_DLL;COMPILING_DLL"
>> @@ -779,7 +784,11 @@ if( KICAD_SCRIPTING_MODULES )
>> set( PYMOD_EXT "so" )
>>
>> else() # only linux remains among supported platforms
>> - install( FILES ${CMAKE_BINARY_DIR}/pcbnew/_pcbnew.so
>> DESTINATION ${PYTHON_DEST} )
>> + add_library( pcbnew_python MODULE $<TARGET_OBJECTS:pcbnew_kiface_objects>
>> )
>> + target_link_libraries( pcbnew_python ${PCBNEW_KIFACE_LIBRARIES})
>> + set_target_properties( pcbnew_python PROPERTIES OUTPUT_NAME
>> pcbnew PREFIX "_" SUFFIX ".so")
>> + install( TARGETS pcbnew_python DESTINATION ${PYTHON_DEST}
>> COMPONENT binary)
>> +
>> set( PYMOD_EXT "so" )
>> endif()
>>
>>
>>
>>
>> On Sun, Feb 25, 2018 at 2:42 PM, Cirilo Bernardo <
>> cirilo.bernardo@xxxxxxxxx <mailto:cirilo.bernardo@xxxxxxxxx>> wrote:
>>
>> What do you mean by a second target? Keep in mind that we don't want
>> to
>> recompile everything twice just because of the kiface libraries. If
>> you can
>> create a target which is dependent on the pcbnew stand-alone app and
>> which used the object files to create a shared library, that would
>> be good.
>> I can't recall offhand if some object files would need to be rebuilt
>> for
>> the kiface library, but that can be handled by CMake as well.
>>
>> Regarding KiCad using pcbnew.kiface directly, I suspect the
>> intention was for
>> pcbnew to use that library regardless of whether it was run via the
>> KiCad
>> application or as the pcbnew standalone application. On that topic
>> I'd rather
>> do nothing until KiCad could be refactored to the point where a core
>> pcb API
>> is completely independent of the GUI; at the moment there is such a
>> tight
>> coupling between the GUI and operations on the PCB that it's
>> difficult to
>> see how some things work.
>>
>> Cirilo
>>
>> On Sun, Feb 25, 2018 at 1:20 AM, hauptmech <hauptmech@xxxxxxxxx
>> <mailto:hauptmech@xxxxxxxxx>> wrote:
>> > I took a look at what approaches might work to fix this.
>> >
>> > I looked at removing the RPATH manually, in keeping with manual
>> file
>> > manipulation approach used by the authors of this section of the
>> CMake file.
>> > Shell tools to do this don't appear to be universal and it's not
>> using the
>> > CMake way. So I moved on.
>> >
>> > The approach that looks the most promising to me is to create a
>> second
>> > target for the scripting library with the same sources as
>> pcbnew.kiface.
>> > Then CMakes install Target will remove the RPATH as expected. To
>> reduce the
>> > impact on compile time one could use:
>> > https://cmake.org/Wiki/CMake/Tutorials/Object_Library
>> <https://cmake.org/Wiki/CMake/Tutorials/Object_Library>
>> >
>> > In the CMake file, Dick Hollenbeck mentions a future plan to use
>> the
>> > pcbnew.kiface file directly. Not sure what was involved with that.
>> >
>> > On 25/02/18 10:37, Carsten Schoenert wrote:
>> >>
>> >> Hello Wayne,
>> >>
>> >> Am 24.02.18 um 21:44 schrieb Wayne Stambaugh:
>> >>>
>> >>> Carsten,
>> >>>
>> >>> On 02/24/2018 02:08 PM, Carsten Schoenert wrote:
>> >>>>
>> >>>> Hi,
>> >>>>
>> >>>> I guess it's not intended that the library / shared object
>> _pcbnew.so
>> >>>> build in pcbnew/ set up a RPATH based on the build directory?
>> >>>
>> >>> This is the kicad python scripting shared object which should get
>> >>> installed in the correct python library path. CMake installs
>> it in the
>> >>> correct place on both my Debian and Ubuntu builds so I don't
>> understand
>> >>> what the issue is here.
>> >>
>> >> the build and installation is just fine, the issue is that this
>> file has
>> >> a RUNPATH set to folder there it was compiled. It should have *no*
>> >> RUNPATH.
>> >>
>> >
>> >
>> > _______________________________________________
>> > Mailing list: https://launchpad.net/~kicad-developers
>> <https://launchpad.net/~kicad-developers>
>> > Post to : kicad-developers@xxxxxxxxxxxxxxxxxxx
>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
>> > Unsubscribe : https://launchpad.net/~kicad-developers
>> <https://launchpad.net/~kicad-developers>
>> > More help : https://help.launchpad.net/ListHelp
>> <https://help.launchpad.net/ListHelp>
>>
>>
>>
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~kicad-developers
>> Post to : kicad-developers@xxxxxxxxxxxxxxxxxxx
>> Unsubscribe : https://launchpad.net/~kicad-developers
>> More help : https://help.launchpad.net/ListHelp
>>
>>
> _______________________________________________
> Mailing list: https://launchpad.net/~kicad-developers
> Post to : kicad-developers@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~kicad-developers
> More help : https://help.launchpad.net/ListHelp
>
References