blob: 81a183126cce6c78c9573acfc748d4168a37f0e6 [file] [log] [blame]
Romain Guye4d01122010-06-16 18:44:05 -07001LOCAL_PATH:= $(call my-dir)
2include $(CLEAR_VARS)
Dan Albert88ba3392014-09-11 16:20:16 -07003LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
Romain Guye4d01122010-06-16 18:44:05 -07004
sergeyvaf102be2016-09-09 18:02:07 -07005BUGREPORT_FONT_CACHE_USAGE := true
Chris Craikb565df12015-10-05 13:00:52 -07006
John Reck975591a2016-01-22 16:28:07 -08007# Enables fine-grained GLES error checking
8# If set to true, every GLES call is wrapped & error checked
9# Has moderate overhead
John Reck756619d2016-04-15 11:31:09 -070010HWUI_ENABLE_OPENGL_VALIDATION := false
John Reck975591a2016-01-22 16:28:07 -080011
John Reckd2e72142015-08-17 13:11:43 -070012hwui_src_files := \
13 font/CacheTexture.cpp \
14 font/Font.cpp \
sergeyvdccca442016-03-21 15:38:21 -070015 hwui/Canvas.cpp \
16 hwui/MinikinSkia.cpp \
17 hwui/MinikinUtils.cpp \
18 hwui/PaintImpl.cpp \
sergeyvbad99182016-03-17 11:24:22 -070019 hwui/Typeface.cpp \
John Reckd2e72142015-08-17 13:11:43 -070020 renderstate/Blend.cpp \
21 renderstate/MeshState.cpp \
Chris Craik9fded232015-11-11 16:42:34 -080022 renderstate/OffscreenBufferPool.cpp \
John Reckd2e72142015-08-17 13:11:43 -070023 renderstate/PixelBufferState.cpp \
24 renderstate/RenderState.cpp \
25 renderstate/Scissor.cpp \
26 renderstate/Stencil.cpp \
27 renderstate/TextureState.cpp \
28 renderthread/CanvasContext.cpp \
Stan Iliev768e3932016-07-08 21:34:52 -040029 renderthread/OpenGLPipeline.cpp \
John Reckd2e72142015-08-17 13:11:43 -070030 renderthread/DrawFrameTask.cpp \
31 renderthread/EglManager.cpp \
32 renderthread/RenderProxy.cpp \
33 renderthread/RenderTask.cpp \
34 renderthread/RenderThread.cpp \
35 renderthread/TimeLord.cpp \
36 thread/TaskManager.cpp \
37 utils/Blur.cpp \
38 utils/GLUtils.cpp \
39 utils/LinearAllocator.cpp \
Derek Sollenberger4c5efe92015-07-10 13:56:39 -040040 utils/NinePatchImpl.cpp \
Chris Craik6e6646c2015-09-14 15:54:12 -070041 utils/StringUtils.cpp \
Tom Hudsonb2f5bd22015-10-15 16:41:55 -040042 utils/TestWindowContext.cpp \
Doris Liu804618d2015-11-16 22:48:34 -080043 utils/VectorDrawableUtils.cpp \
John Reckd2e72142015-08-17 13:11:43 -070044 AmbientShadow.cpp \
45 AnimationContext.cpp \
46 Animator.cpp \
47 AnimatorManager.cpp \
48 AssetAtlas.cpp \
Chris Craik5e00c7c2016-07-06 16:10:09 -070049 BakedOpDispatcher.cpp \
50 BakedOpRenderer.cpp \
51 BakedOpState.cpp \
John Reckd2e72142015-08-17 13:11:43 -070052 Caches.cpp \
53 CanvasState.cpp \
54 ClipArea.cpp \
55 DamageAccumulator.cpp \
John Reckd2e72142015-08-17 13:11:43 -070056 DeferredLayerUpdater.cpp \
John Reck704bed02015-11-05 09:22:17 -080057 DeviceInfo.cpp \
John Reckd2e72142015-08-17 13:11:43 -070058 DisplayList.cpp \
John Reckd2e72142015-08-17 13:11:43 -070059 Dither.cpp \
60 Extensions.cpp \
61 FboCache.cpp \
62 FontRenderer.cpp \
Chris Craik5e00c7c2016-07-06 16:10:09 -070063 FrameBuilder.cpp \
John Reckd2e72142015-08-17 13:11:43 -070064 FrameInfo.cpp \
65 FrameInfoVisualizer.cpp \
66 GammaFontRenderer.cpp \
67 GlopBuilder.cpp \
John Reck38e0c322015-11-10 12:19:17 -080068 GpuMemoryTracker.cpp \
John Reckd2e72142015-08-17 13:11:43 -070069 GradientCache.cpp \
70 Image.cpp \
71 Interpolator.cpp \
72 JankTracker.cpp \
73 Layer.cpp \
Chris Craik5e00c7c2016-07-06 16:10:09 -070074 LayerBuilder.cpp \
Chris Craik0b7e8242015-10-28 16:50:44 -070075 LayerUpdateQueue.cpp \
John Reckd2e72142015-08-17 13:11:43 -070076 Matrix.cpp \
Chris Craik5e00c7c2016-07-06 16:10:09 -070077 OpDumper.cpp \
John Reckd2e72142015-08-17 13:11:43 -070078 Patch.cpp \
79 PatchCache.cpp \
80 PathCache.cpp \
Doris Liu30bcf692015-11-04 14:56:24 -080081 PathParser.cpp \
Chris Craik5e00c7c2016-07-06 16:10:09 -070082 PathTessellator.cpp \
John Reckd2e72142015-08-17 13:11:43 -070083 PixelBuffer.cpp \
84 Program.cpp \
85 ProgramCache.cpp \
86 Properties.cpp \
Doris Liu766431a2016-02-04 22:17:11 +000087 PropertyValuesAnimatorSet.cpp \
Chris Craik5e00c7c2016-07-06 16:10:09 -070088 PropertyValuesHolder.cpp \
John Reck10dd0582016-03-31 16:36:16 -070089 Readback.cpp \
Chris Craik5e00c7c2016-07-06 16:10:09 -070090 RecordingCanvas.cpp \
John Reckd2e72142015-08-17 13:11:43 -070091 RenderBufferCache.cpp \
92 RenderNode.cpp \
93 RenderProperties.cpp \
94 ResourceCache.cpp \
95 ShadowTessellator.cpp \
96 SkiaCanvas.cpp \
97 SkiaCanvasProxy.cpp \
98 SkiaShader.cpp \
99 Snapshot.cpp \
100 SpotShadow.cpp \
101 TessellationCache.cpp \
102 TextDropShadowCache.cpp \
103 Texture.cpp \
John Recke248bd12015-08-05 13:53:53 -0700104 TextureCache.cpp \
Doris Liu4bbc2932015-12-01 17:59:40 -0800105 VectorDrawable.cpp \
John Recke248bd12015-08-05 13:53:53 -0700106 protos/hwui.proto
John Reckd2e72142015-08-17 13:11:43 -0700107
Chris Craik8160f202015-12-02 14:50:25 -0800108hwui_test_common_src_files := \
Chris Craik27e58b42015-12-07 10:01:38 -0800109 $(call all-cpp-files-under, tests/common/scenes) \
sergeyv7dc370b2016-06-17 11:21:11 -0700110 tests/common/LeakChecker.cpp \
sergeyv06a62f62016-06-16 14:52:20 -0700111 tests/common/TestListViewSceneBase.cpp \
Chris Craik27e58b42015-12-07 10:01:38 -0800112 tests/common/TestContext.cpp \
113 tests/common/TestScene.cpp \
Chris Craik8160f202015-12-02 14:50:25 -0800114 tests/common/TestUtils.cpp
115
sergeyv8bd5edf2016-05-13 15:03:35 -0700116hwui_debug_common_src_files := \
117 debug/wrap_gles.cpp \
118 debug/DefaultGlesDriver.cpp \
119 debug/GlesErrorCheckWrapper.cpp \
120 debug/GlesDriver.cpp \
121 debug/FatalBaseDriver.cpp \
122 debug/NullGlesDriver.cpp
123
John Reckd2e72142015-08-17 13:11:43 -0700124hwui_cflags := \
125 -DEGL_EGLEXT_PROTOTYPES -DGL_GLEXT_PROTOTYPES \
126 -DATRACE_TAG=ATRACE_TAG_VIEW -DLOG_TAG=\"OpenGLRenderer\" \
John Reck82f5e0c2015-10-22 17:07:45 -0700127 -Wall -Wno-unused-parameter -Wunreachable-code -Werror
John Reckd2e72142015-08-17 13:11:43 -0700128
John Reck2d5b8d72016-07-28 15:36:11 -0700129ifeq ($(TARGET_USES_HWC2),true)
130 hwui_cflags += -DUSE_HWC2
131endif
132
John Reckc90ed752015-11-04 07:39:44 -0800133# GCC false-positives on this warning, and since we -Werror that's
134# a problem
135hwui_cflags += -Wno-free-nonheap-object
136
John Reckf1480762016-07-03 18:28:25 -0700137# clang's warning is broken, see: https://llvm.org/bugs/show_bug.cgi?id=21629
138hwui_cflags += -Wno-missing-braces
139
sergeyvaf102be2016-09-09 18:02:07 -0700140ifeq (true, $(BUGREPORT_FONT_CACHE_USAGE))
141 hwui_src_files += \
142 font/FontCacheHistoryTracker.cpp
143 hwui_cflags += -DBUGREPORT_FONT_CACHE_USAGE
144endif
145
146
John Reckd2e72142015-08-17 13:11:43 -0700147ifndef HWUI_COMPILE_SYMBOLS
148 hwui_cflags += -fvisibility=hidden
149endif
150
151ifdef HWUI_COMPILE_FOR_PERF
152 # TODO: Non-arm?
153 hwui_cflags += -fno-omit-frame-pointer -marm -mapcs
154endif
155
John Recke248bd12015-08-05 13:53:53 -0700156# This has to be lazy-resolved because it depends on the LOCAL_MODULE_CLASS
157# which varies depending on what is being built
158define hwui_proto_include
159$(call local-generated-sources-dir)/proto/$(LOCAL_PATH)
160endef
161
John Reckd2e72142015-08-17 13:11:43 -0700162hwui_c_includes += \
Leon Scroggins III55078072015-07-31 10:38:40 -0400163 external/skia/include/private \
sergeyvdccca442016-03-21 15:38:21 -0700164 external/skia/src/core \
165 external/harfbuzz_ng/src \
166 external/freetype/include
John Reckd2e72142015-08-17 13:11:43 -0700167
John Reckd2e72142015-08-17 13:11:43 -0700168ifneq (false,$(ANDROID_ENABLE_RENDERSCRIPT))
169 hwui_cflags += -DANDROID_ENABLE_RENDERSCRIPT
John Reckd2e72142015-08-17 13:11:43 -0700170 hwui_c_includes += \
171 $(call intermediates-dir-for,STATIC_LIBRARIES,libRS,TARGET,) \
172 frameworks/rs/cpp \
173 frameworks/rs
174endif
175
John Reckd2e72142015-08-17 13:11:43 -0700176# ------------------------
177# static library
178# ------------------------
179
180include $(CLEAR_VARS)
181
182LOCAL_MODULE_CLASS := STATIC_LIBRARIES
183LOCAL_MODULE := libhwui_static
John Reckd2e72142015-08-17 13:11:43 -0700184LOCAL_CFLAGS := $(hwui_cflags)
185LOCAL_SRC_FILES := $(hwui_src_files)
sergeyv8bd5edf2016-05-13 15:03:35 -0700186
187ifeq (true, $(HWUI_ENABLE_OPENGL_VALIDATION))
188 LOCAL_CFLAGS += -include debug/wrap_gles.h
189 LOCAL_CFLAGS += -DDEBUG_OPENGL=3
190 LOCAL_SRC_FILES += $(hwui_debug_common_src_files)
191endif
192
John Recke248bd12015-08-05 13:53:53 -0700193LOCAL_C_INCLUDES := $(hwui_c_includes) $(call hwui_proto_include)
Derek Sollenberger991da312016-02-11 12:13:07 -0500194LOCAL_EXPORT_C_INCLUDE_DIRS := \
195 $(LOCAL_PATH) \
Derek Sollenberger991da312016-02-11 12:13:07 -0500196 $(call hwui_proto_include)
John Reckd2e72142015-08-17 13:11:43 -0700197
Derek Sollenberger991da312016-02-11 12:13:07 -0500198include $(LOCAL_PATH)/hwui_static_deps.mk
John Reckd2e72142015-08-17 13:11:43 -0700199include $(BUILD_STATIC_LIBRARY)
200
201# ------------------------
Chris Craik5fbd9db2015-10-19 11:22:11 -0700202# static library null gpu
203# ------------------------
204
205include $(CLEAR_VARS)
206
207LOCAL_MODULE_CLASS := STATIC_LIBRARIES
sergeyv8bd5edf2016-05-13 15:03:35 -0700208LOCAL_MODULE := libhwui_static_debug
Chris Craik5fbd9db2015-10-19 11:22:11 -0700209LOCAL_CFLAGS := \
210 $(hwui_cflags) \
sergeyv8bd5edf2016-05-13 15:03:35 -0700211 -include debug/wrap_gles.h \
Chris Craik5fbd9db2015-10-19 11:22:11 -0700212 -DHWUI_NULL_GPU
213LOCAL_SRC_FILES := \
214 $(hwui_src_files) \
sergeyv8bd5edf2016-05-13 15:03:35 -0700215 $(hwui_debug_common_src_files) \
216 debug/nullegl.cpp
Chris Craik5fbd9db2015-10-19 11:22:11 -0700217LOCAL_C_INCLUDES := $(hwui_c_includes) $(call hwui_proto_include)
Derek Sollenberger991da312016-02-11 12:13:07 -0500218LOCAL_EXPORT_C_INCLUDE_DIRS := \
219 $(LOCAL_PATH) \
Derek Sollenberger991da312016-02-11 12:13:07 -0500220 $(call hwui_proto_include)
Chris Craik5fbd9db2015-10-19 11:22:11 -0700221
Derek Sollenberger991da312016-02-11 12:13:07 -0500222include $(LOCAL_PATH)/hwui_static_deps.mk
Chris Craik5fbd9db2015-10-19 11:22:11 -0700223include $(BUILD_STATIC_LIBRARY)
224
225# ------------------------
John Reckd2e72142015-08-17 13:11:43 -0700226# shared library
227# ------------------------
228
229include $(CLEAR_VARS)
230
John Recka2732a22014-12-18 13:52:33 -0800231LOCAL_MODULE_CLASS := SHARED_LIBRARIES
232LOCAL_MODULE := libhwui
John Reckd2e72142015-08-17 13:11:43 -0700233LOCAL_WHOLE_STATIC_LIBRARIES := libhwui_static
Derek Sollenberger991da312016-02-11 12:13:07 -0500234LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)
Romain Guye4d01122010-06-16 18:44:05 -0700235
Derek Sollenberger991da312016-02-11 12:13:07 -0500236include $(LOCAL_PATH)/hwui_static_deps.mk
John Recka2732a22014-12-18 13:52:33 -0800237include $(BUILD_SHARED_LIBRARY)
Andreas Gampeedaecc12014-11-10 20:54:07 -0800238
John Reckd2e72142015-08-17 13:11:43 -0700239# ------------------------
240# unit tests
241# ------------------------
242
243include $(CLEAR_VARS)
244
245LOCAL_MODULE := hwui_unit_tests
246LOCAL_MODULE_TAGS := tests
sergeyv8bd5edf2016-05-13 15:03:35 -0700247LOCAL_STATIC_LIBRARIES := libgmock libhwui_static_debug
John Reckdc87c522016-02-29 13:31:18 -0800248LOCAL_SHARED_LIBRARIES := libmemunreachable
Chris Craik98787e62015-11-13 10:55:30 -0800249LOCAL_CFLAGS := \
250 $(hwui_cflags) \
sergeyv8bd5edf2016-05-13 15:03:35 -0700251 -include debug/wrap_gles.h \
Chris Craik98787e62015-11-13 10:55:30 -0800252 -DHWUI_NULL_GPU
Dan Willemsene9c205b2016-03-07 12:58:33 -0800253LOCAL_C_INCLUDES := $(hwui_c_includes)
John Reckd2e72142015-08-17 13:11:43 -0700254
255LOCAL_SRC_FILES += \
Chris Craik8160f202015-12-02 14:50:25 -0800256 $(hwui_test_common_src_files) \
John Reckdc87c522016-02-29 13:31:18 -0800257 tests/unit/main.cpp \
Chris Craik5e00c7c2016-07-06 16:10:09 -0700258 tests/unit/BakedOpDispatcherTests.cpp \
259 tests/unit/BakedOpRendererTests.cpp \
260 tests/unit/BakedOpStateTests.cpp \
Chris Craik8160f202015-12-02 14:50:25 -0800261 tests/unit/CanvasStateTests.cpp \
262 tests/unit/ClipAreaTests.cpp \
263 tests/unit/DamageAccumulatorTests.cpp \
Derek Sollenberger56ad6ec2016-07-22 12:13:32 -0400264 tests/unit/DeferredLayerUpdaterTests.cpp \
Chris Craik8160f202015-12-02 14:50:25 -0800265 tests/unit/DeviceInfoTests.cpp \
266 tests/unit/FatVectorTests.cpp \
Chris Craikf3754a82016-04-19 18:13:21 -0700267 tests/unit/FontRendererTests.cpp \
Chris Craik5e00c7c2016-07-06 16:10:09 -0700268 tests/unit/FrameBuilderTests.cpp \
sergeyvf42bf3e2016-03-11 13:45:15 -0800269 tests/unit/GlopBuilderTests.cpp \
John Reck38e0c322015-11-10 12:19:17 -0800270 tests/unit/GpuMemoryTrackerTests.cpp \
Chris Craik04d46eb2016-04-07 13:51:07 -0700271 tests/unit/GradientCacheTests.cpp \
Chris Craik8160f202015-12-02 14:50:25 -0800272 tests/unit/LayerUpdateQueueTests.cpp \
Chris Craik5e00c7c2016-07-06 16:10:09 -0700273 tests/unit/LeakCheckTests.cpp \
Chris Craik8160f202015-12-02 14:50:25 -0800274 tests/unit/LinearAllocatorTests.cpp \
Chris Craik261725f2016-02-29 12:52:33 -0800275 tests/unit/MatrixTests.cpp \
sergeyv8bd5edf2016-05-13 15:03:35 -0700276 tests/unit/MeshStateTests.cpp \
Chris Craik8160f202015-12-02 14:50:25 -0800277 tests/unit/OffscreenBufferPoolTests.cpp \
Chris Craik5e00c7c2016-07-06 16:10:09 -0700278 tests/unit/OpDumperTests.cpp \
279 tests/unit/RecordingCanvasTests.cpp \
John Reck44b49f02016-03-25 14:29:48 -0700280 tests/unit/RenderNodeTests.cpp \
Chris Craikd4fe4d32016-06-09 16:57:11 -0700281 tests/unit/RenderPropertiesTests.cpp \
Chris Craik07d8d592016-02-03 18:43:04 -0800282 tests/unit/SkiaBehaviorTests.cpp \
Chris Craik5e00c7c2016-07-06 16:10:09 -0700283 tests/unit/SkiaCanvasTests.cpp \
Chris Craik04d46eb2016-04-07 13:51:07 -0700284 tests/unit/SnapshotTests.cpp \
Andres Morales06f5bc72015-12-15 15:21:31 -0800285 tests/unit/StringUtilsTests.cpp \
Chris Craik37413282016-05-12 17:48:51 -0700286 tests/unit/TestUtilsTests.cpp \
Chris Craik07d8d592016-02-03 18:43:04 -0800287 tests/unit/TextDropShadowCacheTests.cpp \
Chris Craik5e00c7c2016-07-06 16:10:09 -0700288 tests/unit/VectorDrawableTests.cpp \
Chris Craikb565df12015-10-05 13:00:52 -0700289
Derek Sollenberger991da312016-02-11 12:13:07 -0500290include $(LOCAL_PATH)/hwui_static_deps.mk
John Reckd2e72142015-08-17 13:11:43 -0700291include $(BUILD_NATIVE_TEST)
292
293# ------------------------
Chris Craik8160f202015-12-02 14:50:25 -0800294# Macro-bench app
John Reckd2e72142015-08-17 13:11:43 -0700295# ------------------------
296
297include $(CLEAR_VARS)
298
299LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)/local/tmp
sergeyv202c10b2016-07-11 17:53:45 -0700300LOCAL_MODULE:= hwuimacro
John Reckd2e72142015-08-17 13:11:43 -0700301LOCAL_MODULE_TAGS := tests
302LOCAL_MULTILIB := both
John Reckd2e72142015-08-17 13:11:43 -0700303LOCAL_CFLAGS := $(hwui_cflags)
Dan Willemsene9c205b2016-03-07 12:58:33 -0800304LOCAL_C_INCLUDES := $(hwui_c_includes)
John Reckd2e72142015-08-17 13:11:43 -0700305
sergeyv8bd5edf2016-05-13 15:03:35 -0700306# set to libhwui_static_debug to skip actual GL commands
Chris Craik5fbd9db2015-10-19 11:22:11 -0700307LOCAL_WHOLE_STATIC_LIBRARIES := libhwui_static
sergeyv7dc370b2016-06-17 11:21:11 -0700308LOCAL_SHARED_LIBRARIES := libmemunreachable
John Reckd2e72142015-08-17 13:11:43 -0700309
310LOCAL_SRC_FILES += \
Chris Craik8160f202015-12-02 14:50:25 -0800311 $(hwui_test_common_src_files) \
Chris Craik8160f202015-12-02 14:50:25 -0800312 tests/macrobench/TestSceneRunner.cpp \
313 tests/macrobench/main.cpp
John Reckd2e72142015-08-17 13:11:43 -0700314
Derek Sollenberger991da312016-02-11 12:13:07 -0500315include $(LOCAL_PATH)/hwui_static_deps.mk
sergeyv202c10b2016-07-11 17:53:45 -0700316include $(BUILD_NATIVE_BENCHMARK)
John Reck4a4bc892015-10-12 07:38:22 -0700317
318# ------------------------
319# Micro-bench app
320# ---------------------
321include $(CLEAR_VARS)
322
John Reck4a4bc892015-10-12 07:38:22 -0700323LOCAL_MODULE:= hwuimicro
324LOCAL_MODULE_TAGS := tests
Chris Craik8d1f2122015-11-24 16:40:09 -0800325LOCAL_CFLAGS := \
326 $(hwui_cflags) \
sergeyv8bd5edf2016-05-13 15:03:35 -0700327 -include debug/wrap_gles.h \
Chris Craik8d1f2122015-11-24 16:40:09 -0800328 -DHWUI_NULL_GPU
John Reck4a4bc892015-10-12 07:38:22 -0700329
John Reck2bee0dd2016-03-09 08:01:37 -0800330LOCAL_C_INCLUDES := $(hwui_c_includes)
John Reck4a4bc892015-10-12 07:38:22 -0700331
sergeyv8bd5edf2016-05-13 15:03:35 -0700332LOCAL_WHOLE_STATIC_LIBRARIES := libhwui_static_debug
sergeyv7dc370b2016-06-17 11:21:11 -0700333LOCAL_SHARED_LIBRARIES := libmemunreachable
John Reck4a4bc892015-10-12 07:38:22 -0700334
335LOCAL_SRC_FILES += \
Chris Craik8160f202015-12-02 14:50:25 -0800336 $(hwui_test_common_src_files) \
John Reck0418afa32016-03-07 13:24:25 -0800337 tests/microbench/main.cpp \
Chris Craik8160f202015-12-02 14:50:25 -0800338 tests/microbench/DisplayListCanvasBench.cpp \
John Reck2c0f9372016-03-28 09:34:35 -0700339 tests/microbench/FontBench.cpp \
Chris Craik5e00c7c2016-07-06 16:10:09 -0700340 tests/microbench/FrameBuilderBench.cpp \
Chris Craik8160f202015-12-02 14:50:25 -0800341 tests/microbench/LinearAllocatorBench.cpp \
342 tests/microbench/PathParserBench.cpp \
Chris Craikb251a2f2016-02-08 19:36:46 +0000343 tests/microbench/ShadowBench.cpp \
344 tests/microbench/TaskManagerBench.cpp
John Reck4a4bc892015-10-12 07:38:22 -0700345
Chris Craik0a24b142015-10-19 17:10:19 -0700346
Derek Sollenberger991da312016-02-11 12:13:07 -0500347include $(LOCAL_PATH)/hwui_static_deps.mk
sergeyv422e2b42016-06-20 15:27:39 -0700348include $(BUILD_NATIVE_BENCHMARK)