fix: pack flash code

This commit is contained in:
roy01
2026-05-25 10:08:31 +08:00
parent 97abc73cc3
commit 0071cd6dc0
2192 changed files with 147956 additions and 0 deletions
Binary file not shown.
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
./openocd/linux/2025.10/bin/openocd -s openocd/linux/2025.10/scripts -f openocd/linux/2025.10/scripts/target/pec930.cfg -c "program pec930.hex verify reset exit"
@@ -0,0 +1,2 @@
.\openocd\win\2025.10\bin\openocd -s openocd\win\2025.10\scripts -f openocd\win\2025.10\scripts\target\pec930.cfg -c "program pec930.hex verify reset exit"
pause
@@ -0,0 +1,347 @@
:040000000200713257
:01000B0032C2
:0100130032BA
:01001B0032B2
:0100230032AA
:01002B0032A2
:01003300329A
:01003B003292
:01004300328A
:01004B003282
:01005300327A
:01005B003272
:01006300326A
:03006B000201107F
:0300CA0002006EC3
:03006E000201018B
:1000CD00907F937404F0907F9C7495F0907F96745C
:1000DD0090F0907F94E4F0907F9D747FF0907F97E7
:1000ED00E4F0907F957440F0907F9E7442F0907F85
:1000FD0098E4F0221200CD1204ADD2AF1208E090B8
:10010D00000022C021C0E0C0F0C082C083C007C083
:10011D0006C005C004C003C002C001C000C0D07538
:10012D00D000AF9174EF5FF59112040C907FAB741A
:10013D0001F0907FB4E04402F0D0D0D000D001D0D7
:10014D0002D003D004D005D006D007D083D082D002
:10015D00F0D0E0D02132323232323232323232C04D
:10016D00E0C082C083C007C0D075D000D201AF916E
:10017D0074EF5FF591907FA97404F0D0D0D007D0C3
:10018D0083D082D0E032C0E0C082C083C007C0D02F
:10019D0075D000D200AF9174EF5FF591907FAA7486
:1001AD0004F0D0D0D007D083D082D0E032323232BA
:1001BD0032323232323232AF82747F5FFE24F850E7
:1001CD0003020278EE240A83F582EE240C83F58374
:1001DD00E473EFF306192C3F52650101020202028E
:1001ED000202907FB422EF30E7067DB67E7F800459
:1001FD007DC67E7F8D828E8322EF30E7067DB87EB1
:10020D007F80047DC87E7F8D828E8322EF30E7064E
:10021D007DBA7E7F80047DCA7E7F8D828E8322EFA4
:10022D0030E7067DBC7E7F80047DCC7E7F8D828E07
:10023D008322EF30E7067DBE7E7F80047DCE7E7FFC
:10024D008D828E8322EF30E7067DC07E7F80047D18
:10025D00D07E7F8D828E8322EF30E7067EC27F7F38
:10026D0080047ED27F7F8E828F832290000022AF0A
:10027D008274105FFE74075F4206907FD7EEF074B4
:10028D00204EF022907FE8E0C322907FE8E0FF60EF
:10029D0005BF0246800A907FB4E0FF4401F0803A2A
:1002AD00907FEAE0FEA3E0FF4E7027907FECE0FE2A
:1002BD00A3E08E821201C4AE82AF83EE4F7002C3F3
:1002CD00228E828F83E0FD5305FE8E828F83EDF0AB
:1002DD008008907FB4E0FF4401F0D322907FE8E0E6
:1002ED00FF6005BF02468010907FEAE0FEA3E0FFAD
:1002FD00BE0239BF0036D322907FEAE0FEA3E0FFB5
:10030D004E7027907FECE0FEA3E08E821201C4AE0A
:10031D0082AF83EE4F7002C3228E828F83E0FD4346
:10032D0005018E828F83EDF08002C322D322907F50
:10033D00EAE0A3E0FF907FEAE0FDA3E07E00BF01CD
:10034D0002800DBF02028021BF030280340203EC44
:10035D007ED37F138F06907FD4EEF07ED37F137FF5
:10036D0000907FD5EEF00203EE7EE57F138F0690B1
:10037D007FD4EEF07EE57F137F00907FD5EEF08089
:10038D0060907FECE0FEA3E0FF4E70187E057F14B9
:10039D008F06907FD4EEF07E057F147F00907FD581
:1003AD00EEF0803D907FECE0FEA3E0FFBE092EBF96
:1003BD00042BED1475F002A42459F582741435F054
:1003CD00F583E493FEA3E493FF8E048F058D0490D3
:1003DD007FD4ECF07F00907FD5EEF08004C322C374
:1003ED0022D32275828212027C75820212027C90C7
:1003FD007FB87402F0907FC8E4F0907FC9F022902E
:10040D007FE9E0FF24F3500122EFF5F0240B83F593
:10041D0082E5F0241183F583E473414F5D655D72D0
:10042D007B73889899A9AC0404040404040404049F
:10043D0004040404120291500122907FB4E044019F
:10044D00F022120297500122907FB4E04401F02275
:10045D00907FB4E04401F0221202E94042907FB453
:10046D00E04401F02222907FB4E04401F022120317
:10047D003B402C907FB4E04401F0229013EAE493CA
:10048D00907F00F0907FB57401F022229013F0E47C
:10049D0093907F00F0907FB57401F0221203F0224B
:1004AD00907FDE7404F0907FDF7404F0907FE0E4C1
:1004BD00F0907FE1F0907FA17401F0907FAFE04468
:1004CD0001F0907FAEE04401F0907FAD7404F090A8
:1004DD007FAC7404F0D2E8907FD6740AF09000C817
:0A04ED0012137C907FD67406F022F3
:1013D30012011001FFFFFF4051C21027000101025B
:1013E3000301090220000101048032090400000204
:1013F300FFFFFF00070582024000000705020240CD
:1014030000000403090414034F00700065006E001C
:1014130055004C0049004E004B0014034F00700070
:1014230065006E0055004C0049004E004B000E0352
:101433003000300030003000300031001A034A0021
:101443005400410047002000410064006100700027
:0E14530074006500720009141D1431143F145A
:1004F700E5080424C0F582E4347DF583E0FF30E1AC
:1005070008907F96E0FE54EFF08F06EE30E00890FB
:100517007F96E0FE547FF0EF30E308907F96E0FE91
:100527004410F0EF30E208907F96E0FF4480F0221D
:100537007F00E50824C0F582E4347DF583E0FE24DE
:10054700D550030208A6EE240A83F582EE242F83F2
:10055700F583E473B18AD7B0FAD3A6A6A6A6A6A652
:10056700A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A624
:10057700A6A6A6A621FA512A639CD5053493A205FF
:1005870006050605060808080808080808080808F0
:1005970008080808080808080808080808080806D6
:1005A700060607070707080808087E05E508042464
:1005B700C0F582E4347DF583E0FFE50804F5828524
:1005C7000927C007C00612091DD006D0070208A8D0
:1005D700E5080424C0F582E4347DF583E02405FEB4
:1005E700E50804F582C007C006120BDED006D00767
:1005F7000208A8E5080424C0F582E4347DF583E009
:10060700FF2405FEE50804F58285093CC007C006FE
:10061700120E79D006D0070208A87E02E508042446
:10062700C0F582E4347DF583E0FD7402250824C01B
:10063700F582E4347DF583E0F50A8D82C007C006B4
:1006470012124AD006D0070208A87E02E508042441
:10065700C0F582E4347DF583E0FC7D007402250853
:1006670024C0F582E4347DF583E0FAE44204EA42EB
:10067700058C828D83C007C0061211DDD006D00716
:100687000208A87E05E5080424C0F582E4347DF558
:1006970083E0FFE50804F58285092DC007C006122F
:1006A7000A67D006D0070208A8E5080424C0F58227
:1006B700E4347DF583E02405FEE50804F582C007F0
:1006C700C006120D14D006D0070208A8E5080424B6
:1006D700C0F582E4347DF583E0FF2405FEE50804D8
:1006E700F582850943C007C006121013D006D0074C
:1006F7000208A87E02E5080424C0F582E4347DF5EB
:1007070083E0FB7402250824C0F582E4347DF58379
:10071700E0F50A8B82C007C006121281D006D00707
:100727000208A87E02E5080424C0F582E4347DF5BA
:1007370083E0FC7D007402250824C0F582E4347D43
:10074700F583E0FAE44204EA42058C828D83C00710
:10075700C006121207D006D0070208A87E02E508D5
:100767000424C0F582E4347DF583E0FC7D00740247
:10077700250824C0F582E4347DF583E0FAE44204D9
:10078700EA42058C828D83C007C006121349D00642
:10079700D0070208A87E02E5080424C0F582E434E5
:1007A7007DF583E0FC7D007402250824C0F582E412
:1007B700347DF583E0FAE44204EA42058C828D83B6
:1007C700C007C00612137CD006D0070208A87E0017
:1007D7007F02C007C0061212CEAC82AD83D006D00E
:1007E7000785098275837E8D03EBF0E509042400F4
:1007F700F582E4347EF5837D00ECF00208A87E02E2
:10080700E5080424C0F582E4347DF583E0FD740235
:10081700250824C0F582E4347DF583E0F50A8D824E
:10082700C007C006121311D006D00780747E05E5F5
:10083700080424C0F582E4347DF583E0FD740225C5
:100847000824C0F582E4347DF583E0F50A740325B6
:100857000824C0F582E4347DF583E0F50B740425A4
:100867000824C0F582E4347DF583E0F50C74052592
:100877000824C0F582E4347DF583E0F50D8D82C050
:1008870007C006121329D006D00780157E01C007BE
:10089700C0061204F7D006D00780067E0180027ECC
:1008A70000EF2509F509AD087F008E037C00EB2DCD
:1008B700FDEC3FFF0DBD00010F907FC9E0FC7B0001
:1008C700C3ED9CEF64808BF063F08095F04002D31A
:1008D70022EE042508F508C32275080075090010E3
:1008E700000280FB907F96E0FF547FF0C202200257
:1008F70007120537920280F6907F96E0FF4480F05A
:10090700E509600B907FB9E509F010010280FB90C3
:100917007FC9E4F080C3E582FF24C0F582E4347D1B
:10092700F583E0F528EF0424C0F582E4347DF583F0
:10093700E0F52974022FFC24C0F582E4347DF583A9
:10094700E0C4540FFB53030FEC24C0F582E4347D5D
:10095700F583E0FC740F5CF52A74032F24C0F5823D
:10096700E4347DF583E0FA74042F24C0F582E4347F
:100977007DF583E0F52BEB60078A0A8B8212124A1A
:10098700907F97E0FB5303F874044BFA7900A8288B
:100997007C0018B8FF011C89067F00C3EE98EF643E
:1009A700808CF063F08095F050347F007E00907F5C
:1009B70097EBF0EFC313FF907F97EAF0907F99E0F2
:1009C700FC30E5034307800EBE080040E1E5272918
:1009D7002400F582E4347EF583EFF00980B0892C9A
:1009E7007F00AC2A7A00C3EA95295040A8297900EC
:1009F70018B8FF01198A057E00EDB50011EEB501A3
:100A07000DEC600A4303021CE52BC313F52B907F03
:100A170097EBF0EFC313FF907F9774044BF0907F31
:100A270099E0FE30E5034307800A80BAAD297E00CE
:100A37007408C39DFDE49EFE8DF005F0EF8002C3B0
:100A470013D5F0FBFFE527252C2400F582E4347E3F
:100A5700F583EFF0EC6008852B0A8C8202124A229C
:100A6700E582FF24C0F582E4347DF583E0F52EEFBF
:100A77000424C0F582E4347DF583E0F52F74022F5A
:100A8700FC24C0F582E4347DF583E0C4540FFB53A6
:100A9700030FEC24C0F582E4347DF583E0FC740F8A
:100AA7005CF53074032F24C0F582E4347DF583E0D0
:100AB700FA74042F24C0F582E4347DF583E0F53120
:100AC700EB60078A0A8B82121281907F97E0FB53B3
:100AD70003F874044BFA753200A82E7C0018B8FF8F
:100AE700011CA9327E00C3E998EE64808CF063F0A4
:100AF7008095F0504C7E007C00907F97EBF079005A
:100B0700C3E9952250030980F7EEC313FE907F9740
:100B1700EAF07900C3E9952250030980F7907F999D
:100B2700E0F930E5034306800CBC080040CBE52D17
:100B370025322400F582E4347EF583EEF005328019
:100B4700987E00AA307900C3E9952F5056A82F7CCC
:100B57000018B8FF011C89057F00EDB50011EFB53E
:100B6700040DEA600A4303021AE531C313F5319015
:100B77007F97EBF07F00C3EF952250030F80F7EECE
:100B8700C313FE907F9774044BF07F00C3EF952249
:100B970050030F80F7907F99E0FF30E5034306800D
:100BA7000980A4AD2F7F007408C39DFDE49FFF8DCE
:100BB700F005F0EE8002C313D5F0FBFEE52D2532DC
:100BC7002400F582E4347EF583EEF0EA600885318F
:100BD7000A8A8202128122E582FF24C0F582E43468
:100BE7007DF583E0F533EF0424C0F582E4347DF529
:100BF70083E0F53474022FFC24C0F582E4347DF5DC
:100C070083E0C4540FFB53030FEC24C0F582E43494
:100C17007DF583E0FC740F5CF53574032F24C0F574
:100C270082E4347DF583E0FA74042F24C0F582E46E
:100C3700347DF583E0F536EB600B8A0A8B82C007BB
:100C470012124AD007907F97E0FB5303F97A00A866
:100C5700337C0018B8FF011C8A017E00C3E998EEB7
:100C670064808CF063F08095F05039EF2A240524D6
:100C7700C0F582E4347DF583E0FE7C00EE30E005CC
:100C870043030180068B0174FE59FB907F97EBF0BD
:100C9700EEC313FE907F9774044BF00CBC08004022
:100CA700DB0A80ABEF2A240524C0F582E4347DF506
:100CB70083E0FEAF357C00C3EC95345044EE30E062
:100CC7000543030180068B0274FE5AFBA9347A00A0
:100CD70019B9FF011A8C007D00E8B50111EDB502C5
:100CE7000DEF600A4303021FE536C313F536907F05
:100CF70097EBF0EEC313FE907F9774044BF00C80D4
:100D0700B6EF600885360A8F8202124A22E582F51D
:100D17003724C0F582E4347DF583E0F538E5370400
:100D270024C0F582E4347DF583E0F5397402253774
:100D3700FC24C0F582E4347DF583E0C4540FFB53F3
:100D4700030FEC24C0F582E4347DF583E0FC740FD7
:100D57005CF53A7403253724C0F582E4347DF583C6
:100D6700E0FA7404253724C0F582E4347DF583E086
:100D7700F53BEB60078A0A8B82121281907F97E01E
:100D8700FB5303F97A00A8387C0018B8FF011C8AC6
:100D9700067F00C3EE98EF64808CF063F08095F0D7
:100DA7005050E5372A240524C0F582E4347DF583C5
:100DB700E0FF7E00EF30E00543030180068B0474FB
:100DC700FE5CFB907F97EBF07C00C3EC9523500310
:100DD7000C80F7EFC313FF907F9774044BF07C00F0
:100DE700C3EC952350030C80F70EBE080040C50ADC
:100DF7008094E5372A240524C0F582E4347DF58301
:100E0700E0FFAE3A7C00C3EC9539505AEF30E0056D
:100E170043030180068B0274FE5AFBA8397A001837
:100E2700B8FF011A8C017D00E9B50011EDB5020D7F
:100E3700EE600A4303021EE53BC313F53B907F9721
:100E4700EBF07D00C3ED952350030D80F7EFC3133F
:100E5700FF907F9774044BF07D00C3ED95235003FB
:100E67000D80F70C80A0EE6008853B0A8E82021287
:100E77008122E582FF24C0F582E4347DF583E0F525
:100E87003DEF0424C0F582E4347DF583E0F53E743C
:100E9700022FFC24C0F582E4347DF583E0C4540FAF
:100EA700FB53030FEC24C0F582E4347DF583E0FCAB
:100EB700740F5CF53F74032F24C0F582E4347DF58D
:100EC70083E0FA74042F24C0F582E4347DF583E0CF
:100ED700F540EB600B8A0A8B82C00712124AD007D3
:100EE700907F97E0FB5303F97A00A83D7C0018B880
:100EF700FF011C8A017E00C3E998EE64808CF063D1
:100F0700F08095F0505CEF2A240524C0F582E43484
:100F17007DF583E0F5417C007900E54130E005434C
:100F2700030180068B0074FE58FB907F97EBF0E57A
:100F370041C313F541907F9774044BF0ECC313FC46
:100F4700907F99E0F830E50343048009B908004031
:100F5700C9E53C2A2400F582E4347EF583ECF00AE7
:100F670080888A01EF2A240524C0F582E4347DF5C0
:100F770083E0F5417C00AF3F754200C3E542953EF3
:100F87005057E54130E00543030180068B0074FEAE
:100F970058FBA83E7D0018B8FF011DAA427E00EA53
:100FA700B50011EEB5050DEF600A4303021FE540DA
:100FB700C313F540907F97EBF0E541C313F54190DC
:100FC7007F9774044BF0ECC313FC907F99E0FE30DD
:100FD700E503430480054280A2AD3E7E007408C34A
:100FE7009DFDE49EFE8DF005F0EC8002C313D5F065
:100FF700FBFCE53C292400F582E4347EF583ECF024
:10100700EF600885400A8F8202124A22E582F54482
:1010170024C0F582E4347DF583E0F545E5440424F6
:10102700C0F582E4347DF583E0F54674022544FC7F
:1010370024C0F582E4347DF583E0C4540FFB5303E9
:101047000FEC24C0F582E4347DF583E0FC740F5C7B
:10105700F5477403254424C0F582E4347DF583E025
:10106700FA7404254424C0F582E4347DF583E0F561
:1010770048EB60078A0A8B82121281907F97E0FB08
:101087005303F97A00A8457C0018B8FF011C8A06AB
:101097007F00C3EE98EF64808CF063F08095F0508A
:1010A70074E5442A240524C0F582E4347DF583E001
:1010B700F5497E007C00E54930E0054303018006E1
:1010C7008B0074FE58FB907F97EBF07800C3E89590
:1010D7002450030880F7E549C313F549907F9774B7
:1010E700044BF07800C3E8952450030880F7EEC35B
:1010F70013FE907F99E0F830E5034306800CBC08A7
:101107000040B3E5432A2400F582E4347EF583EEFC
:10111700F00A02108C8A04E5442A240524C0F582CB
:10112700E4347DF583E0F5497E00AA47754A00C39C
:10113700E54A9546506DE54930E0054303018006D1
:101147008B0174FE59FBA9467D0019B9FF011DA843
:101157004A7F00E8B50111EFB5050DEA600A4303C0
:10116700021AE548C313F548907F97EBF07F00C359
:10117700EF952450030F80F7E549C313F549907F96
:101187009774044BF07F00C3EF952450030F80F74B
:10119700EEC313FE907F99E0FF30E5034306800519
:1011A7004A808CAD467F007408C39DFDE49FFF8D88
:1011B700F005F0EE8002C313D5F0FBFEE5432C24C7
:1011C70000F582E4347EF583EEF0EA600885480A8C
:1011D7008A8202128122AE82AF83907F97E0FD530D
:1011E70005FB74044DFC7A007B00C3EA9EEB9F501D
:1011F7000E907F97EDF0ECF00ABA00EE0B80EB2231
:10120700AE82AF83907F97E0FD5305FB74044DFCDE
:101217007A007B00C3EA9EEB9F5027907F97EDF003
:101227007900C3E9952550030980F7907F97ECF083
:101237007900C3E9952550030980F70ABA00D50B51
:1012470080D222AF82907F97E0FE5306FB7D00C3DA
:10125700ED9F5025E50A30E00543060280068E041F
:1012670074FD5CFE907F97EEF0E50AC313F50A90D4
:101277007F9774044EF00D80D622AF82907F97E05F
:10128700FE5306FB7D00C3ED9F503BE50A30E005AA
:1012970043060280068E0474FD5CFE907F97EEF095
:1012A7007C00C3EC952650030C80F7E50AC313F5C1
:1012B7000A907F9774044EF07C00C3EC9526500388
:1012C7000C80F70D80C0227F00907F99E0FE30E50B
:1012D700027F01907F99E0FE30E603430702907F8B
:1012E7009AE0FE30E703430704907F9BE0FE30E57A
:1012F70003430708907F9AE0FE53067F8F05E4FFBC
:10130700FCEE4FF582EC4DF58322E582547FF4FF26
:10131700907F97E05FF0747F550AFF907F97E04FCB
:10132700F022858222850A23850B24850C25850DCD
:10133700262200227E567F021EBEFF011FEE4F703F
:10134700F722750A05750B001213A6AE82AF837CD0
:10135700007D00C3EC9EED9F501AC007C006C00574
:10136700C004121339D004D005D006D0070CBC0036
:10137700E20D80DF22AE82AF837C007D00C3EC9E4E
:10138700ED9F501AC007C006C005C00412133BD01A
:0F13970004D005D006D0070CBC00E20D80DF2289
:03004300021B009D
:101B0000020110000201630002016400020165008D
:101B1000020166000201670002016800020169001B
:101B200002016A0002016B0002016C0002019300D5
:101B30000201BA000201BB000201BC000201BD00AB
:101B40000201BE000201BF000201C0000201C1008B
:081B50000201C2000201C30002
:1013A6007A10E4FBFCE58225E0F582E58333F583DC
:1013B600EB33FBEC33FCEB950AF5F0EC950B4006B2
:0913C600FCABF0438201DADD22E8
:0600A000E478FFF6D8FD34
:10007E007900E94400601B7A009014617800759253
:10008E0020E493F2A308B800020592D9F4DAF275CF
:02009E0092FFCF
:1000A6007800E84400600A7900759220E4F309D8E4
:1000B600FC7800E84400600C7900902000E4F0A38E
:0400C600D8FCD9FA8F
:0D00710075814A1213CFE582600302006E14
:0413CF007582002201
:00000001FF
@@ -0,0 +1,130 @@
# Nuclei OpenOCD Distribution
For **Nuclei OpenOCD documentation**, please check https://doc.nucleisys.com/nuclei_tools/openocd/intro.html
If the tool version and documentation version not match, please take care.
**Below is the changelog for Nuclei OpenOCD.**
## 2025.10
This release is based on the same code base of **2025.02**, but do some new feature and bugfixes.
* Update ``nuclei cpuinfo`` command implementation using nuclei sdk 0.9.0 cpuinfo same source code to provide same behavior
* Correct custom flashloader binary file location search rules, where openocd executed, openocd ``scripts`` folder, and absolute path
* Sync nuclei custom CSRs support
* Optimize flash probe process, when no flash probed, it will exit with error instead of hang on it
* Support debug for hypervisor mode
* Fix debug ``Assertion failed!`` on HBird opensource cpu
* Fix nuclei riscv cross trigger command implementation ``nuclei cti xxx``
* Clear ``haltreq`` signal when openocd connect failed
* Fix segmentation fault issue when debug level set to 3 or 4
* When debug on FPGA CPU MHz is very slow such as **5MHz**, openocd may work not correctly, it will be fixed by make CPU run faster such as **10MHz**
## 2025.02
* improvement of ci and doc
* replace ``vslide1down_vx`` to read/write riscv vector register
* support live watch feature via riscv sba memory access channel
* organize nuclei commands into ``nuclei_riscv.c``
* add ``nuclei cti`` command group
* update ``nuclei etrace`` command group
* optimize ``nuclei cpuinfo`` command
* add new nuclei customized csrs
| new csr addr | new csr name |
| ------ | ------ |
| 0x1a4~0x1af | smpuaddr4~15 |
| 0x1c0~0x1ef | smpuaddr16~63 |
* rename nuclei customized csrs
| old name | new name |
| ------ | ------ |
| spmpcfg0~3 | smpucfg0~3 |
| spmpaddr0~15 | smpuaddr0~15 |
| mfp16mode | mmisc_ctl1 |
| mecc_ctrl | mecc_ctl |
| mstack_ctrl | mstack_ctl |
* changes are based on [riscv/riscv-openocd@f82c5a7](https://github.com/riscv-collab/riscv-openocd/commit/f82c5a7)
## 2024.06
* Add and update nuclei custom CSR
* Fix `nuclei cpuinfo` command implementation
* Add debug map feature for Nuclei CPU with new `nuclei expose_cpu_core` and `nuclei examine_cpu_core` commands
* changes are based on [riscv/riscv-openocd](https://github.com/riscv/riscv-openocd/commit/52177592)
* Fix hbird/hbirdv2 flash programming, and re-route fespi to nuspi flash loader for hbird/hbirdv2 processor
## 2024.02
> **Still in development, not official release.**
* Add Nuclei N100 CSR support
* Nuclei etrace support multicore trace
* Fix riscv debug 0.11 call riscv_run_algorithm error such as hbird/hbirdv2 processor
* Update and fix openocd documentation
* changes are based on [riscv/riscv-openocd](https://github.com/riscv/riscv-openocd/commit/52177592)
## 2023.10
* Add nuclei command group to contains all nuclei customized commands
* Add `nuclei cpuinfo` dump support
* Add more spiflash devices according to customer request
* Fix gdb flash program error on address size > 32bit on windows
* Update nuclei custom csr
* Add `ftdi nscan1_mode` to support 2-wire cjtag for Nuclei CPU, which is replacement for `ftdi oscan1_mode`
* Add nuclei custom command in openocd documentation
* **Experimental and may change**: Add nuclei etrace command to support nuclei etrace hardware feature
* changes are based on [riscv/riscv-openocd](https://github.com/riscv/riscv-openocd/commit/52177592)
## 2022.12
This is release 2022.12 of openocd.
* nor/spi:add w25q512jv
* add 'init resethalt' command
* feature:auto search custom flashloader path
* fix riscv-debug v0.11 call riscv_run_algorithm error.
## 2022.08
This is release 2022.08 of openocd.
* spi_nor:add xt25f256b mac25l1633e gd25q80b gd25le32e en25s40a by25q32al fm25q128 gd25B512me.
* merge upstream https://github.com/riscv/riscv-openocd commit id 52177592f9d3afc6a008f8e1b321cf74e823018f.
* custom flashloader don't rely on 'src/flash/nor/spi.c', fix memory leaks bug.
## 2022.04
This is release 2022.04 of openocd.
* add DSP ucode csr register
* Adjustment simulation timeout param
* Fix after write_bank/write_image command read date error bug
* Add custom flash loader in openocd, please refer wiki for how to use it
* Custom flash loader: add 'simulation' parameter for simulation test.
## 2022.01
This is release 2022.01 of openocd.
* optimize cjtag support for nuclei cjtag
* spi_nor: add BoHong bh25d80a bh25d40a bh25d20a
* spi_nor: Add Micron MT25QU512
* flash:"flash bank" command add simulation param
* add nuclei all custom csr
* spi_nor: Add MXIC MX25U51245G
* transport/ftdi: Update to new standard cJTAG sequence
* flash: add XinSheng RISC-V MCU CM32M4xxR flash program driver
* Add nuspi loader support.
* Add nuspi SPI flash driver support.
* Enable multi-core debug.
* Previous fespi loader will be rerouted to nuspi loader.
* Changes are based on [openocd for riscv 0.11.0](https://github.com/riscv/riscv-openocd/commit/6edf98db7f98c5e24bc51cf98419bdf5bbc530e6)
@@ -0,0 +1 @@
libftdi1.so.2.4.0
@@ -0,0 +1 @@
libhidapi-hidraw.so.0.0.0
@@ -0,0 +1 @@
libiconv.so.2.6.0
@@ -0,0 +1 @@
libudev.so
@@ -0,0 +1 @@
libusb-1.0.so.0.1.0
Binary file not shown.
@@ -0,0 +1,265 @@
# SPDX-License-Identifier: GPL-2.0-or-later
# Copy this file to /etc/udev/rules.d/
# If rules fail to reload automatically, you can refresh udev rules
# with the command "udevadm control --reload"
ACTION!="add|change", GOTO="openocd_rules_end"
SUBSYSTEM=="gpio", MODE="0660", GROUP="plugdev", TAG+="uaccess"
SUBSYSTEM!="usb|tty|hidraw", GOTO="openocd_rules_end"
# Please keep this list sorted by VID:PID
# opendous and estick
ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="204f", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Original FT232/FT245 VID:PID
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Original FT2232 VID:PID
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Original FT4232 VID:PID
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Original FT232H VID:PID
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6014", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Original FT231XQ VID:PID
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6015", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Original FT2233HP VID:PID
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6040", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Original FT4233HP VID:PID
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6041", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Original FT2232HP VID:PID
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6042", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Original FT4232HP VID:PID
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6043", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Original FT233HP VID:PID
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6044", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Original FT232HP VID:PID
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6045", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Original FT4232HA VID:PID
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6048", MODE="660", GROUP="plugdev", TAG+="uaccess"
# DISTORTEC JTAG-lock-pick Tiny 2
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8220", MODE="660", GROUP="plugdev", TAG+="uaccess"
# TUMPA, TUMPA Lite
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8a98", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8a99", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Marvell OpenRD JTAGKey FT2232D B
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="9e90", MODE="660", GROUP="plugdev", TAG+="uaccess"
# XDS100v2
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="a6d0", MODE="660", GROUP="plugdev", TAG+="uaccess"
# XDS100v3
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="a6d1", MODE="660", GROUP="plugdev", TAG+="uaccess"
# OOCDLink
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="baf8", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Kristech KT-Link
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bbe2", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Xverve Signalyzer Tool (DT-USB-ST), Signalyzer LITE (DT-USB-SLITE)
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bca0", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bca1", MODE="660", GROUP="plugdev", TAG+="uaccess"
# TI/Luminary Stellaris Evaluation Board FTDI (several)
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bcd9", MODE="660", GROUP="plugdev", TAG+="uaccess"
# TI/Luminary Stellaris In-Circuit Debug Interface FTDI (ICDI) Board
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bcda", MODE="660", GROUP="plugdev", TAG+="uaccess"
# egnite Turtelizer 2
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bdc8", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Section5 ICEbear
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="c140", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="c141", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Amontec JTAGkey and JTAGkey-tiny
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="cff8", MODE="660", GROUP="plugdev", TAG+="uaccess"
# ASIX Presto programmer
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="f1a0", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Nuvoton NuLink
ATTRS{idVendor}=="0416", ATTRS{idProduct}=="511b", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="0416", ATTRS{idProduct}=="511c", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="0416", ATTRS{idProduct}=="511d", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="0416", ATTRS{idProduct}=="5200", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="0416", ATTRS{idProduct}=="5201", MODE="660", GROUP="plugdev", TAG+="uaccess"
# TI ICDI
ATTRS{idVendor}=="0451", ATTRS{idProduct}=="c32a", MODE="660", GROUP="plugdev", TAG+="uaccess"
# STMicroelectronics ST-LINK V1
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3744", MODE="660", GROUP="plugdev", TAG+="uaccess"
# STMicroelectronics ST-LINK/V2
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", MODE="660", GROUP="plugdev", TAG+="uaccess"
# STMicroelectronics ST-LINK/V2.1
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3752", MODE="660", GROUP="plugdev", TAG+="uaccess"
# STMicroelectronics STLINK-V3
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374d", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374e", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374f", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3753", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3754", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3755", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3757", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Cypress SuperSpeed Explorer Kit
ATTRS{idVendor}=="04b4", ATTRS{idProduct}=="0007", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Cypress KitProg in KitProg mode
ATTRS{idVendor}=="04b4", ATTRS{idProduct}=="f139", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Cypress KitProg in CMSIS-DAP mode
ATTRS{idVendor}=="04b4", ATTRS{idProduct}=="f138", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Infineon DAP miniWiggler v3
ATTRS{idVendor}=="058b", ATTRS{idProduct}=="0043", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Hitex LPC1768-Stick
ATTRS{idVendor}=="0640", ATTRS{idProduct}=="0026", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Hilscher NXHX Boards
ATTRS{idVendor}=="0640", ATTRS{idProduct}=="0028", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Hitex STR9-comStick
ATTRS{idVendor}=="0640", ATTRS{idProduct}=="002c", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Hitex STM32-PerformanceStick
ATTRS{idVendor}=="0640", ATTRS{idProduct}=="002d", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Hitex Cortino
ATTRS{idVendor}=="0640", ATTRS{idProduct}=="0032", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Altera USB Blaster
ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6001", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Altera USB Blaster2
ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6010", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6810", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Ashling Opella-LD
ATTRS{idVendor}=="0B6B", ATTRS{idProduct}=="0040", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Amontec JTAGkey-HiSpeed
ATTRS{idVendor}=="0fbb", ATTRS{idProduct}=="1000", MODE="660", GROUP="plugdev", TAG+="uaccess"
# SEGGER J-Link
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0101", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0102", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0103", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0104", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0105", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0107", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0108", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1010", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1011", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1012", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1013", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1014", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1015", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1016", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1017", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1018", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1020", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1051", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1055", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1061", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Raisonance RLink
ATTRS{idVendor}=="138e", ATTRS{idProduct}=="9000", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Debug Board for Neo1973
ATTRS{idVendor}=="1457", ATTRS{idProduct}=="5118", MODE="660", GROUP="plugdev", TAG+="uaccess"
# OSBDM
ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="0042", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="0058", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="005e", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Olimex ARM-USB-OCD
ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="0003", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Olimex ARM-USB-OCD-TINY
ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="0004", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Olimex ARM-JTAG-EW
ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="001e", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Olimex ARM-USB-OCD-TINY-H
ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="002a", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Olimex ARM-USB-OCD-H
ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="002b", MODE="660", GROUP="plugdev", TAG+="uaccess"
# ixo-usb-jtag - Emulation of a Altera Bus Blaster I on a Cypress FX2 IC
ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="06ad", MODE="660", GROUP="plugdev", TAG+="uaccess"
# USBprog with OpenOCD firmware
ATTRS{idVendor}=="1781", ATTRS{idProduct}=="0c63", MODE="660", GROUP="plugdev", TAG+="uaccess"
# TI/Luminary Stellaris In-Circuit Debug Interface (ICDI) Board
ATTRS{idVendor}=="1cbe", ATTRS{idProduct}=="00fd", MODE="660", GROUP="plugdev", TAG+="uaccess"
# TI XDS110 Debug Probe (Launchpads and Standalone)
ATTRS{idVendor}=="0451", ATTRS{idProduct}=="bef3", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="0451", ATTRS{idProduct}=="bef4", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="1cbe", ATTRS{idProduct}=="02a5", MODE="660", GROUP="plugdev", TAG+="uaccess"
# TI Tiva-based ICDI and XDS110 probes in DFU mode
ATTRS{idVendor}=="1cbe", ATTRS{idProduct}=="00ff", MODE="660", GROUP="plugdev", TAG+="uaccess"
# isodebug v1
ATTRS{idVendor}=="22b7", ATTRS{idProduct}=="150d", MODE="660", GROUP="plugdev", TAG+="uaccess"
# PLS USB/JTAG Adapter for SPC5xxx
ATTRS{idVendor}=="263d", ATTRS{idProduct}=="4001", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Numato Mimas A7 - Artix 7 FPGA Board
ATTRS{idVendor}=="2a19", ATTRS{idProduct}=="1009", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Ambiq Micro EVK and Debug boards.
ATTRS{idVendor}=="2aec", ATTRS{idProduct}=="6010", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="2aec", ATTRS{idProduct}=="6011", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="2aec", ATTRS{idProduct}=="1106", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Espressif USB JTAG/serial debug units
ATTRS{idVendor}=="303a", ATTRS{idProduct}=="1001", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="303a", ATTRS{idProduct}=="1002", MODE="660", GROUP="plugdev", TAG+="uaccess"
# ANGIE USB-JTAG Adapter
ATTRS{idVendor}=="584e", ATTRS{idProduct}=="414f", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="584e", ATTRS{idProduct}=="424e", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="584e", ATTRS{idProduct}=="4255", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="584e", ATTRS{idProduct}=="4355", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="584e", ATTRS{idProduct}=="4a55", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Marvell Sheevaplug
ATTRS{idVendor}=="9e88", ATTRS{idProduct}=="9e8f", MODE="660", GROUP="plugdev", TAG+="uaccess"
# Keil Software, Inc. ULink
ATTRS{idVendor}=="c251", ATTRS{idProduct}=="2710", MODE="660", GROUP="plugdev", TAG+="uaccess"
ATTRS{idVendor}=="c251", ATTRS{idProduct}=="2750", MODE="660", GROUP="plugdev", TAG+="uaccess"
# CMSIS-DAP compatible adapters
ATTRS{product}=="*CMSIS-DAP*", MODE="660", GROUP="plugdev", TAG+="uaccess"
LABEL="openocd_rules_end"
@@ -0,0 +1,18 @@
This code is an example of using the openocd debug message system.
Before the message output is seen in the debug window, the functionality
will need enabling:
From the gdb prompt:
monitor target_request debugmsgs enable
monitor trace point 1
From the Telnet prompt:
target_request debugmsgs enable
trace point 1
To see how many times the trace point was hit:
(monitor) trace point 1
Spen
spen@spen-soft.co.uk
@@ -0,0 +1,144 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/***************************************************************************
* Copyright (C) 2008 by Dominic Rath *
* Dominic.Rath@gmx.de *
* Copyright (C) 2008 by Spencer Oliver *
* spen@spen-soft.co.uk *
* Copyright (C) 2008 by Frederik Kriewtz *
* frederik@kriewitz.eu *
***************************************************************************/
#include "dcc_stdio.h"
#define TARGET_REQ_TRACEMSG 0x00
#define TARGET_REQ_DEBUGMSG_ASCII 0x01
#define TARGET_REQ_DEBUGMSG_HEXMSG(size) (0x01 | ((size & 0xff) << 8))
#define TARGET_REQ_DEBUGCHAR 0x02
#if defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_6SM__)
/* we use the System Control Block DCRDR reg to simulate a arm7_9 dcc channel
* DCRDR[7:0] is used by target for status
* DCRDR[15:8] is used by target for write buffer
* DCRDR[23:16] is used for by host for status
* DCRDR[31:24] is used for by host for write buffer */
#define NVIC_DBG_DATA_R (*((volatile unsigned short *)0xE000EDF8))
#define BUSY 1
void dbg_write(unsigned long dcc_data)
{
int len = 4;
while (len--)
{
/* wait for data ready */
while (NVIC_DBG_DATA_R & BUSY);
/* write our data and set write flag - tell host there is data*/
NVIC_DBG_DATA_R = (unsigned short)(((dcc_data & 0xff) << 8) | BUSY);
dcc_data >>= 8;
}
}
#elif defined(__ARM_ARCH_4T__) || defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_5T__)
void dbg_write(unsigned long dcc_data)
{
unsigned long dcc_status;
do {
asm volatile("mrc p14, 0, %0, c0, c0" : "=r" (dcc_status));
} while (dcc_status & 0x2);
asm volatile("mcr p14, 0, %0, c1, c0" : : "r" (dcc_data));
}
#else
#error unsupported target
#endif
void dbg_trace_point(unsigned long number)
{
dbg_write(TARGET_REQ_TRACEMSG | (number << 8));
}
void dbg_write_u32(const unsigned long *val, long len)
{
dbg_write(TARGET_REQ_DEBUGMSG_HEXMSG(4) | ((len & 0xffff) << 16));
while (len > 0)
{
dbg_write(*val);
val++;
len--;
}
}
void dbg_write_u16(const unsigned short *val, long len)
{
unsigned long dcc_data;
dbg_write(TARGET_REQ_DEBUGMSG_HEXMSG(2) | ((len & 0xffff) << 16));
while (len > 0)
{
dcc_data = val[0]
| ((len > 1) ? val[1] << 16: 0x0000);
dbg_write(dcc_data);
val += 2;
len -= 2;
}
}
void dbg_write_u8(const unsigned char *val, long len)
{
unsigned long dcc_data;
dbg_write(TARGET_REQ_DEBUGMSG_HEXMSG(1) | ((len & 0xffff) << 16));
while (len > 0)
{
dcc_data = val[0]
| ((len > 1) ? val[1] << 8 : 0x00)
| ((len > 2) ? val[2] << 16 : 0x00)
| ((len > 3) ? val[3] << 24 : 0x00);
dbg_write(dcc_data);
val += 4;
len -= 4;
}
}
void dbg_write_str(const char *msg)
{
long len;
unsigned long dcc_data;
for (len = 0; msg[len] && (len < 65536); len++);
dbg_write(TARGET_REQ_DEBUGMSG_ASCII | ((len & 0xffff) << 16));
while (len > 0)
{
dcc_data = msg[0]
| ((len > 1) ? msg[1] << 8 : 0x00)
| ((len > 2) ? msg[2] << 16 : 0x00)
| ((len > 3) ? msg[3] << 24 : 0x00);
dbg_write(dcc_data);
msg += 4;
len -= 4;
}
}
void dbg_write_char(char msg)
{
dbg_write(TARGET_REQ_DEBUGCHAR | ((msg & 0xff) << 16));
}
@@ -0,0 +1,22 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/***************************************************************************
* Copyright (C) 2008 by Dominic Rath *
* Dominic.Rath@gmx.de *
* Copyright (C) 2008 by Spencer Oliver *
* spen@spen-soft.co.uk *
***************************************************************************/
#ifndef DCC_STDIO_H
#define DCC_STDIO_H
void dbg_trace_point(unsigned long number);
void dbg_write_u32(const unsigned long *val, long len);
void dbg_write_u16(const unsigned short *val, long len);
void dbg_write_u8(const unsigned char *val, long len);
void dbg_write_str(const char *msg);
void dbg_write_char(char msg);
#endif /* DCC_STDIO_H */
@@ -0,0 +1,45 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/***************************************************************************
* Copyright (C) 2008 by Spencer Oliver *
* spen@spen-soft.co.uk *
* Copyright (C) 2008 by Frederik Kriewtz *
* frederik@kriewitz.eu *
***************************************************************************/
#include "dcc_stdio.h"
/* enable openocd debugmsg at the gdb prompt:
* monitor target_request debugmsgs enable
*
* create a trace point:
* monitor trace point 1
*
* to show how often the trace point was hit:
* monitor trace point
*/
int main(void)
{
dbg_write_str("hello world");
dbg_write_char('t');
dbg_write_char('e');
dbg_write_char('s');
dbg_write_char('t');
dbg_write_char('\n');
unsigned long test_u32 = 0x01234567;
dbg_write_u32(&test_u32, 1);
static const unsigned short test_u16[] = {0x0123, 0x4567, 0x89AB, 0xCDEF, 0x0123, 0x4567, 0x89AB, 0xCDEF};
dbg_write_u16(test_u16, 8);
static const unsigned char test_u8[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0XDD, 0xEE, 0xFF};
dbg_write_u8(test_u8, 16);
while(1)
{
dbg_trace_point(0);
}
}
@@ -0,0 +1,232 @@
## Change & release log
Releases in reverse chronological order.
### 2019-07-20
- v0.10.0-13.1 published on npmjs.com
### 2019-07-17
- v0.10.0-13 released
### 2019-07-08
- update to 263deb380 from 7 Jul 2019
___
## Historical GNU MCU Eclipse change log
### 2019-04-23
- v0.10.0-12-20190423 released
### 2019-04-09
- prepare - v0.10.0-12
- update to latest master from Apr 7th, 2019
- update LIBUSB1_VERSION="1.0.22"
- update LIBFTDI_VERSION="1.4"
### 2019-01-18
- v0.10.0-11-20190118 released
- update to latest master from Jan 16, 2019
- RISC-V specific patches were removed, only upstreamed functionality retained.
### 2018-10-20
- v0.10.0-10-20181020 released
- rerun, to fix the macOS file dates
- update the -bit to singular
### 2018-10-16
- v0.10.0-9-20181016 released
- update to latest master
- update to latest RISC-V
- revert some of the RISC-V patches in the common files
### 2018-06-19
- update to latest RISC-V commits, including semihosting
### 2018-06-12
- use separate README-*.md files
- update to latest commits, which include new semihosting (OpenOCD June 6th, RISC-V June 12th)
### 2018-05-12
- v0.10.0-8-20180512 released
- use new build scripts based on XBB
- update to latest commits (OpenOCD April 27th, RISC-V May 8th)
### 2018-01-23
- v0.10.0-7-20180123 released
- move semihosting code to separate files
- use them in RISC-V and ARM
- add 'arm semihosting_resexit enable' to allow exit() to return
### 2018-01-12
- v0.10.0-6-20180112 released
- update to master from Dec 20
- update to riscv from Dec 29
- remove the patch to hide the CSRs, the new version displays only a limited number of them.
- remove the `remote_bitbang.c` patch, since it compiles ok on mingw-w64
- the SiFive board scripts were upstreamed to the RISC-V fork
### 2017-11-10
- v0.10.0-5-20171110-dev released
- update to master from Oct 2
- update to riscv from Nov 4
- target.c & riscv/riscv-0[13].c: hide the 4096 CSRs from `monitor reg`
- update the SiFive board script files
- revert the risc-v changes in `remote_bitbang.c`, since they break the build on mingw-w64
### 2017-10-04
- v0.10.0-4-20171004-*-dev released
- update to master from Aug 10
- update to riscv fom Oct 2
- gdb_server.c: workaround to gdb errors; disable passing errors back to gdb since this risc-v change breaks other targets.
### 2017-08-25
- v0.10.0-3-20170826-*-dev released
- merge RISC-V tag v20170818
- server.c: fix clang warning in getsockname()
### 2017-07-03
- update build script to use Debian 9 Docker containers
### 2017-06-22
- v0.10.0-2-20170622-1535-dev released
- merge RISC-V tag v20170621
### 2017-06-15
- move the build specific gnu-mcu-eclipse folder to a separate openocd-build project
### 2017-06-12
- add --enable-riscv and #if BUILD_RISCV
- add --enable-branding
### 2017-06-07
- v0.10.0-1-20170607-2132-dev released
- add sifive-* configuration files to the board folder
- 60-openocd.rules: simplify access rights
- merge RISC-V commit '11008ba' into gnu-mcu-eclipse-dev
### 2017-06-06
- rename gnu-mcu-eclipse & content
### 2017-06-04
- merge original branch 'master' from 2017-06-02 into gnuarmeclipse-dev.
- merge RISC-V commit '51ab5a0' from 2017-05-26 into gnuarmeclipse-dev
### 2017-01-24
- v0.10.0-20170124* released (stable)
- merge original 0.10.0, override local relative path processing
### 2016-10-28
- v0.10.0-20161028*-dev released
### 2016-10-20
- nsi file: add InstallDir; silent install should honour /D
### 2016-01-10
- v0.10.0-20160110*-dev released
### 2015-10-28
- v0.10.0-20151028*-dev released
### 2015-05-19
- v0.9.0-20150519*-dev released
- remove @raggedright from openocd.texi
### 2015-05-11
- the three separate build scripts were deprecated, and a single script,
using Docker, was added to the main gnuarmeclipse-se.git/scripts.
- the greeting shows 32-bits or 64-bits (plural for bits). (wrong!)
### 2015-03-24
- v0.9.0-20150324*-dev released
- v0.8.0-20150324* released
### 2015-03-22
- the NSIS script was fixed to prevent removing the keys when
uninstalling an older version.
### 2015-03-20
- v0.9.0-20150320*-dev released
- v0.8.0-20150320* released
### 2015-03-18
- the build scripts were extended to generate both the stable and the
development version.
- multiple versions of the package can be installed in separate folders,
named using the version.
- for Windows, more accurate keys were stored, so remember separate locations
for 32/64-bit versions.
### 2015-01-31
- v0.8.0-20150131* released
### 2015-01-30
- gnuarmeclipse
All GNU ARM Eclipse OpenOCD build related files were grouped under this folder.
- README.md
Markdown files were added in all new folders, to improve the look when browsed
in the SourceForge Git web browser.
### 2015-01-19
- v0.8.0-20150119* released
### 2015-01-12
- src/openocd.c
Add branding 'GNU ARM Eclipse' to the greeting message, to
more easily identify this custom version.
- helper/options.c
Update the logic used to locate the 'scripts' folder, by
using the argv[0], as on Windows. The logic is a bit more
complicated, to accomodate 3 cases (no path, relative path
and absolute path).
Liviu Ionescu
@@ -0,0 +1,79 @@
Main developers:
Intra2net AG <opensource@intra2net.com>
Contributors in alphabetical order,
see Changelog for full details:
Adam Malinowski <amalinowski75@gmail.com>
Alain Abbas <aa@libertech.fr>
Alexander Lehmann <lehmanna@in.tum.de>
Alex Harford <harford@gmail.com>
Anders Larsen <al@alarsen.net>
Andrei Errapart <a.errapart@trenz-electronic.de>
Andrew John Rogers <andrew@rogerstech.co.uk>
Arnim Läuger <arnim.laeuger@gmx.net>
Aurelien Jarno <aurelien@aurel32.net>
Benjamin Vanheuverzwijn <bvanheu@gmail.com>
Chris Morgan <chmorgan@gmail.com>
Chris Zeh <chris.w.zeh@gmail.com>
Clifford Wolf <clifford@clifford.at>
Daniel Kirkham <dk2@kirkham.id.au>
David Challis <dchallis@qsimaging.com>
Davide Michelizza <dmichelizza@gmail.com>
Denis Sirotkin <reg.libftdi@demitel.ru>
Emil <emil@datel.co.uk>
Eric Schott <eric@morningjoy.com>
Eugene Hutorny <eugene@hutorny.in.ua>
Evan Nemerson <evan@coeus-group.com>
Evgeny Sinelnikov <sin@geoft.ru>
Fahrzin Hemmati <fahhem@gmail.com>
Flynn Marquardt <ftdi@flynnux.de>
Forest Crossman <cyrozap@gmail.com>
Ian Abbott <abbotti@mev.co.uk>
Jared Boone <jared@sharebrained.com>
Jarkko Sonninen <kasper@iki.fi>
Jean-Daniel Merkli <jdmerkli@computerscience.ch>
Jochen Sprickerhof <jochen@sprickerhof.de>
Joe Zbiciak <intvnut@gmail.com>
Jon Beniston <jon@beniston.com>
Juergen Beisert <juergen.beisert@weihenstephan.org>
Lorenz Moesenlechner <lorenz@hcilab.org>
Marek Vavruša <marek@vavrusa.com>
Marius Kintel <kintel@sim.no>
Mark Hämmerling <mail@markh.de>
Matthias Janke <janke@physi.uni-heidelberg.de>
Matthias Kranz <matthias@hcilab.org>
Matthias Richter <mail.to.mr@gmx.de>
Matthijs ten Berge <m.h.tenberge@alumnus.utwente.nl>
Max <max@koeln.ccc.de>
Maxwell Dreytser <admin@mdtech.us>
Michel Zou <xantares09@hotmail.com>
Mike Frysinger <vapier.adi@gmail.com>
Nathael Pajani <nathael.pajani@ed3l.fr>
Nathan Fraser <ndf@undershorts.org>
Oleg Seiljus <oseiljus@xverve.com>
Paul Fertser <fercerpav@gmail.com>
Peter Holik <peter@holik.at>
Raphael Assenat <raph@8d.com>
Robert Cox <Robert.cox@novatechweb.com>
Robin Haberkorn <haberkorn@metratec.com>
Rodney Sinclair <rodney@sinclairrf.com>
Rogier Wolff <R.E.Wolff@harddisk-recovery.nl>
Rolf Fiedler <derRolf@gmx-topmail.de>
Salvador Eduardo Tropea <salvador@inti.gob.ar>
Stephan Linz <linz@li-pro.net>
Steven Turner <steven.turner@ftdichip.com>
Tarek Heiland <tarek@illimitable.com>
Thilo Schulz <thilo@tjps.eu>
Thimo Eichstaedt <abc@digithi.de>
Thomas Fischl <fischl@fundf.net>
Thomas Klose <thomas.klose@hiperscan.com>
Tim Ansell <mithro@mithis.com>
Tom Saunders <trsaunders@gmail.com>
Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
Vladimir Yakovlev <nagos@inbox.ru>
Wilfried Holzke <libftdi@holzke.net>
Xiaofan Chen <xiaofanc@gmail.com>
Yegor Yefremov <yegorslists@googlemail.com>
Yi-Shin Li <ysli@araisrobo.com>
@@ -0,0 +1,22 @@
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
@@ -0,0 +1,481 @@
GNU LIBRARY GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1991 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
[This is the first released version of the library GPL. It is
numbered 2 because it goes with version 2 of the ordinary GPL.]
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
This license, the Library General Public License, applies to some
specially designated Free Software Foundation software, and to any
other libraries whose authors decide to use it. You can use it for
your libraries, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if
you distribute copies of the library, or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link a program with the library, you must provide
complete object files to the recipients so that they can relink them
with the library, after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
Our method of protecting your rights has two steps: (1) copyright
the library, and (2) offer you this license which gives you legal
permission to copy, distribute and/or modify the library.
Also, for each distributor's protection, we want to make certain
that everyone understands that there is no warranty for this free
library. If the library is modified by someone else and passed on, we
want its recipients to know that what they have is not the original
version, so that any problems introduced by others will not reflect on
the original authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that companies distributing free
software will individually obtain patent licenses, thus in effect
transforming the program into proprietary software. To prevent this,
we have made it clear that any patent must be licensed for everyone's
free use or not licensed at all.
Most GNU software, including some libraries, is covered by the ordinary
GNU General Public License, which was designed for utility programs. This
license, the GNU Library General Public License, applies to certain
designated libraries. This license is quite different from the ordinary
one; be sure to read it in full, and don't assume that anything in it is
the same as in the ordinary license.
The reason we have a separate public license for some libraries is that
they blur the distinction we usually make between modifying or adding to a
program and simply using it. Linking a program with a library, without
changing the library, is in some sense simply using the library, and is
analogous to running a utility program or application program. However, in
a textual and legal sense, the linked executable is a combined work, a
derivative of the original library, and the ordinary General Public License
treats it as such.
Because of this blurred distinction, using the ordinary General
Public License for libraries did not effectively promote software
sharing, because most developers did not use the libraries. We
concluded that weaker conditions might promote sharing better.
However, unrestricted linking of non-free programs would deprive the
users of those programs of all benefit from the free status of the
libraries themselves. This Library General Public License is intended to
permit developers of non-free programs to use free libraries, while
preserving your freedom as a user of such programs to change the free
libraries that are incorporated in them. (We have not seen how to achieve
this as regards changes in header files, but we have achieved it as regards
changes in the actual functions of the Library.) The hope is that this
will lead to faster development of free libraries.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, while the latter only
works together with the library.
Note that it is possible for a library to be covered by the ordinary
General Public License rather than by this special one.
GNU LIBRARY GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library which
contains a notice placed by the copyright holder or other authorized
party saying it may be distributed under the terms of this Library
General Public License (also called "this License"). Each licensee is
addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work
which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.
You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.
(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.
If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also compile or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:
a) Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)
b) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
c) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
d) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
the source code distributed need not include anything that is normally
distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.
It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.
b) Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License. However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.
9. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if
written in the body of this License.
13. The Free Software Foundation may publish revised and/or new
versions of the Library General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
To apply these terms, attach the following notices to the library. It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the library's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!
@@ -0,0 +1,25 @@
The C library "libftdi1" is distributed under the
GNU Library General Public License version 2.
A copy of the GNU Library General Public License (LGPL) is included
in this distribution, in the file COPYING.LIB.
----------------------------------------------------------------------
The C++ wrapper "ftdipp1" is distributed under the GNU General
Public License version 2 (with a special exception described below).
A copy of the GNU General Public License (GPL) is included
in this distribution, in the file COPYING.GPL.
As a special exception, if other files instantiate templates or use macros
or inline functions from this file, or you compile this file and link it
with other works to produce a work based on this file, this file
does not by itself cause the resulting work to be covered
by the GNU General Public License.
However the source code for this file must still be made available
in accordance with section (3) of the GNU General Public License.
This exception does not invalidate any other reasons why a work based
on this file might be covered by the GNU General Public License.
@@ -0,0 +1,52 @@
--------------------------------------------------------------------
libftdi version 1.4
--------------------------------------------------------------------
libftdi - A library (using libusb) to talk to FTDI's UART/FIFO chips
including the popular bitbang mode.
The following chips are supported:
* FT230X
- FT4232H / FT2232H
- FT232R / FT245R
- FT2232L / FT2232D / FT2232C
- FT232BM / FT245BM (and the BL/BQ variants)
- FT8U232AM / FT8U245AM
libftdi requires libusb 1.x.
The AUTHORS file contains a list of all the people
that made libftdi possible what it is today.
Changes
-------
* New ftdi_usb_open_bus_addr() open function
* Use BM/R series baud rate computation for FT230X
* ftdi_get_error_string() now returns const char*
* C++ API: Ability to open devices with empty descriptor strings
* C++ API: Fix enumerations for buffer purge and modem controls
* small build fixes and improvements in the python examples
* ftdi_eeprom / eeprom handling:
* New API function: ftdi_eeprom_get_strings()
* Fix USE_SERIAL handling for 230X type chips
* Make ftdi_read_eeprom_location() endianness independent
* Fix flashing of FT245R
You'll find the newest version of libftdi at:
https://www.intra2net.com/en/developer/libftdi
Quick start
-----------
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX="/usr" ../
make
make install
More verbose build instructions are in "README.build"
--------------------------------------------------------------------
www.intra2net.com 2003-2017 Intra2net AG
--------------------------------------------------------------------
@@ -0,0 +1,96 @@
Here is a short tutorial on how to build libftdi git under
Ubuntu 12.10, But it is similar on other Linux distros.
1) Install the build tools
sudo apt-get install build-essential (yum install make automake gcc gcc-c++ kernel-devel)
sudo apt-get install git-core (yum install git)
sudo apt-get install cmake (yum install cmake)
sudo apt-get install doxygen (for building documentations) (yum install doxygen)
2) Install dependencies
sudo apt-get install libusb-1.0-devel (yum install libusb-devel)
(if the system comes with older version like 1.0.8 or
earlier, it is recommended you build libusbx-1.0.14 or later).
sudo apt-get install libconfuse-dev (for ftdi-eeprom) (yum install libconfuse-devel)
sudo apt-get install swig python-dev (for python bindings) (yum install swig python-devel)
sudo apt-get install libboost-all-dev (for C++ binding and unit test) (yum install boost-devel)
3) Clone the git repository
mkdir libftdi
cd libftdi
git clone git://developer.intra2net.com/libftdi
If you are building the release tar ball, just extract the source
tar ball.
4) Build the git source and install
cd libftdi
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX="/usr" ../
make
sudo make install
5) carry out some tests
cd examples
mcuee@Ubuntu1210VM:~/Desktop/build/libftdi/libftdi/build/examples$
./find_all_pp -v 0x0403 -p 0x6001
Found devices ( VID: 0x403, PID: 0x6001 )
------------------------------------------------
FTDI (0x8730800): ftdi, usb serial converter, ftDEH51S (Open OK)
FTDI (0x8730918): FTDI, FT232R USB UART, A8007Ub5 (Open OK)
mcuee@Ubuntu1210VM:~/Desktop/build/libftdi/libftdi/build/examples$ ./eeprom
2 FTDI devices found: Only Readout on EEPROM done. Use
VID/PID/desc/serial to select device
Decoded values of device 1:
Chip type 1 ftdi_eeprom_size: 128
0x000: 00 00 03 04 01 60 00 04 a0 16 08 00 10 01 94 0a .....`.. ........
0x010: 9e 2a c8 12 0a 03 66 00 74 00 64 00 69 00 2a 03 .*....f. t.d.i.*.
0x020: 75 00 73 00 62 00 20 00 73 00 65 00 72 00 69 00 u.s.b. . s.e.r.i.
0x030: 61 00 6c 00 20 00 63 00 6f 00 6e 00 76 00 65 00 a.l. .c. o.n.v.e.
0x040: 72 00 74 00 65 00 72 00 12 03 66 00 74 00 44 00 r.t.e.r. ..f.t.D.
0x050: 45 00 48 00 35 00 31 00 53 00 02 03 00 00 00 00 E.H.5.1. S.......
0x060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
0x070: 00 00 00 00 00 00 00 00 00 00 00 00 01 00 16 02 ........ ........
VID: 0x0403
PID: 0x6001
Release: 0x0400
Bus Powered: 44 mA USB Remote Wake Up
Manufacturer: ftdi
Product: usb serial converter
Serial: ftDEH51S
Checksum : 0216
Enable Remote Wake Up
PNP: 1
Decoded values of device 2:
Chip type 3 ftdi_eeprom_size: 128
0x000: 00 40 03 04 01 60 00 00 a0 2d 08 00 00 00 98 0a .@...`.. .-......
0x010: a2 20 c2 12 23 10 05 00 0a 03 46 00 54 00 44 00 . ..#... ..F.T.D.
0x020: 49 00 20 03 46 00 54 00 32 00 33 00 32 00 52 00 I. .F.T. 2.3.2.R.
0x030: 20 00 55 00 53 00 42 00 20 00 55 00 41 00 52 00 .U.S.B. .U.A.R.
0x040: 54 00 12 03 41 00 38 00 30 00 30 00 37 00 55 00 T...A.8. 0.0.7.U.
0x050: 62 00 35 00 c9 bf 1c 80 00 00 00 00 00 00 00 00 b.5..... ........
0x060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
0x070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0f 23 ........ .......#
0x080: 2c 04 d3 fb 00 00 c9 bf 1c 80 42 00 00 00 00 00 ,....... ..B.....
0x090: 00 00 00 00 00 00 00 00 38 41 32 52 4a 33 47 4f ........ 8A2RJ3GO
VID: 0x0403
PID: 0x6001
Release: 0x0000
Bus Powered: 90 mA USB Remote Wake Up
Manufacturer: FTDI
Product: FT232R USB UART
Serial: A8007Ub5
Checksum : 230f
Internal EEPROM
Enable Remote Wake Up
PNP: 1
Channel A has Mode UART VCP
C0 Function: TXLED
C1 Function: RXLED
C2 Function: TXDEN
C3 Function: PWREN
C4 Function: SLEEP
@@ -0,0 +1,38 @@
* How to cross compile libftdi-1.x for Windows? *
1 - Prepare a pkg-config wrapper according to
https://www.flameeyes.eu/autotools-mythbuster/pkgconfig/cross-compiling.html ,
additionally export PKG_CONFIG_ALLOW_SYSTEM_CFLAGS and
PKG_CONFIG_ALLOW_SYSTEM_LIBS.
2 - Write a CMake toolchain file according to
http://www.vtk.org/Wiki/CmakeMingw . Change the path to your future sysroot.
3 - Get libusb sources (either by cloning the git repo or by downloading a
tarball). Unpack, autogen.sh (when building from git), and configure like this:
./configure --build=`./config.guess` --host=i686-w64-mingw32 \
--prefix=/usr --with-sysroot=$HOME/i686-w64-mingw32-root/
4 - run
make install DESTDIR=$HOME/i686-w64-mingw32-root/
5 - go to libftdi-1.x source directory and run
cmake -DCMAKE_TOOLCHAIN_FILE=~/Toolchain-mingw.cmake \
-DCMAKE_INSTALL_PREFIX="/usr" \
-DPKG_CONFIG_EXECUTABLE=`which i686-w64-mingw32-pkg-config`
6 - run
make install DESTDIR=$HOME/i686-w64-mingw32-root/
* How to run libftdi 1.x under Windows *
On 26-Jan-2014, libusbx and libusb project were merged with the release
of libusb-1.0.18 and now the project is called libusb.
libusb Windows backend will need to rely on a proper driver to run.
Please refer to the following wiki page for proper driver installation.
https://github.com/libusb/libusb/wiki/Windows#wiki-How_to_use_libusb_on_Windows
As of 26-Jan-2014, libusb Windows backend supports WinUSB,
libusb0.sys and libusbk.sys driver. However, libusb's support of
libusb0.sys and libusbk.sys is considered to be less mature than
WinUSB. Therefore, WinUSB driver installation using Zadig
is recommended.
Take note once you replace the original FTDI driver with WinUSB driver,
you can no longer use the functionality the original FTDI driver provides
(eg. Virtual Serial Port or D2XX).
@@ -0,0 +1 @@
Bruno Haible <bruno@clisp.org>
@@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
@@ -0,0 +1,482 @@
GNU LIBRARY GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1991 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
[This is the first released version of the library GPL. It is
numbered 2 because it goes with version 2 of the ordinary GPL.]
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
This license, the Library General Public License, applies to some
specially designated Free Software Foundation software, and to any
other libraries whose authors decide to use it. You can use it for
your libraries, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if
you distribute copies of the library, or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link a program with the library, you must provide
complete object files to the recipients so that they can relink them
with the library, after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
Our method of protecting your rights has two steps: (1) copyright
the library, and (2) offer you this license which gives you legal
permission to copy, distribute and/or modify the library.
Also, for each distributor's protection, we want to make certain
that everyone understands that there is no warranty for this free
library. If the library is modified by someone else and passed on, we
want its recipients to know that what they have is not the original
version, so that any problems introduced by others will not reflect on
the original authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that companies distributing free
software will individually obtain patent licenses, thus in effect
transforming the program into proprietary software. To prevent this,
we have made it clear that any patent must be licensed for everyone's
free use or not licensed at all.
Most GNU software, including some libraries, is covered by the ordinary
GNU General Public License, which was designed for utility programs. This
license, the GNU Library General Public License, applies to certain
designated libraries. This license is quite different from the ordinary
one; be sure to read it in full, and don't assume that anything in it is
the same as in the ordinary license.
The reason we have a separate public license for some libraries is that
they blur the distinction we usually make between modifying or adding to a
program and simply using it. Linking a program with a library, without
changing the library, is in some sense simply using the library, and is
analogous to running a utility program or application program. However, in
a textual and legal sense, the linked executable is a combined work, a
derivative of the original library, and the ordinary General Public License
treats it as such.
Because of this blurred distinction, using the ordinary General
Public License for libraries did not effectively promote software
sharing, because most developers did not use the libraries. We
concluded that weaker conditions might promote sharing better.
However, unrestricted linking of non-free programs would deprive the
users of those programs of all benefit from the free status of the
libraries themselves. This Library General Public License is intended to
permit developers of non-free programs to use free libraries, while
preserving your freedom as a user of such programs to change the free
libraries that are incorporated in them. (We have not seen how to achieve
this as regards changes in header files, but we have achieved it as regards
changes in the actual functions of the Library.) The hope is that this
will lead to faster development of free libraries.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, while the latter only
works together with the library.
Note that it is possible for a library to be covered by the ordinary
General Public License rather than by this special one.
GNU LIBRARY GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library which
contains a notice placed by the copyright holder or other authorized
party saying it may be distributed under the terms of this Library
General Public License (also called "this License"). Each licensee is
addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work
which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.
You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.
(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.
If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also compile or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:
a) Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)
b) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
c) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
d) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
the source code distributed need not include anything that is normally
distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.
It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.
b) Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License. However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.
9. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if
written in the body of this License.
13. The Free Software Foundation may publish revised and/or new
versions of the Library General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
Appendix: How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
To apply these terms, attach the following notices to the library. It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the library's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
MA 02110-1301, USA
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!
@@ -0,0 +1 @@
No packages need to be installed before GNU libiconv is installed.
@@ -0,0 +1,190 @@
New in 1.15:
* The UTF-8 converter now rejects surrogates and out-of-range code points.
* Added ISO-2022-JP-MS converter.
* Updated the CP1255 converter to map one more character.
* The functions now support strings longer than 2 GB.
New in 1.14:
* The 'iconv' program now produces its output as soon as it can. It no longer
unnecessarily waits for more input.
* Updated the GB18030 converter to map 25 characters to code points that have
been to Unicode since 2000, rather than to code points in the Private Use
Area.
* Updated the BIG5-HKSCS converter. The old BIG5-HKSCS converter is renamed to
BIG5-HKSCS:2004. A new converter BIG5-HKSCS:2008 is added. BIG5-HKSCS is now
an alias for BIG5-HKSCS:2008.
* Fixed a bug in the conversion to wchar_t.
* Fixed a small bug in the CP1258 converter.
New in 1.13:
* The library and the iconv program now understand platform dependent aliases,
for better compatibility with the platform's own iconv_open function.
Examples: "646" on Solaris, "iso88591" on HP-UX, "IBM-1252" on AIX.
* For stateful encodings, when the input ends with a shift sequence followed
by invalid input, the iconv function now increments the input pointer past
the shift sequence before returning (size_t)(-1) with errno = EILSEQ. This
is also like GNU libc's iconv() behaves.
* The library exports a new function iconv_open_into() that stores the
conversion descriptor in pre-allocated memory, rather than allocating fresh
memory for it.
* Added CP1131 converter.
New in 1.12:
* The iconv program is now licensed under the GPL version 3, instead of the
GPL version 2. The libiconv library continues to be licensed under LGPL.
* Added RK1048 converter.
* On AIX, an existing system libiconv no longer causes setlocale() to fail.
* Upgraded EUC-KR, JOHAB to include the Korean postal code sign.
New in 1.11:
* The iconv program has new options --unicode-subst, --byte-subst,
--widechar-subst that allow to specify substitutions for characters that
cannot be converted.
* The iconv program now understands long options:
long option equivalent to
--from-code -f
--to-code -t
--list -l
--silent -s
* The CP936 converter is now different from the GBK converter: it has changed
to include the Euro sign and private area characters. CP936 is no longer an
alias of GBK.
* Updated GB18030 converter to include all private area characters.
* Updated CP950 converter to include the Euro sign and private area characters.
* Updated CP949 converter to include private area characters.
* Updated the BIG5-HKSCS converter. The old BIG5-HKSCS converter is renamed to
BIG5-HKSCS:1999 and updated to Unicode 4. New converters BIG5-HKSCS:2001 and
BIG5-HKSCS:2004 are added. BIG5-HKSCS is now an alias for BIG5-HKSCS:2004.
* Added a few irreversible mappings to the CP932 converter.
* Tidy up the list of symbols exported from libiconv (assumes gcc >= 4.0).
New in 1.10:
* Added ISO-8859-11 converter.
* Updated the ISO-8859-7 converter.
* Added ATARIST converter, available through --enable-extra-encodings.
* Added BIG5-2003 converter (experimental), available through
--enable-extra-encodings.
* Updated EUC-TW converter to include the Euro sign.
* The preloadable library has been renamed from libiconv_plug.so to
preloadable_libiconv.so.
* Portability to mingw.
New in 1.9:
* Many more transliterations.
* New configuration option --enable-relocatable. See the INSTALL.generic file
for details.
New in 1.8:
* The iconv program has new options -l, -c, -s.
* The iconv program is internationalized.
* Added C99 converter.
* Added KOI8-T converter.
* New configuration option --enable-extra-encodings that enables a bunch of
additional encodings; see the README for details.
* Updated the ISO-8859-16 converter.
* Upgraded BIG5-HKSCS, EUC-TW, ISO-2022-CN, ISO-2022-CN-EXT converters to
Unicode 3.2.
* Upgraded EUC-KR, CP949, JOHAB converters to include the Euro sign.
* Changed the ARMSCII-8 converter.
* Extended the EUC-JP encoder so that YEN SIGN characters don't cause failures
in Shift_JIS to EUC-JP conversion.
* The JAVA converter now handles characters outside the Unicode BMP correctly.
* Fixed a bug in the CP1255, CP1258, TCVN decoders: The base characters of
combining characters could be dropped at the end of the conversion buffer.
* Fixed a bug in the transliteration that could lead to excessive memory
allocations in libintl when transliteration was needed.
* Portability to BSD/OS and SCO 3.2.5.
New in 1.7:
* Added UTF-32, UTF-32BE, UTF-32LE converters.
* Changed CP1255, CP1258 and TCVN converters to handle combining characters.
* Changed EUC-JP, SHIFT_JIS, CP932, ISO-2022-JP, ISO-2022-JP-2, ISO-2022-JP-1
converters to use fullwidth Yen sign instead of halfwidth Yen sign, and
fullwidth tilde instead of halfwidth tilde.
* Upgraded EUC-TW, ISO-2022-CN, ISO-2022-CN-EXT converters to Unicode 3.1.
* Changed the GB18030 converter to not reject unassigned and private-use
Unicode characters.
* Fixed a bug in the byte order mark treatment of the UCS-4 decoder.
* The manual pages are now distributed also in HTML format.
New in 1.6:
* The iconv program's -f and -t options are now optional.
* Many more transliterations.
* Added CP862 converter.
* Changed the GB18030 converter.
* Portability to DOS with DJGPP.
New in 1.5:
* Added an iconv(1) program.
* New locale dependent encodings "char", "wchar_t".
* Transliteration is now off by default. Use a //TRANSLIT suffix to enable it.
* The JOHAB encoding is documented again.
* Changed a few mappings in the CP950 converter.
New in 1.4:
* Added GB18030, BIG5HKSCS converters.
* Portability to OS/2 with emx+gcc.
New in 1.3:
* Added UCS-2BE, UCS-2LE, UCS-4BE, UCS-4LE converters.
* Fixed the definition of EILSEQ on SunOS4.
* Fixed a build problem on OSF/1.
* Support for building as a shared library on Woe32.
New in 1.2:
* Added UTF-16BE and UTF-16LE converters.
* Changed the UTF-16 encoder.
* Fixed the treatment of tab characters in the UTF-7 converter.
* Fixed an internal error when output buffer was not large enough.
New in 1.1:
* Added ISO-8859-16 converter.
* Added CP932 converter, a variant of SHIFT_JIS.
* Added CP949 converter, a variant of EUC-KR.
* Improved the ISO-2022-CN-EXT converter: It now covers the ISO-IR-165 range.
* Updated the ISO-8859-8 conversion table.
* The JOHAB encoding is deprecated and not documented any more.
* Fixed two build problems: 1. "make -n check" failed. 2. When libiconv was
already installed, "make" failed.
New in 1.0:
* Added transliteration facilities.
* Added a test suite.
* Fixed the iconv(3) manual page and function: the return value was not
described correctly.
* Fixed a bug in the CP1258 decoder: invalid bytes now yield EILSEQ instead of
U+FFFD.
* Fixed a bug in the Georgian-PS encoder: accept U+00E6.
* Fixed a bug in the EUC-JP encoder: reject 0x8E5C and 0x8E7E.
* Fixed a bug in the KSC5601 and JOHAB converters: they recognized some Hangul
characters at some invalid code positions.
* Fixed a bug in the EUC-TW decoder; it was severely broken.
* Fixed a bug in the CP950 converter: it recognized a dubious BIG5 range.
New in 0.3:
* Reduced the size of the tables needed for the JOHAB converter.
* Portability to Woe32.
New in 0.2:
* Added KOI8-RU, CP850, CP866, CP874, CP950, ISO-2022-CN-EXT, GBK and
ISO-2022-JP-1 converters.
* Added MACINTOSH as an alias for MAC-ROMAN.
* Added ASMO-708 as an alias for ISO-8859-6.
* Added ELOT_928 as an alias for ISO-8859-7.
* Improved the EUC-TW converter: Treat CNS 11643 plane 3.
* Improved the ISO-2022-KR and EUC-KR converters: Hangul characters are
decomposed into Jamo when needed.
* Improved the CP932 converter.
* Updated the CP1133, MULELAO-1 and ARMSCII-8 mappings.
* The EUC-JP and SHIFT_JIS converters now cover the user-defined range.
* Fixed a possible buffer overrun in the JOHAB converter.
* Fixed a bug in the UTF-7, ISO-2022-*, HZ decoders: a shift sequence a the
end of the input no longer gives an error.
* The HZ encoder now always terminates its output in the ASCII state.
* Use a perfect hash table for looking up the aliases.
New in 0.1:
* Portability to Linux/glibc-2.0.x, Linux/libc5, OSF/1, FreeBSD.
* Fixed a bug in the EUC-JP decoder. Extended the ISO-2022-JP-2 converter.
* Made TIS-620 mapping consistent with glibc-2.1.
@@ -0,0 +1,172 @@
GNU LIBICONV - character set conversion library
This library provides an iconv() implementation, for use on systems which
don't have one, or whose implementation cannot convert from/to Unicode.
It provides support for the encodings:
European languages
ASCII, ISO-8859-{1,2,3,4,5,7,9,10,13,14,15,16},
KOI8-R, KOI8-U, KOI8-RU,
CP{1250,1251,1252,1253,1254,1257}, CP{850,866,1131},
Mac{Roman,CentralEurope,Iceland,Croatian,Romania},
Mac{Cyrillic,Ukraine,Greek,Turkish},
Macintosh
Semitic languages
ISO-8859-{6,8}, CP{1255,1256}, CP862, Mac{Hebrew,Arabic}
Japanese
EUC-JP, SHIFT_JIS, CP932, ISO-2022-JP, ISO-2022-JP-2, ISO-2022-JP-1,
ISO-2022-JP-MS
Chinese
EUC-CN, HZ, GBK, CP936, GB18030, EUC-TW, BIG5, CP950, BIG5-HKSCS,
BIG5-HKSCS:2004, BIG5-HKSCS:2001, BIG5-HKSCS:1999, ISO-2022-CN,
ISO-2022-CN-EXT
Korean
EUC-KR, CP949, ISO-2022-KR, JOHAB
Armenian
ARMSCII-8
Georgian
Georgian-Academy, Georgian-PS
Tajik
KOI8-T
Kazakh
PT154, RK1048
Thai
ISO-8859-11, TIS-620, CP874, MacThai
Laotian
MuleLao-1, CP1133
Vietnamese
VISCII, TCVN, CP1258
Platform specifics
HP-ROMAN8, NEXTSTEP
Full Unicode
UTF-8
UCS-2, UCS-2BE, UCS-2LE
UCS-4, UCS-4BE, UCS-4LE
UTF-16, UTF-16BE, UTF-16LE
UTF-32, UTF-32BE, UTF-32LE
UTF-7
C99, JAVA
Full Unicode, in terms of 'uint16_t' or 'uint32_t'
(with machine dependent endianness and alignment)
UCS-2-INTERNAL, UCS-4-INTERNAL
Locale dependent, in terms of 'char' or 'wchar_t'
(with machine dependent endianness and alignment, and with OS and
locale dependent semantics)
char, wchar_t
The empty encoding name "" is equivalent to "char": it denotes the
locale dependent character encoding.
When configured with the option --enable-extra-encodings, it also provides
support for a few extra encodings:
European languages
CP{437,737,775,852,853,855,857,858,860,861,863,865,869,1125}
Semitic languages
CP864
Japanese
EUC-JISX0213, Shift_JISX0213, ISO-2022-JP-3
Chinese
BIG5-2003 (experimental)
Turkmen
TDS565
Platform specifics
ATARIST, RISCOS-LATIN1
It can convert from any of these encodings to any other, through Unicode
conversion.
It has also some limited support for transliteration, i.e. when a character
cannot be represented in the target character set, it can be approximated
through one or several similarly looking characters. Transliteration is
activated when "//TRANSLIT" is appended to the target encoding name.
libiconv is for you if your application needs to support multiple character
encodings, but that support lacks from your system.
Installation
------------
As usual for GNU packages:
$ ./configure --prefix=/usr/local
$ make
$ make install
After installing GNU libiconv for the first time, it is recommended to
recompile and reinstall GNU gettext, so that it can take advantage of
libiconv.
On systems other than GNU/Linux, the iconv program will be internationalized
only if GNU gettext has been built and installed before GNU libiconv. This
means that the first time GNU libiconv is installed, we have a circular
dependency between the GNU libiconv and GNU gettext packages, which can be
resolved by building and installing either
- first libiconv, then gettext, then libiconv again,
or (on systems supporting shared libraries, excluding AIX)
- first gettext, then libiconv, then gettext again.
Recall that before building a package for the second time, you need to erase
the traces of the first build by running "make distclean".
This library can be built and installed in two variants:
- The library mode. This works on all systems, and uses a library
'libiconv.so' and a header file '<iconv.h>'. (Both are installed
through "make install".)
To use it, simply #include <iconv.h> and use the functions.
To use it in an autoconfiguring package:
- If you don't use automake, append m4/iconv.m4 to your aclocal.m4
file.
- If you do use automake, add m4/iconv.m4 to your m4 macro repository.
- Add to the link command line of libraries and executables that use
the functions the placeholder @LIBICONV@ (or, if using libtool for
the link, @LTLIBICONV@). If you use automake, the right place for
these additions are the *_LDADD variables.
Note that 'iconv.m4' is also part of the GNU gettext package, which
installs it in /usr/local/share/aclocal/iconv.m4.
- The libc plug/override mode. This works on GNU/Linux, Solaris and OSF/1
systems only. It is a way to get good iconv support without having
glibc-2.1.
It installs a library 'preloadable_libiconv.so'. This library can be used
with LD_PRELOAD, to override the iconv* functions present in the C library.
On GNU/Linux and Solaris:
$ export LD_PRELOAD=/usr/local/lib/preloadable_libiconv.so
On OSF/1:
$ export _RLD_LIST=/usr/local/lib/preloadable_libiconv.so:DEFAULT
A program's source need not be modified, the program need not even be
recompiled. Just set the LD_PRELOAD environment variable, that's it!
Copyright
---------
The libiconv and libcharset _libraries_ and their header files are under LGPL,
see file COPYING.LIB.
The iconv _program_ and the documentation are under GPL, see file COPYING.
Download
--------
http://ftp.gnu.org/gnu/libiconv/libiconv-1.15.tar.gz
Homepage
--------
http://www.gnu.org/software/libiconv/
Bug reports to
--------------
<bug-gnu-libiconv@gnu.org>
Bruno Haible <bruno@clisp.org>
@@ -0,0 +1,3 @@
Installation on DJGPP:
See the file djgpp/README.
@@ -0,0 +1,255 @@
Installation on Microsoft Windows:
There are three ways to create binaries of this package for Microsoft Windows:
1) Native binaries, built using the mingw tool chain.
2) Native binaries, built using the MS Visual C/C++ tool chain.
3) Binaries for the Cygwin environment.
===============================================================================
1) Native binaries, built using the mingw tool chain.
I recommend to use the Cygwin environment as the development environment
and mingw only as the target (runtime, deployment) environment.
For this, you need to install
* Cygwin (from https://cygwin.com/),
* some packages available from the Cygwin package installer:
make
* the mingw cross-compilation tools and runtime package, available from
the Cygwin package installer (setup-x86_64.exe):
- for creating 32-bit binaries: packages
mingw64-i686-gcc-core,
mingw64-i686-headers,
mingw64-i686-runtime
- for creating 64-bit binaries: packages
mingw64-x86_64-gcc-core,
mingw64-x86_64-headers,
mingw64-x86_64-runtime
Building 32-bit binaries for mingw is achieved through the following
preparation, configure, and build commands:
PATH=/usr/local/mingw32/bin:$PATH
export PATH
./configure --host=i686-w64-mingw32 --prefix=/usr/local/mingw32 \
CC=i686-w64-mingw32-gcc \
CPPFLAGS="-I/usr/local/mingw32/include -Wall" \
LDFLAGS="-L/usr/local/mingw32/lib"
make
make check
Building 64-bit binaries for mingw is achieved through the following
preparation, configure, and build commands:
PATH=/usr/local/mingw64/bin:$PATH
export PATH
./configure --host=x86_64-w64-mingw32 --prefix=/usr/local/mingw64 \
CC=x86_64-w64-mingw32-gcc \
CPPFLAGS="-I/usr/local/mingw64/include -Wall" \
LDFLAGS="-L/usr/local/mingw64/lib"
make
make check
Installation:
make install
===============================================================================
2) Native binaries, built using the MS Visual C/C++ tool chain.
Note that binaries created with MSVC have a distribution constraint: They
depend on a closed-source library ('msvcr90.dll' for MSVC 9.0,
'vcruntime140.dll' for MSVC 14.0, and so on) which is not normally part of
a Windows installation.
You cannot distribute 'vcruntime*.dll' with the binaries - this would be a
violation of the GPL and of the Microsoft EULA.
You can distribute the binaries without including 'vcruntime*.dll'. Users
who don't have this library on their system will require to pull some files
(api-ms-win*.dll) through the Windows Update mechanism, see
https://support.microsoft.com/en-us/kb/2999226 .
This recipe requires MS Visual C/C++ 9.0 or newer.
You don't need the Visual Studio IDE, just the C/C++ tool chain.
As of 2016, you can install the MS Visual C/C++ 14.0 tool chain from
http://landinghub.visualstudio.com/visual-cpp-build-tools (it's the file
visualcppbuildtools_full.exe).
This recipe requires also a Cygwin environment (with 'bash', the common POSIX
commands, and 'make') as a build environment. Building with 'nmake' is not
supported.
For this, you need to install
* Cygwin (from https://cygwin.com/),
* some packages available from the Cygwin package installer:
make
You also need the scripts 'ar-lib' and 'compile' from
http://git.savannah.gnu.org/gitweb/?p=automake.git;a=blob_plain;f=lib/ar-lib;hb=HEAD
http://git.savannah.gnu.org/gitweb/?p=automake.git;a=blob_plain;f=lib/compile;hb=HEAD
respectively.
They may also be included in this package, in directory 'build-aux/'.
Save them; the instructions below assume that you stored them in $HOME/msvc/.
Make them executable:
chmod a+x ar-lib compile
Start a bash (from Cygwin).
Make sure that the MSVC tools ("cl" etc.) are found in PATH and the
environment variables INCLUDE and LIB are set appropriately.
In a typical MSVC 9.0 installation, it can be achieved by running
C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat
In a typical MSVC 14.0 installation on Windows 10, it can be achieved
- for creating 32-bit binaries: through the following bash commands:
# Set environment variables for using MSVC 14,
# for creating native 32-bit Windows executables.
# Windows C library headers and libraries.
WindowsCrtIncludeDir='C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt'
WindowsCrtLibDir='C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\'
INCLUDE="${WindowsCrtIncludeDir};$INCLUDE"
LIB="${WindowsCrtLibDir}x86;$LIB"
# Windows API headers and libraries.
WindowsSdkIncludeDir='C:\Program Files (x86)\Windows Kits\8.1\Include\'
WindowsSdkLibDir='C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\'
INCLUDE="${WindowsSdkIncludeDir}um;${WindowsSdkIncludeDir}shared;$INCLUDE"
LIB="${WindowsSdkLibDir}x86;$LIB"
# Visual C++ tools, headers and libraries.
VSINSTALLDIR='C:\Program Files (x86)\Microsoft Visual Studio 14.0'
VCINSTALLDIR="${VSINSTALLDIR}"'\VC'
PATH=`cygpath -u "${VCINSTALLDIR}"`/bin:"$PATH"
INCLUDE="${VCINSTALLDIR}"'\include;'"${INCLUDE}"
LIB="${VCINSTALLDIR}"'\lib;'"${LIB}"
export INCLUDE LIB
- for creating 64-bit binaries: through the following bash commands:
# Set environment variables for using MSVC 14,
# for creating native 64-bit Windows executables.
# Windows C library headers and libraries.
WindowsCrtIncludeDir='C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt'
WindowsCrtLibDir='C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\'
INCLUDE="${WindowsCrtIncludeDir};$INCLUDE"
LIB="${WindowsCrtLibDir}x64;$LIB"
# Windows API headers and libraries.
WindowsSdkIncludeDir='C:\Program Files (x86)\Windows Kits\8.1\Include\'
WindowsSdkLibDir='C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\'
INCLUDE="${WindowsSdkIncludeDir}um;${WindowsSdkIncludeDir}shared;$INCLUDE"
LIB="${WindowsSdkLibDir}x64;$LIB"
# Visual C++ tools, headers and libraries.
VSINSTALLDIR='C:\Program Files (x86)\Microsoft Visual Studio 14.0'
VCINSTALLDIR="${VSINSTALLDIR}"'\VC'
PATH=`cygpath -u "${VCINSTALLDIR}"`/bin/amd64:"$PATH"
INCLUDE="${VCINSTALLDIR}"'\include;'"${INCLUDE}"
LIB="${VCINSTALLDIR}"'\lib\amd64;'"${LIB}"
export INCLUDE LIB
Building 32-bit binaries with MSVC is achieved through the following
preparation, configure, and build commands:
PATH=/usr/local/msvc32/bin:$PATH
export PATH
win32_target=_WIN32_WINNT_WINXP # for MSVC 9.0
win32_target=_WIN32_WINNT_VISTA # possibly for MSVC >= 10.0
win32_target=_WIN32_WINNT_WIN7 # possibly for MSVC >= 10.0
win32_target=_WIN32_WINNT_WIN8 # possibly for MSVC >= 10.0
./configure --host=i686-w64-mingw32 --prefix=/usr/local/msvc32 \
CC="$HOME/msvc/compile cl -nologo" \
CFLAGS="-MD" \
CXX="$HOME/msvc/compile cl -nologo" \
CXXFLAGS="-MD" \
CPPFLAGS="-D_WIN32_WINNT=$win32_target -I/usr/local/msvc32/include" \
LDFLAGS="-L/usr/local/msvc32/lib" \
LD="link" \
NM="dumpbin -symbols" \
STRIP=":" \
AR="$HOME/msvc/ar-lib lib" \
RANLIB=":"
make
make check
Building 64-bit binaries with MSVC is achieved through the following
preparation, configure, and build commands:
PATH=/usr/local/msvc64/bin:$PATH
export PATH
win32_target=_WIN32_WINNT_WINXP # for MSVC 9.0
win32_target=_WIN32_WINNT_VISTA # possibly for MSVC >= 10.0
win32_target=_WIN32_WINNT_WIN7 # possibly for MSVC >= 10.0
win32_target=_WIN32_WINNT_WIN8 # possibly for MSVC >= 10.0
./configure --host=x86_64-w64-mingw32 --prefix=/usr/local/msvc64 \
CC="$HOME/msvc/compile cl -nologo" \
CFLAGS="-MD" \
CXX="$HOME/msvc/compile cl -nologo" \
CXXFLAGS="-MD" \
CPPFLAGS="-D_WIN32_WINNT=$win32_target -I/usr/local/msvc64/include" \
LDFLAGS="-L/usr/local/msvc64/lib" \
LD="link" \
NM="dumpbin -symbols" \
STRIP=":" \
AR="$HOME/msvc/ar-lib lib" \
RANLIB=":"
make
make check
Installation:
make install
===============================================================================
3) Binaries for the Cygwin environment.
The generic instructions in the INSTALL file apply. But here are more
specific ones.
You need to install
* Cygwin (from https://cygwin.com/),
* some packages available from the Cygwin package installer:
make
* the Cygwin [cross-]compilation tools package, available from
the Cygwin package installer (setup-x86_64.exe):
- for creating 32-bit binaries: packages
cygwin32-gcc-core,
cygwin32
- for creating 64-bit binaries: packages
gcc-core
Building 32-bit binaries for Cygwin must be done in a directory *outside*
the Cygwin /home and /usr hierarchies. It is achieved through the following
preparation, configure, and build commands:
PATH=/usr/local/cygwin32/bin:/usr/i686-pc-cygwin/sys-root/usr/bin:$PATH
export PATH
./configure --host=i686-pc-cygwin --prefix=/usr/local/cygwin32 \
CC=i686-pc-cygwin-gcc \
CPPFLAGS="-I/usr/local/cygwin32/include -Wall" \
LDFLAGS="-L/usr/local/cygwin32/lib"
make
make check
Building 64-bit binaries for Cygwin is achieved through the following
preparation, configure, and build commands:
PATH=/usr/local/cygwin64/bin:$PATH
export PATH
./configure --host=x86_64-pc-cygwin --prefix=/usr/local/cygwin64 \
CC=x86_64-pc-cygwin-gcc \
CPPFLAGS="-I/usr/local/cygwin64/include -Wall" \
LDFLAGS="-L/usr/local/cygwin64/lib"
make
make check
Installation:
make install
===============================================================================
@@ -0,0 +1,15 @@
Thanks to for
Edmund Grimley Evans <edmundo@rano.org> bug reports
Taro Muraoka <koron@tka.att.ne.jp> Woe32 DLL support
Akira Hatakeyama <akira@sra.co.jp> OS/2 support
Juan Manuel Guerrero <st001906@hrz1.hrz.tu-darmstadt.de>
DOS/DJGPP support
Hironori Sakamoto <hsaka@mth.biglobe.ne.jp> advice on EUC-JP and JISX0213
Ken Lunde <lunde@adobe.com> detailed information about GB18030
@@ -0,0 +1,119 @@
Copyright © 2001 Johannes Erdfelt <johannes@erdfelt.com>
Copyright © 2007-2009 Daniel Drake <dsd@gentoo.org>
Copyright © 2010-2012 Peter Stuge <peter@stuge.se>
Copyright © 2008-2016 Nathan Hjelm <hjelmn@users.sourceforge.net>
Copyright © 2009-2013 Pete Batard <pete@akeo.ie>
Copyright © 2009-2013 Ludovic Rousseau <ludovic.rousseau@gmail.com>
Copyright © 2010-2012 Michael Plante <michael.plante@gmail.com>
Copyright © 2011-2013 Hans de Goede <hdegoede@redhat.com>
Copyright © 2012-2013 Martin Pieuchot <mpi@openbsd.org>
Copyright © 2012-2013 Toby Gray <toby.gray@realvnc.com>
Copyright © 2013-2018 Chris Dickens <christopher.a.dickens@gmail.com>
Other contributors:
Adrian Bunk
Akshay Jaggi
Alan Ott
Alan Stern
Alex Vatchenko
Andrew Fernandes
Andy Chunyu
Andy McFadden
Angus Gratton
Anil Nair
Anthony Clay
Antonio Ospite
Artem Egorkine
Aurelien Jarno
Bastien Nocera
Bei Zhang
Benjamin Dobell
Brent Rector
Carl Karsten
Christophe Zeitouny
Colin Walters
Dave Camarillo
David Engraf
David Moore
Davidlohr Bueso
Dmitry Fleytman
Doug Johnston
Evan Hunter
Federico Manzan
Felipe Balbi
Florian Albrechtskirchinger
Francesco Montorsi
Francisco Facioni
Gaurav Gupta
Graeme Gill
Gustavo Zacarias
Hans Ulrich Niedermann
Hector Martin
Hoi-Ho Chan
Ilya Konstantinov
Jakub Klama
James Hanko
Jeffrey Nichols
Johann Richard
John Sheu
Jonathon Jongsma
Joost Muller
Josh Gao
Joshua Blake
Justin Bischoff
KIMURA Masaru
Karsten Koenig
Konrad Rzepecki
Kuangye Guo
Lars Kanis
Lars Wirzenius
Lei Chen
Luca Longinotti
Marcus Meissner
Markus Heidelberg
Martin Ettl
Martin Koegler
Matthew Stapleton
Matthias Bolte
Michel Zou
Mike Frysinger
Mikhail Gusarov
Morgan Leborgne
Moritz Fischer
Ларионов Даниил
Nicholas Corgan
Omri Iluz
Orin Eman
Paul Fertser
Pekka Nikander
Rob Walker
Romain Vimont
Roman Kalashnikov
Sameeh Jubran
Sean McBride
Sebastian Pipping
Sergey Serb
Simon Haggett
Simon Newton
Stefan Agner
Stefan Tauner
Steinar H. Gunderson
Thomas Röfer
Tim Hutt
Tim Roberts
Tobias Klauser
Toby Peterson
Tormod Volden
Trygve Laugstøl
Uri Lublin
Vasily Khoruzhick
Vegard Storheil Eriksen
Venkatesh Shukla
Vianney le Clément de Saint-Marcq
Victor Toso
Vitali Lovich
William Skellenger
Xiaofan Chen
Zoltán Kovács
Роман Донченко
parafin
@@ -0,0 +1,504 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
[This is the first released version of the Lesser GPL. It also counts
as the successor of the GNU Library Public License, version 2, hence
the version number 2.1.]
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it. You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.
When we speak of free software, we are referring to freedom of use,
not price. Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.
To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights. These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.
To protect each distributor, we want to make it very clear that
there is no warranty for the free library. Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
Finally, software patents pose a constant threat to the existence of
any free program. We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder. Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.
Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License. This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License. We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.
When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library. The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom. The Lesser General
Public License permits more lax criteria for linking other code with
the library.
We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License. It also provides other free software developers Less
of an advantage over competing non-free programs. These disadvantages
are the reason we use the ordinary General Public License for many
libraries. However, the Lesser license provides advantages in certain
special circumstances.
For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard. To achieve this, non-free programs must be
allowed to use the library. A more frequent case is that a free
library does the same job as widely used non-free libraries. In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.
In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software. For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.
Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work
which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.
You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.
(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.
If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:
a) Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)
b) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (1) uses at run time a
copy of the library already present on the user's computer system,
rather than copying library functions into the executable, and (2)
will operate properly with a modified version of the library, if
the user installs one, as long as the modified version is
interface-compatible with the version that the work was made with.
c) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
d) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
e) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.
It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.
b) Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License. However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.
9. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if
written in the body of this License.
13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
To apply these terms, attach the following notices to the library. It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the library's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!
@@ -0,0 +1,2 @@
For the latest libusb news, please refer to the ChangeLog file, or visit:
http://libusb.info
@@ -0,0 +1,32 @@
# libusb
[![Build Status](https://travis-ci.org/libusb/libusb.svg?branch=master)](https://travis-ci.org/libusb/libusb)
[![Build status](https://ci.appveyor.com/api/projects/status/xvrfam94jii4a6lw?svg=true)](https://ci.appveyor.com/project/LudovicRousseau/libusb)
[![Coverity Scan Build Status](https://scan.coverity.com/projects/2180/badge.svg)](https://scan.coverity.com/projects/libusb-libusb)
libusb is a library for USB device access from Linux, macOS,
Windows, OpenBSD/NetBSD and Haiku userspace.
It is written in C (Haiku backend in C++) and licensed under the GNU
Lesser General Public License version 2.1 or, at your option, any later
version (see [COPYING](COPYING)).
libusb is abstracted internally in such a way that it can hopefully
be ported to other operating systems. Please see the [PORTING](PORTING)
file for more information.
libusb homepage:
http://libusb.info/
Developers will wish to consult the API documentation:
http://api.libusb.info
Use the mailing list for questions, comments, etc:
http://mailing-list.libusb.info
- Hans de Goede <hdegoede@redhat.com>
- Xiaofan Chen <xiaofanc@gmail.com>
- Ludovic Rousseau <ludovic.rousseau@gmail.com>
- Nathan Hjelm <hjelmn@cs.unm.edu>
- Chris Dickens <christopher.a.dickens@gmail.com>
(Please use the mailing list rather than mailing developers directly)
@@ -0,0 +1,2 @@
Daniel Drake <dsd@gentoo.org>
@@ -0,0 +1,504 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
[This is the first released version of the Lesser GPL. It also counts
as the successor of the GNU Library Public License, version 2, hence
the version number 2.1.]
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it. You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.
When we speak of free software, we are referring to freedom of use,
not price. Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.
To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights. These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.
To protect each distributor, we want to make it very clear that
there is no warranty for the free library. Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
Finally, software patents pose a constant threat to the existence of
any free program. We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder. Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.
Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License. This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License. We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.
When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library. The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom. The Lesser General
Public License permits more lax criteria for linking other code with
the library.
We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License. It also provides other free software developers Less
of an advantage over competing non-free programs. These disadvantages
are the reason we use the ordinary General Public License for many
libraries. However, the Lesser license provides advantages in certain
special circumstances.
For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard. To achieve this, non-free programs must be
allowed to use the library. A more frequent case is that a free
library does the same job as widely used non-free libraries. In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.
In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software. For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.
Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work
which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.
You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.
(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.
If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:
a) Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)
b) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (1) uses at run time a
copy of the library already present on the user's computer system,
rather than copying library functions into the executable, and (2)
will operate properly with a modified version of the library, if
the user installs one, as long as the modified version is
interface-compatible with the version that the work was made with.
c) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
d) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
e) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.
It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.
b) Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License. However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.
9. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if
written in the body of this License.
13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
To apply these terms, attach the following notices to the library. It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the library's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!
@@ -0,0 +1,47 @@
libusb is covered by the LGPL:
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
----
Alternatively, the files usb.h.in and/or usb.h may be licensed under the
BSD license:
Copyright (c) 2000-2003 Johannes Erdfelt <johannes@erdfelt.com>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,31 @@
This file lists notable changes in each release. For the full history of all
changes, see ChangeLog.
2012-04-24: libusb-compat-0.1.4 release
* Change usb_*_write() prototypes to use const for read-only parameters
* Fix #42 usb_detach_kernel_driver_np() error mapping
* Prefer libtoolize over glibtoolize in autogen.sh
2009-07-09: libusb-compat-0.1.3 release
* Fix cross-compiling
* Improved error code compatibility
2009-06-11: libusb-compat-0.1.2 release
* Handle libusb initialization failure
2009-05-28: libusb-compat-0.1.1 release
* Further improvements to match libusb-0.1 endpoint addressing behaviour
2008-12-13: libusb-compat-0.1.0 release
* Documentation changes only
2008-11-21: libusb-compat-0.1.0-beta3 release
* Bug fixes
2008-06-28: libusb-compat-0.1.0-beta2 release
* Match libusb-0.1 endpoint addressing behaviour
* Update for libusb-0.9.1
2008-05-25: libusb-compat-0.1.0-beta1 release
* Initial beta release
@@ -0,0 +1,46 @@
libusb-compat-0.1
=================
A compatibility layer allowing applications written for libusb-0.1 to work
with libusb-1.0. libusb-compat-0.1 attempts to look, feel, smell and walk
like libusb-0.1.
Do not attempt to install libusb-0.1 and libusb-compat-0.1 on the same system.
Known quirks/differences from libusb-0.1:
1. usb_resetep(), a previously deprecated function, is implemented as
equivalent to calling usb_clear_halt().
2. libusb-0.1 allowed you to open a device which you did not have permission
to do anything useful with (all I/O requests would immediately fail).
libusb-compat-0.1 does not allow you to open such devices. You can still
read descriptor info without opening a device.
3. usb_device's "num_children" attribute is hardcoded to 0, and "children"
is hardcoded to NULL. Do you need this information in your software? Let
us know on the mailing list, and we'll add it.
4. Some libusb-0.1 users may have implemented I/O cancellation by running
transfers in their own threads and simply killing the thread when they
don't want to do the transfer any more. This is bad programming practice
for obvious reasons, and this lack of functionality was one of the primary
drivers for libusb-1.0 development. With libusb-1.0 or libusb-compat-0.1
backed by libusb-1.0, forcefully killing threads in this way is likely
to cause all libusb I/O to halt. Instead, port your application to use
libusb-1.0's asynchronous transfer API, which supports transfer
cancellation.
5. Error codes returned on certain events may not exactly match the error
codes returned by libusb-0.1. Patches accepted to bring us closer to the
behaviour of libusb-0.1 on Linux.
6. The internal structure of usb_dev_handle is different from libusb-0.1. Of
course, since this is a purely internal structure, that shouldn't cause
any problems. In reality, some libusb-0.1 users make assumptions about what
is inside (bad programming practice) and those assumptions are no longer
true, resulting in broken software.
libusb homepage:
http://libusb.org/
Use the mailing list for questions, comments, etc:
https://sourceforge.net/mailarchive/forum.php?forum_name=libusb-devel
- Peter Stuge <peter@stuge.se>
(use the mailing list rather than mailing developers directly)
@@ -0,0 +1,2 @@
Please check the source code files and/or Git history for a list of all authors
and contributors.
@@ -0,0 +1,10 @@
drath:Dominic Rath <Dominic.Rath@gmx.de>
mlu:Magnus Lundin <lundin@mlu.mine.nu>
mifi:Michael Fischer <fischermi@t-online.de>
ntfreak:Spencer Oliver <spen@spen-soft.co.uk>
duane:Duane Ellis <openocd@duaneellis.com>
oharboe:Øyvind Harboe <oyvind.harboe@zylin.com>
kc8apf:Rick Altherr <kc8apf@users.berlios.de>
zwelch:Zachary T Welch <zw@superlucidity.net>
vpalatin:Vincent Palatin <vpalatin@users.berlios.de>
bodylove:Carsten Schlote <schlote@vahanus.net>
@@ -0,0 +1,16 @@
OpenOCD is provided under:
SPDX-License-Identifier: GPL-2.0-or-later
Being under the terms of the GNU General Public License version 2 or
later, according with:
LICENSES/preferred/GPL-2.0
In addition, other licenses may also apply. Please see:
LICENSES/license-rules.txt
for more details.
All contributions to OpenOCD are subject to this COPYING file.
@@ -0,0 +1,35 @@
This file includes highlights of the changes made in the OpenOCD
source archive release.
JTAG Layer:
Boundary Scan:
Target Layer:
Flash Layer:
Board, Target, and Interface Configuration Scripts:
Server Layer:
RTOS:
Documentation:
Build and Release:
This release also contains a number of other important functional and
cosmetic bugfixes. For more details about what has changed since the
last release, see the git repository history:
http://sourceforge.net/p/openocd/code/ci/v0.x.0/log/?path=
For older NEWS, see the NEWS files associated with each release
(i.e. NEWS-<version>).
For more information about contributing test reports, bug fixes, or new
features and device support, please read the new Developer Manual (or
the BUGS and PATCHES.txt files in the source archive).
@@ -0,0 +1,155 @@
This file includes highlights of the changes made in the OpenOCD
source archive release.
JTAG Layer:
* New driver for J-Link adapters based on libjaylink
(including support for FPGA configuration, SWO and EMUCOM)
* FTDI improvements to work at 30MHz clock
* BCM2835 native driver SWD and Raspberry Pi2 support
* BCM2835 is set to 4ma drive, slow slew rate
* ixo-usb-jtag (emulation of an Altera Bus Blaster I on
Cypress FX2 IC) support
* JTAG pass-through mode for CMSIS-DAP (including support for
FPGA configuration)
* OpenJTAG support for Cypress CY7C65215
* connect_assert_srst support for SWD
* Xilinx Virtex-II Series7 bitstream loading support
* Use JEP106 data to decode IDs
* Deprecated "ft2232" driver removed (use "ftdi" instead)
* GPL-incompatible FTDI D2XX library support dropped (Presto,
OpenJTAG and USB-Blaster I are using libftdi only now)
* ZY1000 support dropped (unmaintained since long)
* oocd_trace support dropped
Boundary Scan:
Target Layer:
* ARMv7-A, Cortex-M, Cortex-A/R important fixes and
improvements (allowing e.g. simultaneous debugging of A8 and
M3 cores, JTAG WAIT support etc.)
* ARM Cortex-A,R allow interrupt disable during single-step
(maskisr command)
* Semihosting support for ARMv7-A
* ARM Cortex-M7 support
* Intel Quark mcu D2000 support
* Freescale LS102x SAP support
* ThreadX RTOS support on ARM926E-JS
* Cortex-M RTOS stack alignment fixes
* FreeRTOS FPU support
* uC/OS-III RTOS support
* bridging semihosting to GDB's File-I/O support
* -defer-examine option added to target create command
* verify_image_checksum command added
Flash Layer:
* Atmel SAM4S, SAM4N, SAM4C support
* Atmel SAMV, SAMS, SAME (Cortex-M7) support
* Atmel AT91SAMD handle reset run/halt in DSU, other fixes
* Atmel AT91SAML21, SAML22, SAMC20/SAMC21, SAMD09 support
* ST STM32F4x support
* ST STM32F74x/76x/77x, STM32L4 support
* ST STM32L0 categories 1, 2 and 5 support
* Kinetis K02, K21, K22, K24, K26, K63, K64, K66 support
* Kinetis KE, KVx, K8x families support
* Kinetis FlexNVM handling
* Kinetis flash protection, security, mass_erase improvements
* Infineon XMC4xxx family support
* Infineon XMC1000 flash driver
* Energy Micro EFM32 Happy Gecko support
* Energy Micro EFM32 debug interface lock support
* Analog Devices ADuCM360 support
* Unified Nuvoton NuMicro flash driver
* NIIET K1921VK01T (Cortex-M4) support
* Nordic Semiconductor nRF51 improvements
* Spansion FM4 flash (including MB9BFx64/x65, S6E2DH) driver
* Ambiq Micro Apollo flash driver
* PIC32MX new device IDs, 17x/27x flash support
* read_bank() and verify_bank() NOR flash internal API to
allow reading (and verifying) non-memory-mapped devices
* JTAGSPI driver to access SPI NOR flashes via a trivial
FPGA proxy
* Milandr read/verify for Info memory support
* Various discrete SPI NOR flashes support
* CFI 16-bit flash reversed endianness support
Board, Target, and Interface Configuration Scripts:
* Digilent JTAG-HS2, JTAG-HS3 interfaces configs
* FTDI UM232H module as JTAG interface config
* 100ask's OpenJTAG interface config
* MBFTDI interface config
* XDS100v3 interface config
* Freescale Vybrid VF6xx target config
* EmCraft VF6 SOM and baseboard configs
* Freescale SabreSD board config
* Freescale VF65GS10 tower board config
* Pipistrello Xilinx Spartan6 LX45 FPGA board config
* miniSpartan6+ board config
* Xilinx Kintex7 Development board config
* Parallella-I board config
* Digilent Atlys and Analog Discovery board configs
* Numato Opsis board config
* Xilinx Spartan 6 FPGA "Device DNA" reading support
* Altera 10M50 FPGA (MAX10 family) target config
* Altera EPM240 CPLD (MAXII family) target config
* Marsohod2, Marsohod3 FPGA, Marsohod CPLD boards configs
* Novena's integrated FPGA board config
* XMOS XS1-XAU8A-10's ARM core config
* XMOS xCORE-XA Core Module board config
* Exynos5250 target config
* Arndale board config
* FM4 MB9BFxxx family configs
* Spansion SK-FM4-U120-9B560 board config
* Diolan LPC4357-DB1 board config
* ST STM32F469 discovery board config
* ST STM32F7-DISCO, STM327[4|5]6G-EVAL boards configs
* ST STM32L4 discovery, NUCLEO L476RG, STM32F429I-DISC1 boards
configs
* Atheros AR2313, AR2315 targets config
* Netgear WP102 board config
* La Fonera FON2200 board config
* Linksys WAG200G board config
* LPC-Link2 board config
* NXP LPC4370 target config
* Atmel SAMV, SAMS, SAME target configs
* Atmel SAM E70 Xplained, SAM V71 Xplained Ultra boards
configs
* Nordic nRF52 target config
* Nordic nRF51-DK, nRF52-DK boards configs
* Infineon XMC4700 Relax Kit, XMC4800 Relax EtherCAT Kit,
XMC4300 Relax EtherCAT Kit boards configs
* Renesas S7G2 target config
* Renesas DK-S7G2 board config
* Altera EP3C10 FPGA (Cyclone III family) target config
* TI MSP432P4xx target config
* Cypress PSoC 5LP target config
* Analog Devices ADSP-SC58x target config (Cortex-A5 core only)
Server Layer:
* tcl_trace command for async target trace output via Tcl RPC
Documentation:
Build and Release:
* Various fixes thanks to http://coccinellery.org/
* libftdi is now autodetected with pkgconfig
* Releases should now support reproducible builds
* Conversion to non-recursive make, requires automake >= 1.14
* Udev rules modified to add uaccess tag and moved to
60-openocd.rules
* Support searching for scripts relative to the openocd binary
for all major architectures
This release also contains a number of other important functional and
cosmetic bugfixes. For more details about what has changed since the
last release, see the git repository history:
http://sourceforge.net/p/openocd/code/ci/v0.10.0/log/?path=
For older NEWS, see the NEWS files associated with each release
(i.e. NEWS-<version>).
For more information about contributing test reports, bug fixes, or new
features and device support, please read the new Developer Manual (or
the BUGS and PATCHES.txt files in the source archive).
@@ -0,0 +1,238 @@
This file includes highlights of the changes made in the OpenOCD
source archive release.
JTAG Layer:
* add debug level 4 for verbose I/O debug
* bitbang, add read buffer to improve performance
* Cadence SystemVerilog Direct Programming Interface (DPI) adapter driver
* CMSIS-DAP v2 (USB bulk based) adapter driver
* Cypress KitProg adapter driver
* FTDI FT232R sync bitbang adapter driver
* Linux GPIOD bitbang adapter driver through libgpiod
* Mellanox rshim USB or PCIe adapter driver
* Nuvoton Nu-Link and Nu-Link2 adapter drivers
* NXP IMX GPIO mmap based adapter driver
* ST-Link consolidate all versions in single config
* ST-Link read properly old USB serial numbers
* STLink/V3 support (for ST devices only !)
* STM8 SWIM transport
* TI XDS110 adapter driver
* Xilinx XVC/PCIe adapter driver
Boundary Scan:
Target Layer:
* 64 bit address support
* ARCv2 target support
* ARM Cortex-A hypervisor mode support
* ARM Cortex-M fast PC sampling support for profiling
* ARM generic CTI support
* ARM generic mem-ap target support
* ARMv7-A MMU tools
* ARMv7m traces add TCP stream server
* ARMv8 AARCH64 target support and semihosting support
* ARMv8 AARCH64 disassembler support through capstone library
* ARMv8-M target support
* EnSilica eSi-RISC target support, including instruction tracing
eSi-Trace support
* MIPS64 target support
* Motorola SREC S6 record image file support
* RISC-V target support
* SEGGER Real Time Transfer (RTT) initial support (for single target,
Cortex-M only)
* ST STM8 target support
* Various MIPS32 target improvements
Flash Layer:
* Atheros (ath79) SPI interface support
* Atmel atmega128rfa1 support
* Atmel SAM D21, D51, DA1, E51, E53, E54, G55, R30 support
* Atmel SAMC2?N* support
* Cypress PSoC5LP, PSoC6 support
* EnSilica eSi-RISC support
* Foshan Synwit Tech SWM050 support
* Maxim Integrated MAX32XXX support
* Nordic Semiconductor nRF51822, nRF52810, nRF52832 support
* NXP Kinetis K27, K28, KE1x, KEAx, KL28, KL8x, KV5x, KWx support
* Renesas RPC HF support
* SH QSPI support
* SiFive Freedom E support
* Silicon Labs EFR-family, EZR32HG support
* ST BlueNRG support
* ST STM32 QUAD/OCTO-SPI interface support for Flash, FRAM and EEPROM
* ST STM32F72x, STM32F4x3, STM32H7xx support
* ST STM32G0xx, STM32G4xx, STM32L4x, STM32WB, STM32WL support
* ST STM32L5x support (non secure mode)
* TI CC13xx, CC26xx, CC32xx support
* TI MSP432 support
* Winner Micro w600 support
* Xilinx XCF platform support
* Various discrete SPI NOR flashes support
Board, Target, and Interface Configuration Scripts:
* 8devices LIMA board config
* Achilles Instant-Development Kit Arria 10 board config
* Amazon Kindle 2 and DX board config
* Analog Devices ADSP-SC58x, ADSP-SC584-EZBRD board config
* Andes Technology ADP-XC7KFF676 board config
* Andes Technology Corvette-F1 board config
* ARM Musca A board config
* Arty Spartan 7 FPGA board config
* Atmel SAMD10 Xplained mini board config
* Atmel SAMD11 Xplained Pro board config
* Atmel SAM G55 Xplained Pro board config
* AVNET UltraZED EG StarterKit board config
* Blue Pill STM32F103C8 board config
* DP Busblaster v4.1a board config
* DPTechnics DPT-Board-v1 board config
* Emcraft imx8 SOM BSB board config
* Globalscale ESPRESSObin board config
* Kasli board config
* Kintex Ultrascale XCKU040 board config
* Knovative KC-100 board config
* LeMaker HiKey board config
* Microchip (Atmel) SAME54 Xplained Pro board config
* Microchip (Atmel) SAML11 Xplained Pro board config
* Nordic module NRF52 board config
* Numato Lab Mimas A7 board config
* NXP Freedom FRDM-LS1012A board config
* NXP IMX7SABRE board config
* NXP IMX8MP-EVK board config
* NXP MC-IMX8M-EVK board config
* QuickLogic QuickFeather board config
* Renesas R-Car E2, H2, M2 board config
* Renesas R-Car Salvator-X(S) board config
* Renesas RZ/A1H GR-Peach board config
* Rigado BMD-300 board config
* Sayma AMC board config
* Sifive e31arty, e51arty, hifive1 board config
* ST B-L475E-IOT01A board config
* ST BlueNRG idb007v1, idb008v1, idb011v1 board config
* ST STM32F412g discovery board config
* ST STM32F413h discovery board config
* ST STM32F469i discovery board config
* ST STM32F7 Nucleo board config
* ST STM32F723e discovery board config
* ST STM32F746g discovery board config
* ST STM32F769i discovery board config
* ST STM32H735g discovery board config
* ST STM32H743zi Nucleo board config
* ST STM32H745i discovery board config
* ST STM32H747i discovery board config
* ST STM32H750b discovery board config
* ST STM32H7b3i discovery board config
* ST STM32H7x_dual_qspi board config
* ST STM32H7x3i Eval boards config
* ST STM32L073 Nucleo board config
* ST STM32L476g discovery board config
* ST STM32L496g discovery board config
* ST STM32L4p5g discovery board config
* ST STM32L4r9i discovery board config
* ST STM32L5 Nucleo board config
* ST STM32MP15x DK2 board config
* ST STM32WB Nucleo board config
* ST STM8L152R8 Nucleo board config
* Synopsys DesignWare ARC EM board config
* Synopsys DesignWare ARC HSDK board config
* TI BeagleBone family boards config
* TI CC13xx, CC26xx, CC32xx LaunchPad board config
* TI MSP432 LaunchPad board config
* Tocoding Poplar board config
* TP-Link WDR4300 board config
* Allwinner V3s target config
* Andes Technology NDS V5 target config
* Atmel atmega128rfa1 target config
* ARM corelink SSE-200 target config
* Atheros_ar9344 target config
* Cypress PSoC5LP, PSoC6 target config
* EnSilica eSi-RISC target config
* Foshan Synwit Tech SWM050 target config
* GigaDevice GD32VF103 target config
* Hisilicon Hi3798 target config
* Hisilicon Hi6220 target config
* Infineon TLE987x target config
* Marvell Armada 3700 target config
* Maxim Integrated MAX32XXX target config
* Mellanox BlueField target config
* Microchip (Atmel) SAME5x, SAML1x target config
* NXP IMX6SX, IMX6UL, IMX7, IMX7ULP, IMX8 target config
* NXP Kinetis KE1xZ, KE1xF target config
* NXP LPC84x, LPC8Nxx, LS1012A, NHS31xx target config
* Qualcomm QCA4531 target config
* QuickLogic EOS S3 target config
* Renesas R-Car E2, H2, M2 target config
* Renesas R-Car Gen3 target config
* Renesas RZ/A1H target config
* Rockchip RK3308 target config
* ST BlueNRG target config
* ST STM32G0, STM32G4, STM32H7, STM32L0, STM32L5 target config
* ST STM32MP15x target config
* ST STM32WBx, STM32WLEx target config
* ST STM8L152, S003, S103, S105 target config
* Synopsys DesignWare ARC EM target config
* Synopsys DesignWare ARC HS Development Kit SoC target config
* TI CC13xx, CC26xx, CC32xx target config
* TI TNETC4401 target config
* Xilinx UltraScale+ target config
* Altera 5M570Z (MAXV family) CPLD config
* Xilinx Ultrascale, XCF CPLD config
* Intel (Altera) Arria10 FPGA config
* Cadence SystemVerilog Direct Programming Interface (DPI) interface config
* Cypress KitProg interface config
* Digilent SMT2 NC interface config
* DLN-2 example of Linux GPIOD interface config
* FTDI C232HM interface config
* HIE JTAG Debugger interface config
* In-Circuit's ICprog interface config
* isodebug isolated JTAG/SWD+UART interface config
* Mellanox rshim USB or PCIe interface config
* Nuvoton Nu-Link interface config
* NXP IMX GPIO mmap based interface config
* Steppenprobe open hardware interface config
* TI XDS110 interface config
Server Layer:
* 64 bit address support
* default bind to IPv4 localhost
* gdb: allow multiple connections
* gdb: architecture element support
* gdb: vCont, vRun support
* telnet: handle Ctrl+A, Ctrl+E and Ctrl+K
RTOS:
* Chromium-EC rtos support
* hwthread pseudo rtos support
* NuttX rtos support
* RIOT rtos support
Documentation:
* Improve STM32 flash driver
* Various typo fix and improvements
Build and Release:
* Add libutil to support jimtcl version 0.80
* Clang warning fixes
* GitHub workflow for Win32 snapshot binaries
* Handle Tcl return values consistently
* Mitigation for CVE-2018-5704: Prevent some forms of Cross
Protocol Scripting attacks
* Support for libftdi 1.5
* Travis-CI basic support
* Update libjaylink to version 0.2.0
* Update jimtcl to version 0.79
* Use external (optional) library capstone for ARM and AARCH64 disassembly
This release also contains a number of other important functional and
cosmetic bugfixes. For more details about what has changed since the
last release, see the git repository history:
http://sourceforge.net/p/openocd/code/ci/v0.11.0/log/?path=
For older NEWS, see the NEWS files associated with each release
(i.e. NEWS-<version>).
For more information about contributing test reports, bug fixes, or new
features and device support, please read the new Developer Manual (or
the BUGS and PATCHES.txt files in the source archive).
@@ -0,0 +1,132 @@
This file includes highlights of the changes made in the OpenOCD
source archive release.
JTAG Layer:
* add default to adapter speed when unspecified (100 kHz)
* AM335X gpio (BeagleBones) adapter driver
* BCM2835 support for SWD
* Cadence Virtual Debug (vdebug) adapter driver
* CMSIS-DAP support for SWO and SWD multidrop
* Espressif USB JTAG Programmer adapter driver
* Remote bitbang support for Windows host
* ST-LINK add TCP server support to adapter driver
* SWD multidrop support
Boundary Scan:
Target Layer:
* aarch64: support watchpoints
* arm: support independent TPIU and SWO for trace
* arm adi v5: support Large Physical Address Extension
* arm adi v6: support added, for jtag and swd transport
* cortex_a: support watchpoints
* elf 64bit load support
* Espressif: support ESP32, ESP32-S2 and ESP32-S3 cores
* semihosting: support user defined operations
* Xtensa: support Xtensa LX architecture via JTAG and ADIv5 DAP
Flash Layer:
* Atmel/Microchip SAM E51G18A, E51G19A, R35J18B, LAN9255 support
* GigaDevice GD32E23x, GD32F1x0/3x0, GD32VF103 support
* Nuvoton NPCX series support
* onsemi RSL10 support
* Raspberry Pi Pico RP2040 support
* ST BlueNRG-LPS support
* ST STM32 G05x, G06x, G0Bx, G0Cx, U57x, U58x, WB1x, WL5x support
* ST STM32 G0, G4, L4, L4+, L5, WB, WL OTP support
Board, Target, and Interface Configuration Scripts:
* Ampere Computing eMAG8180, Altra ("Quicksilver") and Altra Max ("Mystique") board config
* Cadence KC705 FPGA (Xtensa Development Platform) via JTAG and ADIv5 DAP board config
* Digilent Nexys Video board config
* Espressif ESP32 ETHERNET-KIT and WROVER-KIT board config
* Espressif ESP32 via ESP USB Bridge generic board config
* Espressif ESP32-S2 Kaluga 1 board config
* Espressif ESP32-S2 with ESP USB Bridge board config
* Espressif ESP32-S3 example board config
* Kontron SMARC-sAL28 board config
* LambdaConcept ECPIX-5 board config
* Microchip ATSAMA5D27-SOM1-EK1 board config
* Microchip EVB-LAN9255 board config
* Microchip SAME51 Curiosity Nano board config
* NXP FRDM-K64F, LS1046ARDB and LS1088ARDB board config
* NXP RT6XX board config
* Olimex H405 board config
* Radiona ULX3S board config
* Raspberry Pi 3 and Raspberry Pi 4 model B board config
* Raspberry Pi Pico-Debug board config
* Renesas R-Car V3U Falcon board config
* ST BlueNRG-LPS steval-idb012v1 board config
* ST NUCLEO-8S208RB board config
* ST NUCLEO-G031K8, NUCLEO-G070RB, NUCLEO-G071RB board config
* ST NUCLEO-G431KB, NUCLEO-G431RB, NUCLEO-G474RE board config
* ST STM32MP13x-DK board config
* TI AM625 EVM, AM642 EVM and AM654 EVM board config
* TI J721E EVM, J721S2 EVM and J7200 EVM board config
* Ampere Computing eMAG, Altra ("Quicksilver") and Altra Max ("Mystique") target config
* Cadence Xtensa generic and Xtensa VDebug target config
* Broadcom BCM2711, BCM2835, BCM2836 and BCM2837 target config
* Espressif ESP32, ESP32-S2 and ESP32-S3 target config
* Microchip ATSAMA5D2 series target config
* NanoXplore NG-Ultra SoC target config
* NXP IMX8QM target config
* NXP LS1028A, LS1046A and LS1088A target config
* NXP RT600 (Xtensa HiFi DSP) target config
* onsemi RSL10 target config
* Raspberry Pi Pico RP2040 target config
* Renesas R8A779A0 V3U target config
* Renesas RZ/Five target config
* Renesas RZ/G2 MPU family target config
* Rockchip RK3399 target config
* ST BlueNRG-LPS target config
* ST STM32MP13x target config
* TI AM625, AM654, J721E and J721S2 target config
* Ashling Opella-LD interface config
* Aspeed AST2600 linuxgpiod based interface config
* Blinkinlabs JTAG_Hat interface config
* Cadence Virtual Debug (vdebug) interface config
* Espressif ESP32-S2 Kaluga 1 board's interface config
* Espressif USB Bridge jtag interface config
* Infineon DAP miniWiggler V3 interface config
* PLS SPC5 interface config
* Tigard interface config
* Lattice MachXO3 family FPGA config
Server Layer:
* GDB: add per-target remote protocol extensions
* GDB: more 'Z' packets support
* IPDBG JtagHost server functionality
* semihosting: I/O redirection to TCP server
* telnet: support for command's autocomplete
RTOS:
* 'none' rtos support
* Zephyr rtos support
Documentation:
Build and Release:
* Add json extension to jimtcl build
* Drop dependency from libusb0
* Drop repository repo.or.cz for submodules
* Move gerrit to https://review.openocd.org/
* Require autoconf 2.69 or newer
* Update jep106 to revision JEP106BF.01
* Update jimtcl to version 0.81
* Update libjaylink to version 0.3.1
* New configure flag '--enable-jimtcl-maintainer' for jimtcl build
This release also contains a number of other important functional and
cosmetic bugfixes. For more details about what has changed since the
last release, see the git repository history:
http://sourceforge.net/p/openocd/code/ci/v0.12.0/log/?path=
For older NEWS, see the NEWS files associated with each release
(i.e. NEWS-<version>).
For more information about contributing test reports, bug fixes, or new
features and device support, please read the new Developer Manual (or
the BUGS and PATCHES.txt files in the source archive).
@@ -0,0 +1,80 @@
The OpenOCD 0.2.0 source archive release includes numerous improvements
that were made since the initial 0.1.0 source archive release. Many
contributors helped make this release a great success, and the community
of developers and maintainers look forward to any response.
In addition to the list of changes below, countless bug fixing and
cleaning was performed across the tree. Various TCL command parameters
must past stricter value checks, and many more error conditions have
been handled correctly. These efforts helped to make the 0.2.0 release
more stable and robust, though some changes may expose latent bugs in
your existing configuration scripts.
This release does not maintain backward compatibility in all respects,
so some target or configuration scripts may need to be updated. In some
cases, you may also see warnings; resolve those, because they indicate
commands that will be removed in the future.
The following areas of OpenOCD functionality changed in this release:
JTAG Layer:
- Improves modularity: core, TCL, driver commands, and interface have
been separated, encapsulated, and documented for developers. Mostly.
- Improves JTAG TAP transition tables:
* Makes TAP paths variable length, rather than being fixed at 7 steps.
* Fixes problems with some targets that did not like longer paths.
- Improves JTAG driver/minidriver modularity and encapsulation.
- New drivers:
* Adds stub minidriver for developing new embedded JTAG interfaces.
- Improves drivers:
* ft2232+ftd2xx:
+ Adds initial high-speed device support: --enable-ftd2xx-highspeed
+ Supports more types of FTDI-based devices.
* jlink:
+ Works with more versions of the firmware (v3 and newer)
+ Supports dynamically detects device capabilities and limits
* vsllink:
+ Supports very long scan chains
* amtjtagaccel:
+ Fixes broken ID code detection problems.
Target Layer:
- New devices: AVR, FA526
- Improved support: ARM ADI, ARM11, MIPS
- Numerous other bug fixes and improvements
Flash Layer:
- Improved drivers: mflash
- New drivers: AT91SAM3, AVR, Davinci NAND
Board, Interface, and Target Configuration Scripts:
- Many new and improved targets and boards are now available.
- Better separation of "board" and "target" configuration
- Moved all TCL files to top-level "tcl" directory in the source tree
- Installation moved from '$pkglibdir/' to '$pkgdatadir/scripts/'.
- Site-specific files should be installed under '$pkgdatadir/site/';
files that exist this tree will be used in preference to default
distribution configurations in '$pkgdatadir/scripts/'.
Documentation:
- Updated User Guide: http://openocd.berlios.de/doc/html/index.html
* Partially re-written and re-organized.
* Standardized presentation for all commands.
* Covers many drivers and commands that were previously omitted.
* New index for commands and drivers.
- Added Developer Manual: http://openocd.berlios.de/doc/doxygen/index.html
* Now includes architecture, technical primers, style guides, and more.
* Available in-tree and on-line.
Build and Release:
- Increased configuration and compilation warning coverage.
* Use --disable-werror to work around build errors caused by warnings.
- Use libtool to produce helper libraries as a step toward "libopenocd".
- New processes and scripting to facilitate future source releases.
For more details about what has changed since 0.1.0, see the ChangeLog
associated with this release.
For more information about contributing test reports, bug fixes, or new
features and device support, please read the new Developer Manual (or
the BUGS and PATCHES files in the source archive).
@@ -0,0 +1,82 @@
This file should include highlights of the changes made in the
OpenOCD openocd-0.3.0 source archive release. See the repository
history for details about what changed, including bugfixes and
other issues not mentioned here.
JTAG Layer:
FT2232H (high speed USB) support doesn't need separate configuration
New FT2232H JTAG adapters: Amontec, Olimex, Signalyzer
New reset_config options for SRST gating the JTAG clock (or not)
TAP declaration no longer requires ircapture and mask attributes
Scan chain setup should be more robust, with better diagnostics
New TAP events:
"post-reset" for TAP-invariant setup code (TAPs not usable yet)
"setup" for use once TAPs are addressable (e.g. with ICEpick)
Overridable Tcl "init_reset" and "jtag_init" procedures
Simple "autoprobe" mechanism to help simplify server setup
Boundary Scan:
SVF bugfixes ... parsing fixes, better STATE switch conformance
XSVF bugfixes ... be more correct, handle Xilinx tool output
Target Layer:
Warn on use of obsolete numeric target IDs
New commands for use with Cortex-M3 processors:
"cortex_m3 disassemble" ... Thumb2 disassembly (UAL format)
"cortex_m3 vector_catch" ... traps certain hardware faults
without tying up breakpoint resources
If you're willing to help debug it
VERY EARLY Cortex-A8 and ARMv7A support
Updated BeagleBoard.org hardware support
you may need to explicitly "reset" after connect-to-Beagle
New commands for use with XScale processors: "xscale vector_table"
ARM
bugfixes to single-stepping Thumb code
ETM: unavailable registers are not listed
ETB, ETM: report actual hardware status
ARM9
name change: "arm9 vector_catch" not "arm9tdmi vector_catch"
ARM11
single stepping support for i.MX31
bugfix for missing "arm11" prefix on "arm11 memwrite ..."
GDB support
gdb_attach command is gone
Flash Layer:
The lpc2000 driver handles the new NXP LPC1700 (Cortex-M3) chips
New drivers:
lpc2900, for NXP LPC2900 chips (ARM968 based)
mx3_nand, for imx31
New "last" flag for NOR "flash erase_sector" and "flash protect"
The "nand erase N" command now erases all of bank N
Speed up davinci_nand by about 3x
Board, Target, and Interface Configuration Scripts:
Amontec JTAGkey2 support
Cleanup and additions for the TI/Luminary Stellaris scripts
LPC1768 target (and flash) support
Keil MCB1700 eval board
Samsung s3c2450
Mini2440 board
Numeric TAP and Target identifiers now trigger warnings
PXA255 partially enumerates
Documentation:
Capture more debugging and setup advice
Notes on target source code changes that may help debugging
Build and Release:
Repository moved from SVN at Berlios to GIT at SourceForge
Clean builds on (32-bit) Cygwin
Clean builds on 64-bit MinGW
For more details about what has changed since the last release,
see the git repository history. With gitweb, you can browse that
in various levels of detail.
For older NEWS, see the NEWS files associated with each release
(i.e. NEWS-<version>).
For more information about contributing test reports, bug fixes, or new
features and device support, please read the new Developer Manual (or
the BUGS and PATCHES files in the source archive).
@@ -0,0 +1,98 @@
This file includes highlights of the changes made in the
OpenOCD 0.4.0 source archive release. See the repository
history for details about what changed, including bugfixes
and other issues not mentioned here.
JTAG Layer:
Support KT-Link JTAG adapter.
Support USB-JTAG, Altera USB-Blaster and compatibles.
Boundary Scan:
Target Layer:
General
- Removed commands which have been obsolete for at least
a year (from both documentation and, sometimes, code).
- new "reset-assert" event, for systems without SRST
ARM
- supports "reset-assert" event (except on Cortex-M3)
- renamed "armv4_5" command prefix as "arm"
- recognize TrustZone "Secure Monitor" mode
- "arm regs" command output changed
- register names use "sp" not "r13"
- add top-level "mcr" and "mrc" commands, replacing
various core-specific operations
- basic semihosting support (ARM7/ARM9 only, for now)
ARM11
- Should act much more like other ARM cores:
* Preliminary ETM and ETB hookup
* accelerated "flash erase_check"
* accelerated GDB memory checksum
* support "arm regs" command
* can access all core modes and registers
* watchpoint support
- Shares some core debug code with Cortex-A8
Cortex-A8
- Should act much more like other ARM cores:
* support "arm regs" command
* can access all core modes and registers
* watchpoint support
- Shares some core debug code with ARM11
Cortex-M3
- Exposed DWT registers like cycle counter
- vector_catch settings not clobbered by resets
- no longer interferes with firmware's fault handling
ETM, ETB
- "trigger_percent" command moved ETM --> ETB
- "etm trigger_debug" command added
MIPS
- use fastdata writes
Freescale DSP563xx cores (partial support)
Flash Layer:
'flash bank' and 'nand device' take <bank_name> as first argument.
With this, flash/NAND commands allow referencing banks by name:
- <bank_name>: reference the bank with its defined name
- <driver_name>[.N]: reference the driver's Nth bank
New 'nand verify' command to check bank against an image file.
The "flash erase_address" command now rejects partial sectors;
previously it would silently erase extra data. If you
want to erase the rest of the first and/or last sectors
instead of failing, you must pass an explicit "pad" flag.
New at91sam9 NAND controller driver.
New s3c64xx NAND controller driver.
Board, Target, and Interface Configuration Scripts:
ARM9
- ETM and ETB hookup for iMX2* targets
Add $HOME/.openocd to the search path.
Handle Rev C of LM3S811 eval boards.
- use "luminary-lm3s811.cfg" for older boards
- use "luminary.cfg" for RevC and newer
Core Jim/TCL Scripting:
New 'usage' command to provide terse command help.
Improved command 'help' command output (sorted and indented).
Improved command handling:
- Most boolean settings now accept any of the following:
on/off, enable/disable, true/false, yes/no, 1/0
- More error checking and reporting.
Documentation:
New built-in command development documentation and primer.
Build and Release:
Use --enable-doxygen-pdf to build PDF developer documentation.
Consider upgrading to libftdi 0.17 if you use that library; it
includes bugfixes which improve FT2232H support.
For more details about what has changed since the last release,
see the git repository history. With gitweb, you can browse that
in various levels of detail.
For older NEWS, see the NEWS files associated with each release
(i.e. NEWS-<version>).
For more information about contributing test reports, bug fixes, or new
features and device support, please read the new Developer Manual (or
the BUGS and PATCHES.txt files in the source archive).
@@ -0,0 +1,73 @@
This file includes highlights of the changes made in the
OpenOCD 0.5.0 source archive release. See the repository
history for details about what changed, including bugfixes
and other issues not mentioned here.
JTAG Layer:
New driver for "Bus Pirate"
Rename various commands so they're not JTAG-specific
There are migration procedures for most of these, but you should
convert your scripts to the new names, since those procedures
will not be around forever.
jtag jinterface ... is now adapter_name
jtag_khz ... is now adapter_khz
jtag_nsrst_delay ... is now adapter_nsrst_delay
jtag_nsrst_assert_width ... is now adapter_nsrst_assert_width
Support Voipac VPACLink JTAG Adapter.
Boundary Scan:
Transport framework core ... supporting future work for SWD, SPI, and other
non-JTAG ways to debug targets or program flash.
Target Layer:
ARM:
- basic semihosting support for ARMv7M.
- renamed "armv7m" command prefix as "arm"
MIPS:
- "ejtag_srst" variant removed. The same functionality is
obtained by using "reset_config none".
- added PIC32MX software reset support, this means srst is not
required to be connected anymore.
OTHER:
- preliminary AVR32 AP7000 support.
Flash Layer:
New "stellaris recover" command, implements the procedure
to recover locked devices (restoring non-volatile
state to the factory defaults, including erasing
the flash and its protection bits, and possibly
re-enabling hardware debugging).
PIC32MX now uses algorithm for flash programming, this
has increased the performance by approx 96%.
New 'pic32mx unlock' cmd to remove readout protection.
New STM32 Value Line Support.
New 'virtual' flash driver, used to associate other addresses
with a flash bank. See pic32mx.cfg for usage.
New iMX27 NAND flash controller driver.
Board, Target, and Interface Configuration Scripts:
Support IAR LPC1768 kickstart board (by Olimex)
Support Voipac PXA270/PXA270M module.
New $PARPORTADDR tcl variable used to change default
parallel port address used.
Remove lm3s811.cfg; use "stellaris.cfg" instead
Core Jim/TCL Scripting:
New "add_script_search_dir" command, behaviour is the same
as the "-s" cmd line option.
Documentation:
Build and Release:
For more details about what has changed since the last release,
see the git repository history. With gitweb, you can browse that
in various levels of detail.
For older NEWS, see the NEWS files associated with each release
(i.e. NEWS-<version>).
For more information about contributing test reports, bug fixes, or new
features and device support, please read the new Developer Manual (or
the BUGS and PATCHES.txt files in the source archive).
@@ -0,0 +1,54 @@
This file includes highlights of the changes made in the
OpenOCD source archive release. See the
repository history for details about what changed, including
bugfixes and other issues not mentioned here.
JTAG Layer:
New STLINK V1/V2 JTAG/SWD adapter support.
New OSJTAG adapter support.
New Tincantools Flyswatter2 support.
Improved ULINK driver.
Improved RLINK driver.
Support for adapters based on FT232H chips.
New experimental driver for FTDI based adapters, using libusb-1.0 in asynchronous mode.
Boundary Scan:
Target Layer:
New Cortex-M0 support.
New Cortex-M4 support.
Improved Working area algorithm.
New RTOS support. Currently linux, FreeRTOS, ThreadX and eCos.
Connecting under reset to Cortex-Mx and MIPS chips.
Flash Layer:
New SST39WF1601 support.
New EN29LV800BB support.
New async algorithm support for selected targets, stm32, stellaris and pic32.
New Atmel SAM3S, SAM3N support.
New ST STM32L support.
New Microchip PIC32MX1xx/2xx support.
New Freescale Kinetis K40 support.
Board, Target, and Interface Configuration Scripts:
Support Dangerous Prototypes Bus Blaster.
Support ST SPEAr Family.
Support Gumstix Verdex boards.
Support TI Beaglebone.
Documentation:
Improved HACKING info for submitting patches.
Fixed numerous broken links.
Build and Release:
For more details about what has changed since the last release,
see the git repository history. With gitweb, you can browse that
in various levels of detail.
For older NEWS, see the NEWS files associated with each release
(i.e. NEWS-<version>).
For more information about contributing test reports, bug fixes, or new
features and device support, please read the new Developer Manual (or
the BUGS and PATCHES.txt files in the source archive).
@@ -0,0 +1,43 @@
This file includes highlights of the changes made in the
OpenOCD source archive release. See the
repository history for details about what changed, including
bugfixes and other issues not mentioned here.
JTAG Layer:
New TI ICDI adapter support.
Support Latest OSBDM firmware.
Improved MIPS EJTAG Support.
Boundary Scan:
Target Layer:
New ARMv7R and Cortex-R4 support.
Added ChibiOS/RT support.
Flash Layer:
New NXP LPC1850 support.
New NXP LPC4300 support.
New NXP SPIFI support.
New Energy Micro EFM32 support.
New ST STM32W support.
New ST STM32f2 write protection and lock/unlock support.
Ability to override STM32 flash bank size.
Board, Target, and Interface Configuration Scripts:
Support Freescale i.MX6 series targets.
Documentation:
New MIPS debugging info.
Build and Release:
For more details about what has changed since the last release,
see the git repository history. With gitweb, you can browse that
in various levels of detail.
For older NEWS, see the NEWS files associated with each release
(i.e. NEWS-<version>).
For more information about contributing test reports, bug fixes, or new
features and device support, please read the new Developer Manual (or
the BUGS and PATCHES.txt files in the source archive).
@@ -0,0 +1,111 @@
This file includes highlights of the changes made in the OpenOCD
source archive release.
JTAG Layer:
* New CMSIS-DAP driver
* Andes AICE debug adapter support
* New OpenJTAG driver
* New BCM2835 (RaspberryPi) driver
* JTAG VPI client driver (for OpenRISC Reference Platform SoC)
* Xilinx BSCAN_* for OpenRISC support
* ST-LINKv2-1 support
* ST-LINKv2 SWO tracing support (UART emulation)
* JLink-OB (onboard) support
* Altera USB Blaster driver rewrite, initial Blaster II
support
* ULINK driver ported to libusb-1.0, OpenULINK build fixes
* Support up to 64 bit IR lengths
* SVF playback (FPGA programming) fixes
* "ftdi" interface driver got extensive testing and is now
recommended over the old ft2232 implementation
Boundary Scan:
Target Layer:
* New target: Andes nds32
* New target: OpenRISC OR1K
* New target: Intel Quark X10xx
* MIPS EJTAG 1.5/2.0 support
* MIPS speed improvements
* Cortex-M, Cortex-A (MEM-AP, APB-AP) targets working with BE
hosts now
* XScale vector_catch support, reset fixes
* dsp563xx ad-hoc breakpoint/watchpoint support
* RTOS support for embKernel
* Target profiling improvements
* Memory access functions testbench
Flash Layer:
* STM32 family sync with reference manuals, other bugfixes
* STM32F401, STM32F07x support
* Atmel SAM4L, SAMG5x support
* at91sam3sd8{a,b}, at91sam3s8{a,b,c}, at91sam4s,
at91sam3n0{a,b,0a,0b} support, bugfixes
* Atmel SAMD support
* Milandr 1986ВЕ* support
* Kinetis KL, K21 support
* Nuvoton NuMicro MINI5{1,2,4} support
* Nuvoton NUC910 series support
* NXP LPC43xx, LPC2000 fixes
* NXP LPC800, LPC810 support
* More ATmega parts supported
* Fujitsu MB9Ax family support
* EFM32 Wonder Gecko family support
* Nordic nRF51 support
Board, Target, and Interface Configuration Scripts:
* STM32W108xx generic target config
* STM32F429 discovery board config
* STM32 Nucleo boards configs
* DENX M53EVK board config
* Altera Cyclone V SoC, SoCkit config
* New TI Launchpads board configs
* TI am43xx devices, AM437x GP EVM, AM438x ePOS EVM board
configs
* Marvell Armada 370 family initial support
* TI TMDX570LS31USB (TMS570, Cortex-R4) support scripts
* Freescale FRDM-KL25Z, KL46Z board configs
* Digilent Zedboard config
* Asus RT-N16, Linksys WRT54GL, BT HomeHub board configs
* Atmel Xplained initial support
* Broadcom bcm28155_ap board config
* TUMPA, TUMPA Lite interface configs
* Digilent JTAG-SMT2 interface config
* New RAM testing functions
* Easy-to-use firmware recovery helpers targetting ordinary
users with common equipment
Server Layer:
* Auto-generation of GDB target description for ARMv7-M,
ARM4, nds32, OR1K, Quark
* GDB File-I/O Remote Protocol extension support
* Default GDB flashing events handlers to initialise and reset
the target automatically when "load" is used
Documentation:
* Extensive README* changes
* The official User's Guide was proofread
* Example cross-build script
* RTOS documentation improvements
* Tcl RPC documentation and examples added
Build and Release:
* *BSD, OS X, clang, ARM, windows build fixes
* New pkg-config support changes the way libusb (and other
dependencies) are handled. Many adapter drivers are now
selected automatically during the configure stage.
This release also contains a number of other important functional and
cosmetic bugfixes. For more details about what has changed since the
last release, see the git repository history:
http://sourceforge.net/p/openocd/code/ci/v0.8.0/log/?path=
For older NEWS, see the NEWS files associated with each release
(i.e. NEWS-<version>).
For more information about contributing test reports, bug fixes, or new
features and device support, please read the new Developer Manual (or
the BUGS and PATCHES.txt files in the source archive).
@@ -0,0 +1,110 @@
This file includes highlights of the changes made in the OpenOCD
source archive release.
JTAG Layer:
* SWD support with FTDI, Versaloon, J-Link, sysfsgpio
* CMSIS-DAP massive speed and stability improvements
* Versaloon driver ported to libusb-1.0
* STLink can reestablish communication with a target that was
disconnected or rebooted
* STLink FAULT and WAIT SWD handling improved
* New hla_serial command to distinguish between several HLA
adapters attached to a single machine
* Serial number support for CMSIS-DAP and J-Link adapters
* Support for more J-Link adapters
* TAP autoprobing improvements
* Big speedup for SVF playback with USB Blaster
Boundary Scan:
Target Layer:
* Stability improvements for targets that get disconnected or
rebooted during a debug session
* MIPS speed and reliability improvements
* MIPS 1.5/2.0 fixes
* ARMv7-R improvements
* Cortex-A improvements, A7, A15 MPCores support
* FPU support for ARMv7-M (Cortex-M4F)
* TPIU/ITM support (including SWO/SWV tracing), can be
captured with external tools or STLink
* JTAG Serial Port (Advanced Debug System softcore) support
* Profiling support for OpenRISC
* ChibiOS/RT 3.0 support (with and without FPU)
* FreeRTOS current versions support
* Freescale MQX RTOS support
* GDB target description support for MIPS
* The last created target is auto-selected as the current
Flash Layer:
* nRF51 async loader to improve flashing performance and stability
* Cypress PSoC 41xx/42xx and CCG1 families flash driver
* Silabs SiM3 family flash driver
* Marvell Wireless Microcontroller SPI flash driver
* Kinetis mass erase (part unsecuring) implemented
* lpcspifi stability fixes
* STM32 family sync with reference manuals, L0 support, bugfixes
* LPC2000 driver automatically determines part and flash size
* NXP LPC11(x)xx, LPC13xx, LPC15xx, LPC8xx, LPC5410x, LPC407x support
* Atmel SAMD, SAMR, SAML21 devices support
* Atmel SAM4E16 support
* ZeroGecko family support
* TI Tiva C Blizzard and Snowflake families support
* Nuvoton NuMicro M051 support
* EZR32 support in EFM32 driver
Board, Target, and Interface Configuration Scripts:
* Normal target configs can work with HLA (STLink, ICDI) adapters
* STM32 discovery and Nucleo boards configs
* Gumstix AeroCore board config
* General Plus GP326XXXA target config
* Micrel KS869x target config
* ASUS RT-N66U board config
* Atmel SAM4E-EK board config
* Atmel AT91SAM4L proper reset handling implemented
* TI OMAP/AM 3505, 3517 target configs
* nRF51822-mKIT board config
* RC Module К1879ХБ1Я target config
* TI TMDX570LS20SUSB board config
* TI TMS570 USB Kit board config
* TI CC2538, CC26xx target configs
* TI AM437x major config improvements, DDR support
* TI AM437X IDK board config
* TI SimpleLink Wi-Fi CC3200 LaunchPad configs
* Silicon Labs EM357, EM358 target configs
* Infineon XMC1000, XMC4000 family targets and boards configs
* Atheros AR9331 target config
* TP-LINK TL-MR3020 board config
* Alphascale asm9260t target and eval kit configs
* Olimex SAM7-LA2 (AT91SAM7A2) board config
* EFM32 Gecko boards configs
* Spansion FM4 target and SK-FM4-176L-S6E2CC board configs
* LPC1xxx target configs were restructured
* IoT-LAB debug adapter config
* DP BusBlaster KT-Link compatible config
Server Layer:
* Polling period can be configured
* "shutdown" command has an immediate effect
* The "program" command doesn't lead to a shutdown by
default, use optional "exit" parameter for the old behaviour
* Proper OS signal handling was implemented
* Async target notifications for the Tcl RPC
Documentation:
Build and Release:
This release also contains a number of other important functional and
cosmetic bugfixes. For more details about what has changed since the
last release, see the git repository history:
http://sourceforge.net/p/openocd/code/ci/v0.9.0/log/?path=
For older NEWS, see the NEWS files associated with each release
(i.e. NEWS-<version>).
For more information about contributing test reports, bug fixes, or new
features and device support, please read the new Developer Manual (or
the BUGS and PATCHES.txt files in the source archive).
@@ -0,0 +1,336 @@
# Welcome to OpenOCD!
OpenOCD provides on-chip programming and debugging support with a
layered architecture of JTAG interface and TAP support including:
- (X)SVF playback to facilitate automated boundary scan and FPGA/CPLD
programming;
- debug target support (e.g. ARM, MIPS): single-stepping,
breakpoints/watchpoints, gprof profiling, etc;
- flash chip drivers (e.g. CFI, NAND, internal flash);
- embedded TCL interpreter for easy scripting.
Several network interfaces are available for interacting with OpenOCD:
telnet, TCL, and GDB. The GDB server enables OpenOCD to function as a
"remote target" for source-level debugging of embedded systems using
the GNU GDB program (and the others who talk GDB protocol, e.g. IDA
Pro).
This README file contains an overview of the following topics:
- quickstart instructions,
- how to find and build more OpenOCD documentation,
- list of the supported hardware,
- the installation and build process,
- packaging tips.
# Quickstart for the impatient
If you have a popular board then just start OpenOCD with its config,
e.g.:
openocd -f board/stm32f4discovery.cfg
If you are connecting a particular adapter with some specific target,
you need to source both the jtag interface and the target configs,
e.g.:
```
openocd -f interface/ftdi/jtagkey2.cfg -c "transport select jtag" \
-f target/ti_calypso.cfg
```
```
openocd -f interface/stlink.cfg -c "transport select hla_swd" \
-f target/stm32l0.cfg
```
After OpenOCD startup, connect GDB with
(gdb) target extended-remote localhost:3333
# OpenOCD Documentation
In addition to the in-tree documentation, the latest manuals may be
viewed online at the following URLs:
OpenOCD User's Guide:
http://openocd.org/doc/html/index.html
OpenOCD Developer's Manual:
http://openocd.org/doc/doxygen/html/index.html
These reflect the latest development versions, so the following section
introduces how to build the complete documentation from the package.
For more information, refer to these documents or contact the developers
by subscribing to the OpenOCD developer mailing list:
openocd-devel@lists.sourceforge.net
## Building the OpenOCD Documentation
By default the OpenOCD build process prepares documentation in the
"Info format" and installs it the standard way, so that `info openocd`
can access it.
Additionally, the OpenOCD User's Guide can be produced in the
following different formats:
If `PDFVIEWER` is set, this creates and views the PDF User Guide.
make pdf && ${PDFVIEWER} doc/openocd.pdf
If `HTMLVIEWER` is set, this creates and views the HTML User Guide.
make html && ${HTMLVIEWER} doc/openocd.html/index.html
The OpenOCD Developer Manual contains information about the internal
architecture and other details about the code:
Note: make sure doxygen is installed, type doxygen --version
make doxygen && ${HTMLVIEWER} doxygen/index.html
# Supported hardware
## JTAG adapters
AM335x, ARM-JTAG-EW, ARM-USB-OCD, ARM-USB-TINY, AT91RM9200, axm0432, BCM2835,
Bus Blaster, Buspirate, Cadence DPI, Cadence vdebug, Chameleon, CMSIS-DAP,
Cortino, Cypress KitProg, DENX, Digilent JTAG-SMT2, DLC 5, DLP-USB1232H,
embedded projects, Espressif USB JTAG Programmer,
eStick, FlashLINK, FlossJTAG, Flyswatter, Flyswatter2,
FTDI FT232R, Gateworks, Hoegl, ICDI, ICEBear, J-Link, JTAG VPI, JTAGkey,
JTAGkey2, JTAG-lock-pick, KT-Link, Linux GPIOD, Lisa/L, LPC1768-Stick,
Mellanox rshim, MiniModule, NGX, Nuvoton Nu-Link, Nu-Link2, NXHX, NXP IMX GPIO,
OOCDLink, Opendous, OpenJTAG, Openmoko, OpenRD, OSBDM, Presto, Redbee,
Remote Bitbang, RLink, SheevaPlug devkit, Stellaris evkits,
ST-LINK (SWO tracing supported), STM32-PerformanceStick, STR9-comStick,
sysfsgpio, Tigard, TI XDS110, TUMPA, Turtelizer, ULINK, USB-A9260, USB-Blaster,
USB-JTAG, USBprog, VPACLink, VSLLink, Wiggler, XDS100v2, Xilinx XVC/PCIe,
Xverve.
## Debug targets
ARM: AArch64, ARM11, ARM7, ARM9, Cortex-A/R (v7-A/R), Cortex-M (ARMv{6/7/8}-M),
FA526, Feroceon/Dragonite, XScale.
ARCv2, AVR32, DSP563xx, DSP5680xx, EnSilica eSi-RISC, EJTAG (MIPS32, MIPS64),
ESP32, ESP32-S2, ESP32-S3, Intel Quark, LS102x-SAP, RISC-V, ST STM8,
Xtensa.
## Flash drivers
ADUC702x, AT91SAM, AT91SAM9 (NAND), ATH79, ATmega128RFA1, Atmel SAM, AVR, CFI,
DSP5680xx, EFM32, EM357, eSi-RISC, eSi-TSMC, EZR32HG, FM3, FM4, Freedom E SPI,
GD32, i.MX31, Kinetis, LPC8xx/LPC1xxx/LPC2xxx/LPC541xx, LPC2900, LPC3180, LPC32xx,
LPCSPIFI, Marvell QSPI, MAX32, Milandr, MXC, NIIET, nRF51, nRF52 , NuMicro,
NUC910, Nuvoton NPCX, onsemi RSL10, Orion/Kirkwood, PIC32mx, PSoC4/5LP/6,
Raspberry RP2040, Renesas RPC HF and SH QSPI,
S3C24xx, S3C6400, SiM3x, SiFive Freedom E, Stellaris, ST BlueNRG, STM32,
STM32 QUAD/OCTO-SPI for Flash/FRAM/EEPROM, STMSMI, STR7x, STR9x, SWM050,
TI CC13xx, TI CC26xx, TI CC32xx, TI MSP432, Winner Micro w600, Xilinx XCF,
XMC1xxx, XMC4xxx.
# Installing OpenOCD
## A Note to OpenOCD Users
If you would rather be working "with" OpenOCD rather than "on" it, your
operating system or JTAG interface supplier may provide binaries for
you in a convenient-enough package.
Such packages may be more stable than git mainline, where
bleeding-edge development takes place. These "Packagers" produce
binary releases of OpenOCD after the developers produces new "release"
versions of the source code. Previous versions of OpenOCD cannot be
used to diagnose problems with the current release, so users are
encouraged to keep in contact with their distribution package
maintainers or interface vendors to ensure suitable upgrades appear
regularly.
Users of these binary versions of OpenOCD must contact their Packager to
ask for support or newer versions of the binaries; the OpenOCD
developers do not support packages directly.
## A Note to OpenOCD Packagers
You are a PACKAGER of OpenOCD if you:
- Sell dongles and include pre-built binaries;
- Supply tools or IDEs (a development solution integrating OpenOCD);
- Build packages (e.g. RPM or DEB files for a GNU/Linux distribution).
As a PACKAGER, you will experience first reports of most issues.
When you fix those problems for your users, your solution may help
prevent hundreds (if not thousands) of other questions from other users.
If something does not work for you, please work to inform the OpenOCD
developers know how to improve the system or documentation to avoid
future problems, and follow-up to help us ensure the issue will be fully
resolved in our future releases.
That said, the OpenOCD developers would also like you to follow a few
suggestions:
- Send patches, including config files, upstream, participate in the
discussions;
- Enable all the options OpenOCD supports, even those unrelated to your
particular hardware;
- Use "ftdi" interface adapter driver for the FTDI-based devices.
# Building OpenOCD
The INSTALL file contains generic instructions for running `configure`
and compiling the OpenOCD source code. That file is provided by
default for all GNU autotools packages. If you are not familiar with
the GNU autotools, then you should read those instructions first.
The remainder of this document tries to provide some instructions for
those looking for a quick-install.
## OpenOCD Dependencies
GCC or Clang is currently required to build OpenOCD. The developers
have begun to enforce strict code warnings (-Wall, -Werror, -Wextra,
and more) and use C99-specific features: inline functions, named
initializers, mixing declarations with code, and other tricks. While
it may be possible to use other compilers, they must be somewhat
modern and could require extending support to conditionally remove
GCC-specific extensions.
You'll also need:
- make
- libtool
- pkg-config >= 0.23 or pkgconf
OpenOCD uses jimtcl library; build from git can retrieve jimtcl as git
submodule.
Additionally, for building from git:
- autoconf >= 2.69
- automake >= 1.14
- texinfo >= 5.0
Optional USB-based adapter drivers need libusb-1.0.
Optional USB-Blaster, ASIX Presto and OpenJTAG interface adapter
drivers need:
- libftdi: http://www.intra2net.com/en/developer/libftdi/index.php
Optional CMSIS-DAP adapter driver needs HIDAPI library.
Optional linuxgpiod adapter driver needs libgpiod library.
Optional J-Link adapter driver needs libjaylink library.
Optional ARM disassembly needs capstone library.
Optional development script checkpatch needs:
- perl
- python
- python-ply
## Permissions delegation
Running OpenOCD with root/administrative permissions is strongly
discouraged for security reasons.
For USB devices on GNU/Linux you should use the contrib/60-openocd.rules
file. It probably belongs somewhere in /etc/udev/rules.d, but
consult your operating system documentation to be sure. Do not forget
to add yourself to the "plugdev" group.
For parallel port adapters on GNU/Linux and FreeBSD please change your
"ppdev" (parport* or ppi*) device node permissions accordingly.
For parport adapters on Windows you need to run install_giveio.bat
(it's also possible to use "ioperm" with Cygwin instead) to give
ordinary users permissions for accessing the "LPT" registers directly.
## Compiling OpenOCD
To build OpenOCD, use the following sequence of commands:
./bootstrap
./configure [options]
make
sudo make install
The `bootstrap` command is only necessary when building from the Git repository. The `configure` step generates the Makefiles required to build
OpenOCD, usually with one or more options provided to it. The first
'make' step will build OpenOCD and place the final executable in
'./src/'. The final (optional) step, `make install`, places all of
the files in the required location.
To see the list of all the supported options, run `./configure --help`
## Cross-compiling Options
Cross-compiling is supported the standard autotools way, you just need
to specify the cross-compiling target triplet in the --host option,
e.g. for cross-building for Windows 32-bit with MinGW on Debian:
./configure --host=i686-w64-mingw32 [options]
To make pkg-config work nicely for cross-compiling, you might need an
additional wrapper script as described at
https://autotools.io/pkgconfig/cross-compiling.html
This is needed to tell pkg-config where to look for the target
libraries that OpenOCD depends on. Alternatively, you can specify
`*_CFLAGS` and `*_LIBS` environment variables directly, see `./configure
--help` for the details.
For a more or less complete script that does all this for you, see
contrib/cross-build.sh
## Parallel Port Dongles
If you want to access the parallel port using the PPDEV interface you
have to specify both `--enable-parport` and `--enable-parport-ppdev`, since
the later option is an option to the parport driver.
The same is true for the `--enable-parport-giveio` option, you have to
use both the `--enable-parport` and the `--enable-parport-giveio` option
if you want to use giveio instead of ioperm parallel port access
method.
# Obtaining OpenOCD From GIT
You can download the current GIT version with a GIT client of your
choice from the main repository:
git://git.code.sf.net/p/openocd/code
You may prefer to use a mirror:
http://repo.or.cz/r/openocd.git
git://repo.or.cz/openocd.git
Using the GIT command line client, you might use the following command
to set up a local copy of the current repository (make sure there is no
directory called "openocd" in the current directory):
git clone git://git.code.sf.net/p/openocd/code openocd
Then you can update that at your convenience using `git pull`.
There is also a gitweb interface, which you can use either to browse
the repository or to download arbitrary snapshots using HTTP:
http://repo.or.cz/w/openocd.git
Snapshots are compressed tarballs of the source tree, about 1.3 MBytes
each at this writing.
@@ -0,0 +1,56 @@
Building OpenOCD for Windows
----------------------------
You can build OpenOCD for Windows natively with either MinGW-w64/MSYS
or Cygwin (plain MinGW might work with --disable-werror but is not
recommended as it doesn't provide enough C99 compatibility).
Alternatively, one can cross-compile it using MinGW-w64 on a *nix
host. See README for the generic instructions.
Also, the MSYS2 project provides both ready-made binaries and an easy
way to self-compile from their software repository out of the box.
Native MinGW-w64/MSYS compilation
-----------------------------
As MSYS doesn't come with pkg-config pre-installed, you need to add it
manually. The easiest way to do that is to download pkg-config-lite
from:
http://sourceforge.net/projects/pkgconfiglite/
Then simply unzip the archive to the root directory of your MinGW-w64
installation.
USB adapters
------------
For the adapters that use a HID-based protocol, e.g. CMSIS-DAP, you do
not need to perform any additional configuration.
For all the others you usually need to have WinUSB.sys (or
libusbK.sys) driver installed. Some vendor software (e.g. for
ST-LINKv2) does it on its own. For the other cases the easiest way to
assign WinUSB to a device is to use the latest Zadig installer:
http://zadig.akeo.ie
When using a composite USB device, it's often necessary to assign
WinUSB.sys to the composite parent instead of the specific
interface. To do that one needs to activate an advanced option in the
Zadig installer.
If you need to use the same adapter with other applications that may
require another driver, a solution for Windows Vista and above is to
activate the IgnoreHWSerNum registry setting for the USB device.
That setting forces Windows to associate the driver per port instead of
per serial number, the same behaviour as when the device does not contain
a serial number. So different drivers can be installed for the adapter on
different ports and you just need to plug the adapter into the correct
port depending on which application to use.
For more information, see:
https://learn.microsoft.com/en-us/windows-hardware/drivers/usbcon/usb-device-specific-registry-settings
http://www.ftdichip.com/Support/Knowledgebase/index.html?ignorehardwareserialnumber.htm
@@ -0,0 +1,54 @@
Building OpenOCD for macOS
--------------------------
There are a few prerequisites you will need first:
- Xcode (install from the AppStore)
- Command Line Tools (install from Xcode -> Preferences -> Downloads)
- Gentoo Prefix (http://www.gentoo.org/proj/en/gentoo-alt/prefix/bootstrap.xml)
or
- Homebrew (http://mxcl.github.io/homebrew/)
or
- MacPorts (http://www.macports.org/install.php)
If you're building manually you need Texinfo version 5.0 or later. The
simplest way to get it is to use Homebrew (brew install texinfo) and
then ``export PATH=/usr/local/opt/texinfo/bin:$PATH``.
With Gentoo Prefix you can build the release version or the latest
devel version (-9999) the usual way described in the Gentoo
documentation. Alternatively, install the prerequisites and build
manually from the sources.
With Homebrew you can either run:
brew install [--HEAD] openocd (where optional --HEAD asks brew to
install the current git version)
or
brew install libtool automake libusb [hidapi] [libftdi]
(to install the needed dependencies and then proceed with the
manual building procedure)
For building with MacPorts you need to run:
sudo port install libtool automake autoconf pkgconfig \
libusb [libftdi1]
You should also specify LDFLAGS and CPPFLAGS to allow configure to use
MacPorts' libraries, so run configure like this:
LDFLAGS=-L/opt/local/lib CPPFLAGS=-I/opt/local/include ./configure [options]
See README for the generic building instructions.
If you're using a USB adapter and have a driver kext matched to it,
you will need to unload it prior to running OpenOCD. E.g. with Apple
driver (OS X 10.9 or later) for FTDI run:
sudo kextunload -b com.apple.driver.AppleUSBFTDI
for FTDI vendor driver use:
sudo kextunload FTDIUSBSerialDriver.kext
To learn more on the topic please refer to the official libusb FAQ:
https://github.com/libusb/libusb/wiki/FAQ
@@ -0,0 +1,15 @@
# Notice
If you are looking for how to build Nuclei OpenOCD,
please follow this [guidance](https://github.com/riscv-mcu/openocd-xpack/blob/xpack_nuclei_next/README-BUILD-Nuclei.md)
About how to use openocd, please check http://openocd.org/documentation/
[![Build Nuclei OpenOCD](https://github.com/riscv-mcu/riscv-openocd/workflows/Build%20Nuclei%20OpenOCD/badge.svg)](https://github.com/riscv-mcu/riscv-openocd/actions)
- `nuclei-master` - the updated content, used during builds and releases
- `nuclei-develop` - the updated content, used during development
Since we are always merging changes from upstream, forced update to these two branches
might be happened in future, please take care.
@@ -0,0 +1,7 @@
These are small patches required to correct some problems identified in the official packages.
* `libftdi1-1.2-cmake-FindUSB1.patch` - adds `NO_DEFAULT_PATH` to `FIND_PATH()` and `FIND_LIBRARY()`, to make cmake not search libusb in system default locations;
* `libusb-win32-1.2.6.0-mingw-w64.patch` - makes `libusb-win32` build without the Microsoft DDK; it was copied from the [JTAG Tools](https://gitorious.org/jtag-tools/openocd-mingw-build-scripts) project, and repuires `-p1` when applying.
For details on how to create the patches, see the helper [README](../scripts/helper/README.md).
@@ -0,0 +1,15 @@
--- cmake/FindUSB1.cmake 2015-01-29 23:17:41.780000063 +0200
+++ cmake/FindUSB1-patched.cmake 2015-01-29 23:18:26.192000175 +0200
@@ -24,10 +24,10 @@
FIND_PATH(LIBUSB_INCLUDE_DIR libusb.h
PATH_SUFFIXES libusb-1.0
- PATHS ${PC_LIBUSB_INCLUDEDIR} ${PC_LIBUSB_INCLUDE_DIRS})
+ PATHS ${PC_LIBUSB_INCLUDEDIR} ${PC_LIBUSB_INCLUDE_DIRS} NO_DEFAULT_PATH)
FIND_LIBRARY(LIBUSB_LIBRARIES NAMES usb-1.0
- PATHS ${PC_LIBUSB_LIBDIR} ${PC_LIBUSB_LIBRARY_DIRS})
+ PATHS ${PC_LIBUSB_LIBDIR} ${PC_LIBUSB_LIBRARY_DIRS} NO_DEFAULT_PATH)
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBUSB DEFAULT_MSG LIBUSB_LIBRARIES LIBUSB_INCLUDE_DIR)
@@ -0,0 +1,15 @@
--- cmake/FindUSB1.cmake 2017-08-07 17:52:39.000000000 +0300
+++ cmake/FindUSB1-patched.cmake 2019-06-17 16:37:34.000000000 +0300
@@ -24,10 +24,10 @@
FIND_PATH(LIBUSB_INCLUDE_DIR libusb.h
PATH_SUFFIXES libusb-1.0
- PATHS ${PC_LIBUSB_INCLUDEDIR} ${PC_LIBUSB_INCLUDE_DIRS})
+ PATHS ${PC_LIBUSB_INCLUDEDIR} ${PC_LIBUSB_INCLUDE_DIRS} NO_DEFAULT_PATH)
FIND_LIBRARY(LIBUSB_LIBRARIES NAMES usb-1.0
- PATHS ${PC_LIBUSB_LIBDIR} ${PC_LIBUSB_LIBRARY_DIRS})
+ PATHS ${PC_LIBUSB_LIBDIR} ${PC_LIBUSB_LIBRARY_DIRS} NO_DEFAULT_PATH)
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBUSB DEFAULT_MSG LIBUSB_LIBRARIES LIBUSB_INCLUDE_DIR)
@@ -0,0 +1,60 @@
diff -purN src/install.c src/install-patched.c
--- src/install.c 2011-10-28 14:34:08.000000000 +0200
+++ src/install-patched.c 2013-05-30 11:28:54.000000000 +0200
@@ -31,14 +31,8 @@
#include <conio.h>
#include <ctype.h>
-#ifdef __GNUC__
-#if defined(_WIN64)
-#include <cfgmgr32.h>
-#else
-#include <ddk/cfgmgr32.h>
-#endif
-#else
#include <cfgmgr32.h>
+#ifndef __GNUC__
#define strlwr(p) _strlwr(p)
#endif
diff -purN src/install_filter_win.c src/install_filter_win-patched.c
--- src/install_filter_win.c 2010-09-22 22:35:52.000000000 +0200
+++ src/install_filter_win-patched.c 2013-05-30 11:39:19.000000000 +0200
@@ -21,15 +21,9 @@
#include <windows.h>
-#ifdef __GNUC__
- #if defined(_WIN64)
- #include <cfgmgr32.h>
- #else
- #include <ddk/cfgmgr32.h>
- #endif
-#else
- #include <cfgmgr32.h>
- #define strlwr(p) _strlwr(p)
+#include <cfgmgr32.h>
+#ifndef __GNUC__
+#define strlwr(p) _strlwr(p)
#endif
#include <commdlg.h>
diff -purN src/registry.c src/registry-patched.c
--- src/registry.c 2010-09-23 17:40:50.000000000 +0200
+++ src/registry-patched.c 2013-05-30 11:29:22.000000000 +0200
@@ -24,14 +24,8 @@
#include <stdlib.h>
#include <string.h>
-#ifdef __GNUC__
-#if defined(_WIN64)
-#include <cfgmgr32.h>
-#else
-#include <ddk/cfgmgr32.h>
-#endif
-#else
#include <cfgmgr32.h>
+#ifndef __GNUC__
#define strlwr(p) _strlwr(p)
#endif
@@ -0,0 +1,49 @@
# The xPack OpenOCD
This is the **xPack** version of **OpenOCD** (formerly part of the
GNU MCU Eclipse project).
For details, see
[The xPack OpenOCD](https://xpack.github.io/openocd/) pages.
## Compliance
The xPack OpenOCD generally follows the official
[OpenOCD](http://openocd.org) releases.
The current version is based on:
- OpenOCD version 0.10.0, the development commit
[263deb380](https://github.com/xpack-dev-tools/openocd/commit/263deb3802a515ba8155b6c59146f0f539de4e43)
from 7 July 2019
## Changes
Compared to the master branch, the following changes were applied:
- a configure option was added to configure branding (`--enable-branding`)
- the src/openocd.c file was edited to display the branding string
- the contrib/60-openocd.rules file was simplified to avoid protection related issues.
## Build
The scripts used to build this distribution are in:
- `distro-info/scripts`
For the prerequisites and more details on the build procedure, please see the
[How to build?](https://github.com/xpack-dev-tools/openocd-xpack/blob/xpack/README-BUILD.md) page.
## Documentation
The original documentation is available in the `share/doc` folder.
## More info
For more info and support, please see the xPack project pages from:
http://xpack.github.io/dev-tools/openocd
Thank you for using open source software,
Liviu Ionescu
@@ -0,0 +1,5 @@
# Nuclei OpenOCD Distribution
## Changes
* added FTD2XX driver support.
@@ -0,0 +1,130 @@
# Nuclei OpenOCD Distribution
For **Nuclei OpenOCD documentation**, please check https://doc.nucleisys.com/nuclei_tools/openocd/intro.html
If the tool version and documentation version not match, please take care.
**Below is the changelog for Nuclei OpenOCD.**
## 2025.10
This release is based on the same code base of **2025.02**, but do some new feature and bugfixes.
* Update ``nuclei cpuinfo`` command implementation using nuclei sdk 0.9.0 cpuinfo same source code to provide same behavior
* Correct custom flashloader binary file location search rules, where openocd executed, openocd ``scripts`` folder, and absolute path
* Sync nuclei custom CSRs support
* Optimize flash probe process, when no flash probed, it will exit with error instead of hang on it
* Support debug for hypervisor mode
* Fix debug ``Assertion failed!`` on HBird opensource cpu
* Fix nuclei riscv cross trigger command implementation ``nuclei cti xxx``
* Clear ``haltreq`` signal when openocd connect failed
* Fix segmentation fault issue when debug level set to 3 or 4
* When debug on FPGA CPU MHz is very slow such as **5MHz**, openocd may work not correctly, it will be fixed by make CPU run faster such as **10MHz**
## 2025.02
* improvement of ci and doc
* replace ``vslide1down_vx`` to read/write riscv vector register
* support live watch feature via riscv sba memory access channel
* organize nuclei commands into ``nuclei_riscv.c``
* add ``nuclei cti`` command group
* update ``nuclei etrace`` command group
* optimize ``nuclei cpuinfo`` command
* add new nuclei customized csrs
| new csr addr | new csr name |
| ------ | ------ |
| 0x1a4~0x1af | smpuaddr4~15 |
| 0x1c0~0x1ef | smpuaddr16~63 |
* rename nuclei customized csrs
| old name | new name |
| ------ | ------ |
| spmpcfg0~3 | smpucfg0~3 |
| spmpaddr0~15 | smpuaddr0~15 |
| mfp16mode | mmisc_ctl1 |
| mecc_ctrl | mecc_ctl |
| mstack_ctrl | mstack_ctl |
* changes are based on [riscv/riscv-openocd@f82c5a7](https://github.com/riscv-collab/riscv-openocd/commit/f82c5a7)
## 2024.06
* Add and update nuclei custom CSR
* Fix `nuclei cpuinfo` command implementation
* Add debug map feature for Nuclei CPU with new `nuclei expose_cpu_core` and `nuclei examine_cpu_core` commands
* changes are based on [riscv/riscv-openocd](https://github.com/riscv/riscv-openocd/commit/52177592)
* Fix hbird/hbirdv2 flash programming, and re-route fespi to nuspi flash loader for hbird/hbirdv2 processor
## 2024.02
> **Still in development, not official release.**
* Add Nuclei N100 CSR support
* Nuclei etrace support multicore trace
* Fix riscv debug 0.11 call riscv_run_algorithm error such as hbird/hbirdv2 processor
* Update and fix openocd documentation
* changes are based on [riscv/riscv-openocd](https://github.com/riscv/riscv-openocd/commit/52177592)
## 2023.10
* Add nuclei command group to contains all nuclei customized commands
* Add `nuclei cpuinfo` dump support
* Add more spiflash devices according to customer request
* Fix gdb flash program error on address size > 32bit on windows
* Update nuclei custom csr
* Add `ftdi nscan1_mode` to support 2-wire cjtag for Nuclei CPU, which is replacement for `ftdi oscan1_mode`
* Add nuclei custom command in openocd documentation
* **Experimental and may change**: Add nuclei etrace command to support nuclei etrace hardware feature
* changes are based on [riscv/riscv-openocd](https://github.com/riscv/riscv-openocd/commit/52177592)
## 2022.12
This is release 2022.12 of openocd.
* nor/spi:add w25q512jv
* add 'init resethalt' command
* feature:auto search custom flashloader path
* fix riscv-debug v0.11 call riscv_run_algorithm error.
## 2022.08
This is release 2022.08 of openocd.
* spi_nor:add xt25f256b mac25l1633e gd25q80b gd25le32e en25s40a by25q32al fm25q128 gd25B512me.
* merge upstream https://github.com/riscv/riscv-openocd commit id 52177592f9d3afc6a008f8e1b321cf74e823018f.
* custom flashloader don't rely on 'src/flash/nor/spi.c', fix memory leaks bug.
## 2022.04
This is release 2022.04 of openocd.
* add DSP ucode csr register
* Adjustment simulation timeout param
* Fix after write_bank/write_image command read date error bug
* Add custom flash loader in openocd, please refer wiki for how to use it
* Custom flash loader: add 'simulation' parameter for simulation test.
## 2022.01
This is release 2022.01 of openocd.
* optimize cjtag support for nuclei cjtag
* spi_nor: add BoHong bh25d80a bh25d40a bh25d20a
* spi_nor: Add Micron MT25QU512
* flash:"flash bank" command add simulation param
* add nuclei all custom csr
* spi_nor: Add MXIC MX25U51245G
* transport/ftdi: Update to new standard cJTAG sequence
* flash: add XinSheng RISC-V MCU CM32M4xxR flash program driver
* Add nuspi loader support.
* Add nuspi SPI flash driver support.
* Enable multi-core debug.
* Previous fespi loader will be rerouted to nuspi loader.
* Changes are based on [openocd for riscv 0.11.0](https://github.com/riscv/riscv-openocd/commit/6edf98db7f98c5e24bc51cf98419bdf5bbc530e6)
@@ -0,0 +1,154 @@
#!/usr/bin/env bash
# -----------------------------------------------------------------------------
# This file is part of the xPack distribution.
# (https://xpack.github.io)
# Copyright (c) 2019 Liviu Ionescu.
#
# Permission to use, copy, modify, and/or distribute this software
# for any purpose is hereby granted, under the terms of the MIT license.
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Safety settings (see https://gist.github.com/ilg-ul/383869cbb01f61a51c4d).
if [[ ! -z ${DEBUG} ]]
then
set ${DEBUG} # Activate the expand mode if DEBUG is anything but empty.
else
DEBUG=""
fi
set -o errexit # Exit if command failed.
set -o pipefail # Exit if pipe failed.
set -o nounset # Exit if variable not set.
# Remove the initial space and instead use '\n'.
IFS=$'\n\t'
# -----------------------------------------------------------------------------
# Identify the script location, to reach, for example, the helper scripts.
build_script_path="$0"
if [[ "${build_script_path}" != /* ]]
then
# Make relative path absolute.
build_script_path="$(pwd)/$0"
fi
script_folder_path="$(dirname "${build_script_path}")"
script_folder_name="$(basename "${script_folder_path}")"
# =============================================================================
# Script to build a native xPack OpenOCD, which uses the
# tools and libraries available on the host machine. It is generally
# intended for development and creating customised versions (as opposed
# to the build intended for creating distribution packages).
#
# Developed on Ubuntu 18 LTS x64 and macOS 10.13.
# -----------------------------------------------------------------------------
echo
echo "xPack OpenOCD native build script."
echo
host_functions_script_path="${script_folder_path}/helper/host-functions-source.sh"
echo "Host helper functions source script: \"${host_functions_script_path}\"."
source "${host_functions_script_path}"
host_detect
# -----------------------------------------------------------------------------
help_message=" bash $0 [--win] [--debug] [--develop] [--jobs N] [--help] [clean|cleanlibs|cleanall]"
host_native_options "${help_message}" $@
# -----------------------------------------------------------------------------
host_common
prepare_xbb_env
prepare_xbb_extras
# -----------------------------------------------------------------------------
common_libs_functions_script_path="${script_folder_path}/${COMMON_LIBS_FUNCTIONS_SCRIPT_NAME}"
echo "Common libs functions source script: \"${common_libs_functions_script_path}\"."
source "${common_libs_functions_script_path}"
common_apps_functions_script_path="${script_folder_path}/${COMMON_APPS_FUNCTIONS_SCRIPT_NAME}"
echo "Common app functions source script: \"${common_apps_functions_script_path}\"."
source "${common_apps_functions_script_path}"
# -----------------------------------------------------------------------------
# CHANGES: OpenOCD version
OPENOCD_PROJECT_NAME=${OPENOCD_PROJECT_NAME:-"openocd"}
OPENOCD_VERSION=${OPENOCD_VERSION:-"0.11.0"}
OPENOCD_SRC_FOLDER_NAME=${OPENOCD_SRC_FOLDER_NAME:-"${OPENOCD_PROJECT_NAME}.git"}
OPENOCD_GIT_URL=${OPENOCD_GIT_URL:-"https://github.com/riscv-mcu/riscv-openocd"}
if [ "${IS_DEVELOP}" == "y" ]
then
OPENOCD_GIT_BRANCH=${OPENOCD_GIT_BRANCH:-"nuclei-develop"}
else
OPENOCD_GIT_BRANCH=${OPENOCD_GIT_BRANCH:-"nuclei-master"}
fi
OPENOCD_GIT_COMMIT=${OPENOCD_GIT_COMMIT:-""}
# Used in the licenses folder.
OPENOCD_FOLDER_NAME="openocd-${OPENOCD_VERSION}"
# -----------------------------------------------------------------------------
LIBUSB1_VERSION="1.0.22"
LIBUSB0_VERSION="0.1.5"
LIBUSB_W32_VERSION="1.2.6.0"
LIBFTDI_VERSION="1.4"
LIBICONV_VERSION="1.15"
HIDAPI_VERSION="0.8.0-rc1"
LIBFTDI_PATCH="libftdi1-${LIBFTDI_VERSION}-cmake-FindUSB1.patch"
LIBUSB_W32_PATCH="libusb-win32-${LIBUSB_W32_VERSION}-mingw-w64.patch"
# -----------------------------------------------------------------------------
# Build dependent libraries.
if true
then
do_libusb1
if [ "${TARGET_PLATFORM}" == "win32" ]
then
do_libusb_w32
else
do_libusb0
fi
do_libftdi
do_libiconv
do_hidapi
do_ftd2xx "2.12.28"
fi
# -----------------------------------------------------------------------------
do_openocd
run_openocd
# -----------------------------------------------------------------------------
host_stop_timer
# Completed successfully.
exit 0
# -----------------------------------------------------------------------------
@@ -0,0 +1,189 @@
#!/usr/bin/env bash
# -----------------------------------------------------------------------------
# This file is part of the xPack distribution.
# (https://xpack.github.io)
# Copyright (c) 2019 Liviu Ionescu.
#
# Permission to use, copy, modify, and/or distribute this software
# for any purpose is hereby granted, under the terms of the MIT license.
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Safety settings (see https://gist.github.com/ilg-ul/383869cbb01f61a51c4d).
if [[ ! -z ${DEBUG} ]]
then
set ${DEBUG} # Activate the expand mode if DEBUG is anything but empty.
else
DEBUG=""
fi
set -o errexit # Exit if command failed.
set -o pipefail # Exit if pipe failed.
set -o nounset # Exit if variable not set.
# Remove the initial space and instead use '\n'.
IFS=$'\n\t'
# -----------------------------------------------------------------------------
# Identify the script location, to reach, for example, the helper scripts.
build_script_path="$0"
if [[ "${build_script_path}" != /* ]]
then
# Make relative path absolute.
build_script_path="$(pwd)/$0"
fi
script_folder_path="$(dirname "${build_script_path}")"
script_folder_name="$(basename "${script_folder_path}")"
# =============================================================================
# Script to build the xPack OpenOCD distribution packages.
#
# Developed on macOS 10.13 High Sierra, but intended to run on
# macOS 10.10 Yosemite and CentOS 6 XBB.
# -----------------------------------------------------------------------------
echo
echo "xPack OpenOCD distribution build script."
host_functions_script_path="${script_folder_path}/helper/host-functions-source.sh"
source "${host_functions_script_path}"
# -----------------------------------------------------------------------------
# Array where the remaining args will be stored.
declare -a rest
host_options " bash $0 [--win32] [--win64] [--linux32] [--linux64] [--osx] [--all] [clean|cleanlibs|cleanall|preload-images] [--env-file file] [--disable-strip] [--without-pdf] [--with-html] [--develop] [--debug] [--jobs N] [--help]" $@
echo
echo "Host helper functions source script: \"${host_functions_script_path}\"."
host_detect
# docker_linux64_image="ilegeul/centos:6-xbb-v2.1"
# docker_linux32_image="ilegeul/centos32:6-xbb-v2.1"
host_common
CONTAINER_RUN_AS_ROOT="y"
# -----------------------------------------------------------------------------
if [ ! -z "${DO_BUILD_LINUX64}${DO_BUILD_WIN64}${DO_BUILD_LINUX32}${DO_BUILD_WIN32}" ]
then
host_prepare_docker
fi
if [ -z "${DO_BUILD_ANY}" ]
then
# ----- Build the native distribution. --------------------------------------
host_build_target "Creating the native distribution..." \
--script "${HOST_WORK_FOLDER_PATH}/${CONTAINER_BUILD_SCRIPT_REL_PATH}" \
--env-file "${ENV_FILE}" \
-- \
${rest[@]-}
else
# ----- Build the OS X distribution. ----------------------------------------
if [ "${DO_BUILD_OSX}" == "y" ]
then
if [ "${HOST_UNAME}" == "Darwin" ]
then
host_build_target "Creating the OS X distribution..." \
--script "${HOST_WORK_FOLDER_PATH}/${CONTAINER_BUILD_SCRIPT_REL_PATH}" \
--env-file "${ENV_FILE}" \
--target-platform "darwin" \
-- \
${rest[@]-}
else
echo "Building the macOS image is not possible on this platform."
exit 1
fi
fi
# ----- Build the GNU/Linux 64-bit distribution. ----------------------------
linux_distribution="centos"
if [ "${DO_BUILD_LINUX64}" == "y" ]
then
host_build_target "Creating the GNU/Linux 64-bit distribution..." \
--script "${CONTAINER_WORK_FOLDER_PATH}/${CONTAINER_BUILD_SCRIPT_REL_PATH}" \
--env-file "${ENV_FILE}" \
--target-platform "linux" \
--target-arch "x64" \
--target-bits 64 \
--docker-image "${docker_linux64_image}" \
-- \
${rest[@]-}
fi
# ----- Build the Windows 64-bit distribution. ------------------------------
if [ "${DO_BUILD_WIN64}" == "y" ]
then
host_build_target "Creating the Windows 64-bit distribution..." \
--script "${CONTAINER_WORK_FOLDER_PATH}/${CONTAINER_BUILD_SCRIPT_REL_PATH}" \
--env-file "${ENV_FILE}" \
--target-platform "win32" \
--target-arch "x64" \
--target-bits 64 \
--docker-image "${docker_linux64_image}" \
-- \
${rest[@]-}
fi
# ----- Build the GNU/Linux 32-bit distribution. ----------------------------
if [ "${DO_BUILD_LINUX32}" == "y" ]
then
host_build_target "Creating the GNU/Linux 32-bit distribution..." \
--script "${CONTAINER_WORK_FOLDER_PATH}/${CONTAINER_BUILD_SCRIPT_REL_PATH}" \
--env-file "${ENV_FILE}" \
--target-platform "linux" \
--target-arch "x32" \
--target-bits 32 \
--docker-image "${docker_linux32_image}" \
-- \
${rest[@]-}
fi
# ----- Build the Windows 32-bit distribution. ------------------------------
# Since the actual container is a 32-bit, use the debian32 binaries.
if [ "${DO_BUILD_WIN32}" == "y" ]
then
host_build_target "Creating the Windows 32-bit distribution..." \
--script "${CONTAINER_WORK_FOLDER_PATH}/${CONTAINER_BUILD_SCRIPT_REL_PATH}" \
--env-file "${ENV_FILE}" \
--target-platform "win32" \
--target-arch "x32" \
--target-bits 32 \
--docker-image "${docker_linux32_image}" \
-- \
${rest[@]-}
fi
fi
host_show_sha
# -----------------------------------------------------------------------------
host_stop_timer
host_notify_completed
# Completed successfully.
exit 0
# -----------------------------------------------------------------------------
@@ -0,0 +1,404 @@
# -----------------------------------------------------------------------------
# This file is part of the xPack distribution.
# (https://xpack.github.io)
# Copyright (c) 2019 Liviu Ionescu.
#
# Permission to use, copy, modify, and/or distribute this software
# for any purpose is hereby granted, under the terms of the MIT license.
# -----------------------------------------------------------------------------
# Helper script used in the second edition of the xPack build
# scripts. As the name implies, it should contain only functions and
# should be included with 'source' by the container build scripts.
# -----------------------------------------------------------------------------
function download_openocd()
{
if [ ! -d "${WORK_FOLDER_PATH}/${OPENOCD_SRC_FOLDER_NAME}" ]
then
(
xbb_activate
cd "${WORK_FOLDER_PATH}"
git_clone "${OPENOCD_GIT_URL}" "${OPENOCD_GIT_BRANCH}" \
"${OPENOCD_GIT_COMMIT}" "${OPENOCD_SRC_FOLDER_NAME}"
cd "${WORK_FOLDER_PATH}/${OPENOCD_SRC_FOLDER_NAME}"
git submodule update --init --recursive --remote
)
fi
}
# -----------------------------------------------------------------------------
function do_openocd()
{
download_openocd
(
xbb_activate
xbb_activate_installed_dev
cd "${WORK_FOLDER_PATH}/${OPENOCD_SRC_FOLDER_NAME}"
if [ ! -d "autom4te.cache" ]
then
./bootstrap
fi
mkdir -p "${APP_BUILD_FOLDER_PATH}"
cd "${APP_BUILD_FOLDER_PATH}"
export JAYLINK_CFLAGS='${XBB_CFLAGS} -fvisibility=hidden'
if [ "${TARGET_PLATFORM}" == "win32" ]
then
# --enable-minidriver-dummy -> configure error
# --enable-zy1000 -> netinet/tcp.h: No such file or directory
# --enable-openjtag_ftdi -> --enable-openjtag
# --enable-presto_libftdi -> --enable-presto
# --enable-usb_blaster_libftdi -> --enable-usb_blaster
export OUTPUT_DIR="${BUILD_FOLDER_PATH}"
export CFLAGS="${XBB_CXXFLAGS} -Wno-pointer-to-int-cast"
export CXXFLAGS="${XBB_CXXFLAGS}"
export LDFLAGS="${XBB_LDFLAGS_APP}"
AMTJTAGACCEL="--enable-amtjtagaccel"
# --enable-buspirate -> not supported on mingw
BUSPIRATE="--disable-buspirate"
GW18012="--enable-gw16012"
PARPORT="--enable-parport"
PARPORT_GIVEIO="--enable-parport-giveio"
# --enable-sysfsgpio -> available only on Linux
SYSFSGPIO="--disable-sysfsgpio"
FTD2XX="--enable-ftd2xx"
elif [ "${TARGET_PLATFORM}" == "linux" ]
then
# --enable-minidriver-dummy -> configure error
# --enable-openjtag_ftdi -> --enable-openjtag
# --enable-presto_libftdi -> --enable-presto
# --enable-usb_blaster_libftdi -> --enable-usb_blaster
export CFLAGS="${XBB_CFLAGS} -Wno-format-truncation -Wno-format-overflow"
export CXXFLAGS="${XBB_CXXFLAGS}"
export LDFLAGS="${XBB_LDFLAGS_APP}"
export LIBS="-lpthread -lrt -ludev"
AMTJTAGACCEL="--enable-amtjtagaccel"
BUSPIRATE="--enable-buspirate"
GW18012="--enable-gw16012"
PARPORT="--enable-parport"
PARPORT_GIVEIO="--enable-parport-giveio"
SYSFSGPIO="--enable-sysfsgpio"
FTD2XX="--disable-ftd2xx"
elif [ "${TARGET_PLATFORM}" == "darwin" ]
then
# --enable-minidriver-dummy -> configure error
# --enable-openjtag_ftdi -> --enable-openjtag
# --enable-presto_libftdi -> --enable-presto
# --enable-usb_blaster_libftdi -> --enable-usb_blaster
export CFLAGS="${XBB_CFLAGS}"
export CXXFLAGS="${XBB_CXXFLAGS}"
export LDFLAGS="${XBB_LDFLAGS_APP}"
# export LIBS="-lobjc"
# --enable-amtjtagaccel -> 'sys/io.h' file not found
AMTJTAGACCEL="--disable-amtjtagaccel"
BUSPIRATE="--enable-buspirate"
# --enable-gw16012 -> 'sys/io.h' file not found
GW18012="--disable-gw16012"
PARPORT="--disable-parport"
PARPORT_GIVEIO="--disable-parport-giveio"
# --enable-sysfsgpio -> available only on Linux
SYSFSGPIO="--disable-sysfsgpio"
FTD2XX="--disable-ftd2xx"
else
echo "Unsupported target platorm ${TARGET_PLATFORM}."
exit 1
fi
if [ ! -f "config.status" ]
then
# May be required for repetitive builds, because this is an executable built
# in place and using one for a different architecture may not be a good idea.
rm -rfv "${WORK_FOLDER_PATH}/${OPENOCD_SRC_FOLDER_NAME}/jimtcl/autosetup/jimsh0"
(
echo
echo "Running openocd configure..."
bash "${WORK_FOLDER_PATH}/${OPENOCD_SRC_FOLDER_NAME}/configure" --help
bash ${DEBUG} "${WORK_FOLDER_PATH}/${OPENOCD_SRC_FOLDER_NAME}/configure" \
--prefix="${APP_PREFIX}" \
\
--build=${BUILD} \
--host=${HOST} \
--target=${TARGET} \
\
--datarootdir="${INSTALL_FOLDER_PATH}" \
--localedir="${APP_PREFIX}/share/locale" \
--mandir="${APP_PREFIX_DOC}/man" \
--pdfdir="${APP_PREFIX_DOC}/pdf" \
--infodir="${APP_PREFIX_DOC}/info" \
--docdir="${APP_PREFIX_DOC}" \
\
--disable-wextra \
--disable-werror \
--enable-dependency-tracking \
\
--enable-branding="${BRANDING}" \
\
--enable-aice \
${AMTJTAGACCEL} \
--enable-armjtagew \
--enable-at91rm9200 \
--enable-bcm2835gpio \
${BUSPIRATE} \
--enable-cmsis-dap \
--enable-dummy \
--enable-ep93xx \
--enable-ftdi \
${GW18012} \
--disable-ioutil \
--enable-jlink \
--enable-internal-libjaylink \
--enable-jtag_vpi \
--disable-minidriver-dummy \
--disable-oocd_trace \
--enable-opendous \
--enable-openjtag \
--enable-osbdm \
${PARPORT} \
--disable-parport-ppdev \
${PARPORT_GIVEIO} \
--enable-presto \
--enable-remote-bitbang \
--enable-rlink \
--enable-stlink \
${SYSFSGPIO} \
--enable-ti-icdi \
--enable-ulink \
--enable-usb-blaster \
--enable-usb_blaster_2 \
--enable-usbprog \
--enable-vsllink \
--disable-zy1000-master \
--disable-zy1000 \
--enable-jtag_vpi \
${FTD2XX} \
cp "config.log" "${LOGS_FOLDER_PATH}/config-openocd-log.txt"
) 2>&1 | tee "${LOGS_FOLDER_PATH}/configure-openocd-output.txt"
fi
(
echo
echo "Running openocd make..."
# Parallel builds fail.
make bindir="bin" pkgdatadir="" -j32
if [ "${WITH_STRIP}" == "y" ]
then
make install-strip
else
make install
fi
if [ "${TARGET_PLATFORM}" == "linux" ]
then
echo
echo "Shared libraries:"
echo "${APP_PREFIX}/bin/${APP_EXECUTABLE_NAME}"
readelf -d "${APP_PREFIX}/bin/${APP_EXECUTABLE_NAME}" | grep 'Shared library:'
# For just in case, normally must be done by the make file.
strip "${APP_PREFIX}/bin/${APP_EXECUTABLE_NAME}" || true
echo
echo "Preparing libraries..."
patch_linux_elf_origin "${APP_PREFIX}/bin/${APP_EXECUTABLE_NAME}"
echo
copy_dependencies_recursive "${APP_PREFIX}/bin/${APP_EXECUTABLE_NAME}" "${APP_PREFIX}/bin"
elif [ "${TARGET_PLATFORM}" == "darwin" ]
then
echo
echo "Initial dynamic libraries:"
otool -L "${APP_PREFIX}/bin/${APP_EXECUTABLE_NAME}"
# For just in case, normally must be done by the make file.
strip "${APP_PREFIX}/bin/${APP_EXECUTABLE_NAME}" || true
echo
echo "Preparing libraries..."
copy_dependencies_recursive "${APP_PREFIX}/bin/${APP_EXECUTABLE_NAME}" "${APP_PREFIX}/bin"
echo
echo "Updated dynamic libraries:"
otool -L "${APP_PREFIX}/bin/${APP_EXECUTABLE_NAME}"
elif [ "${TARGET_PLATFORM}" == "win32" ]
then
echo
echo "Dynamic libraries:"
echo "${APP_PREFIX}/bin/${APP_EXECUTABLE_NAME}.exe"
${CROSS_COMPILE_PREFIX}-objdump -x "${APP_PREFIX}/bin/${APP_EXECUTABLE_NAME}.exe" | grep -i 'DLL Name'
# For just in case, normally must be done by the make file.
${CROSS_COMPILE_PREFIX}-strip "${APP_PREFIX}/bin/${APP_EXECUTABLE_NAME}.exe" || true
rm -f "${APP_PREFIX}/bin/openocdw.exe"
echo
echo "Preparing libraries..."
copy_dependencies_recursive "${APP_PREFIX}/bin/${APP_EXECUTABLE_NAME}.exe" "${APP_PREFIX}/bin"
fi
if [ "${IS_DEVELOP}" != "y" ]
then
strip_binaries
check_application "${APP_EXECUTABLE_NAME}"
fi
(
xbb_activate_tex
if [ "${WITH_PDF}" == "y" ]
then
make bindir="bin" pkgdatadir="" pdf
make install-pdf
fi
if [ "${WITH_HTML}" == "y" ]
then
make bindir="bin" pkgdatadir="" html
make install-html
fi
)
) 2>&1 | tee "${LOGS_FOLDER_PATH}/make-openocd-output.txt"
)
}
function run_openocd()
{
echo
if [ "${TARGET_PLATFORM}" == "linux" ]
then
"${APP_PREFIX}/bin/${APP_EXECUTABLE_NAME}" --version
elif [ "${TARGET_PLATFORM}" == "darwin" ]
then
"${APP_PREFIX}/bin/${APP_EXECUTABLE_NAME}" --version
elif [ "${TARGET_PLATFORM}" == "win32" ]
then
local wsl_path=$(which wsl.exe)
if [ ! -z "${wsl_path}" ]
then
"${APP_PREFIX}/bin/${APP_EXECUTABLE_NAME}.exe" --version
else
(
xbb_activate
xbb_activate_installed_bin
local wine_path=$(which wine)
if [ ! -z "${wine_path}" ]
then
wine "${APP_PREFIX}/bin/${APP_EXECUTABLE_NAME}.exe" --version
else
echo "Install wine if you want to run the .exe binaries on Linux."
fi
)
fi
fi
}
function strip_binaries()
{
if [ "${WITH_STRIP}" == "y" ]
then
(
xbb_activate
echo
echo "Striping binaries..."
if [ "${TARGET_PLATFORM}" == "win32" ]
then
${CROSS_COMPILE_PREFIX}-strip "${APP_PREFIX}/bin/${APP_EXECUTABLE_NAME}.exe" || true
${CROSS_COMPILE_PREFIX}-strip "${APP_PREFIX}/bin/"*.dll || true
else
strip "${APP_PREFIX}/bin/${APP_EXECUTABLE_NAME}" || true
if [ "${TARGET_PLATFORM}" == "linux" ]
then
: # strip "${APP_PREFIX}/bin/${APP_EXECUTABLE_NAME}" || true
fi
fi
)
fi
}
# -----------------------------------------------------------------------------
function copy_distro_files()
{
(
xbb_activate
rm -rf "${APP_PREFIX}/${DISTRO_INFO_NAME}"
mkdir -p "${APP_PREFIX}/${DISTRO_INFO_NAME}"
echo
echo "Copying license files..."
copy_license \
"${SOURCES_FOLDER_PATH}/${LIBUSB1_SRC_FOLDER_NAME}" \
"${LIBUSB1_FOLDER_NAME}"
if [ "${TARGET_PLATFORM}" != "win32" ]
then
copy_license \
"${SOURCES_FOLDER_PATH}/${LIBUSB0_SRC_FOLDER_NAME}" \
"${LIBUSB0_FOLDER_NAME}"
else
copy_license \
"${SOURCES_FOLDER_PATH}/${LIBUSB_W32_SRC_FOLDER_NAME}" \
"${LIBUSB_W32_FOLDER_NAME}"
fi
copy_license \
"${SOURCES_FOLDER_PATH}/${LIBFTDI_SRC_FOLDER_NAME}" \
"${LIBFTDI_FOLDER_NAME}"
copy_license \
"${SOURCES_FOLDER_PATH}/${LIBICONV_SRC_FOLDER_NAME}" \
"${LIBICONV_FOLDER_NAME}"
copy_license \
"${WORK_FOLDER_PATH}/${OPENOCD_SRC_FOLDER_NAME}" \
"${OPENOCD_FOLDER_NAME}"
copy_build_files
echo
echo "Copying GME files..."
cd "${WORK_FOLDER_PATH}/build.git"
install -v -c -m 644 "scripts/${README_OUT_FILE_NAME}" \
"${APP_PREFIX}/README.md"
)
}
@@ -0,0 +1,17 @@
# -----------------------------------------------------------------------------
# This file is part of the xPack distribution.
# (https://xpack.github.io)
# Copyright (c) 2019 Liviu Ionescu.
#
# Permission to use, copy, modify, and/or distribute this software
# for any purpose is hereby granted, under the terms of the MIT license.
# -----------------------------------------------------------------------------
# Helper script used in the second edition of the xPack build
# scripts. As the name implies, it should contain only functions and
# should be included with 'source' by the build scripts (both native
# and container).
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
@@ -0,0 +1,685 @@
# -----------------------------------------------------------------------------
# This file is part of the xPack distribution.
# (https://xpack.github.io)
# Copyright (c) 2019 Liviu Ionescu.
#
# Permission to use, copy, modify, and/or distribute this software
# for any purpose is hereby granted, under the terms of the MIT license.
# -----------------------------------------------------------------------------
# Helper script used in the second edition of the xPack build
# scripts. As the name implies, it should contain only functions and
# should be included with 'source' by the container build scripts.
# -----------------------------------------------------------------------------
function do_libusb1()
{
# https://sourceforge.net/projects/libusb/files/libusb-1.0/
# https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=mingw-w64-libusb
# 2015-09-14, 1.0.20
# 2018-03-25, 1.0.22
LIBUSB1_SRC_FOLDER_NAME="libusb-${LIBUSB1_VERSION}"
LIBUSB1_FOLDER_NAME="${LIBUSB1_SRC_FOLDER_NAME}"
local libusb1_archive="${LIBUSB1_SRC_FOLDER_NAME}.tar.bz2"
local libusb1_url="http://sourceforge.net/projects/libusb/files/libusb-1.0/${LIBUSB1_FOLDER_NAME}/${libusb1_archive}"
local libusb1_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-libusb1-${LIBUSB1_VERSION}-installed"
if [ ! -f "${libusb1_stamp_file_path}" ]
then
cd "${SOURCES_FOLDER_PATH}"
download_and_extract "${libusb1_url}" "${libusb1_archive}" \
"${LIBUSB1_SRC_FOLDER_NAME}"
(
mkdir -p "${LIBS_BUILD_FOLDER_PATH}/${LIBUSB1_FOLDER_NAME}"
cd "${LIBS_BUILD_FOLDER_PATH}/${LIBUSB1_FOLDER_NAME}"
xbb_activate
xbb_activate_installed_dev
if [ "${TARGET_PLATFORM}" == "darwin" ]
then
# GCC-7 fails to compile Darwin USB.h:
# error: too many #pragma options align=reset
export CC=clang
fi
export CFLAGS="${XBB_CFLAGS} -Wno-non-literal-null-conversion -Wno-deprecated-declarations -Wno-format"
export CPPFLAGS="${XBB_CPPFLAGS}"
export LDFLAGS="${XBB_LDFLAGS_LIB}"
if [ ! -f "config.status" ]
then
(
echo
echo "Running libusb1 configure..."
bash "${SOURCES_FOLDER_PATH}/${LIBUSB1_SRC_FOLDER_NAME}/configure" --help
# --enable-shared required by libftdi.
# --enable-static required by libftdi. (odd...)
bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${LIBUSB1_SRC_FOLDER_NAME}/configure" \
--prefix="${LIBS_INSTALL_FOLDER_PATH}" \
\
--build=${BUILD} \
--host=${HOST} \
--target=${TARGET} \
\
--enable-shared \
--enable-static
cp "config.log" "${LOGS_FOLDER_PATH}/config-libusb1-log.txt"
) 2>&1 | tee "${LOGS_FOLDER_PATH}/configure-libusb1-output.txt"
fi
(
echo
echo "Running libusb1 make..."
# Build.
# WARNING: Parallel build fails!
make
if [ "${WITH_STRIP}" == "y" ]
then
make install-strip
else
make install
fi
) 2>&1 | tee "${LOGS_FOLDER_PATH}/make-libusb1-output.txt"
)
touch "${libusb1_stamp_file_path}"
else
echo "Library libusb1 already installed."
fi
}
# Required by GNU/Linux and macOS.
function do_libusb0()
{
# https://sourceforge.net/projects/libusb/files/libusb-compat-0.1/
# 2013-05-21, 0.1.5, latest
LIBUSB0_SRC_FOLDER_NAME="libusb-compat-${LIBUSB0_VERSION}"
LIBUSB0_FOLDER_NAME="${LIBUSB0_SRC_FOLDER_NAME}"
local libusb0_archive="${LIBUSB0_SRC_FOLDER_NAME}.tar.bz2"
local libusb0_url="http://sourceforge.net/projects/libusb/files/libusb-compat-0.1/${LIBUSB0_FOLDER_NAME}/${libusb0_archive}"
local libusb0_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-libusb0-${LIBUSB0_VERSION}-installed"
if [ ! -f "${libusb0_stamp_file_path}" ]
then
cd "${SOURCES_FOLDER_PATH}"
download_and_extract "${libusb0_url}" "${libusb0_archive}" \
"${LIBUSB0_SRC_FOLDER_NAME}"
(
mkdir -p "${LIBS_BUILD_FOLDER_PATH}/${LIBUSB0_FOLDER_NAME}"
cd "${LIBS_BUILD_FOLDER_PATH}/${LIBUSB0_FOLDER_NAME}"
xbb_activate
xbb_activate_installed_dev
export CFLAGS="${XBB_CFLAGS}"
export CPPFLAGS="${XBB_CPPFLAGS}"
export LDFLAGS="${XBB_LDFLAGS_LIB}"
if [ ! -f "config.status" ]
then
(
echo
echo "Running libusb0 configure..."
bash "${SOURCES_FOLDER_PATH}/${LIBUSB0_SRC_FOLDER_NAME}/configure" --help
bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${LIBUSB0_SRC_FOLDER_NAME}/configure" \
--prefix="${LIBS_INSTALL_FOLDER_PATH}" \
\
--build=${BUILD} \
--host=${HOST} \
--target=${TARGET} \
\
--enable-shared \
--disable-static
cp "config.log" "${LOGS_FOLDER_PATH}/config-libusb0-log.txt"
) 2>&1 | tee "${LOGS_FOLDER_PATH}/configure-libusb0-output.txt"
fi
(
echo
echo "Running libusb0 make..."
# Build.
make -j ${JOBS}
if [ "${WITH_STRIP}" == "y" ]
then
make install-strip
else
make install
fi
) 2>&1 | tee "${LOGS_FOLDER_PATH}/make-libusb0-output.txt"
)
touch "${libusb0_stamp_file_path}"
else
echo "Library libusb0 already installed."
fi
}
# Required by Windows.
function do_libusb_w32()
{
# https://sourceforge.net/projects/libusb-win32/files/libusb-win32-releases/
# 2012-01-17, 1.2.6.0
# LIBUSB_W32_VERSION="1.2.6.0" # +PATCH!
LIBUSB_W32_PREFIX="libusb-win32"
LIBUSB_W32="${LIBUSB_W32_PREFIX}-${LIBUSB_W32_VERSION}"
LIBUSB_W32_SRC_FOLDER_NAME="${LIBUSB_W32_PREFIX}-src-${LIBUSB_W32_VERSION}"
LIBUSB_W32_FOLDER_NAME="${LIBUSB_W32_SRC_FOLDER_NAME}"
local libusb_w32_archive="${LIBUSB_W32_SRC_FOLDER_NAME}.zip"
local linusb_w32_url="http://sourceforge.net/projects/libusb-win32/files/libusb-win32-releases/${LIBUSB_W32_VERSION}/${libusb_w32_archive}"
local libusb_w32_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-libusb-w32-${LIBUSB_W32_VERSION}-installed"
if [ ! -f "${libusb_w32_stamp_file_path}" ]
then
cd "${SOURCES_FOLDER_PATH}"
download_and_extract "${linusb_w32_url}" "${libusb_w32_archive}" \
"${LIBUSB_W32_SRC_FOLDER_NAME}"
# Mandatory build in the source folder, so make a local copy.
rm -rf "${LIBS_BUILD_FOLDER_PATH}/${LIBUSB_W32_FOLDER_NAME}"
mkdir -p "${LIBS_BUILD_FOLDER_PATH}/${LIBUSB_W32_FOLDER_NAME}"
cp -r "${SOURCES_FOLDER_PATH}/${LIBUSB_W32_SRC_FOLDER_NAME}"/* \
"${LIBS_BUILD_FOLDER_PATH}/${LIBUSB_W32_FOLDER_NAME}"
(
echo
echo "Running libusb-win32 make..."
cd "${LIBS_BUILD_FOLDER_PATH}/${LIBUSB_W32_FOLDER_NAME}"
xbb_activate
xbb_activate_installed_dev
# Patch from:
# https://gitorious.org/jtag-tools/openocd-mingw-build-scripts
# The conversions are needed to avoid errors like:
# 'Hunk #1 FAILED at 31 (different line endings).'
dos2unix src/install.c
dos2unix src/install_filter_win.c
dos2unix src/registry.c
if [ -f "${BUILD_GIT_PATH}/patches/${LIBUSB_W32_PATCH}" ]
then
patch -p0 < "${BUILD_GIT_PATH}/patches/${LIBUSB_W32_PATCH}"
fi
# Build.
(
export CFLAGS="${XBB_CFLAGS} -Wno-unknown-pragmas -Wno-unused-variable -Wno-pointer-sign -Wno-unused-but-set-variable"
make \
host_prefix=${CROSS_COMPILE_PREFIX} \
host_prefix_x86=i686-w64-mingw32 \
dll
) 2>&1 | tee "${LOGS_FOLDER_PATH}/make-libusb-w32-output.txt"
# Manually install, could not find a make target.
mkdir -p "${LIBS_INSTALL_FOLDER_PATH}/bin"
# Skipping it does not remove the reference from openocd, so for the
# moment it is preserved.
cp -v "${LIBS_BUILD_FOLDER_PATH}/${LIBUSB_W32_FOLDER_NAME}/libusb0.dll" \
"${LIBS_INSTALL_FOLDER_PATH}/bin"
mkdir -p "${LIBS_INSTALL_FOLDER_PATH}/lib"
cp -v "${LIBS_BUILD_FOLDER_PATH}/${LIBUSB_W32_FOLDER_NAME}/libusb.a" \
"${LIBS_INSTALL_FOLDER_PATH}/lib"
mkdir -p "${LIBS_INSTALL_FOLDER_PATH}/lib/pkgconfig"
sed -e "s|XXX|${LIBS_INSTALL_FOLDER_PATH}|" \
"${BUILD_GIT_PATH}/pkgconfig/${LIBUSB_W32}.pc" \
> "${LIBS_INSTALL_FOLDER_PATH}/lib/pkgconfig/libusb.pc"
mkdir -p "${LIBS_INSTALL_FOLDER_PATH}/include/libusb"
cp -v "${LIBS_BUILD_FOLDER_PATH}/${LIBUSB_W32_FOLDER_NAME}/src/lusb0_usb.h" \
"${LIBS_INSTALL_FOLDER_PATH}/include/libusb/usb.h"
)
touch "${libusb_w32_stamp_file_path}"
else
echo "Library libusb-w32 already installed."
fi
}
function do_libftdi()
{
# http://www.intra2net.com/en/developer/libftdi/download.php
# https://www.intra2net.com/en/developer/libftdi/download/libftdi1-1.4.tar.bz2
# 1.2 (no date)
# LIBFTDI_VERSION="1.2" # +PATCH!
LIBFTDI_SRC_FOLDER_NAME="libftdi1-${LIBFTDI_VERSION}"
LIBFTDI_FOLDER_NAME="${LIBFTDI_SRC_FOLDER_NAME}"
local libftdi_archive="${LIBFTDI_SRC_FOLDER_NAME}.tar.bz2"
libftdi_url="http://www.intra2net.com/en/developer/libftdi/download/${libftdi_archive}"
local libftdi_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-libftdi-${LIBFTDI_VERSION}-installed"
if [ ! -f "${libftdi_stamp_file_path}" ]
then
cd "${SOURCES_FOLDER_PATH}"
download_and_extract "${libftdi_url}" "${libftdi_archive}" \
"${LIBFTDI_SRC_FOLDER_NAME}" \
"${LIBFTDI_PATCH}"
(
mkdir -p "${LIBS_BUILD_FOLDER_PATH}/${LIBFTDI_FOLDER_NAME}"
cd "${LIBS_BUILD_FOLDER_PATH}/${LIBFTDI_FOLDER_NAME}"
xbb_activate
xbb_activate_installed_dev
export CFLAGS="${XBB_CFLAGS}"
export CPPFLAGS="${XBB_CPPFLAGS}"
export LDFLAGS="${XBB_LDFLAGS_LIB}"
(
echo
echo "Running libftdi configure..."
if [ "${TARGET_PLATFORM}" == "win32" ]
then
# Configure for Windows.
cmake \
-DPKG_CONFIG_EXECUTABLE="${PKG_CONFIG}" \
-DCMAKE_TOOLCHAIN_FILE="${SOURCES_FOLDER_PATH}/${LIBFTDI_SRC_FOLDER_NAME}/cmake/Toolchain-${CROSS_COMPILE_PREFIX}.cmake" \
-DCMAKE_INSTALL_PREFIX="${LIBS_INSTALL_FOLDER_PATH}" \
-DLIBUSB_INCLUDE_DIR="${LIBS_INSTALL_FOLDER_PATH}/include/libusb-1.0" \
-DLIBUSB_LIBRARIES="${LIBS_INSTALL_FOLDER_PATH}/lib/libusb-1.0.a" \
-DBUILD_TESTS:BOOL=off \
-DFTDIPP:BOOL=off \
-DPYTHON_BINDINGS:BOOL=off \
-DEXAMPLES:BOOL=off \
-DDOCUMENTATION:BOOL=off \
-DFTDI_EEPROM:BOOL=off \
"${SOURCES_FOLDER_PATH}/${LIBFTDI_SRC_FOLDER_NAME}"
else
# Configure for GNU/Linux and macOS.
cmake \
-DPKG_CONFIG_EXECUTABLE="${PKG_CONFIG}" \
-DCMAKE_INSTALL_PREFIX="${LIBS_INSTALL_FOLDER_PATH}" \
-DBUILD_TESTS:BOOL=off \
-DFTDIPP:BOOL=off \
-DPYTHON_BINDINGS:BOOL=off \
-DEXAMPLES:BOOL=off \
-DDOCUMENTATION:BOOL=off \
-DFTDI_EEPROM:BOOL=off \
"${SOURCES_FOLDER_PATH}/${LIBFTDI_SRC_FOLDER_NAME}"
fi
) 2>&1 | tee "${LOGS_FOLDER_PATH}/configure-libftdi-output.txt"
(
echo
echo "Running libftdi make..."
# Build.
make -j ${JOBS}
make install
) 2>&1 | tee "${LOGS_FOLDER_PATH}/make-libftdi-output.txt"
)
touch "${libftdi_stamp_file_path}"
else
echo "Library libftdi already installed."
fi
}
function do_libiconv()
{
# https://www.gnu.org/software/libiconv/
# https://ftp.gnu.org/pub/gnu/libiconv/
# https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=libiconv
# 2011-08-07, "1.14"
# 2017-02-02, "1.15", latest
LIBICONV_SRC_FOLDER_NAME="libiconv-${LIBICONV_VERSION}"
LIBICONV_FOLDER_NAME="${LIBICONV_SRC_FOLDER_NAME}"
local libiconv_archive="${LIBICONV_SRC_FOLDER_NAME}.tar.gz"
local libiconv_url="https://ftp.gnu.org/pub/gnu/libiconv/${libiconv_archive}"
local libiconv_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-libiconv-${LIBICONV_VERSION}-installed"
if [ ! -f "${libiconv_stamp_file_path}" ]
then
cd "${SOURCES_FOLDER_PATH}"
download_and_extract "${libiconv_url}" "${libiconv_archive}" \
"${LIBICONV_SRC_FOLDER_NAME}"
(
mkdir -p "${LIBS_BUILD_FOLDER_PATH}/${LIBICONV_FOLDER_NAME}"
cd "${LIBS_BUILD_FOLDER_PATH}/${LIBICONV_FOLDER_NAME}"
xbb_activate
xbb_activate_installed_dev
# -fgnu89-inline fixes "undefined reference to `aliases2_lookup'"
# https://savannah.gnu.org/bugs/?47953
export CFLAGS="${XBB_CFLAGS} -fgnu89-inline -Wno-tautological-compare -Wno-parentheses-equality -Wno-static-in-inline -Wno-pointer-to-int-cast"
export CPPFLAGS="${XBB_CPPFLAGS}"
export LDFLAGS="${XBB_LDFLAGS_LIB}"
if [ ! -f "config.status" ]
then
(
echo
echo "Running libiconv configure..."
bash "${SOURCES_FOLDER_PATH}/${LIBICONV_SRC_FOLDER_NAME}/configure" --help
bash ${DEBUG} "${SOURCES_FOLDER_PATH}/${LIBICONV_SRC_FOLDER_NAME}/configure" \
--prefix="${LIBS_INSTALL_FOLDER_PATH}" \
\
--build=${BUILD} \
--host=${HOST} \
--target=${TARGET} \
\
--enable-shared \
--disable-static \
--disable-nls
cp "config.log" "${LOGS_FOLDER_PATH}/config-libiconv-log.txt"
) 2>&1 | tee "${LOGS_FOLDER_PATH}/configure-libiconv-output.txt"
fi
(
echo
echo "Running libiconv make..."
# Build.
make -j ${JOBS}
if [ "${WITH_STRIP}" == "y" ]
then
make install-strip
else
make install
fi
) 2>&1 | tee "${LOGS_FOLDER_PATH}/make-libiconv-output.txt"
)
touch "${libiconv_stamp_file_path}"
else
echo "Library libiconv already installed."
fi
}
function do_hidapi()
{
# https://github.com/signal11/hidapi/downloads
# Oct 26, 2011, "0.7.0"
# https://github.com/signal11/hidapi/archive/hidapi-0.8.0-rc1.zip
# Oct 7, 2013, "0.8.0-rc1", latest
HIDAPI_SRC_FOLDER_NAME="hidapi-hidapi-${HIDAPI_VERSION}"
HIDAPI_FOLDER_NAME="${HIDAPI_SRC_FOLDER_NAME}"
local hidapi_archive="hidapi-${HIDAPI_VERSION}.zip"
local hidapi_url="https://github.com/signal11/hidapi/archive/${hidapi_archive}"
local hidapi_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-hidapi-${HIDAPI_VERSION}-installed"
if [ ! -f "${hidapi_stamp_file_path}" ]
then
cd "${SOURCES_FOLDER_PATH}"
download_and_extract "${hidapi_url}" "${hidapi_archive}" \
"${HIDAPI_SRC_FOLDER_NAME}"
# Mandatory build in the source folder, so make a local copy.
rm -rf "${LIBS_BUILD_FOLDER_PATH}/${HIDAPI_FOLDER_NAME}"
mkdir -p "${LIBS_BUILD_FOLDER_PATH}/${HIDAPI_FOLDER_NAME}"
cp -r "${SOURCES_FOLDER_PATH}/${HIDAPI_SRC_FOLDER_NAME}"/* \
"${LIBS_BUILD_FOLDER_PATH}/${HIDAPI_FOLDER_NAME}"
(
cd "${LIBS_BUILD_FOLDER_PATH}/${HIDAPI_FOLDER_NAME}"
xbb_activate
xbb_activate_installed_dev
if [ "${TARGET_PLATFORM}" == "win32" ]
then
HIDAPI_OBJECT="hid.o"
HIDAPI_A="libhid.a"
cd "${LIBS_BUILD_FOLDER_PATH}/${HIDAPI_FOLDER_NAME}/windows"
export CFLAGS="${XBB_CFLAGS}"
make -f Makefile.mingw \
CC=${CROSS_COMPILE_PREFIX}-gcc \
"${HIDAPI_OBJECT}"
# Make just compiles the file. Create the archive and convert it to library.
# No dynamic/shared libs involved.
ar -r libhid.a "${HIDAPI_OBJECT}"
${CROSS_COMPILE_PREFIX}-ranlib libhid.a
mkdir -p "${LIBS_INSTALL_FOLDER_PATH}/lib"
cp -v libhid.a \
"${LIBS_INSTALL_FOLDER_PATH}/lib"
mkdir -p "${LIBS_INSTALL_FOLDER_PATH}/lib/pkgconfig"
sed -e "s|XXX|${LIBS_INSTALL_FOLDER_PATH}|" \
"${BUILD_GIT_PATH}/pkgconfig/hidapi-${HIDAPI_VERSION}-windows.pc" \
> "${LIBS_INSTALL_FOLDER_PATH}/lib/pkgconfig/hidapi.pc"
mkdir -p "${LIBS_INSTALL_FOLDER_PATH}/include/hidapi"
cp -v "${SOURCES_FOLDER_PATH}/${HIDAPI_FOLDER_NAME}/hidapi/hidapi.h" \
"${LIBS_INSTALL_FOLDER_PATH}/include/hidapi"
elif [ "${TARGET_PLATFORM}" == "linux" -o "${TARGET_PLATFORM}" == "darwin" ]
then
if [ "${TARGET_PLATFORM}" == "linux" ]
then
do_copy_libudev
export LIBS="-liconv"
fi
echo
echo "Running hidapi bootstrap..."
bash ./bootstrap
export CFLAGS="${XBB_CFLAGS}"
export CPPFLAGS="${XBB_CPPFLAGS}"
export LDFLAGS="${XBB_LDFLAGS_LIB}"
(
echo
echo "Running hidapi configure..."
bash "./configure" --help
bash ${DEBUG} "./configure" \
--prefix="${LIBS_INSTALL_FOLDER_PATH}" \
\
--build=${BUILD} \
--host=${HOST} \
--target=${TARGET} \
\
--enable-shared \
--disable-static \
--disable-testgui
cp "config.log" "${LOGS_FOLDER_PATH}/config-hidapi-log.txt"
) 2>&1 | tee "${LOGS_FOLDER_PATH}/configure-hidapi-output.txt"
(
echo
echo "Running hidapi make..."
# Build.
make -j ${JOBS}
if [ "${WITH_STRIP}" == "y" ]
then
make install-strip
else
make install
fi
) 2>&1 | tee "${LOGS_FOLDER_PATH}/make-hidapi-output.txt"
fi
rm -f "${LIBS_INSTALL_FOLDER_PATH}"/lib*/libhidapi-hidraw.la
)
touch "${hidapi_stamp_file_path}"
else
echo "Library hidapi already installed."
fi
}
function do_copy_libudev()
{
cp "/usr/include/libudev.h" "${LIBS_INSTALL_FOLDER_PATH}/include"
if [ "${TARGET_ARCH}" == "x64" ]
then
if [ -f "/usr/lib/x86_64-linux-gnu/libudev.so" ]
then
cp "/usr/lib/x86_64-linux-gnu/libudev.so" "${LIBS_INSTALL_FOLDER_PATH}/lib"
cp "/usr/lib/x86_64-linux-gnu/pkgconfig/libudev.pc" "${LIBS_INSTALL_FOLDER_PATH}/lib/pkgconfig"
elif [ -f "/lib/x86_64-linux-gnu/libudev.so" ]
then
# In Debian 9 the location changed to /lib
cp "/lib/x86_64-linux-gnu/libudev.so" "${LIBS_INSTALL_FOLDER_PATH}/lib"
cp "/usr/lib/x86_64-linux-gnu/pkgconfig/libudev.pc" "${LIBS_INSTALL_FOLDER_PATH}/lib/pkgconfig"
elif [ -f "/usr/lib/libudev.so" ]
then
# In ARCH the location is /usr/lib
cp "/usr/lib/libudev.so" "${LIBS_INSTALL_FOLDER_PATH}/lib"
cp "/usr/lib/pkgconfig/libudev.pc" "${LIBS_INSTALL_FOLDER_PATH}/lib/pkgconfig"
elif [ -f "/usr/lib64/libudev.so" ]
then
# In CentOS the location is /usr/lib64
cp "/usr/lib64/libudev.so" "${LIBS_INSTALL_FOLDER_PATH}/lib"
cp "/usr/lib64/pkgconfig/libudev.pc" "${LIBS_INSTALL_FOLDER_PATH}/lib/pkgconfig"
else
echo "No libudev.so; abort."
exit 1
fi
elif [ "${TARGET_ARCH}" == "x32" ]
then
if [ -f "/usr/lib/i386-linux-gnu/libudev.so" ]
then
cp "/usr/lib/i386-linux-gnu/libudev.so" "${LIBS_INSTALL_FOLDER_PATH}/lib"
cp "/usr/lib/i386-linux-gnu/pkgconfig/libudev.pc" "${LIBS_INSTALL_FOLDER_PATH}/lib/pkgconfig"
elif [ -f "/lib/i386-linux-gnu/libudev.so" ]
then
# In Debian 9 the location changed to /lib
cp "/lib/i386-linux-gnu/libudev.so" "${LIBS_INSTALL_FOLDER_PATH}/lib"
cp "/usr/lib/i386-linux-gnu/pkgconfig/libudev.pc" "${LIBS_INSTALL_FOLDER_PATH}/lib/pkgconfig"
elif [ -f "/lib/libudev.so.0" ]
then
# In CentOS the location is /lib
cp "/lib/libudev.so.0" "${LIBS_INSTALL_FOLDER_PATH}/lib"
cp "/usr/lib/pkgconfig/libudev.pc" "${LIBS_INSTALL_FOLDER_PATH}/lib/pkgconfig"
else
echo "No libudev.so; abort."
exit 1
fi
fi
}
function do_ftd2xx() {
FTD2XX_SRC_FOLDER_NAME="ftd2xx"
FTD2XX_FOLDER_NAME="${FTD2XX_SRC_FOLDER_NAME}"
local ftd2xx_archive="${FTD2XX_SRC_FOLDER_NAME}.zip"
local FTD2XX_VERSION="$1"
local ftd2xx_url="https://www.ftdichip.com/Driver/CDM/CDM%20v${FTD2XX_VERSION}%20WHQL%20Certified.zip"
local ftd2xx_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-ftd2xx-${FTD2XX_VERSION}-installed"
if [ ! -f "${ftd2xx_stamp_file_path}" ]
then
mkdir -p "${SOURCES_FOLDER_PATH}/${FTD2XX_SRC_FOLDER_NAME}"
cd "${SOURCES_FOLDER_PATH}/${FTD2XX_SRC_FOLDER_NAME}"
# that `echo "A"` is send to unzip to let it overwrite all files
echo "A" | download_and_extract "${ftd2xx_url}" "${ftd2xx_archive}" \
"${FTD2XX_SRC_FOLDER_NAME}"
# if using --all on a clean build, linux-* is going to be built eariler than win*.
# so we need to create the dirs first
mkdir -p "${LIBS_INSTALL_FOLDER_PATH}/../../../win32-x32/install/libs/bin"
mkdir -p "${LIBS_INSTALL_FOLDER_PATH}/../../../win32-x64/install/libs/bin"
# this function is going to be invoked during a linux-* build;
# in any case, just put the files in win* directories
cp -rv ./i386/*.{dll,lib,sys} "${LIBS_INSTALL_FOLDER_PATH}/../../../win32-x32/install/libs/bin"
cp -rv ./amd64/*.{dll,lib,sys} "${LIBS_INSTALL_FOLDER_PATH}/../../../win32-x64/install/libs/bin"
mv "${LIBS_INSTALL_FOLDER_PATH}/../../../win32-x32/install/libs/bin/ftd2xx.dll" "${LIBS_INSTALL_FOLDER_PATH}/../../../win32-x32/install/libs/bin/FTD2XX.dll"
mv "${LIBS_INSTALL_FOLDER_PATH}/../../../win32-x64/install/libs/bin/ftd2xx64.dll" "${LIBS_INSTALL_FOLDER_PATH}/../../../win32-x64/install/libs/bin/FTD2XX.dll"
# hard code preprocessor
# CAVEAT: source code may not be here on the first build; but the first clean build when using `--all`
# is a linux build so it doesn't matter if the sources are patched at that time
# if you are using --win32 or --win64 in a clean build, this is likely to fail.
if [ -d "${WORK_FOLDER_PATH}/${OPENOCD_SRC_FOLDER_NAME}"/src/jtag/drivers ]; then
cp -v ./*.h "${WORK_FOLDER_PATH}/${OPENOCD_SRC_FOLDER_NAME}"/src/jtag/drivers/
sed -ie "s/<ftd2xx.h>/\"ftd2xx.h\"/g" "${WORK_FOLDER_PATH}/${OPENOCD_SRC_FOLDER_NAME}"/src/jtag/drivers/mpsse.c
fi
mkdir -p "${LIBS_INSTALL_FOLDER_PATH}/include"
cp -v ./*.h "${LIBS_INSTALL_FOLDER_PATH}/include/"
touch "${ftd2xx_stamp_file_path}"
ls "${LIBS_INSTALL_FOLDER_PATH}/include/"
else
echo "Library ftd2xx already installed."
fi
}
@@ -0,0 +1,26 @@
# -----------------------------------------------------------------------------
# This file is part of the xPack distribution.
# (https://xpack.github.io)
# Copyright (c) 2019 Liviu Ionescu.
#
# Permission to use, copy, modify, and/or distribute this software
# for any purpose is hereby granted, under the terms of the MIT license.
# -----------------------------------------------------------------------------
# Helper script used in the second edition of the xPack build
# scripts. As the name implies, it should contain only functions and
# should be included with 'source' by the build scripts (both native
# and container).
# -----------------------------------------------------------------------------
# Use this as openocd source code definition template
# Create your own scripts/common-source.sh
# -----------------------------------------------------------------------------
OPENOCD_PROJECT_NAME="openocd"
OPENOCD_VERSION="0.11.0"
OPENOCD_GIT_BRANCH="nuclei-develop"
OPENOCD_GIT_COMMIT=""
README_OUT_FILE_NAME="README-Changelog.md"
OPENOCD_GIT_URL="https://github.com/riscv-mcu/riscv-openocd"
OPENOCD_SRC_FOLDER_NAME="${OPENOCD_PROJECT_NAME}.git"
@@ -0,0 +1,162 @@
# -----------------------------------------------------------------------------
# This file is part of the xPacks distribution.
# (https://xpack.github.io)
# Copyright (c) 2019 Liviu Ionescu.
#
# Permission to use, copy, modify, and/or distribute this software
# for any purpose is hereby granted, under the terms of the MIT license.
# -----------------------------------------------------------------------------
# Helper script used in the second edition of the GNU MCU Eclipse build
# scripts. As the name implies, it should contain only functions and
# should be included with 'source' by the container build scripts.
# -----------------------------------------------------------------------------
function build_versions()
{
# The \x2C is a comma in hex; without this trick the regular expression
# that processes this string in the Makefile, silently fails and the
# bfdver.h file remains empty.
BRANDING="${BRANDING}\x2C ${TARGET_MACHINE}"
OPENOCD_PROJECT_NAME="openocd"
OPENOCD_GIT_COMMIT=${OPENOCD_GIT_COMMIT:-""}
README_OUT_FILE_NAME="README-${RELEASE_VERSION}.md"
OPENOCD_SRC_FOLDER_NAME=${OPENOCD_SRC_FOLDER_NAME:-"${OPENOCD_PROJECT_NAME}.git"}
OPENOCD_GIT_URL=${OPENOCD_GIT_URL:-"https://github.com/xpack-dev-tools/openocd.git"}
LIBFTDI_PATCH=""
LIBUSB_W32_PATCH=""
USE_TAR_GZ="y"
USE_SINGLE_FOLDER_PATH="y"
# Keep them in sync with combo archive content.
if [[ "${RELEASE_VERSION}" =~ 0\.10\.0-15 ]]
then
# Nuclei: starting from 0.10.0-15 we do not track upstream (xPack) versions
# anymore.
# -------------------------------------------------------------------------
OPENOCD_VERSION="0.10.0-15"
# Used in the licenses folder.
OPENOCD_FOLDER_NAME="openocd-${OPENOCD_VERSION}"
OPENOCD_GIT_BRANCH=${OPENOCD_GIT_BRANCH:-"xpack"}
# OPENOCD_GIT_BRANCH=${OPENOCD_GIT_BRANCH:-"xpack-develop"}
OPENOCD_GIT_COMMIT=${OPENOCD_GIT_COMMIT:-"e5be992df1a893e2e865419a02a564d5f9ccd9dd"}
# -------------------------------------------------------------------------
do_libusb1 "1.0.22"
if [ "${TARGET_PLATFORM}" == "win32" ]
then
do_libusb_w32 "1.2.6.0"
else
do_libusb0 "0.1.5"
fi
do_libftdi "1.4"
build_libiconv "1.15"
do_hidapi "0.8.0-rc1"
do_ftd2xx "2.12.28"
# -------------------------------------------------------------------------
do_openocd
run_openocd
# -------------------------------------------------------------------------
elif [[ "${RELEASE_VERSION}" =~ 0\.10\.0-14 ]]
then
# -------------------------------------------------------------------------
OPENOCD_VERSION="0.10.0-14"
# Used in the licenses folder.
OPENOCD_FOLDER_NAME="openocd-${OPENOCD_VERSION}"
OPENOCD_GIT_BRANCH=${OPENOCD_GIT_BRANCH:-"xpack"}
# OPENOCD_GIT_BRANCH=${OPENOCD_GIT_BRANCH:-"xpack-develop"}
OPENOCD_GIT_COMMIT=${OPENOCD_GIT_COMMIT:-"e5be992df1a893e2e865419a02a564d5f9ccd9dd"}
# -------------------------------------------------------------------------
do_libusb1 "1.0.22"
if [ "${TARGET_PLATFORM}" == "win32" ]
then
do_libusb_w32 "1.2.6.0"
else
do_libusb0 "0.1.5"
fi
do_libftdi "1.4"
build_libiconv "1.15"
do_hidapi "0.8.0-rc1"
do_ftd2xx "2.12.28"
# -------------------------------------------------------------------------
do_openocd
run_openocd
# -------------------------------------------------------------------------
elif [[ "${RELEASE_VERSION}" =~ 0\.10\.0-15 ]]
then
# -------------------------------------------------------------------------
OPENOCD_VERSION="0.10.0-15"
# Used in the licenses folder.
OPENOCD_FOLDER_NAME="openocd-${OPENOCD_VERSION}"
OPENOCD_GIT_BRANCH=${OPENOCD_GIT_BRANCH:-"xpack"}
OPENOCD_GIT_COMMIT=${OPENOCD_GIT_COMMIT:-"191d1b176cf32280fc649d3c5afcff44d6205daf"}
# -------------------------------------------------------------------------
USE_TAR_GZ=""
do_libusb1 "1.0.22"
if [ "${TARGET_PLATFORM}" == "win32" ]
then
do_libusb_w32 "1.2.6.0"
else
do_libusb0 "0.1.5"
fi
do_libftdi "1.4"
build_libiconv "1.15"
do_hidapi "0.8.0-rc1"
do_ftd2xx "2.12.28"
# -------------------------------------------------------------------------
do_openocd
run_openocd
# -------------------------------------------------------------------------
else
echo "Unsupported version ${RELEASE_VERSION}."
exit 1
fi
}
# -----------------------------------------------------------------------------
@@ -0,0 +1,266 @@
#!/usr/bin/env bash
# -----------------------------------------------------------------------------
# This file is part of the xPack distribution.
# (https://xpack.github.io)
# Copyright (c) 2019 Liviu Ionescu.
#
# Permission to use, copy, modify, and/or distribute this software
# for any purpose is hereby granted, under the terms of the MIT license.
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Safety settings (see https://gist.github.com/ilg-ul/383869cbb01f61a51c4d).
if [[ ! -z ${DEBUG} ]]
then
set ${DEBUG} # Activate the expand mode if DEBUG is anything but empty.
else
DEBUG=""
fi
set -o errexit # Exit if command failed.
set -o pipefail # Exit if pipe failed.
set -o nounset # Exit if variable not set.
# Remove the initial space and instead use '\n'.
IFS=$'\n\t'
# -----------------------------------------------------------------------------
# Identify the script location, to reach, for example, the helper scripts.
build_script_path="$0"
if [[ "${build_script_path}" != /* ]]
then
# Make relative path absolute.
build_script_path="$(pwd)/$0"
fi
script_folder_path="$(dirname "${build_script_path}")"
script_folder_name="$(basename "${script_folder_path}")"
# =============================================================================
# Inner script to run inside Docker containers to build the
# xPack OpenOCD distribution packages.
# For native builds, it runs on the host (macOS build cases,
# and development builds for GNU/Linux).
# -----------------------------------------------------------------------------
defines_script_path="${script_folder_path}/defs-source.sh"
echo "Definitions source script: \"${defines_script_path}\"."
source "${defines_script_path}"
# This file is generated by the host build script.
host_defines_script_path="${script_folder_path}/host-defs-source.sh"
echo "Host definitions source script: \"${host_defines_script_path}\"."
source "${host_defines_script_path}"
common_helper_functions_script_path="${script_folder_path}/helper/common-functions-source.sh"
echo "Common helper functions source script: \"${common_helper_functions_script_path}\"."
source "${common_helper_functions_script_path}"
common_functions_script_path="${script_folder_path}/common-functions-source.sh"
echo "Common functions source script: \"${common_functions_script_path}\"."
source "${common_functions_script_path}"
# User defined openocd source code, branch, commit, version
common_source_path="${script_folder_path}/common-source.sh"
if [ -f ${common_source_path} ] ; then
echo "Common source script: \"${common_source_path}\"."
source "${common_source_path}"
fi
container_functions_script_path="${script_folder_path}/helper/container-functions-source.sh"
echo "Container helper functions source script: \"${container_functions_script_path}\"."
source "${container_functions_script_path}"
container_libs_functions_script_path="${script_folder_path}/${COMMON_LIBS_FUNCTIONS_SCRIPT_NAME}"
echo "Container libs functions source script: \"${container_libs_functions_script_path}\"."
source "${container_libs_functions_script_path}"
container_app_functions_script_path="${script_folder_path}/${COMMON_APPS_FUNCTIONS_SCRIPT_NAME}"
echo "Container app functions source script: \"${container_app_functions_script_path}\"."
source "${container_app_functions_script_path}"
# -----------------------------------------------------------------------------
if [ ! -z "#{DEBUG}" ]
then
echo $@
fi
WITH_STRIP="y"
WITH_PDF="y"
WITH_HTML="n"
IS_DEVELOP=""
IS_DEBUG=""
JOBS=""
while [ $# -gt 0 ]
do
case "$1" in
--disable-strip)
WITH_STRIP="n"
shift
;;
--without-pdf)
WITH_PDF="n"
shift
;;
--with-pdf)
WITH_PDF="y"
shift
;;
--without-html)
WITH_HTML="n"
shift
;;
--with-html)
WITH_HTML="y"
shift
;;
--jobs)
JOBS=$2
shift 2
;;
--develop)
IS_DEVELOP="y"
shift
;;
--debug)
IS_DEBUG="y"
shift
;;
*)
echo "Unknown action/option $1"
exit 1
;;
esac
done
if [ "${IS_DEBUG}" == "y" ]
then
WITH_STRIP="n"
fi
# -----------------------------------------------------------------------------
start_timer
detect_container
prepare_xbb_env
prepare_xbb_extras
# -----------------------------------------------------------------------------
# The \x2C is a comma in hex; without this trick the regular expression
# that processes this string in the Makefile, silently fails and the
# bfdver.h file remains empty.
BRANDING="${BRANDING}\x2C ${TARGET_BITS}-bit"
OPENOCD_PROJECT_NAME=${OPENOCD_PROJECT_NAME:-"openocd"}
OPENOCD_VERSION=${OPENOCD_VERSION:-"0.11.0"}
OPENOCD_GIT_BRANCH=${OPENOCD_GIT_BRANCH:-"nuclei-develop"}
OPENOCD_GIT_COMMIT=${OPENOCD_GIT_COMMIT:-""}
README_OUT_FILE_NAME=${README_OUT_FILE_NAME:-"README-Changelog.md"}
OPENOCD_GIT_URL=${OPENOCD_GIT_URL:-"https://github.com/riscv-mcu/riscv-openocd"}
OPENOCD_SRC_FOLDER_NAME=${OPENOCD_SRC_FOLDER_NAME:-"${OPENOCD_PROJECT_NAME}.git"}
LIBFTDI_PATCH=""
LIBUSB_W32_PATCH=""
# Keep them in sync with combo archive content.
if true
then
# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
LIBUSB1_VERSION="1.0.22"
LIBUSB0_VERSION="0.1.5"
LIBUSB_W32_VERSION="1.2.6.0"
LIBFTDI_VERSION="1.4"
LIBICONV_VERSION="1.15"
HIDAPI_VERSION="0.8.0-rc1"
LIBFTDI_PATCH="libftdi1-${LIBFTDI_VERSION}-cmake-FindUSB1.patch"
LIBUSB_W32_PATCH="libusb-win32-${LIBUSB_W32_VERSION}-mingw-w64.patch"
# ---------------------------------------------------------------------------
else
echo "Unsupported version ${RELEASE_VERSION}."
exit 1
fi
# -----------------------------------------------------------------------------
# Used in the licenses folder.
OPENOCD_FOLDER_NAME="openocd-${OPENOCD_VERSION}"
# -----------------------------------------------------------------------------
echo
echo "Here we go..."
echo
# -----------------------------------------------------------------------------
# Build dependent libraries.
do_libusb1
if [ "${TARGET_PLATFORM}" == "win32" ]
then
do_libusb_w32
else
do_libusb0
fi
do_libftdi
do_libiconv
do_hidapi
do_ftd2xx "2.12.28"
# -----------------------------------------------------------------------------
do_openocd
run_openocd
# -----------------------------------------------------------------------------
check_binaries
copy_distro_files
create_archive
# Change ownership to non-root Linux user.
fix_ownership
# -----------------------------------------------------------------------------
stop_timer
exit 0
# -----------------------------------------------------------------------------
@@ -0,0 +1,42 @@
# -----------------------------------------------------------------------------
# This file is part of the xPack distribution.
# (https://xpack.github.io)
# Copyright (c) 2019 Liviu Ionescu.
#
# Permission to use, copy, modify, and/or distribute this software
# for any purpose is hereby granted, under the terms of the MIT license.
# -----------------------------------------------------------------------------
# Helper script used in the second edition of the build scripts.
# As the name implies, it should contain only definitions and should
# be included with 'source' by the host and container scripts.
# Warning: MUST NOT depend on $HOME or other environment variables.
# -----------------------------------------------------------------------------
# Used to display the application name.
APP_NAME=${APP_NAME:-"OpenOCD"}
APP_BUILD=${APP_BUILD:-"build"}
# Used as part of file/folder paths.
APP_UC_NAME=${APP_UC_NAME:-"OpenOCD"}
APP_LC_NAME=${APP_LC_NAME:-"openocd"}
APP_EXECUTABLE_NAME=${APP_EXECUTABLE_NAME:-"openocd"}
DISTRO_UC_NAME=${DISTRO_UC_NAME:-"Nuclei"}
DISTRO_LC_NAME=${DISTRO_LC_NAME:-"nuclei"}
DISTRO_TOP_FOLDER=${DISTRO_TOP_FOLDER:-"Nuclei"}
# Use the new xPack naming convention.
HAS_NAME_ARCH="y"
BRANDING=${BRANDING:-"${DISTRO_UC_NAME} OpenOCD"}
CONTAINER_SCRIPT_NAME=${CONTAINER_SCRIPT_NAME:-"container-build.sh"}
COMMON_LIBS_FUNCTIONS_SCRIPT_NAME=${COMMON_LIBS_FUNCTIONS_SCRIPT_NAME:-"common-libs-functions-source.sh"}
COMMON_APPS_FUNCTIONS_SCRIPT_NAME=${COMMON_APPS_FUNCTIONS_SCRIPT_NAME:-"common-apps-functions-source.sh"}
# -----------------------------------------------------------------------------
@@ -0,0 +1,3 @@
#!/usr/bin/env bash
rm -rf "${HOME}/Downloads/openocd-xpack.git"
git clone --branch xpack_nuclei_next --recurse-submodules https://github.com/riscv-mcu/openocd-xpack.git "${HOME}/Downloads/openocd-xpack.git"
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2017 Liviu Ionescu
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
@@ -0,0 +1,54 @@
# build-helper
Common script used in other build scripts.
- `host-functions-source.sh`: to be included with `source` in the host build script
- `container-functions-source.sh`: to be included with `source` in the container build script
Deprecated:
- `builder-helper.sh`: used in the first generation of build scripts.
# Patches
The code used to download and extract archives can also be used
to post-patch the downloaded files. For this a patch file must be
placed in the `patches` folder, and the name must be passed as the
third param to `extract()`.
## Memo
The code to apply the patch (`common-functions-source.sh:extract()`) does
the following:
```console
$ cd sources/binutils
$ patch -p0 < "binutils-2.31.patch"
```
The patch is applied from the library source folder, so it must be created
with the library relative path.
For example, to create a binutils patch, use:
```console
$ cd sources/binutils
$ cp bfd/ihex.c bfd/ihex-patched.c
$ vi bfd/ihex-patched.c
$ diff -u bfd/ihex.c bfd/ihex-patched.c > patches/binutils-2.31.patch
```
There may also be git patches; they are applied with `git apply file.git-patch`.
To create a patch with the uncommitted changes:
```console
$ git diff > file.git-patch
```
Links:
- https://git-scm.com/docs/git-diff
- https://git-scm.com/docs/git-apply
@@ -0,0 +1,160 @@
# -----------------------------------------------------------------------------
# Helper script used in the second edition of the xPack build
# scripts. As the name implies, it should contain only functions and
# should be included with 'source' by the container build scripts.
# -----------------------------------------------------------------------------
function start_timer()
{
CONTAINER_BEGIN_SECOND=$(date +%s)
echo
echo "Container script \"$0\" started at $(date)."
}
function stop_timer()
{
local end_second=$(date +%s)
echo
echo "Container script \"$0\" completed at $(date)."
local delta_seconds=$((end_second-CONTAINER_BEGIN_SECOND))
if [ ${delta_seconds} -lt 100 ]
then
echo "Duration: ${delta_seconds} seconds."
else
local delta_minutes=$(((delta_seconds+30)/60))
echo "Duration: ${delta_minutes} minutes."
fi
}
# -----------------------------------------------------------------------------
function detect_container()
{
echo
uname -a
CONTAINER_DISTRO_NAME=""
CONTAINER_UNAME="$(uname)"
CONTAINER_NODE_PLATFORM=""
CONTAINER_NODE_ARCH=""
if [ "${CONTAINER_UNAME}" == "Darwin" ]
then
CONTAINER_BITS="64"
CONTAINER_MACHINE="x86_64"
CONTAINER_NODE_PLATFORM="darwin"
CONTAINER_NODE_ARCH="x64"
CONTAINER_DISTRO_NAME=Darwin
CONTAINER_DISTRO_LC_NAME=darwin
elif [ "${CONTAINER_UNAME}" == "Linux" ]
then
# ----- Determine distribution name and word size -----
set +e
CONTAINER_DISTRO_NAME=$(lsb_release -si)
set -e
CONTAINER_NODE_PLATFORM="linux"
CONTAINER_NODE_ARCH="x64"
if [ -z "${CONTAINER_DISTRO_NAME}" ]
then
echo "Please install the lsb core package and rerun."
CONTAINER_DISTRO_NAME="Linux"
fi
CONTAINER_MACHINE="$(uname -m)"
if [ "${CONTAINER_MACHINE}" == "x86_64" ]
then
CONTAINER_BITS="64"
CONTAINER_NODE_ARCH="x64"
elif [ "${CONTAINER_MACHINE}" == "i686" ]
then
CONTAINER_BITS="32"
CONTAINER_NODE_ARCH="x32"
else
echo "Unknown uname -m ${CONTAINER_MACHINE}"
exit 1
fi
CONTAINER_DISTRO_LC_NAME=$(echo ${CONTAINER_DISTRO_NAME} | tr "[:upper:]" "[:lower:]")
else
echo "Unknown uname ${CONTAINER_UNAME}"
exit 1
fi
echo
echo "Container script running on ${CONTAINER_DISTRO_NAME} ${CONTAINER_BITS}-bit."
echo "User $(whoami), in '${HOME}'"
HAS_WINPTHREAD=${HAS_WINPTHREAD:-""}
CONTAINER_ROOT_UMASK=${CONTAINER_ROOT_UMASK:-"000"}
if [ -f "/.dockerenv" -a "$(whoami)" == "root" ]
then
umask ${CONTAINER_ROOT_UMASK}
fi
}
# -----------------------------------------------------------------------------
function fix_ownership()
{
if [ -f "/.dockerenv" -a "${CONTAINER_RUN_AS_ROOT}" == "y" ]
then
(
xbb_activate
# Set the owner of the folder and files created by the docker CentOS
# container to match the user running the build script on the host.
# When running on linux host, these folders and their content remain
# owned by root if this is not done. However, on macOS
# the owner used by Docker is the same as the macOS user, so an
# ownership change is not realy necessary.
echo
echo "Changing ownership to non-root GNU/Linux user..."
if [ -d "${BUILD_FOLDER_PATH}" ]
then
chown -R ${USER_ID}:${GROUP_ID} "${BUILD_FOLDER_PATH}"
fi
if [ -d "${INSTALL_FOLDER_PATH}" ]
then
chown -R ${USER_ID}:${GROUP_ID} "${INSTALL_FOLDER_PATH}"
fi
chown -R ${USER_ID}:${GROUP_ID} "${DEPLOY_FOLDER_PATH}"
)
fi
}
# -----------------------------------------------------------------------------
# Hack to make pdftex ignore errors.
# Used for newlib manuals, which issue some errors, but the
# pdf file is generated anyway.
function hack_pdfetex()
{
local bin=$(which pdfetex)
local hacked_pdfetex="hack/pdfetex"
mkdir -p "$(dirname "${hacked_pdfetex}")"
rm -rf "${hacked_pdfetex}"
echo '#!/usr/bin/env bash' >"${hacked_pdfetex}"
echo 'set -x' >>"${hacked_pdfetex}"
echo 'set +e' >>"${hacked_pdfetex}"
echo "${bin}" '$@' >>"${hacked_pdfetex}"
echo 'set -e' >>"${hacked_pdfetex}"
echo 'true' >>"${hacked_pdfetex}"
chmod +x "${hacked_pdfetex}"
export PATH="$(pwd)/$(dirname "${hacked_pdfetex}"):${PATH}"
}
@@ -0,0 +1,949 @@
# -----------------------------------------------------------------------------
# Helper script used in the second edition of the xPack build
# scripts. As the name implies, it should contain only functions and
# should be included with 'source' by the host build scripts.
# -----------------------------------------------------------------------------
function host_get_current_date()
{
# Use the UTC date as version in the name of the distribution file.
DISTRIBUTION_FILE_DATE=${DISTRIBUTION_FILE_DATE:-$(date -u +%Y%m%d-%H%M)}
# Leave a track of the start date, in case of resume needed.
mkdir -p "${HOST_WORK_FOLDER_PATH}"
touch "${HOST_WORK_FOLDER_PATH}/${DISTRIBUTION_FILE_DATE}"
echo
echo "DISTRIBUTION_FILE_DATE=\"${DISTRIBUTION_FILE_DATE}\""
}
function host_start_timer()
{
HOST_BEGIN_SECOND=$(date +%s)
echo
echo "Script \"$0\" started at $(date)."
}
function host_stop_timer()
{
local host_end_second=$(date +%s)
echo
echo "Script \"$0\" completed at $(date)."
local delta_seconds=$((host_end_second-HOST_BEGIN_SECOND))
if [ ${delta_seconds} -lt 100 ]
then
echo "Duration: ${delta_seconds} seconds."
else
local delta_minutes=$(((delta_seconds+30)/60))
echo "Duration: ${delta_minutes} minutes."
fi
}
function host_notify_completed()
{
if [ "${HOST_UNAME}" == "Darwin" ]
then
say "Wake up, the build completed successfully"
fi
}
# -----------------------------------------------------------------------------
# Detect the machine the build runs on.
function host_detect()
{
echo
uname -a
HOST_UNAME="$(uname)"
HOST_MACHINE="$(uname -m)"
HOST_DISTRO_NAME="?" # Linux distribution name (Ubuntu|CentOS|...)
HOST_DISTRO_LC_NAME="?" # Same, in lower case.
HOST_NODE_ARCH="?" # Node.js process.arch (x32|x64|arm|arm64)
HOST_NODE_PLATFORM="?" # Node.js process.platform (darwin|linux|win32)
if [ "${HOST_UNAME}" == "Darwin" ]
then
# uname -p -> i386
# uname -m -> x86_64
HOST_BITS="64"
HOST_DISTRO_NAME=Darwin
HOST_DISTRO_LC_NAME=darwin
HOST_NODE_ARCH="x64" # For now.
HOST_NODE_PLATFORM="darwin"
elif [ "${HOST_UNAME}" == "Linux" ]
then
# ----- Determine distribution name and word size -----
# uname -p -> x86_64|i686 (unknown in recent versions, use -m)
# uname -m -> x86_64|i686
if [ "${HOST_MACHINE}" == "x86_64" ]
then
HOST_BITS="64"
HOST_NODE_ARCH="x64"
elif [ "${HOST_MACHINE}" == "i686" ]
then
HOST_BITS="32"
HOST_NODE_ARCH="x32"
else
echo "Unknown uname -m ${HOST_MACHINE}"
exit 1
fi
HOST_NODE_PLATFORM="linux"
local lsb_path=$(which lsb_release)
if [ -z "${lsb_path}" ]
then
echo "Please install the lsb core package and rerun."
exit 1
fi
HOST_DISTRO_NAME=$(lsb_release -si)
HOST_DISTRO_LC_NAME=$(echo ${HOST_DISTRO_NAME} | tr "[:upper:]" "[:lower:]")
else
echo "Unsupported uname ${HOST_UNAME}"
exit 1
fi
echo
echo "Running on ${HOST_DISTRO_NAME} ${HOST_BITS}-bit."
USER_ID=$(id -u)
USER_NAME="$(id -u -n)"
GROUP_ID=$(id -g)
GROUP_NAME="$(id -g -n)"
TARGET_ARCH="${HOST_NODE_ARCH}"
TARGET_PLATFORM="${HOST_NODE_PLATFORM}"
IS_NATIVE=""
# Redefine it to "y" to run as root inside the container.
CONTAINER_RUN_AS_ROOT=${CONTAINER_RUN_AS_ROOT:-""}
HAS_WINPTHREAD=${HAS_WINPTHREAD:-""}
}
# -----------------------------------------------------------------------------
function host_prepare_cache()
{
# The folder that caches all downloads is in Work, for easy access.
HOST_CACHE_FOLDER_PATH=${HOST_CACHE_FOLDER_PATH:-"${HOME}/Work/cache"}
CONTAINER_CACHE_FOLDER_PATH="/Host${HOST_CACHE_FOLDER_PATH}"
mkdir -p "${HOST_CACHE_FOLDER_PATH}"
}
function host_options()
{
local help_message="$1"
shift
ACTION=""
DO_BUILD_WIN32=""
DO_BUILD_WIN64=""
DO_BUILD_LINUX32=""
DO_BUILD_LINUX64=""
DO_BUILD_OSX=""
ENV_FILE=""
argc=$#
declare -a argv
argv=( $@ )
if [ ! -z "${DEBUG}" ]
then
echo ${argv[@]-}
fi
i=0
# Must be declared by the caller.
# declare -a rest
# Identify some of the options. The rest are collected and passed
# to the container script.
while [ $i -lt $argc ]
do
arg="${argv[$i]}"
case "${arg}" in
clean|cleanlibs|cleanall|preload-images)
ACTION="${arg}"
;;
--win32|--windows32)
DO_BUILD_WIN32="y"
;;
--win64|--windows64)
DO_BUILD_WIN64="y"
;;
--linux32)
DO_BUILD_LINUX32="y"
;;
--linux64)
DO_BUILD_LINUX64="y"
;;
--osx)
DO_BUILD_OSX="y"
;;
--all)
DO_BUILD_WIN32="y"
DO_BUILD_WIN64="y"
DO_BUILD_LINUX32="y"
DO_BUILD_LINUX64="y"
if [ "$(uname)" == "Darwin" ]
then
DO_BUILD_OSX="y"
fi
;;
--env-file)
((++i))
ENV_FILE="${argv[$i]}"
if [ ! -f "${ENV_FILE}" ];
then
echo "The specified environment file \"${ENV_FILE}\" does not exist, exiting..."
exit 1
fi
;;
# Deprecated.
--date)
((++i))
DISTRIBUTION_FILE_DATE="${argv[$i]}"
;;
--help)
echo "Usage:"
# Some of the options are processed by the container script.
echo "${help_message}"
echo
exit 1
;;
*)
# Collect all other in an array. Append to the end.
# Will be later processed by the container script.
set +u
rest[${#rest[*]}]="$arg"
set -u
;;
esac
((++i))
done
DO_BUILD_ANY="${DO_BUILD_OSX}${DO_BUILD_LINUX64}${DO_BUILD_WIN64}${DO_BUILD_LINUX32}${DO_BUILD_WIN32}"
# The ${rest[@]} options will be passed to the inner script.
if [ ! -z "${DEBUG}" ]
then
echo ${rest[@]-}
fi
}
function host_options_windows()
{
local help_message="$1"
shift
ACTION=""
DO_BUILD_WIN32=""
DO_BUILD_WIN64=""
# Kept, since they are used in various common functions.
DO_BUILD_LINUX32=""
DO_BUILD_LINUX64=""
DO_BUILD_OSX=""
ENV_FILE=""
argc=$#
declare -a argv
argv=( $@ )
if [ ! -z "${DEBUG}" ]
then
echo ${argv[@]-}
fi
i=0
# Must be declared by the caller.
# declare -a rest
# Identify some of the options. The rest are collected and passed
# to the container script.
while [ $i -lt $argc ]
do
arg="${argv[$i]}"
case "${arg}" in
clean|cleanlibs|cleanall|preload-images)
ACTION="${arg}"
;;
--win32|--windows32)
DO_BUILD_WIN32="y"
;;
--win64|--windows64)
DO_BUILD_WIN64="y"
;;
--all)
DO_BUILD_WIN32="y"
DO_BUILD_WIN64="y"
;;
--env-file)
((++i))
ENV_FILE="${argv[$i]}"
if [ ! -f "${ENV_FILE}" ];
then
echo "The specified environment file \"${ENV_FILE}\" does not exist, exiting..."
exit 1
fi
;;
# Deprecated.
--date)
((++i))
DISTRIBUTION_FILE_DATE="${argv[$i]}"
;;
--help)
echo "Usage:"
# Some of the options are processed by the container script.
echo "${help_message}"
echo
exit 1
;;
*)
# Collect all other in an array. Append to the end.
# Will be later processed by the container script.
set +u
rest[${#rest[*]}]="$arg"
set -u
;;
esac
((++i))
done
DO_BUILD_ANY="${DO_BUILD_WIN64}${DO_BUILD_WIN32}"
# The ${rest[@]} options will be passed to the inner script.
if [ ! -z "${DEBUG}" ]
then
echo ${rest[@]-}
fi
}
function host_native_options()
{
local help_message="$1"
shift
ACTION=""
DO_BUILD_WIN=""
IS_DEBUG=""
IS_DEVELOP=""
WITH_STRIP=""
IS_NATIVE="y"
JOBS=""
while [ $# -gt 0 ]
do
case "$1" in
clean|cleanlibs|cleanall)
ACTION="$1"
;;
--win|--windows)
DO_BUILD_WIN="y"
;;
--debug)
IS_DEBUG="y"
;;
--develop)
IS_DEVELOP="y"
;;
--jobs)
shift
JOBS=$1
;;
--help)
echo "Build a local/native ${DISTRO_UC_NAME} ${APP_UC_NAME}."
echo "Usage:"
# Some of the options are processed by the container script.
echo "${help_message}"
echo
exit 0
;;
*)
echo "Unknown action/option $1"
exit 1
;;
esac
shift
done
if [ "${DO_BUILD_WIN}" == "y" ]
then
if [ "${HOST_NODE_PLATFORM}" == "linux" ]
then
TARGET_PLATFORM="win32"
else
echo "Windows cross builds are available only on GNU/Linux."
exit 1
fi
fi
}
function host_common()
{
if [ -f "${script_folder_path}/VERSION" ]
then
# When running from the distribution folder.
RELEASE_VERSION=${RELEASE_VERSION:-"$(cat "${script_folder_path}"/VERSION)"}
fi
APP_BUILD=${APP_BUILD:-"build"}
echo
echo "Preparing release ${RELEASE_VERSION}..."
echo
defines_script_path="${script_folder_path}/defs-source.sh"
echo "Definitions source script: \"${defines_script_path}\"."
source "${defines_script_path}"
# -----------------------------------------------------------------------------
common_helper_functions_script_path="${script_folder_path}/helper/common-functions-source.sh"
echo "Common helper functions source script: \"${common_helper_functions_script_path}\"."
source "${common_helper_functions_script_path}"
# May override some of the helper/common definitions.
common_functions_script_path="${script_folder_path}/common-functions-source.sh"
if [ -f "${common_functions_script_path}" ]
then
echo "Common functions source script: \"${common_functions_script_path}\"."
source "${common_functions_script_path}"
fi
# ---------------------------------------------------------------------------
# The Work folder is in HOME.
if [ "${IS_NATIVE}" != "y" ]
then
HOST_WORK_FOLDER_PATH=${HOST_WORK_FOLDER_PATH:-"${HOME}/Work/${APP_LC_NAME}-${APP_BUILD}"}
else
HOST_WORK_FOLDER_PATH=${HOST_WORK_FOLDER_PATH:-"${HOME}/Work/${APP_LC_NAME}-dev"}
fi
CONTAINER_WORK_FOLDER_PATH="/Host${HOST_WORK_FOLDER_PATH}"
SOURCES_FOLDER_PATH="${SOURCES_FOLDER_PATH:-"${HOST_WORK_FOLDER_PATH}/sources"}"
# The names of the two Docker images used for the build.
# docker run --interactive --tty ilegeul/centos:6-xbb-v2.1
docker_linux64_image=${docker_linux64_image:-"ilegeul/centos:6-xbb-v2.2"}
docker_linux32_image=${docker_linux32_image:-"ilegeul/centos32:6-xbb-v2.2"}
do_actions
host_prepare_cache
CONTAINER_BUILD_SCRIPT_REL_PATH="build.git/scripts/${CONTAINER_SCRIPT_NAME}"
echo "Container build script: \"${HOST_WORK_FOLDER_PATH}/${CONTAINER_BUILD_SCRIPT_REL_PATH}\"."
# ---------------------------------------------------------------------------
mkdir -p "${HOST_WORK_FOLDER_PATH}"
mkdir -p "${SOURCES_FOLDER_PATH}"
# ---------------------------------------------------------------------------
# Set the DISTRIBUTION_FILE_DATE.
host_get_current_date
# ---------------------------------------------------------------------------
host_start_timer
host_prepare_prerequisites
# ---------------------------------------------------------------------------
copy_build_git
}
function host_prepare_prerequisites()
{
if [ "${HOST_UNAME}" == "Darwin" ]
then
local xbb_folder
local must_install=""
if [ -d "${HOME}/opt/xbb" ]
then
xbb_folder="${HOME}/opt/xbb"
elif [ -d "${HOME}/opt/homebrew/xbb" ]
then
xbb_folder="${HOME}/opt/homebrew/xbb"
else
must_install="y"
fi
if [ ! -z "${xbb_folder}" ]
then
echo
echo "Checking XBB in '${xbb_folder}'..."
if [ ! -f "${xbb_folder}/xbb-source.sh" ]
then
must_install="y"
fi
fi
if [ -n "${must_install}" ]
then
echo
echo "Please install the macOS XBB and rerun."
echo "https://github.com/xpack/xpack-build-box/tree/master/macos"
exit 1
fi
if true
then
local tl_folder="$HOME/opt/texlive"
must_install=""
# Check local TeX Live.
if [ ! -d "${tl_folder}" ]
then
must_install="y"
else
PATH="${tl_folder}/bin/x86_64-darwin:${PATH}"
export PATH
echo
echo "Checking TeX Live in '${tl_folder}'..."
set +e
tex --version | grep 'TeX 3'
if [ $? != 0 ]
then
must_install="y"
fi
set -e
fi
if [ -n "${must_install}" ]
then
echo
echo "Please install TeX Live and rerun."
echo "Alternatively restart the build script using '--without-pdf'."
echo "https://github.com/xpack/xpack-build-box/blob/master/macos/README.md#install-tex"
exit 1
fi
fi # -z "${no_pdf}"
fi # "${HOST_UNAME}" == "Darwin"
host_prepare_cache
# The host script will pass to the container script
# various environment variables.
HOST_DEFINES_SCRIPT_PATH="${HOST_WORK_FOLDER_PATH}/build.git/scripts/host-defs-source.sh"
DEPLOY_FOLDER_NAME=${DEPLOY_FOLDER_NAME:-"deploy"}
}
# -----------------------------------------------------------------------------
function host_prepare_docker()
{
echo
echo "Checking Docker..."
set +e
docker --version
if [ $? != 0 ]
then
echo "Please start docker daemon and rerun."
echo "If not installed, see https://docs.docker.com/installation/."
exit 1
fi
set -e
}
# -----------------------------------------------------------------------------
function host_build_target()
{
message="$1"
shift
echo
echo "================================================================================"
echo "=== ${message}"
echo
echo $@
local container_script_path=""
local target_platform="${HOST_NODE_PLATFORM}"
local target_arch="${HOST_NODE_ARCH}"
local target_bits="${HOST_BITS}"
# If the docker image is not set, it is a native build.
local docker_image=""
local build_binaries_path=""
local env_file=""
while [ $# -gt 0 ]
do
case "$1" in
--script)
container_script_path="$2"
shift 2
;;
--target-platform)
target_platform="$2"
shift 2
;;
--target-arch)
target_arch="$2"
shift 2
;;
--target-bits)
target_bits="$2"
shift 2
;;
--docker-image)
docker_image="$2"
shift 2
;;
--env-file)
env_file="$2"
shift 2
;;
--)
shift
break
;;
*)
echo "Unknown option $1, exit."
exit 1
esac
done
# The remaining $@ options will be passed to the inner script.
if [ -n "${DEBUG}" ]
then
echo $@
fi
# ---------------------------------------------------------------------------
mkdir -p "$(dirname "${HOST_DEFINES_SCRIPT_PATH}")"
echo "${RELEASE_VERSION}" >"$(dirname "${HOST_DEFINES_SCRIPT_PATH}")"/VERSION
rm -rf "${HOST_DEFINES_SCRIPT_PATH}"
touch "${HOST_DEFINES_SCRIPT_PATH}"
echo "RELEASE_VERSION=\"${RELEASE_VERSION}\"" >>"${HOST_DEFINES_SCRIPT_PATH}"
echo "DISTRIBUTION_FILE_DATE=\"${DISTRIBUTION_FILE_DATE}\"" >>"${HOST_DEFINES_SCRIPT_PATH}"
echo "TARGET_PLATFORM=\"${target_platform}\"" >>"${HOST_DEFINES_SCRIPT_PATH}"
echo "TARGET_ARCH=\"${target_arch}\"" >>"${HOST_DEFINES_SCRIPT_PATH}"
echo "TARGET_BITS=\"${target_bits}\"" >>"${HOST_DEFINES_SCRIPT_PATH}"
echo "HOST_UNAME=\"${HOST_UNAME}\"" >>"${HOST_DEFINES_SCRIPT_PATH}"
echo "USER_ID=\"${USER_ID}\"" >>"${HOST_DEFINES_SCRIPT_PATH}"
echo "USER_NAME=\"${USER_NAME}\"" >>"${HOST_DEFINES_SCRIPT_PATH}"
echo "GROUP_ID=\"${GROUP_ID}\"" >>"${HOST_DEFINES_SCRIPT_PATH}"
echo "GROUP_NAME=\"${GROUP_NAME}\"" >>"${HOST_DEFINES_SCRIPT_PATH}"
echo "CONTAINER_RUN_AS_ROOT=\"${CONTAINER_RUN_AS_ROOT}\"" >>"${HOST_DEFINES_SCRIPT_PATH}"
echo "HOST_WORK_FOLDER_PATH=\"${HOST_WORK_FOLDER_PATH}\"" >>"${HOST_DEFINES_SCRIPT_PATH}"
echo "CONTAINER_WORK_FOLDER_PATH=\"${CONTAINER_WORK_FOLDER_PATH}\"" >>"${HOST_DEFINES_SCRIPT_PATH}"
echo "HOST_CACHE_FOLDER_PATH=\"${HOST_CACHE_FOLDER_PATH}\"" >>"${HOST_DEFINES_SCRIPT_PATH}"
echo "CONTAINER_CACHE_FOLDER_PATH=\"${CONTAINER_CACHE_FOLDER_PATH}\"" >>"${HOST_DEFINES_SCRIPT_PATH}"
echo "DEPLOY_FOLDER_NAME=\"${DEPLOY_FOLDER_NAME}\"" >>"${HOST_DEFINES_SCRIPT_PATH}"
if [ -z "${docker_image}" ]
then
host_run_native_script \
--script "${container_script_path}" \
--env-file "${env_file}" \
-- \
$@
else
host_run_docker_script \
--script "${container_script_path}" \
--docker-image "${docker_image}" \
--docker-container-name "${APP_LC_NAME}-${target_platform}-${target_arch}-build" \
--env-file "${env_file}" \
--host-uname "${HOST_UNAME}" \
-- \
$@
fi
if [ -n "${DEBUG}" ]
then
echo "host_build_target ${rest[@]-} completed."
fi
}
# -----------------------------------------------------------------------------
function host_run_native_script()
{
local local_script=""
local env_file=""
while [ $# -gt 0 ]
do
case "$1" in
--script)
local_script="$2"
shift 2
;;
--env-file)
env_file="$2"
shift 2
;;
--)
shift
break
;;
*)
echo "Unknown option $1, exit."
exit 1
esac
done
# The remaining $@ options will be passed to the inner script.
echo
echo "Running script \"$(basename "${local_script}")\" natively..."
# Run the inner script in a local sub-shell, possibly with the
# custom environment.
(
if [ -n "${env_file}" -a -f "${env_file}" ]
then
source "${env_file}"
fi
/bin/bash ${DEBUG} "${local_script}" $@
)
}
# -----------------------------------------------------------------------------
function host_run_docker_script()
{
local docker_script=""
local docker_image=""
local docker_container_name=""
local host_uname=""
local env_file=""
local opt_env_file=
while [ $# -gt 0 ]
do
case "$1" in
--script)
docker_script="$2"
shift 2
;;
--docker-image)
docker_image="$2"
shift 2
;;
--docker-container-name)
docker_container_name="$2"
shift 2
;;
--host-uname)
host_uname="$2"
shift 2
;;
--env-file)
env_file="$2"
shift 2
;;
--)
shift
break
;;
*)
echo "Unknown option $1, exit."
exit 1
esac
done
set +e
# Remove a possible previously crashed container.
docker rm --force "${docker_container_name}" > /dev/null 2> /dev/null
set -e
echo
echo "Running script \"$(basename "${docker_script}")\" inside docker image \"${docker_image}\"..."
local env_file_option=""
# Run the inner script in a fresh Docker container.
if [ -n "${env_file}" -a -f "${env_file}" ]
then
env_file_option="--env-file=\"${env_file}\""
fi
if [ "${CONTAINER_RUN_AS_ROOT}" == "y" ]
then
docker run \
--name="${docker_container_name}" \
--tty \
--hostname "docker" \
--workdir="/root" \
--volume="${HOST_WORK_FOLDER_PATH}/:${CONTAINER_WORK_FOLDER_PATH}" \
--volume="${HOST_CACHE_FOLDER_PATH}/:${CONTAINER_CACHE_FOLDER_PATH}" \
${env_file_option} \
"${docker_image}" \
/bin/bash ${DEBUG} "${docker_script}" $@
else
# This is a bit tricky, since it needs to do multiple actions in
# one go: add a new user and run the script with that user credentials,
# including passing the extra args (in the middle of the string).
#
# From the [bash manual](https://www.gnu.org/software/bash/manual/bash.html):
# ($*) Expands to the positional parameters, starting from one.
# When the expansion is not within double quotes, each positional
# parameter expands to a separate word. In contexts where it is
# performed, those words are subject to further word splitting and
# pathname expansion. When the expansion occurs within double quotes,
# it expands to a single word with the value of each parameter separated
# by the first character of the IFS special variable. That is, "$*"
# is equivalent to "$1c$2c…", where c is the first character of the
# value of the IFS variable. If IFS is unset, the parameters are
# separated by spaces. If IFS is null, the parameters are joined
# without intervening separators.
local ifs="${IFS}"
IFS=" "
local cmd_string="groupadd -g ${GROUP_ID} ${GROUP_NAME} && useradd -u ${USER_ID} -g ${GROUP_ID} ${USER_NAME} && su -c \"DEBUG=${DEBUG} bash ${docker_script} $*\" ${USER_NAME}"
IFS="${ifs}"
docker run \
--name="${docker_container_name}" \
--tty \
--hostname "docker" \
--workdir="/root" \
--volume="${HOST_WORK_FOLDER_PATH}/:${CONTAINER_WORK_FOLDER_PATH}" \
--volume="${HOST_CACHE_FOLDER_PATH}/:${CONTAINER_CACHE_FOLDER_PATH}" \
${env_file_option} \
"${docker_image}" \
/bin/bash ${DEBUG} -c "${cmd_string}"
fi
# Remove the container.
echo "Docker container \"$(docker rm --force "${docker_container_name}")\" removed."
}
# -----------------------------------------------------------------------------
function host_show_sha() {
if [ -d "${HOST_WORK_FOLDER_PATH}/${DEPLOY_FOLDER_NAME}" ]
then
echo
echo "SHA signatures..."
set +e
cat "${HOST_WORK_FOLDER_PATH}/${DEPLOY_FOLDER_NAME}"/*.sha
set -e
fi
}
# -----------------------------------------------------------------------------
@@ -0,0 +1,77 @@
# Templates to be used with copy/paste in the bash source files.
# Build xxx library.
function do_xxx()
{
# XXX_VERSION="1.1"
XXX_SRC_FOLDER_NAME="xxx-${XXX_VERSION}"
XXX_FOLDER_NAME="${XXX_SRC_FOLDER_NAME}"
local xxx_archive="${XXX_SRC_FOLDER_NAME}.tar.gz"
local xxx_url="http://.../${xxx_archive}"
local xxx_stamp_file_path="${INSTALL_FOLDER_PATH}/stamp-xxx-installed"
if [ ! -f "${xxx_stamp_file_path}" ]
then
cd "${WORK_FOLDER_PATH}"
download_and_extract "${xxx_url}" "${xxx_archive}" \
"${XXX_SRC_FOLDER_NAME}"
(
mkdir -p "${BUILD_FOLDER_PATH}/${XXX_FOLDER_NAME}"
cd "${BUILD_FOLDER_PATH}/${XXX_FOLDER_NAME}"
xbb_activate
export CFLAGS="${XBB_CFLAGS}"
export CPPFLAGS="${XBB_CPPFLAGS}"
export LDFLAGS="${XBB_LDFLAGS}"
if [ ! -f "config.status" ]
then
echo
echo "Running xxx configure..."
(
bash "${WORK_FOLDER_PATH}/${XXX_SRC_FOLDER_NAME}/configure" --help
bash "${WORK_FOLDER_PATH}/${XXX_SRC_FOLDER_NAME}/configure" \
--prefix="${INSTALL_FOLDER_PATH}" \
\
--build=${BUILD} \
--host=${HOST} \
--target=${TARGET} \
\
--disable-shared \
--enable-static
) 2>&1 | tee "${INSTALL_FOLDER_PATH}/configure-xxx-output.txt"
cp "config.log" "${INSTALL_FOLDER_PATH}"/config-xxx-log.txt
fi
echo
echo "Running xxx make..."
(
# Build.
make -j ${JOBS}
if [ "${WITH_STRIP}" == "y" ]
then
make install-strip
else
make install
fi
) 2>&1 | tee "${INSTALL_FOLDER_PATH}/make-xxx-output.txt"
)
touch "${xxx_stamp_file_path}"
else
echo "Library xxx already installed."
fi
}
@@ -0,0 +1,16 @@
RELEASE_VERSION="2025.10"
DISTRIBUTION_FILE_DATE="20251102-1159"
TARGET_PLATFORM="linux"
TARGET_ARCH="x64"
TARGET_BITS="64"
HOST_UNAME="Linux"
USER_ID="410000001"
USER_NAME="xl_ci"
GROUP_ID="410000001"
GROUP_NAME="xl_ci"
CONTAINER_RUN_AS_ROOT="y"
HOST_WORK_FOLDER_PATH="/home/xl_ci/Work/openocd-build"
CONTAINER_WORK_FOLDER_PATH="/Host/home/xl_ci/Work/openocd-build"
HOST_CACHE_FOLDER_PATH="/home/xl_ci/Work/cache"
CONTAINER_CACHE_FOLDER_PATH="/Host/home/xl_ci/Work/cache"
DEPLOY_FOLDER_NAME="deploy"
@@ -0,0 +1,61 @@
# SPDX-License-Identifier: GPL-2.0-or-later
#----------------------------------------
# Purpose - Create some $BIT variables
# Create $K and $M variables
# and some bit field extraction variables.
# Create helper variables ...
# BIT0.. BIT31
for { set x 0 } { $x < 32 } { set x [expr {$x + 1}]} {
set vn [format "BIT%d" $x]
global $vn
set $vn [expr {1 << $x}]
}
# Create K bytes values
# __1K ... to __2048K
for { set x 1 } { $x < 2048 } { set x [expr {$x * 2}]} {
set vn [format "__%dK" $x]
global $vn
set $vn [expr {1024 * $x}]
}
# Create M bytes values
# __1M ... to __2048K
for { set x 1 } { $x < 2048 } { set x [expr {$x * 2}]} {
set vn [format "__%dM" $x]
global $vn
set $vn [expr {1024 * 1024 * $x}]
}
proc create_mask { MSB LSB } {
return [expr {((1 << ($MSB - $LSB + 1))-1) << $LSB}]
}
# Cut Bits $MSB to $LSB out of this value.
# Example: % format "0x%08x" [extract_bitfield 0x12345678 27 16]
# Result: 0x02340000
proc extract_bitfield { VALUE MSB LSB } {
return [expr {[create_mask $MSB $LSB] & $VALUE}]
}
# Cut bits $MSB to $LSB out of this value
# and shift (normalize) them down to bit 0.
#
# Example: % format "0x%08x" [normalize_bitfield 0x12345678 27 16]
# Result: 0x00000234
#
proc normalize_bitfield { VALUE MSB LSB } {
return [expr {[extract_bitfield $VALUE $MSB $LSB ] >> $LSB}]
}
proc show_normalize_bitfield { VALUE MSB LSB } {
set m [create_mask $MSB $LSB]
set mr [expr {$VALUE & $m}]
set sr [expr {$mr >> $LSB}]
echo [format "((0x%08x & 0x%08x) -> 0x%08x) >> %2d => (0x%x) %5d " $VALUE $m $mr $LSB $sr $sr]
return $sr
}
@@ -0,0 +1,32 @@
# SPDX-License-Identifier: GPL-2.0-or-later
# Product page:
# https://www.8devices.com/products/lima
#
# Location of JTAG pins:
# J2 GPIO0 JTAG TCK
# J2 GPIO1 JTAG TDI
# J2 GPIO2 JTAG TDO
# J2 GPIO3 JTAG TMS
# J2 RST directly connected to RESET_L of the SoC and can be used as
# JTAG SRST. Note: this pin will also reset the debug engine.
# J1 +3,3V Can be use as JTAG Vref
# J1 or J2 GND Can be used for JTAG GND
#
# This board is powered from mini USB connecter which is also used
# as USB to UART converted based on FTDI FT230XQ chip
source [find target/qualcomm_qca4531.cfg]
proc board_init { } {
qca4531_ddr2_550_550_init
}
$_TARGETNAME configure -event reset-init {
board_init
}
set ram_boot_address 0xa0000000
$_TARGETNAME configure -work-area-phys 0xa1FFE000 -work-area-size 0x1000
flash bank flash0 ath79 0xbf000000 0 0 0 $_TARGETNAME cs0
@@ -0,0 +1,71 @@
# SPDX-License-Identifier: GPL-2.0-or-later
# board config file for AcTux3/XBA IXP42x board
# Date: 2010-12-16
# Author: Michael Schwingen <michael@schwingen.org>
reset_config trst_and_srst separate
adapter srst delay 100
jtag_ntrst_delay 100
source [find target/ixp42x.cfg]
$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size 0x10000 -work-area-backup 0
$_TARGETNAME configure -event reset-init { init_actux3 }
proc init_actux3 { } {
##########################################################################
# setup expansion bus CS
##########################################################################
mww 0xc4000000 0xbd113842 ;#CS0 : Flash, write enabled @0x50000000
mww 0xc4000004 0x94d10013 ;#CS1
mww 0xc4000008 0x95960003 ;#CS2
mww 0xc400000c 0x00000000 ;#CS3
mww 0xc4000010 0x80900003 ;#CS4
mww 0xc4000014 0x9d520003 ;#CS5
mww 0xc4000018 0x81860001 ;#CS6
mww 0xc400001c 0x80900003 ;#CS7
ixp42x_init_sdram $::IXP42x_SDRAM_16MB_4Mx16_1BANK 2100 3
#mww 0xc4000020 0xffffee ;# CFG0: remove expansion bus boot flash mirror at 0x00000000
ixp42x_set_bigendian
flash probe 0
}
proc flash_boot { {FILE "/tftpboot/actux3/u-boot.bin"} } {
echo "writing bootloader: $FILE"
flash write_image erase $FILE 0x50000000 bin
}
set _FLASHNAME $_CHIPNAME.flash
flash bank $_FLASHNAME cfi 0x50000000 0x400000 2 2 $_TARGETNAME
init
reset init
# setup to debug u-boot in flash
proc uboot_debug {} {
gdb breakpoint_override hard
xscale vector_catch 0xFF
xscale vector_table low 1 0xe59ff018
xscale vector_table low 2 0xe59ff018
xscale vector_table low 3 0xe59ff018
xscale vector_table low 4 0xe59ff018
xscale vector_table low 5 0xe59ff018
xscale vector_table low 6 0xe59ff018
xscale vector_table low 7 0xe59ff018
xscale vector_table high 1 0xe59ff018
xscale vector_table high 2 0xe59ff018
xscale vector_table high 3 0xe59ff018
xscale vector_table high 4 0xe59ff018
xscale vector_table high 5 0xe59ff018
xscale vector_table high 6 0xe59ff018
xscale vector_table high 7 0xe59ff018
}
@@ -0,0 +1,9 @@
# SPDX-License-Identifier: GPL-2.0-or-later
#
# Adapteva Parallella-I board (via Porcupine-1 adapter board)
#
reset_config srst_only
source [find target/zynq_7000.cfg]

Some files were not shown because too many files have changed in this diff Show More