Skip to content

Commit

Permalink
ENH: Fixed build errors and inconsistencies for different tools.
Browse files Browse the repository at this point in the history
ENH:  Propogate build options to External Projects.
  • Loading branch information
hjmjohnson committed Oct 25, 2011
1 parent ba02d27 commit 005e0bf
Show file tree
Hide file tree
Showing 6 changed files with 193 additions and 226 deletions.
24 changes: 14 additions & 10 deletions BRAINSTools.cmake
Expand Up @@ -9,7 +9,7 @@ set(CMAKE_MODULE_PATH
${${PROJECT_NAME}_BINARY_DIR}/CMake
${CMAKE_MODULE_PATH}
)

#-----------------------------------------------------------------------------
find_package(ITK REQUIRED)
include(${ITK_USE_FILE})
Expand Down Expand Up @@ -84,25 +84,29 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/BRAINSCommonLib ${CMAKE_CURRENT_
#-----------------------------------------------------------------------------
# Define list of module names
#-----------------------------------------------------------------------------
set(brains_modulenames
set(brains_modulenames
BRAINSFit
BRAINSResample
BRAINSDemonWarp
BRAINSROIAuto
GTRACT
ImageCalculator
)

## Tools that only work with ITKv4
if(ITK_VERSION_MAJOR GREATER 3)
list(APPEND brains_modulenames
BRAINSConstellationDetector
BRAINSABC
BRAINSCut
BRAINSMush
BRAINSMultiModeSegment
if(ITK_VERSION_MAJOR GREATER 3)
list(APPEND brains_modulenames
BRAINSConstellationDetector
BRAINSABC
BRAINSMush
BRAINSMultiModeSegment
BRAINSInitializedControlPoints
BRAINSTransformConvert
# Not yet ready BRAINSCut
)
else(ITK_VERSION_MAJOR GREATER 3)
list(APPEND brains_modulenames
BRAINSDemonWarp # This is only working in ITKv3, ITKv4 does not work correctly, and we are moving to a new program.
)
endif(ITK_VERSION_MAJOR GREATER 3)

#-----------------------------------------------------------------------------
Expand Down
39 changes: 20 additions & 19 deletions Common.cmake
@@ -1,4 +1,24 @@

#-----------------------------------------------------------------------------
# Build option(s)
#-----------------------------------------------------------------------------
option(USE_BRAINSFit "Build BRAINSFit" ON)
option(USE_BRAINSROIAuto "Build BRAINSROIAuto" ON)
option(USE_BRAINSResample "Build BRAINSResample" ON)
option(USE_GTRACT "Build GTRACT" ON)
option(USE_ImageCalculator "Build ImageCalculator" ON)

option(USE_BRAINSABC "Build BRAINSABC (ITKv4)" ON)
option(USE_BRAINSConstellationDetector "Build BRAINSConstellationDetector (ITKv4)" ON)
option(USE_BRAINSMush "Build BRAINSMush (ITKv4)" ON)
option(USE_BRAINSMultiModeSegment "Build BRAINSMultiModeSegment (ITKv4)" ON)
option(USE_BRAINSInitializedControlPoints "Build BRAINSInitializedControlPoints (ITKv4)" ON)
option(USE_BRAINSTransformConvert "Build BRAINSTransformConvert (ITKv4)" ON)

option(USE_BRAINSDemonWarp "Build BRAINSDemonWarp (ITKv3)" ON)
#option(USE_BRAINSCut "Build BRAINSCut (ITKv4)" OFF)


#-----------------------------------------------------------------------------
# Update CMake module path
#------------------------------------------------------------------------------
Expand All @@ -24,25 +44,6 @@ else()
include(CMakeParseArguments)
endif()

#-----------------------------------------------------------------------------
# Build option(s)
#-----------------------------------------------------------------------------
option(USE_GTRACT "Build GTRACT" ON)
option(USE_BRAINSCommonLib "Build BRAINSCommonLib" ON)
option(USE_BRAINSFit "Build BRAINSFit" ON)
option(USE_BRAINSABC "Build BRAINSABC" ON)
option(USE_BRAINSCUT "Build BRAINSCut" OFF)
option(USE_BRAINSROIAuto "Build BRAINSROIAuto" ON)
option(USE_BRAINSDemonWarp "Build BRAINSDemonWarp" ON)
option(USE_BRAINSResample "Build BRAINSResample" ON)
option(USE_BRAINSConstellationDetector "Build BRAINSConstellationDetector" ON)
option(USE_BRAINSMush "Build BRAINSMush" ON)
option(USE_BRAINSMultiModeSegment "Build BRAINSMultiModeSegment" ON)
option(USE_BRAINSInitializedControlPoints "Build BRAINSInitializedControlPoints" ON)
option(USE_BRAINSTransformConvert "Build BRAINSTransformConvert" ON)
option(USE_ImageCalculator "Build ImageCalculator" ON)
#option(USE_BRAINSCut "Build BRAINSCut" OFF)

#-----------------------------------------------------------------------------
# Platform check
#-----------------------------------------------------------------------------
Expand Down
122 changes: 78 additions & 44 deletions SuperBuild.cmake
Expand Up @@ -2,6 +2,10 @@
enable_language(C)
enable_language(CXX)

#-----------------------------------------------------------------------------
enable_testing()
include(CTest)

#-----------------------------------------------------------------------------
include(${CMAKE_CURRENT_SOURCE_DIR}/Common.cmake)

Expand All @@ -16,6 +20,21 @@ endif()

find_package(Git REQUIRED)

#-----------------------------------------------------------------------------
# Enable and setup External project global properties
#-----------------------------------------------------------------------------
include(ExternalProject)
include(SlicerMacroEmptyExternalProject)
include(SlicerMacroCheckExternalProjectDependency)

# Compute -G arg for configuring external projects with the same CMake generator:
if(CMAKE_EXTRA_GENERATOR)
set(gen "${CMAKE_EXTRA_GENERATOR} - ${CMAKE_GENERATOR}")
else()
set(gen "${CMAKE_GENERATOR}")
endif()


#-----------------------------------------------------------------------------
# Superbuild option(s)
#-----------------------------------------------------------------------------
Expand All @@ -33,52 +52,20 @@ CMAKE_DEPENDENT_OPTION(
"BUILD_STYLE_UTILS" OFF
)

#option(BRAINSTools_BUILD_WITH_ITKv4 "Build BRAINS against ITKv4" ON)
#mark_as_advanced(BRAINSTools_BUILD_WITH_ITKv4)
# TODO To explicitly support building against ITKv3, External_ITKv3.cmake should be added.
set(BRAINSTools_BUILD_WITH_ITKv4 ON CACHE BOOL "Build BRAINS against ITKv4")

option(USE_SYSTEM_ITK "Build using an externally defined version of ITK" OFF)
option(USE_SYSTEM_VTK "Build using an externally defined version of VTK" OFF)
option(USE_SYSTEM_SlicerExecutionModel "Build using an externally defined version of SlicerExecutionModel" OFF)

# The following variable could be set at configuration time to customize where the
# CLI executables and libraries are either built or installed.
#BRAINSTools_CLI_LIBRARY_OUTPUT_DIRECTORY
#BRAINSTools_CLI_ARCHIVE_OUTPUT_DIRECTORY
#BRAINSTools_CLI_RUNTIME_OUTPUT_DIRECTORY
#BRAINSTools_CLI_INSTALL_LIBRARY_DESTINATION
#BRAINSTools_CLI_INSTALL_ARCHIVE_DESTINATION
#BRAINSTools_CLI_INSTALL_RUNTIME_DESTINATION

#-----------------------------------------------------------------------------
# Enable and setup External project global properties
#-----------------------------------------------------------------------------
include(ExternalProject)
include(SlicerMacroEmptyExternalProject)
include(SlicerMacroCheckExternalProjectDependency)

# Compute -G arg for configuring external projects with the same CMake generator:
if(CMAKE_EXTRA_GENERATOR)
set(gen "${CMAKE_EXTRA_GENERATOR} - ${CMAKE_GENERATOR}")
else()
set(gen "${CMAKE_GENERATOR}")
endif()

set(ep_common_compiler_args
-DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER}
-DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS}
-DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS}
-DCMAKE_SHARED_LINKER_FLAGS:STRING=${CMAKE_SHARED_LINKER_FLAGS}
-DCMAKE_EXE_LINKER_FLAGS:STRING=${CMAKE_EXE_LINKER_FLAGS}
-DCMAKE_MODULE_LINKER_FLAGS:STRING=${CMAKE_MODULE_LINKER_FLAGS}
)

