summaryrefslogtreecommitdiffstats
path: root/keyboards/helix/rev2/local_features.mk
blob: 8c3ac9c3c1d105afcaf821dd30c912159c3a6121 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
#
#  local_features.mk contains post-processing rules for the Helix keyboard.
#
#   Post-processing rules convert keyboard-specific shortcuts (that represent
#   combinations of standard options) into QMK standard options.
#

KEYBOARD_LOCAL_FEATURES_MK :=

define HELIX_CUSTOMISE_MSG
  $(info Helix Spacific Build Options)
  $(info -  OLED_ENABLE          = $(OLED_ENABLE))
  $(info -  OLED_SELECT          = $(OLED_SELECT))
  $(info -  LED_BACK_ENABLE      = $(LED_BACK_ENABLE))
  $(info -  LED_UNDERGLOW_ENABLE = $(LED_UNDERGLOW_ENABLE))
  $(info -  LED_ANIMATIONS       = $(LED_ANIMATIONS))
  $(info -  IOS_DEVICE_ENABLE    = $(IOS_DEVICE_ENABLE))
  $(info )
endef

define HELIX_HELP_MSG
  $(info Helix keyboard convenient command line option)
  $(info -    make HELIX=<options> helix:<keymap>)
  $(info -    option= oled | core-oled | local-oled | no-oled )
  $(info -            back | no-back   | under      | na   | no-ani )
  $(info -             ios | sc        | split-common | scan | verbose)
  $(info -    eg.)
  $(info -      make HELIX=no-oled       helix:<keymap>)
  $(info -      make HELIX=oled,no-back  helix:<keymap>)
  $(info -      make HELIX=oled,under    helix:<keymap>)
  $(info -      make HELIX=oled,back,na  helix:<keymap>)
  $(info -      make HELIX=oled,back,ios helix:<keymap>)
  $(info )
endef

  ifneq ($(strip $(HELIX)),)
    define HELIX_OPTION_PARSE
      # parce 'oled' 'back' 'under' 'ios' etc.
      $(if $(SHOW_PARCE),$(info parse .$1.))  #debug

      ifeq ($(strip $1),help)
        HELP=on
      endif
      ifneq ($(filter nooled no-oled,$(strip $1)),)
        OLED_ENABLE = no
      endif
      ifeq ($(strip $1),oled)
        OLED_ENABLE = yes
      endif
      ifneq ($(filter core-oled core_oled newoled new-oled olednew oled-new,$(strip $1)),)
        OLED_ENABLE = yes
        OLED_SELECT = core
      endif
      ifneq ($(filter local-oled local_oled oldoled old-oled oledold oled-old,$(strip $1)),)
        OLED_ENABLE = yes
        OLED_SELECT = local
      endif
      ifneq ($(filter noback no-back nounder no-under,$(strip $1)),)
        LED_BACK_ENABLE = no
        LED_UNDERGLOW_ENABLE = no
      endif
      ifeq ($(strip $1),back)
        LED_BACK_ENABLE = yes
        LED_UNDERGLOW_ENABLE = no
      endif
      ifeq ($(strip $1),under)
        LED_BACK_ENABLE = no
        LED_UNDERGLOW_ENABLE = yes
      endif
      ifneq ($(filter na no_ani no-ani,$(strip $1)),)
        LED_ANIMATIONS = no
      endif
      ifeq ($(strip $1),ios)
        IOS_DEVICE_ENABLE = yes
      endif
      ifneq ($(filter sc split-common split_common,$(strip $1)),)
        SPLIT_KEYBOARD = yes
      endif
      ifneq ($(filter nosc no-sc no-split-common no-split_common,$(strip $1)),)
        SPLIT_KEYBOARD = no
      endif
      ifeq ($(strip $1),scan)
        # use DEBUG_MATRIX_SCAN_RATE
        # see docs/newbs_testing_debugging.md
        OPT_DEFS +=  -DDEBUG_MATRIX_SCAN_RATE
        CONSOLE_ENABLE = yes
        SHOW_VERBOSE_INFO = yes
      endif
      ifeq ($(strip $1),verbose)
        SHOW_VERBOSE_INFO = yes
      endif
      ifeq ($(strip $1),lto)
        LTO_ENABLE = yes
      endif
      ifneq ($(filter nolto no-lto no_lto,$(strip $1)),)
        LTO_ENABLE = no
      endif
    endef # end of HELIX_OPTION_PARSE

    COMMA=,
    $(eval $(foreach A_OPTION_NAME,$(subst $(COMMA), ,$(HELIX)),  \
        $(call HELIX_OPTION_PARSE,$(A_OPTION_NAME))))

    ifeq ($(strip $(HELP)),on)
       $(eval $(call HELIX_HELP_MSG))
       $(error )
    endif
    SHOW_HELIX_OPTIONS = yes
  endif

