11require "fileutils"
22
3- ENV [ 'MRUBY_CONFIG' ] = "prk_firmware-cortex-m0plus"
4- PICO_SDK_TAG = "2.0.0"
3+ PICO_SDK_TAG = "2.1.0"
54
6- task :default => :production
5+ def mruby_config
6+ case ENV [ 'BOARD' ] &.downcase
7+ when 'pico2'
8+ 'prk_firmware-cortex-m33'
9+ else
10+ 'prk_firmware-cortex-m0plus'
11+ end
12+ end
13+
14+ def cmake_flags
15+ flags = [ ]
16+ case ENV [ 'BOARD' ] &.downcase
17+ when 'pico2'
18+ flags << "PICO2=yes"
19+ end
20+ flags . join ( " " )
21+ end
22+
23+ def def_board
24+ case ENV [ 'BOARD' ] &.downcase
25+ when 'pico2'
26+ '-DPICO_PLATFORM=rp2350 -DPICO_BOARD=pico2'
27+ else
28+ '-DPICO_PLATFORM=rp2040 -DPICO_BOARD=pico'
29+ end
30+ end
31+
32+ def build_dir
33+ dir = case ENV [ 'BOARD' ] &.downcase
34+ when 'pico2'
35+ "#{ ENV [ 'WITH_KEYMAP_DIR' ] } build_pico2"
36+ else
37+ "#{ ENV [ 'WITH_KEYMAP_DIR' ] } build_pico"
38+ end
39+ FileUtils . mkdir_p dir
40+ dir
41+ end
42+
43+ task :default do
44+ puts "Specify a task:"
45+ puts " rake pico # build for RP2040"
46+ puts " rake pico2 # build for RP2350"
47+ end
748
849task :setup do
950 sh "bundle install"
1556
1657task :all => [ :libmruby , :cmake , :build ]
1758
18- desc "build debug (you may need to rake clean before this)"
19- task :debug do
59+ desc "build debug for RP2040 (you may need to rake clean before this)"
60+ task :pico_debug do
2061 ENV [ 'PICORUBY_DEBUG' ] = '1'
62+ ENV [ 'BOARD' ] = 'pico'
2163 ENV [ 'CMAKE_BUILD_TYPE' ] = 'Debug'
2264 Rake ::Task [ :all ] . invoke
2365end
2466
25- desc "build production"
26- task :production do
67+ desc "build production for RP2040"
68+ task :pico do
69+ ENV [ 'BOARD' ] = 'pico'
2770 ENV [ 'CMAKE_BUILD_TYPE' ] = 'Release'
2871 Rake ::Task [ :all ] . invoke
2972end
3073
31- desc "build PRK Firmware inclusive of keymap.rb (without mass storage)"
32- task :build_with_keymap , [ 'keyboard_name' ] do |_t , args |
74+ desc "build debug for RP2350 (you may need to rake clean before this)"
75+ task :pico2_debug do
76+ ENV [ 'PICORUBY_DEBUG' ] = '1'
77+ ENV [ 'BOARD' ] = 'pico2'
78+ ENV [ 'CMAKE_BUILD_TYPE' ] = 'Debug'
79+ Rake ::Task [ :all ] . invoke
80+ end
81+
82+ desc "build production for RP2350"
83+ task :pico2 do
84+ ENV [ 'BOARD' ] = 'pico2'
85+ ENV [ 'CMAKE_BUILD_TYPE' ] = 'Release'
86+ Rake ::Task [ :all ] . invoke
87+ end
88+
89+ def with_keymap ( board )
90+ ENV [ 'BOARD' ] = board
91+ ENV [ 'PICORUBY_NO_MSC' ] = '1'
92+ ENV [ 'WITH_KEYMAP_DIR' ] = "keyboards/#{ args . keyboard_name } /"
93+ Rake ::Task [ :all ] . invoke
94+ end
95+
96+ desc "build PRK Firmware inclusive of keymap.rb (without mass storage) for RP2040"
97+ task :build_with_keymap_pico , [ 'keyboard_name' ] do |_t , args |
3398 unless args . keyboard_name
3499 raise "Argument `keyboard_name` missing.\n Usage: rake build_with_keymap[prk_meishi2]"
35100 end
36- dir = "keyboards/#{ args . keyboard_name } "
37- FileUtils . mkdir_p "#{ dir } /build"
38- ENV [ 'PICORUBY_NO_MSC' ] = '1'
39- ENV [ 'PRK_BUILD_DIR' ] = "#{ dir } /"
40- Rake ::Task [ :all ] . invoke
101+ with_keymap ( 'pico' )
102+ end
103+
104+ desc "build PRK Firmware inclusive of keymap.rb (without mass storage) for RP2350 (Pico2)"
105+ task :build_with_keymap_pico2 , [ 'keyboard_name' ] do |_t , args |
106+ unless args . keyboard_name
107+ raise "Argument `keyboard_name` missing.\n Usage: rake build_with_keymap[prk_meishi2]"
108+ end
109+ with_keymap ( 'pico2' )
41110end
42111
43- desc "build production with SQLite3 and SD card"
112+ desc "build production with SQLite3 and SD card for RP2350 (Pico2) "
44113task :sqlite3 do
45114 ENV [ 'PICORUBY_SQLITE3' ] = '1'
46115 ENV [ 'PICORUBY_SD_CARD' ] = '1'
47116 ENV [ 'PICORUBY_MSC_SD' ] = '1'
117+ ENV [ 'BOARD' ] = 'pico2'
48118 Rake ::Task [ :all ] . invoke
49119end
50120
55125task :libmruby => "lib/picoruby" do
56126 FileUtils . cd "lib/picoruby" do
57127 sh "MRUBY_CONFIG=default rake test"
58- sh "rake"
128+ sh "MRUBY_CONFIG= #{ mruby_config } rake"
59129 end
60130end
61131
62132task :cmake do
63- sh "cmake -DCMAKE_BUILD_TYPE=#{ ENV [ 'CMAKE_BUILD_TYPE' ] } -B #{ ENV [ 'PRK_BUILD_DIR' ] } build "
133+ sh "#{ cmake_flags } cmake #{ def_board } -DCMAKE_BUILD_TYPE=#{ ENV [ 'CMAKE_BUILD_TYPE' ] } -B #{ build_dir } "
64134end
65135
66136task :check_pico_sdk => :check_pico_sdk_path do
85155
86156desc "build without cmake preparation"
87157task :build => :check_pico_sdk do
88- sh "cmake --build #{ ENV [ 'PRK_BUILD_DIR' ] } build"
89- end
90-
91- desc "clean built that includes keymap"
92- task :clean_with_keymap , [ 'keyboard_name' ] do |_t , args |
93- unless args . keyboard_name
94- raise "Argument `keyboard_name` missing.\n Usage: rake clean_with_keymap[prk_meishi2]"
95- end
96- FileUtils . rm_r Dir . glob ( "keyboards/#{ args . keyboard_name } /build/*" )
158+ sh "cmake --build #{ build_dir } "
97159end
98160
99161desc "clean built"
100162task :clean do
101163 FileUtils . cd "lib/picoruby" do
102164 sh "rake clean"
103165 end
104- FileUtils . cd "build" do
105- FileUtils . rm_rf Dir . glob ( "prk_firmware-*.*" )
106- end
107- begin
108- sh "cmake --build build --target clean"
109- rescue => e
110- puts "Ignoring an error: #{ e . message } "
166+ %(build_pico build_pico2) . each do |dir |
167+ FileUtils . cd dir do
168+ FileUtils . rm_rf Dir . glob ( "prk_firmware-*.*" )
169+ end
170+ begin
171+ sh "cmake --build #{ dir } --target clean"
172+ rescue => e
173+ puts "Ignoring an error: #{ e . message } "
174+ end
111175 end
112176end
113177
@@ -116,8 +180,10 @@ task :deep_clean do
116180 FileUtils . cd "lib/picoruby" do
117181 sh "rake deep_clean"
118182 end
119- FileUtils . cd "build" do
120- FileUtils . rm_rf Dir . glob ( "*" )
183+ %(build_pico build_pico2) . each do |dir |
184+ FileUtils . cd dir do
185+ FileUtils . rm_rf Dir . glob ( "*" )
186+ end
121187 end
122188end
123189
0 commit comments