#------------------------------------------------------------------------------
# BRAINS dependency list
#------------------------------------------------------------------------------
if(BRAINSTools_BUILD_WITH_ITKv4)
option(BUILD_LOCAL_ITKv4 "Build BRAINS against ITKv4" ON)

#option(USE_SYSTEM_ITK "Build using an externally defined version of ITK" OFF)
CMAKE_DEPENDENT_OPTION( USE_SYSTEM_ITK "Build using an externally defined version of ITK" OFF
"NOT BUILD_LOCAL_ITKv4" OFF
)

if(BUILD_LOCAL_ITKv4)
set(ITK_EXTERNAL_NAME "ITKv4")
else()
set(ITK_EXTERNAL_NAME "ITKv3")
Expand Down Expand Up @@ -107,13 +94,62 @@ set(${CMAKE_PROJECT_NAME}_SUPERBUILD_EP_ARGS)
# prefix 'BRAINSTools_' will be prepended if it applied.
set(${CMAKE_PROJECT_NAME}_SUPERBUILD_EP_VARS)

SlicerMacroCheckExternalProjectDependency(BRAINSTools)

#-----------------------------------------------------------------------------
# Additionnal superbuild args
#-----------------------------------------------------------------------------

list(APPEND ${CMAKE_PROJECT_NAME}_SUPERBUILD_EP_VARS
CMAKE_BUILD_TYPE:PATH
MAKECOMMAND:STRING
CMAKE_SKIP_RPATH:BOOL
CMAKE_BUILD_TYPE:STRING
CMAKE_CXX_COMPILER:PATH
CMAKE_CXX_FLAGS_RELEASE:STRING
CMAKE_CXX_FLAGS_DEBUG:STRING
CMAKE_CXX_FLAGS:STRING
CMAKE_C_COMPILER:PATH
CMAKE_C_FLAGS_RELEASE:STRING
CMAKE_C_FLAGS_DEBUG:STRING
CMAKE_C_FLAGS:STRING
CMAKE_SHARED_LINKER_FLAGS:STRING
CMAKE_EXE_LINKER_FLAGS:STRING
CMAKE_MODULE_LINKER_FLAGS:STRING
CMAKE_GENERATOR:STRING
CMAKE_EXTRA_GENERATOR:STRING
CMAKE_INSTALL_PREFIX:PATH
CMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH
CMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH
CMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH
CMAKE_BUNDLE_OUTPUT_DIRECTORY:PATH
CTEST_NEW_FORMAT:BOOL
MEMORYCHECK_COMMAND_OPTIONS:STRING
MEMORYCHECK_COMMAND:PATH
CMAKE_SHARED_LINKER_FLAGS:STRING
CMAKE_EXE_LINKER_FLAGS:STRING
CMAKE_MODULE_LINKER_FLAGS:STRING
SITE:STRING
BUILDNAME:STRING
)

