diff --git a/lib/import/import-libaunit.mk b/lib/import/import-libaunit.mk
new file mode 100644
index 0000000..4bf687b
--- /dev/null
+++ b/lib/import/import-libaunit.mk
@@ -0,0 +1,15 @@
+AUNIT_SRC_DIR := $(call select_from_ports,aunit)/aunit-gpl-2018-src
+
+INC_DIR += $(AUNIT_SRC_DIR)/include/aunit/framework
+INC_DIR += $(AUNIT_SRC_DIR)/include/aunit/framework/staticmemory
+INC_DIR += $(AUNIT_SRC_DIR)/include/aunit/framework/nocalendar
+INC_DIR += $(AUNIT_SRC_DIR)/include/aunit/framework/fullexception
+INC_DIR += $(AUNIT_SRC_DIR)/include/aunit/containers
+INC_DIR += $(AUNIT_SRC_DIR)/include/aunit/reporters
+
+REP_INC_DIR += include/aunit/framework
+REP_INC_DIR += include/aunit/framework/staticmemory
+REP_INC_DIR += include/aunit/framework/nocalendar
+REP_INC_DIR += include/aunit/framework/fullexception
+REP_INC_DIR += include/aunit/containers
+REP_INC_DIR += include/aunit/reporters
diff --git a/lib/mk/libaunit.mk b/lib/mk/libaunit.mk
new file mode 100644
index 0000000..0821feb
--- /dev/null
+++ b/lib/mk/libaunit.mk
@@ -0,0 +1,43 @@
+include $(REP_DIR)/lib/import/import-libaunit.mk
+
+SRC_ADS += \
+ aunit-memory.ads \
+ aunit-memory-utils.ads \
+ aunit-options.ads \
+ aunit-reporter.ads \
+ aunit-tests.ads \
+ ada_containers.ads \
+
+SRC_ADB += \
+ aunit.adb \
+ aunit-assertions.adb \
+ aunit-run.adb \
+ aunit-simple_test_cases.adb \
+ aunit-test_caller.adb \
+ aunit-test_cases.adb \
+ aunit-test_filters.adb \
+ aunit-test_fixtures.adb \
+ aunit-test_results.adb \
+ aunit-test_suites.adb \
+ aunit-reporter-text.adb \
+ ada_containers-aunit_lists.adb \
+ aunit-time_measure.adb
+
+SOURCES = $(AUNIT_SRC_DIR)/include/aunit
+
+vpath %.adb $(SOURCES)/framework
+vpath %.adb $(SOURCES)/framework/staticmemory
+vpath %.adb $(SOURCES)/framework/nocalendar
+vpath %.adb $(SOURCES)/framework/fullexception
+vpath %.adb $(SOURCES)/containers
+vpath %.adb $(SOURCES)/reporters
+
+vpath %.ads $(SOURCES)/framework
+vpath %.ads $(SOURCES)/framework/staticmemory
+vpath %.ads $(SOURCES)/framework/nocalendar
+vpath %.ads $(SOURCES)/framework/fullexception
+vpath %.ads $(SOURCES)/containers
+vpath %.ads $(SOURCES)/reporters
+
+LIBS += ada
+SHARED_LIB = yes
diff --git a/lib/symbols/libaunit b/lib/symbols/libaunit
new file mode 100644
index 0000000..c5d9ffc
--- /dev/null
+++ b/lib/symbols/libaunit
@@ -0,0 +1,576 @@
+ada_containers_E D 2
+ada_containers__aunit_lists_E D 2
+aunit_E D 2
+aunit__assertions_E D 2
+aunit__assertions__C144s D 4
+aunit__assertions__R3s D 8
+aunit__assertions__TtestCFD T
+aunit__assertions___elabb T
+aunit__assertions___elabs T
+aunit__assertions___master B 4
+aunit__assertions___size__2 T
+aunit__assertions__assert T
+aunit__assertions__assert__2 T
+aunit__assertions__assert__3 T
+aunit__assertions__assert_exception T
+aunit__assertions__assertion_error D 40
+aunit__assertions__assertion_errorE R 33
+aunit__assertions__clear_failures T
+aunit__assertions__copy_id T
+aunit__assertions__current_id D 4
+aunit__assertions__current_test T
+aunit__assertions__failure_eltIP T
+aunit__assertions__failure_lists__Oeq__2 T
+aunit__assertions__failure_lists__TlistCFD T
+aunit__assertions__failure_lists___size T
+aunit__assertions__failure_lists__append T
+aunit__assertions__failure_lists__clear T
+aunit__assertions__failure_lists__contains T
+aunit__assertions__failure_lists__cursorIP T
+aunit__assertions__failure_lists__delete T
+aunit__assertions__failure_lists__delete_first T
+aunit__assertions__failure_lists__delete_last T
+aunit__assertions__failure_lists__element T
+aunit__assertions__failure_lists__find T
+aunit__assertions__failure_lists__first T
+aunit__assertions__failure_lists__first_element T
+aunit__assertions__failure_lists__has_element T
+aunit__assertions__failure_lists__insert T
+aunit__assertions__failure_lists__insert__2 T
+aunit__assertions__failure_lists__insert__3 T
+aunit__assertions__failure_lists__insert_internal T
+aunit__assertions__failure_lists__is_empty T
+aunit__assertions__failure_lists__iterate T
+aunit__assertions__failure_lists__last T
+aunit__assertions__failure_lists__last_element T
+aunit__assertions__failure_lists__length T
+aunit__assertions__failure_lists__listB26s D 80
+aunit__assertions__failure_lists__listDF T
+aunit__assertions__failure_lists__listE22s R 36
+aunit__assertions__failure_lists__listH23s D 8
+aunit__assertions__failure_lists__listIP T
+aunit__assertions__failure_lists__listP D 8
+aunit__assertions__failure_lists__listR24s D 8
+aunit__assertions__failure_lists__listR24s___UNC D 80
+aunit__assertions__failure_lists__listT D 248
+aunit__assertions__failure_lists__listY D 8
+aunit__assertions__failure_lists__move T
+aunit__assertions__failure_lists__new_node_type T
+aunit__assertions__failure_lists__new_node_type__2 T
+aunit__assertions__failure_lists__next T
+aunit__assertions__failure_lists__next__2 T
+aunit__assertions__failure_lists__no_element R 16
+aunit__assertions__failure_lists__node_typeIP T
+aunit__assertions__failure_lists__prepend T
+aunit__assertions__failure_lists__previous T
+aunit__assertions__failure_lists__previous__2 T
+aunit__assertions__failure_lists__replace_element T
+aunit__assertions__failure_lists__reverse_elements T
+aunit__assertions__failure_lists__reverse_find T
+aunit__assertions__failure_lists__splice T
+aunit__assertions__failure_lists__splice__2 T
+aunit__assertions__failure_lists__splice__3 T
+aunit__assertions__failure_lists__swap T
+aunit__assertions__failure_lists__swap_links T
+aunit__assertions__failure_lists__vet T
+aunit__assertions__failures B 40
+aunit__assertions__finalize_spec T
+aunit__assertions__first_failure T
+aunit__assertions__get_failure T
+aunit__assertions__has_failure T
+aunit__assertions__has_failures T
+aunit__assertions__init_test T
+aunit__assertions__next T
+aunit__assertions__null_id R 4
+aunit__assertions__set_current_test T
+aunit__assertions__testB102s D 88
+aunit__assertions__testDF__2 T
+aunit__assertions__testE98s R 22
+aunit__assertions__testH99s D 8
+aunit__assertions__testIP T
+aunit__assertions__testP D 8
+aunit__assertions__testR100s D 8
+aunit__assertions__testR100s___UNC D 80
+aunit__assertions__testT D 64
+aunit__assertions__testY D 8
+aunit__assertions__test_accessFM B 56
+aunit__assertions__the_current_test D 8
+aunit__boundsIP T
+aunit__fat_pointerIP T
+aunit__format T
+aunit__last_chance_handler_E T
+aunit__memory_E D 2
+aunit__memory__aunit_alloc T
+aunit__memory__aunit_free T
+aunit__memory__mem B 102400
+aunit__memory__memoryIP T
+aunit__memory__top D 8
+aunit__memory__utils_E D 2
+aunit__message_alloc T
+aunit__message_free T
+aunit__options_E D 2
+aunit__options__aunit_optionsIP T
+aunit__options__default_options R 16
+aunit__reporter_E D 2
+aunit__reporter__Oeq T
+aunit__reporter__TreporterCFD T
+aunit__reporter___assign T
+aunit__reporter___elabs T
+aunit__reporter___size T
+aunit__reporter__reporterB29s D 80
+aunit__reporter__reporterDA T
+aunit__reporter__reporterDF T
+aunit__reporter__reporterE25s R 24
+aunit__reporter__reporterH26s D 8
+aunit__reporter__reporterIP T
+aunit__reporter__reporterP D 8
+aunit__reporter__reporterR27s D 8
+aunit__reporter__reporterR27s___UNC D 80
+aunit__reporter__reporterSO T
+aunit__reporter__reporterSR T
+aunit__reporter__reporterSW T
+aunit__reporter__reporterT D 40
+aunit__reporter__reporterY D 8
+aunit__reporter__text_E D 2
+aunit__reporter__text__Oeq__2 T
+aunit__reporter__text__Ttext_reporterCFD T
+aunit__reporter__text___assign__2 T
+aunit__reporter__text___elabs T
+aunit__reporter__text___size__2 T
+aunit__reporter__text__ansi_def R 4
+aunit__reporter__text__ansi_green R 8
+aunit__reporter__text__ansi_purple R 8
+aunit__reporter__text__ansi_red R 8
+aunit__reporter__text__dump_result_list T
+aunit__reporter__text__finalize_spec T
+aunit__reporter__text__indent T
+aunit__reporter__text__put_measure T
+aunit__reporter__text__report T
+aunit__reporter__text__report_error_tests T
+aunit__reporter__text__report_fail_tests T
+aunit__reporter__text__report_ok_tests T
+aunit__reporter__text__report_test T
+aunit__reporter__text__set_use_ansi_colors T
+aunit__reporter__text__text_reporterB33s D 88
+aunit__reporter__text__text_reporterDA__2 T
+aunit__reporter__text__text_reporterDF__2 T
+aunit__reporter__text__text_reporterE29s R 34
+aunit__reporter__text__text_reporterH30s D 8
+aunit__reporter__text__text_reporterIP T
+aunit__reporter__text__text_reporterP D 8
+aunit__reporter__text__text_reporterR31s D 8
+aunit__reporter__text__text_reporterR31s___UNC D 80
+aunit__reporter__text__text_reporterSI__2 T
+aunit__reporter__text__text_reporterSO__2 T
+aunit__reporter__text__text_reporterSR__2 T
+aunit__reporter__text__text_reporterSW__2 T
+aunit__reporter__text__text_reporterT D 72
+aunit__reporter__text__text_reporterY D 8
+aunit__run_E D 2
+aunit__run__run T
+aunit__simple_test_cases_E D 2
+aunit__simple_test_cases__C58s D 4
+aunit__simple_test_cases__Ttest_caseCFD T
+aunit__simple_test_cases___elabs T
+aunit__simple_test_cases___master B 4
+aunit__simple_test_cases___size__2 T
+aunit__simple_test_cases__finalize_spec T
+aunit__simple_test_cases__routine_name T
+aunit__simple_test_cases__run T
+aunit__simple_test_cases__run_routine T
+aunit__simple_test_cases__set_up T
+aunit__simple_test_cases__tear_down T
+aunit__simple_test_cases__test_caseB24s D 96
+aunit__simple_test_cases__test_caseDF__2 T
+aunit__simple_test_cases__test_caseE20s R 34
+aunit__simple_test_cases__test_caseH21s D 8
+aunit__simple_test_cases__test_caseIP T
+aunit__simple_test_cases__test_caseP D 8
+aunit__simple_test_cases__test_caseR22s D 8
+aunit__simple_test_cases__test_caseR22s___UNC D 80
+aunit__simple_test_cases__test_caseT D 112
+aunit__simple_test_cases__test_caseY D 8
+aunit__simple_test_cases__test_case_accessFM B 56
+aunit__statusN R 4
+aunit__statusS R 16
+aunit__test_caller_E D 2
+aunit__test_cases_E D 2
+aunit__test_cases__C236s D 4
+aunit__test_cases__Ttest_caseCFD T
+aunit__test_cases___elabs T
+aunit__test_cases___master B 4
+aunit__test_cases___size__2 T
+aunit__test_cases__add_routine T
+aunit__test_cases__failure_lists__Oeq__2 T
+aunit__test_cases__failure_lists__TlistCFD T
+aunit__test_cases__failure_lists___size T
+aunit__test_cases__failure_lists__append T
+aunit__test_cases__failure_lists__clear T
+aunit__test_cases__failure_lists__contains T
+aunit__test_cases__failure_lists__cursorIP T
+aunit__test_cases__failure_lists__delete T
+aunit__test_cases__failure_lists__delete_first T
+aunit__test_cases__failure_lists__delete_last T
+aunit__test_cases__failure_lists__element T
+aunit__test_cases__failure_lists__find T
+aunit__test_cases__failure_lists__first T
+aunit__test_cases__failure_lists__first_element T
+aunit__test_cases__failure_lists__has_element T
+aunit__test_cases__failure_lists__insert T
+aunit__test_cases__failure_lists__insert__2 T
+aunit__test_cases__failure_lists__insert__3 T
+aunit__test_cases__failure_lists__insert_internal T
+aunit__test_cases__failure_lists__is_empty T
+aunit__test_cases__failure_lists__iterate T
+aunit__test_cases__failure_lists__last T
+aunit__test_cases__failure_lists__last_element T
+aunit__test_cases__failure_lists__length T
+aunit__test_cases__failure_lists__listB99s D 80
+aunit__test_cases__failure_lists__listDF T
+aunit__test_cases__failure_lists__listE95s R 36
+aunit__test_cases__failure_lists__listH96s D 8
+aunit__test_cases__failure_lists__listIP T
+aunit__test_cases__failure_lists__listP D 8
+aunit__test_cases__failure_lists__listR97s D 8
+aunit__test_cases__failure_lists__listR97s___UNC D 80
+aunit__test_cases__failure_lists__listT D 248
+aunit__test_cases__failure_lists__listY D 8
+aunit__test_cases__failure_lists__move T
+aunit__test_cases__failure_lists__new_node_type T
+aunit__test_cases__failure_lists__new_node_type__2 T
+aunit__test_cases__failure_lists__next T
+aunit__test_cases__failure_lists__next__2 T
+aunit__test_cases__failure_lists__no_element R 16
+aunit__test_cases__failure_lists__node_typeIP T
+aunit__test_cases__failure_lists__prepend T
+aunit__test_cases__failure_lists__previous T
+aunit__test_cases__failure_lists__previous__2 T
+aunit__test_cases__failure_lists__replace_element T
+aunit__test_cases__failure_lists__reverse_elements T
+aunit__test_cases__failure_lists__reverse_find T
+aunit__test_cases__failure_lists__splice T
+aunit__test_cases__failure_lists__splice__2 T
+aunit__test_cases__failure_lists__splice__3 T
+aunit__test_cases__failure_lists__swap T
+aunit__test_cases__failure_lists__swap_links T
+aunit__test_cases__failure_lists__vet T
+aunit__test_cases__finalize_spec T
+aunit__test_cases__registration__register_routine T
+aunit__test_cases__registration__routine_count T
+aunit__test_cases__routine_lists__Oeq__2 T
+aunit__test_cases__routine_lists__TlistCFD T
+aunit__test_cases__routine_lists___size T
+aunit__test_cases__routine_lists__append T
+aunit__test_cases__routine_lists__clear T
+aunit__test_cases__routine_lists__contains T
+aunit__test_cases__routine_lists__cursorIP T
+aunit__test_cases__routine_lists__delete T
+aunit__test_cases__routine_lists__delete_first T
+aunit__test_cases__routine_lists__delete_last T
+aunit__test_cases__routine_lists__element T
+aunit__test_cases__routine_lists__find T
+aunit__test_cases__routine_lists__first T
+aunit__test_cases__routine_lists__first_element T
+aunit__test_cases__routine_lists__has_element T
+aunit__test_cases__routine_lists__insert T
+aunit__test_cases__routine_lists__insert__2 T
+aunit__test_cases__routine_lists__insert__3 T
+aunit__test_cases__routine_lists__insert_internal T
+aunit__test_cases__routine_lists__is_empty T
+aunit__test_cases__routine_lists__iterate T
+aunit__test_cases__routine_lists__last T
+aunit__test_cases__routine_lists__last_element T
+aunit__test_cases__routine_lists__length T
+aunit__test_cases__routine_lists__listB25s D 80
+aunit__test_cases__routine_lists__listDF T
+aunit__test_cases__routine_lists__listE21s R 36
+aunit__test_cases__routine_lists__listH22s D 8
+aunit__test_cases__routine_lists__listIP T
+aunit__test_cases__routine_lists__listP D 8
+aunit__test_cases__routine_lists__listR23s D 8
+aunit__test_cases__routine_lists__listR23s___UNC D 80
+aunit__test_cases__routine_lists__listT D 248
+aunit__test_cases__routine_lists__listY D 8
+aunit__test_cases__routine_lists__move T
+aunit__test_cases__routine_lists__new_node_type T
+aunit__test_cases__routine_lists__new_node_type__2 T
+aunit__test_cases__routine_lists__next T
+aunit__test_cases__routine_lists__next__2 T
+aunit__test_cases__routine_lists__no_element R 16
+aunit__test_cases__routine_lists__node_typeIP T
+aunit__test_cases__routine_lists__prepend T
+aunit__test_cases__routine_lists__previous T
+aunit__test_cases__routine_lists__previous__2 T
+aunit__test_cases__routine_lists__replace_element T
+aunit__test_cases__routine_lists__reverse_elements T
+aunit__test_cases__routine_lists__reverse_find T
+aunit__test_cases__routine_lists__splice T
+aunit__test_cases__routine_lists__splice__2 T
+aunit__test_cases__routine_lists__splice__3 T
+aunit__test_cases__routine_lists__swap T
+aunit__test_cases__routine_lists__swap_links T
+aunit__test_cases__routine_lists__vet T
+aunit__test_cases__routine_name T
+aunit__test_cases__routine_specIP T
+aunit__test_cases__run T
+aunit__test_cases__run_test T
+aunit__test_cases__set_up_case T
+aunit__test_cases__tear_down_case T
+aunit__test_cases__test_caseB175s D 104
+aunit__test_cases__test_caseDF__2 T
+aunit__test_cases__test_caseE171s R 27
+aunit__test_cases__test_caseH172s D 8
+aunit__test_cases__test_caseIP T
+aunit__test_cases__test_caseP D 8
+aunit__test_cases__test_caseR173s D 8
+aunit__test_cases__test_caseR173s___UNC D 80
+aunit__test_cases__test_caseT D 136
+aunit__test_cases__test_caseY D 8
+aunit__test_cases__test_case_accessFM B 56
+aunit__test_filters_E D 2
+aunit__test_filters__C94s D 4
+aunit__test_filters__Tname_filterCFD T
+aunit__test_filters__Ttest_filterCFD T
+aunit__test_filters___elabs T
+aunit__test_filters___master B 4
+aunit__test_filters___size T
+aunit__test_filters___size__3 T
+aunit__test_filters__finalize_spec T
+aunit__test_filters__is_active__2 T
+aunit__test_filters__name_filterB60s D 88
+aunit__test_filters__name_filterDF__2 T
+aunit__test_filters__name_filterE56s R 31
+aunit__test_filters__name_filterH57s D 8
+aunit__test_filters__name_filterIP T
+aunit__test_filters__name_filterP D 8
+aunit__test_filters__name_filterR58s D 8
+aunit__test_filters__name_filterR58s___UNC D 80
+aunit__test_filters__name_filterT D 48
+aunit__test_filters__name_filterY D 8
+aunit__test_filters__set_name T
+aunit__test_filters__test_filterB35s D 80
+aunit__test_filters__test_filterDF T
+aunit__test_filters__test_filterE31s R 31
+aunit__test_filters__test_filterH32s D 8
+aunit__test_filters__test_filterIP T
+aunit__test_filters__test_filterP D 8
+aunit__test_filters__test_filterR33s D 8
+aunit__test_filters__test_filterR33s___UNC D 80
+aunit__test_filters__test_filterT D 40
+aunit__test_filters__test_filterY D 8
+aunit__test_filters__test_filter_accessFM B 56
+aunit__test_fixtures_E D 2
+aunit__test_fixtures__Ttest_fixtureCFD T
+aunit__test_fixtures___elabs T
+aunit__test_fixtures___size__2 T
+aunit__test_fixtures__finalize_spec T
+aunit__test_fixtures__set_up T
+aunit__test_fixtures__tear_down T
+aunit__test_fixtures__test_fixtureB18s D 96
+aunit__test_fixtures__test_fixtureDF__2 T
+aunit__test_fixtures__test_fixtureE14s R 33
+aunit__test_fixtures__test_fixtureH15s D 8
+aunit__test_fixtures__test_fixtureIP T
+aunit__test_fixtures__test_fixtureP D 8
+aunit__test_fixtures__test_fixtureR16s D 8
+aunit__test_fixtures__test_fixtureR16s___UNC D 80
+aunit__test_fixtures__test_fixtureT D 80
+aunit__test_fixtures__test_fixtureY D 8
+aunit__test_results_E D 2
+aunit__test_results__TresultCFD T
+aunit__test_results___elabs T
+aunit__test_results___size T
+aunit__test_results__add_error T
+aunit__test_results__add_failure T
+aunit__test_results__add_success T
+aunit__test_results__alloc_error T
+aunit__test_results__alloc_failure T
+aunit__test_results__clear T
+aunit__test_results__e_count B 4
+aunit__test_results__elapsed T
+aunit__test_results__error_count T
+aunit__test_results__errors T
+aunit__test_results__f_count B 4
+aunit__test_results__failure_count T
+aunit__test_results__failures T
+aunit__test_results__finalize_spec T
+aunit__test_results__is_error T
+aunit__test_results__is_failure T
+aunit__test_results__is_success T
+aunit__test_results__iterate_error T
+aunit__test_results__iterate_failure T
+aunit__test_results__iterate_success T
+aunit__test_results__resultB95s D 80
+aunit__test_results__resultDF T
+aunit__test_results__resultE91s R 26
+aunit__test_results__resultH92s D 8
+aunit__test_results__resultIP T
+aunit__test_results__resultP D 8
+aunit__test_results__resultR93s D 8
+aunit__test_results__resultR93s___UNC D 80
+aunit__test_results__resultT D 152
+aunit__test_results__resultY D 8
+aunit__test_results__result_lists__Oeq__2 T
+aunit__test_results__result_lists__TlistCFD T
+aunit__test_results__result_lists___size T
+aunit__test_results__result_lists__append T
+aunit__test_results__result_lists__clear T
+aunit__test_results__result_lists__contains T
+aunit__test_results__result_lists__cursorIP T
+aunit__test_results__result_lists__delete T
+aunit__test_results__result_lists__delete_first T
+aunit__test_results__result_lists__delete_last T
+aunit__test_results__result_lists__element T
+aunit__test_results__result_lists__find T
+aunit__test_results__result_lists__first T
+aunit__test_results__result_lists__first_element T
+aunit__test_results__result_lists__has_element T
+aunit__test_results__result_lists__insert T
+aunit__test_results__result_lists__insert__2 T
+aunit__test_results__result_lists__insert__3 T
+aunit__test_results__result_lists__insert_internal T
+aunit__test_results__result_lists__is_empty T
+aunit__test_results__result_lists__iterate T
+aunit__test_results__result_lists__last T
+aunit__test_results__result_lists__last_element T
+aunit__test_results__result_lists__length T
+aunit__test_results__result_lists__listB22s D 80
+aunit__test_results__result_lists__listDF T
+aunit__test_results__result_lists__listE18s R 37
+aunit__test_results__result_lists__listH19s D 8
+aunit__test_results__result_lists__listIP T
+aunit__test_results__result_lists__listP D 8
+aunit__test_results__result_lists__listR20s D 8
+aunit__test_results__result_lists__listR20s___UNC D 80
+aunit__test_results__result_lists__listT D 248
+aunit__test_results__result_lists__listY D 8
+aunit__test_results__result_lists__move T
+aunit__test_results__result_lists__new_node_type T
+aunit__test_results__result_lists__new_node_type__2 T
+aunit__test_results__result_lists__next T
+aunit__test_results__result_lists__next__2 T
+aunit__test_results__result_lists__no_element R 16
+aunit__test_results__result_lists__node_typeIP T
+aunit__test_results__result_lists__prepend T
+aunit__test_results__result_lists__previous T
+aunit__test_results__result_lists__previous__2 T
+aunit__test_results__result_lists__replace_element T
+aunit__test_results__result_lists__reverse_elements T
+aunit__test_results__result_lists__reverse_find T
+aunit__test_results__result_lists__splice T
+aunit__test_results__result_lists__splice__2 T
+aunit__test_results__result_lists__splice__3 T
+aunit__test_results__result_lists__swap T
+aunit__test_results__result_lists__swap_links T
+aunit__test_results__result_lists__vet T
+aunit__test_results__s_count B 4
+aunit__test_results__set_elapsed T
+aunit__test_results__start_test T
+aunit__test_results__success_count T
+aunit__test_results__successes T
+aunit__test_results__successful T
+aunit__test_results__test_count T
+aunit__test_results__test_errorIP T
+aunit__test_results__test_failureIP T
+aunit__test_results__test_resultIP T
+aunit__test_suites_E D 2
+aunit__test_suites__C159s D 4
+aunit__test_suites__Ttest_suiteCFD T
+aunit__test_suites___elabs T
+aunit__test_suites___master B 4
+aunit__test_suites___size__2 T
+aunit__test_suites__access_test_suiteFM B 56
+aunit__test_suites__add_test T
+aunit__test_suites__add_test__2 T
+aunit__test_suites__finalize_spec T
+aunit__test_suites__new_suite T
+aunit__test_suites__run T
+aunit__test_suites__test_lists__Oeq__2 T
+aunit__test_suites__test_lists__TlistCFD T
+aunit__test_suites__test_lists___size T
+aunit__test_suites__test_lists__append T
+aunit__test_suites__test_lists__clear T
+aunit__test_suites__test_lists__contains T
+aunit__test_suites__test_lists__cursorIP T
+aunit__test_suites__test_lists__delete T
+aunit__test_suites__test_lists__delete_first T
+aunit__test_suites__test_lists__delete_last T
+aunit__test_suites__test_lists__element T
+aunit__test_suites__test_lists__find T
+aunit__test_suites__test_lists__first T
+aunit__test_suites__test_lists__first_element T
+aunit__test_suites__test_lists__has_element T
+aunit__test_suites__test_lists__insert T
+aunit__test_suites__test_lists__insert__2 T
+aunit__test_suites__test_lists__insert__3 T
+aunit__test_suites__test_lists__insert_internal T
+aunit__test_suites__test_lists__is_empty T
+aunit__test_suites__test_lists__iterate T
+aunit__test_suites__test_lists__last T
+aunit__test_suites__test_lists__last_element T
+aunit__test_suites__test_lists__length T
+aunit__test_suites__test_lists__listB48s D 80
+aunit__test_suites__test_lists__listDF T
+aunit__test_suites__test_lists__listE44s R 34
+aunit__test_suites__test_lists__listH45s D 8
+aunit__test_suites__test_lists__listIP T
+aunit__test_suites__test_lists__listP D 8
+aunit__test_suites__test_lists__listR46s D 8
+aunit__test_suites__test_lists__listR46s___UNC D 80
+aunit__test_suites__test_lists__listT D 248
+aunit__test_suites__test_lists__listY D 8
+aunit__test_suites__test_lists__move T
+aunit__test_suites__test_lists__new_node_type T
+aunit__test_suites__test_lists__new_node_type__2 T
+aunit__test_suites__test_lists__next T
+aunit__test_suites__test_lists__next__2 T
+aunit__test_suites__test_lists__no_element R 16
+aunit__test_suites__test_lists__node_typeIP T
+aunit__test_suites__test_lists__prepend T
+aunit__test_suites__test_lists__previous T
+aunit__test_suites__test_lists__previous__2 T
+aunit__test_suites__test_lists__replace_element T
+aunit__test_suites__test_lists__reverse_elements T
+aunit__test_suites__test_lists__reverse_find T
+aunit__test_suites__test_lists__splice T
+aunit__test_suites__test_lists__splice__2 T
+aunit__test_suites__test_lists__splice__3 T
+aunit__test_suites__test_lists__swap T
+aunit__test_suites__test_lists__swap_links T
+aunit__test_suites__test_lists__vet T
+aunit__test_suites__test_suiteB120s D 88
+aunit__test_suites__test_suiteDF__2 T
+aunit__test_suites__test_suiteE116s R 29
+aunit__test_suites__test_suiteH117s D 8
+aunit__test_suites__test_suiteIP T
+aunit__test_suites__test_suiteP D 8
+aunit__test_suites__test_suiteR118s D 8
+aunit__test_suites__test_suiteR118s___UNC D 80
+aunit__test_suites__test_suiteT D 40
+aunit__test_suites__test_suiteY D 8
+aunit__test_suites__test_suite_elementD2 T
+aunit__test_suites__test_suite_elementD3 T
+aunit__test_suites__test_suite_elementEQ T
+aunit__test_suites__test_suite_elementIP T
+aunit__test_suites__test_suite_elt_kindN R 4
+aunit__test_suites__test_suite_elt_kindS R 16
+aunit__tests_E D 2
+aunit__tests__C47s D 4
+aunit__tests__TtestCFD T
+aunit__tests___elabs T
+aunit__tests___master B 4
+aunit__tests___size T
+aunit__tests__finalize_spec T
+aunit__tests__testB21s D 80
+aunit__tests__testDF T
+aunit__tests__testE17s R 17
+aunit__tests__testH18s D 8
+aunit__tests__testIP T
+aunit__tests__testP D 8
+aunit__tests__testR19s D 8
+aunit__tests__testR19s___UNC D 80
+aunit__tests__testT D 40
+aunit__tests__testY D 8
+aunit__tests__test_accessFM B 56
+aunit__time_measure_E T
+aunit__time_measure___elabs T
diff --git a/ports/aunit.hash b/ports/aunit.hash
new file mode 100644
index 0000000..14191fe
--- /dev/null
+++ b/ports/aunit.hash
@@ -0,0 +1 @@
+ccaffe90d69cf2059f99275c6e359919303b7b5d
diff --git a/ports/aunit.port b/ports/aunit.port
new file mode 100644
index 0000000..51418a0
--- /dev/null
+++ b/ports/aunit.port
@@ -0,0 +1,8 @@
+LICENSE := GPLv3
+VERSION := gpl-2018-20180524
+DOWNLOADS := aunit.archive
+
+URL(aunit) := http://mirrors.cdn.adacore.com/art/5b0819e0c7a447df26c27ab3
+NAME(aunit) := aunit-gpl-2018-20180524-src.tar.gz
+SHA(aunit) := 4a1a1ee4b5b8535b675c4bc6767a22ecc26cf83a3c3c25749053d63b7604a07f
+DIR(aunit) := aunit-gpl-2018-src
diff --git a/run/test-aunit.run b/run/test-aunit.run
new file mode 100644
index 0000000..8967706
--- /dev/null
+++ b/run/test-aunit.run
@@ -0,0 +1,48 @@
+build "core init server/log_terminal test/aunit"
+
+create_boot_directory
+
+install_config {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+build_boot_image {
+ core init test-aunit log_terminal
+ libc.lib.so vfs.lib.so ld.lib.so ada.lib.so libaunit.lib.so
+}
+
+append qemu_args " -nographic "
+
+run_genode_until "child \"test-aunit\" exited with exit value 0" 20
diff --git a/src/test/aunit/startup.cc b/src/test/aunit/startup.cc
new file mode 100644
index 0000000..813d3ff
--- /dev/null
+++ b/src/test/aunit/startup.cc
@@ -0,0 +1,14 @@
+/*
+ * \brief Startup code for Ada main program
+ * \author Alexander Senier
+ * \date 2019-01-03
+ */
+
+#include
+
+extern "C" void _ada_aunit_harness(void);
+
+void Ada::Component::main()
+{
+ _ada_aunit_harness();
+}
diff --git a/src/test/aunit/target.mk b/src/test/aunit/target.mk
new file mode 100644
index 0000000..fd51d7d
--- /dev/null
+++ b/src/test/aunit/target.mk
@@ -0,0 +1,22 @@
+TARGET = test-aunit
+
+SRC_ADB = \
+ aunit_harness.adb \
+ aunit_suite.adb \
+ aunit-test_cases-tests.adb \
+ aunit-test_cases-tests_fixtures.adb \
+ aunit-test_cases-tests-suite.adb \
+ aunit-test_fixtures-tests.adb \
+ aunit-test_fixtures-tests_fixtures.adb \
+ aunit-test_fixtures-tests-suite.adb \
+ aunit-test_suites-tests.adb \
+ aunit-test_suites-tests_fixtures.adb \
+ aunit-test_suites-tests-suite.adb
+
+SRC_CC = startup.cc
+LIBS = libc ada libaunit
+
+AUNIT_DIR = $(call select_from_ports,aunit)/aunit-gpl-2018-src
+
+INC_DIR += $(AUNIT_DIR)/test/src $(PRG_DIR)
+vpath %.adb $(AUNIT_DIR)/test/src