cmake: add enables for other components

Change-Id: I813b6ecb9d8fb00247464e93cf48d76bcfea0a29
Signed-off-by: Markus Metzger <markus.t.metzger@intel.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e8b49f1..6d3d693 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -63,6 +63,7 @@
 endif (FEATURE_THREADS)
 
 option(DEVBUILD "Enable compiler warnings and turn them into errors." OFF)
+option(PTUNIT "Enable ptunit, a unit test system and libipt unit tests")
 
 include_directories(
   include
@@ -194,4 +195,7 @@
 endif (CMAKE_HOST_UNIX)
 
 add_subdirectory(libipt)
-add_subdirectory(ptunit)
+
+if (PTUNIT)
+  add_subdirectory(ptunit)
+endif (PTUNIT)
diff --git a/doc/howto_build.md b/doc/howto_build.md
index 8cc594f..f8fcb04 100755
--- a/doc/howto_build.md
+++ b/doc/howto_build.md
@@ -41,6 +41,17 @@
 components, or optional build variants.
 
 
+### Optional Components
+
+By default, only the decoder library is built.  Other components can be enabled
+by setting the respective cmake variable to ON.
+
+The following optional components are availble:
+
+    PTUNIT             A simple unit test framework.
+                       A collection of unit tests for libipt.
+
+
 ### Optional Features
 
 Features are enabled by setting the respective FEATURE_<name> cmake variable.
diff --git a/libipt/CMakeLists.txt b/libipt/CMakeLists.txt
index c09a182..060a6ee 100644
--- a/libipt/CMakeLists.txt
+++ b/libipt/CMakeLists.txt
@@ -105,128 +105,131 @@
 )
 
 
-add_executable(ptunit-last_ip
-  test/src/ptunit-last_ip.c
-  src/pt_last_ip.c
-)
+if (PTUNIT)
+  add_executable(ptunit-last_ip
+    test/src/ptunit-last_ip.c
+    src/pt_last_ip.c
+  )
 
-add_executable(ptunit-tnt_cache
-  test/src/ptunit-tnt_cache.c
-  src/pt_tnt_cache.c
-)
+  add_executable(ptunit-tnt_cache
+    test/src/ptunit-tnt_cache.c
+    src/pt_tnt_cache.c
+  )
 
-add_executable(ptunit-query
-  test/src/ptunit-query.c
-  src/pt_encoder.c
-  src/pt_last_ip.c
-  src/pt_packet_decoder.c
-  src/pt_sync.c
-  src/pt_tnt_cache.c
-  src/pt_time.c
-  src/pt_event_queue.c
-  src/pt_query_decoder.c
-  src/pt_packet.c
-  src/pt_decoder_function.c
-  src/pt_packet_decoder.c
-  src/pt_config.c
-  ${LIBIPT_SECTION_FILES}
-  src/pt_time.c
-)
+  add_executable(ptunit-query
+    test/src/ptunit-query.c
+    src/pt_encoder.c
+    src/pt_last_ip.c
+    src/pt_packet_decoder.c
+    src/pt_sync.c
+    src/pt_tnt_cache.c
+    src/pt_time.c
+    src/pt_event_queue.c
+    src/pt_query_decoder.c
+    src/pt_packet.c
+    src/pt_decoder_function.c
+    src/pt_packet_decoder.c
+    src/pt_config.c
+    ${LIBIPT_SECTION_FILES}
+    src/pt_time.c
+  )
 
-add_executable(ptunit-cpp
-  test/src/ptunit-cpp.cpp
-)
+  add_executable(ptunit-cpp
+    test/src/ptunit-cpp.cpp
+  )
 
-add_executable(ptunit-retstack
-  test/src/ptunit-retstack.c
-  src/pt_retstack.c
-)
+  add_executable(ptunit-retstack
+    test/src/ptunit-retstack.c
+    src/pt_retstack.c
+  )
 
-add_executable(ptunit-section
-  test/src/ptunit-section.c
-  ${LIBIPT_SECTION_FILES}
-)
+  add_executable(ptunit-section
+    test/src/ptunit-section.c
+    ${LIBIPT_SECTION_FILES}
+  )
 
-add_executable(ptunit-image
-  test/src/ptunit-image.c
-  src/pt_mapped_section.c
-  src/pt_asid.c
-  src/pt_image.c
-)
+  add_executable(ptunit-image
+    test/src/ptunit-image.c
+    src/pt_mapped_section.c
+    src/pt_asid.c
+    src/pt_image.c
+  )
 
-add_executable(ptunit-ild
-  test/src/ptunit-ild.c
-  src/pt_ild.c
-)
+  add_executable(ptunit-ild
+    test/src/ptunit-ild.c
+    src/pt_ild.c
+  )
 