#-----------------------------------------------------------------------------
# Expand build external project args
#-----------------------------------------------------------------------------
set(ep_common_compiler_args "")
FOREACH(arg ${${CMAKE_PROJECT_NAME}_SUPERBUILD_EP_VARS})
STRING(REPLACE ":" ";" varname_and_vartype ${arg})
SET(target_info_list ${target_info_list})
LIST(GET varname_and_vartype 0 _varname)
LIST(GET varname_and_vartype 1 _vartype)
LIST(APPEND ep_common_compiler_args -D${_varname}:${_vartype}=${${_varname}})
ENDFOREACH()
message(STATUS "@@@@@@@@@@@@@ CMAKE ${ep_common_compiler_args}")

SlicerMacroCheckExternalProjectDependency(BRAINSTools)

list(APPEND ${CMAKE_PROJECT_NAME}_SUPERBUILD_EP_VARS
BUILD_EXAMPLES:BOOL
BUILD_TESTING:BOOL

BRAINSTools_CLI_LIBRARY_OUTPUT_DIRECTORY:PATH
BRAINSTools_CLI_ARCHIVE_OUTPUT_DIRECTORY:PATH
Expand All @@ -123,10 +159,8 @@ list(APPEND ${CMAKE_PROJECT_NAME}_SUPERBUILD_EP_VARS
BRAINSTools_CLI_INSTALL_RUNTIME_DESTINATION:PATH

BUILD_TESTING:BOOL
BRAINSTools_BUILD_WITH_ITKv4:BOOL
USE_GTRACT:BOOL
USE_BRAINSFit:BOOL
USE_BRAINSCommonLib:BOOL
USE_BRAINSABC:BOOL
USE_BRAINSCUT:BOOL
USE_BRAINSMush:BOOL
Expand Down Expand Up @@ -181,10 +215,10 @@ ExternalProject_Add(${proj}
BINARY_DIR BRAINSTools-build
CMAKE_GENERATOR ${gen}
CMAKE_ARGS
--no-warn-unused-cli
${CMAKE_OSX_EXTERNAL_PROJECT_ARGS}
${${CMAKE_PROJECT_NAME}_SUPERBUILD_EP_ARGS}
-DBRAINSTools_SUPERBUILD:BOOL=OFF
-DGIT_EXECUTABLE:FILEPATH=${GIT_EXECUTABLE}
INSTALL_COMMAND ""
)

0 comments on commit 005e0bf

Please sign in to comment.