SimpleITK/Design And Proposals/SIP 001: Difference between revisions

From KitwarePublic
Jump to navigationJump to search
(Created page with "{{ DISPLAYTITLE: My Page Title Here }} JIRA Issue: [https://issues.itk.org/jira/browse/SIMPLEITK-669 SIMPLEITK-669] = SIP 000 - SimpleITK Improvement Proposals Template =...")
 
 
(19 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{ DISPLAYTITLE: My Page Title Here }}
{{ DISPLAYTITLE: My Page Title Here }}


JIRA Issue: [https://issues.itk.org/jira/browse/SIMPLEITK-669  SIMPLEITK-669]
JIRA Issue: [https://issues.itk.org/jira/browse/SIMPLEITK-652 SIMPLEITK-652]


= SIP 000 - SimpleITK Improvement Proposals Template =
JIRA Issue: [https://issues.itk.org/jira/browse/SIMPLEITK-649 SIMPLEITK-649]
 
 
= SIP 001 - Refactor Superbuild for More External Projects =


== Introduction ==
== Introduction ==


The purpose of the SIP is to provide a useful template for formatting and structure for additional SIP.  
We wish to add additional external projects to the SimpleITK Superbuild to reduce inclusion of third party packages in the source tree, as well as to improve the build time and build configuration flexibility. This is based on the requests of system packagers to utilize the system packages and reduce the third-party libraries included in SimpleITK's source code. Additionally, we wish to build the SimpleITK common libraries once and then wrapping them multiple times. Specifically, we want to be able to wrap for multiple versions of Python without having to do a "dirty" build in the same build directory.
 


==== Comments ====
==== Comments ====
Line 14: Line 16:
Brad Lowekamp: ''Comments can be made here''
Brad Lowekamp: ''Comments can be made here''


== Remove Third-Parties Libraries ==
The third-party libraries of Lua and GTest are currently included in the SimpleITK source tree and distribution. These libraries shall be removed from the repository and become a dependency for the actual ( not Superbuild ) SimpleITK project.
The requirements for Lua may come as a surprise to users who are currently not using the Superbuild. These users need to be encouraged to switch to using the SimpleITK Superbuild to provide the required dependencies. The Slicer 3D external project [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_SimpleITK.cmake script] for SimpleITK should serve as an example of how a build can be updated to use the Superbuild.
Note: This item is already completed. JIRA Issue: [https://issues.itk.org/jira/browse/SIMPLEITK-652 SIMPLEITK-652]


== Section 1 ==
==== Comments ====


The comments should be at the end of the sections's subsections.
== Refactoring Wrapping for Modularity ==


=== Sub Section A ===
The goal is to refactor the SWIG wrapping so that each wrapped language can be an independent project built against the SimpleITK project. Doing so will enable the Swig wrapping to occur either in the Superbuild level or in an additional project dependent on SimpleITK common libraries. This would enable wrapping for multiple versions of a language.


More details here.
The current CMake options for the wrapped languages will be maintained as part of the SimpleITK project, but it will not be enabled by default when the Superbuild is used. Instead they will be separate Superbuild projects.


This new layout matches the installation and packaging pieces needed for system packagers because it has a clear separation of the SimpleITK common libraries and the wrapped languages. This separation enables the use of CMake/CPack install facility to install and package the SimpleITK common libraries and headers. The wrappings will have to be install and packaged according to the language conventions.


==== Comments ====
Another benefit of this separation is that it should make work on a specific language more efficient. The SimpleITK common libraries will not need to be rebuilt at the wrapping level.


== Section 2 ==
This work be done in three phases:


# Refractor the current ''Wrapping'' directory so that each language is in a separate sub-directory.
# Revise each language so that it is a CMake "Project" which will depend on and ''use'' SimpleITK.
# Refactor the code generation of the SimpleITK tests so that it can be used by the Wrapped language projects.
# Update the Superbuild to disable wrapping in the SimpleITK project but create additional external projects for each wrapped language.


==== Comments ====
==== Comments ====

Latest revision as of 19:42, 29 October 2015


JIRA Issue: SIMPLEITK-652

JIRA Issue: SIMPLEITK-649


SIP 001 - Refactor Superbuild for More External Projects

Introduction

We wish to add additional external projects to the SimpleITK Superbuild to reduce inclusion of third party packages in the source tree, as well as to improve the build time and build configuration flexibility. This is based on the requests of system packagers to utilize the system packages and reduce the third-party libraries included in SimpleITK's source code. Additionally, we wish to build the SimpleITK common libraries once and then wrapping them multiple times. Specifically, we want to be able to wrap for multiple versions of Python without having to do a "dirty" build in the same build directory.

Comments

Brad Lowekamp: Comments can be made here

Remove Third-Parties Libraries

The third-party libraries of Lua and GTest are currently included in the SimpleITK source tree and distribution. These libraries shall be removed from the repository and become a dependency for the actual ( not Superbuild ) SimpleITK project.

The requirements for Lua may come as a surprise to users who are currently not using the Superbuild. These users need to be encouraged to switch to using the SimpleITK Superbuild to provide the required dependencies. The Slicer 3D external project script for SimpleITK should serve as an example of how a build can be updated to use the Superbuild.

Note: This item is already completed. JIRA Issue: SIMPLEITK-652

Comments

Refactoring Wrapping for Modularity

The goal is to refactor the SWIG wrapping so that each wrapped language can be an independent project built against the SimpleITK project. Doing so will enable the Swig wrapping to occur either in the Superbuild level or in an additional project dependent on SimpleITK common libraries. This would enable wrapping for multiple versions of a language.

The current CMake options for the wrapped languages will be maintained as part of the SimpleITK project, but it will not be enabled by default when the Superbuild is used. Instead they will be separate Superbuild projects.

This new layout matches the installation and packaging pieces needed for system packagers because it has a clear separation of the SimpleITK common libraries and the wrapped languages. This separation enables the use of CMake/CPack install facility to install and package the SimpleITK common libraries and headers. The wrappings will have to be install and packaged according to the language conventions.

Another benefit of this separation is that it should make work on a specific language more efficient. The SimpleITK common libraries will not need to be rebuilt at the wrapping level.

This work be done in three phases:

  1. Refractor the current Wrapping directory so that each language is in a separate sub-directory.
  2. Revise each language so that it is a CMake "Project" which will depend on and use SimpleITK.
  3. Refactor the code generation of the SimpleITK tests so that it can be used by the Wrapped language projects.
  4. Update the Superbuild to disable wrapping in the SimpleITK project but create additional external projects for each wrapped language.

Comments