EPSILON_KERNEL ?= 15
ifeq ($(EPSILON_KERNEL),19)
	UPSILON_KERNEL19 = 1
endif

ifeq ($(EPSILON_KERNEL),24)
	UPSILON_KERNEL = 1
endif

ifdef UPSILON_KERNEL
	EPSILON_KERNEL = 24
	CFLAGS += -DUPSILON_KERNEL
	CXXFLAGS += -DUPSILON_KERNEL
endif

ifdef UPSILON_KERNEL19
	EPSILON_KERNEL = 19
	CFLAGS += -DUPSILON_KERNEL19
	CXXFLAGS += -DUPSILON_KERNEL19
endif

GIT := $(shell command -v git 2> /dev/null)
PATCH_LEVEL = NONE
ifdef GIT
  PATCH_LEVEL = $(shell git rev-parse HEAD | head -c 7)
endif

print-git:
	@echo "GIT : $(GIT)"
	@echo "PATCH_LEVEL : $(PATCH_LEVEL)"

SFLAGS += -Iion -Iion/include -DKD_CONFIG_H=1 -Wno-sign-compare -fno-strict-aliasing

ifndef ION_KEYBOARD_LAYOUT
  $(error platform.mak should define ION_KEYBOARD_LAYOUT)
endif
SFLAGS += -Iion/include/ion/keyboard/$(ION_KEYBOARD_LAYOUT)
SFLAGS += -Iion/include/ion/keyboard/
ion_src += ion/src/shared/keyboard/$(ION_KEYBOARD_LAYOUT)/layout_events.cpp

include ion/src/$(PLATFORM)/Makefile
ifeq ($(EPSILON_KERNEL),15)
-include ion/test/$(PLATFORM)/Makefile
endif
include ion/src/shared/tools/Makefile

# We need to work around a GCC bug (concerning versions < 5.1). It is valid in
# C++11 to initialize a character array by providing a string literal (e.g.
# char test[4]= "ab"; is valid and should initialize test to 'a','b',0,0).
# Older versions of GCC are not conformant so we resort to an initializer list.
initializer_list = $(shell echo $(1) | sed  "s/\(.\)/'\1',/g")0
$(call object_for,ion/src/simulator/platform_info.cpp ion/src/device/n0100/platform_info.cpp ion/src/device/n0110/platform_info.cpp ion/src/device/bootloader/platform_info.cpp ion/src/simulator/shared/platform_info.cpp): SFLAGS += -DPATCH_LEVEL="$(call initializer_list,$(PATCH_LEVEL))" -DEPSILON_VERSION="$(call initializer_list,$(EPSILON_VERSION))" -DOMEGA_VERSION="$(call initializer_list,$(OMEGA_VERSION))" -DUPSILON_VERSION="$(call initializer_list,$(UPSILON_VERSION))" -DOMEGA_USERNAME="$(call initializer_list,$(OMEGA_USERNAME))" 


ifeq ($(EPSILON_KERNEL),15)
	ion_src += $(addprefix ion/src/shared/, \
  console_line.cpp \
  crc32_eat_byte.cpp \
  decompress.cpp \
  events.cpp \
  events_keyboard.cpp \
  events_modifier.cpp \
  rtc.cpp \
  stack_position.cpp \
  storage.cpp \
  internal_storage.cpp \
  unicode/utf8_decoder.cpp\
  unicode/utf8_helper.cpp\
)
else
	ion_src += $(addprefix ion/, \
	kernel.cpp \
)
	ion_src += $(addprefix ion/src/shared/, \
  decompress.cpp \
	events.cpp \
  stack_position.cpp \
  storage.cpp \
  internal_storage.cpp \
  unicode/utf8_decoder.cpp\
  unicode/utf8_helper.cpp\
)
endif

ion_src += ion/src/external/lz4/lz4.c

tests_src += $(addprefix ion/test/,\
  crc32.cpp\
  events.cpp\
  keyboard.cpp\
  storage.cpp\
  utf8_decoder.cpp\
  utf8_helper.cpp\
)

ifdef ION_STORAGE_LOG
SFLAGS += -DION_STORAGE_LOG=1
endif