ifneq ($(strip $(SPLIT_KEYBOARD)), yes)
  SRC += local_drivers/serial.c
  KEYBOARD_PATHS += $(HELIX_TOP_DIR)/local_drivers

  # A workaround until #7089 is merged.
  #   serial.c must not be compiled with the -lto option.
  #   The current LIB_SRC has a side effect with the -fno-lto option, so use it.
  LIB_SRC += local_drivers/serial.c

  CUSTOM_MATRIX = yes

  SRC += rev2/matrix.c
  SRC += rev2/split_util.c
  SRC += rev2/split_scomm.c
endif

########
# convert Helix-specific options (that represent combinations of standard options)
#   into QMK standard options.

ifneq ($(strip $(HELIX_ROWS)), 4)
  ifneq ($(strip $(HELIX_ROWS)), 5)
    $(error HELIX_ROWS = $(strip $(HELIX_ROWS)) is unexpected value)
  endif
endif
OPT_DEFS += -DHELIX_ROWS=$(strip $(HELIX_ROWS))

ifeq ($(strip $(LED_BACK_ENABLE)), yes)
  RGBLIGHT_ENABLE = yes
  OPT_DEFS += -DRGBLED_BACK
  ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
    $(eval $(call HELIX_CUSTOMISE_MSG))
    $(error LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE both 'yes')
  endif
else ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
  RGBLIGHT_ENABLE = yes
endif

ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
    OPT_DEFS += -DIOS_DEVICE_ENABLE
endif

ifeq ($(strip $(LED_ANIMATIONS)), yes)
    OPT_DEFS += -DLED_ANIMATIONS
endif

ifeq ($(strip $(OLED_ENABLE)), yes)
    ifeq ($(strip $(OLED_SELECT)),core)
        OLED_ENABLE = yes
        OLED_DRIVER = SSD1306
        ifeq ($(strip $(LOCAL_GLCDFONT)), yes)
           OPT_DEFS += -DOLED_FONT_H=\<helixfont.h\>
        else
           OPT_DEFS += -DOLED_FONT_H=\"common/glcdfont.c\"
        endif
    else
        ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
            $(info Helix/rev2: The following combinations are not supported.)
            $(info - SPLIT_KEYBOARD = $(SPLIT_KEYBOARD)) # yes
            $(info - OLED_ENABLE    = $(OLED_ENABLE))    # yes
            $(info - OLED_SELECT    = $(OLED_SELECT))    # local
            $(info Force : OLED_ENABLE = no)
            $(info .)
            OLED_ENABLE = no
        endif
        ifeq ($(strip $(OLED_ENABLE)), yes)
            OLED_ENABLE = no # disable OLED in TOP/common_features.mk
            OLED_LOCAL_ENABLE = yes
            SRC += local_drivers/i2c.c
            SRC += local_drivers/ssd1306.c
            KEYBOARD_PATHS += $(HELIX_TOP_DIR)/local_drivers
            OPT_DEFS += -DOLED_LOCAL_ENABLE
            ifeq ($(strip $(LOCAL_GLCDFONT)), yes)
                OPT_DEFS += -DLOCAL_GLCDFONT
            endif
        endif
    endif
endif

ifneq ($(strip $(SHOW_HELIX_OPTIONS)),)
  $(eval $(call HELIX_CUSTOMISE_MSG))
  ifneq ($(strip $(SHOW_VERBOSE_INFO)),)
     $(info -- RGBLIGHT_ENABLE    = $(RGBLIGHT_ENABLE))
     $(info -- OLED_DRIVER        = $(OLED_DRIVER))
     $(info -- OLED_LOCAL_ENABLE  = $(OLED_LOCAL_ENABLE))
     $(info -- CONSOLE_ENABLE     = $(CONSOLE_ENABLE))
     $(info -- OPT_DEFS           = $(OPT_DEFS))
     $(info -- SPLIT_KEYBOARD     = $(SPLIT_KEYBOARD))
     $(info -- LTO_ENABLE         = $(LTO_ENABLE))
     $(info )
  endif
endif