-add_executable(ptunit-cpu
-  test/src/ptunit-cpu.c
-  src/pt_cpu.c
-)
+  add_executable(ptunit-cpu
+    test/src/ptunit-cpu.c
+    src/pt_cpu.c
+  )
 
-add_executable(ptunit-time
-  test/src/ptunit-time.c
-  src/pt_time.c
-)
+  add_executable(ptunit-time
+    test/src/ptunit-time.c
+    src/pt_time.c
+  )
 
-add_executable(ptunit-mapped_section
-  test/src/ptunit-mapped_section.c
-  src/pt_mapped_section.c
-  src/pt_asid.c
-)
+  add_executable(ptunit-mapped_section
+    test/src/ptunit-mapped_section.c
+    src/pt_mapped_section.c
+    src/pt_asid.c
+  )
 
-add_executable(ptunit-asid
-  test/src/ptunit-asid.c
-  src/pt_asid.c
-)
+  add_executable(ptunit-asid
+    test/src/ptunit-asid.c
+    src/pt_asid.c
+  )
 
-add_executable(ptunit-event_queue
-  test/src/ptunit-event_queue.c
-  src/pt_event_queue.c
-)
+  add_executable(ptunit-event_queue
+    test/src/ptunit-event_queue.c
+    src/pt_event_queue.c
+  )
 
-add_executable(ptunit-packet
-  test/src/ptunit-packet.c
-  src/pt_encoder.c
-  src/pt_packet_decoder.c
-  src/pt_sync.c
-  src/pt_packet.c
-  src/pt_decoder_function.c
-  src/pt_config.c
-)
+  add_executable(ptunit-packet
+    test/src/ptunit-packet.c
+    src/pt_encoder.c
+    src/pt_packet_decoder.c
+    src/pt_sync.c
+    src/pt_packet.c
+    src/pt_decoder_function.c
+    src/pt_config.c
+  )
 
-add_executable(ptunit-sync
-  test/src/ptunit-sync.c
-  src/pt_sync.c
-  src/pt_packet.c
-)
+  add_executable(ptunit-sync
+    test/src/ptunit-sync.c
+    src/pt_sync.c
+    src/pt_packet.c
+  )
 
-add_executable(ptunit-fetch
-  test/src/ptunit-fetch.c
-  src/pt_decoder_function.c
-  src/pt_encoder.c
-  src/pt_config.c
-)
+  add_executable(ptunit-fetch
+    test/src/ptunit-fetch.c
+    src/pt_decoder_function.c
+    src/pt_encoder.c
+    src/pt_config.c
+  )
 
-add_executable(ptunit-config
-  test/src/ptunit-config.c
-  src/pt_config.c
-)
+  add_executable(ptunit-config
+    test/src/ptunit-config.c
+    src/pt_config.c
+  )
 
-target_link_libraries(ptunit-last_ip ptunit)
-target_link_libraries(ptunit-tnt_cache ptunit)
-target_link_libraries(ptunit-query ptunit)
-target_link_libraries(ptunit-cpp ptunit libipt)
-target_link_libraries(ptunit-retstack ptunit)
-target_link_libraries(ptunit-section ptunit)
-target_link_libraries(ptunit-image ptunit)
-target_link_libraries(ptunit-ild ptunit)
-target_link_libraries(ptunit-cpu ptunit)
-target_link_libraries(ptunit-time ptunit)
-target_link_libraries(ptunit-mapped_section ptunit)
-target_link_libraries(ptunit-asid ptunit)
-target_link_libraries(ptunit-event_queue ptunit)
-target_link_libraries(ptunit-packet ptunit)
-target_link_libraries(ptunit-sync ptunit)
-target_link_libraries(ptunit-fetch ptunit)
-target_link_libraries(ptunit-config ptunit)
+  target_link_libraries(ptunit-last_ip ptunit)
+  target_link_libraries(ptunit-tnt_cache ptunit)
+  target_link_libraries(ptunit-query ptunit)
+  target_link_libraries(ptunit-cpp ptunit libipt)
+  target_link_libraries(ptunit-retstack ptunit)
+  target_link_libraries(ptunit-section ptunit)
+  target_link_libraries(ptunit-image ptunit)
+  target_link_libraries(ptunit-ild ptunit)
+  target_link_libraries(ptunit-cpu ptunit)
+  target_link_libraries(ptunit-time ptunit)
+  target_link_libraries(ptunit-mapped_section ptunit)
+  target_link_libraries(ptunit-asid ptunit)
+  target_link_libraries(ptunit-event_queue ptunit)
+  target_link_libraries(ptunit-packet ptunit)
+  target_link_libraries(ptunit-sync ptunit)
+  target_link_libraries(ptunit-fetch ptunit)
+  target_link_libraries(ptunit-config ptunit)
+
+endif (PTUNIT)