From 2be220df98c3db044c97e532a6687ed2d707cb51 Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Mon, 20 May 2024 23:53:57 -0700 Subject: [PATCH 01/22] nv2a: Implement HILO texture modifier --- hw/xbox/nv2a/psh.c | 48 ++++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/hw/xbox/nv2a/psh.c b/hw/xbox/nv2a/psh.c index 3049f0eb8a9..ca9bffe79d4 100644 --- a/hw/xbox/nv2a/psh.c +++ b/hw/xbox/nv2a/psh.c @@ -728,29 +728,35 @@ static MString* psh_convert(struct PixelShader *ps) " if (x >= 0) return x/2;\n" " else return 1+x/2;\n" "}\n" - "vec3 dotmap_zero_to_one(vec3 col) {\n" - " return col;\n" + "vec3 dotmap_zero_to_one(vec4 col) {\n" + " return col.rgb;\n" "}\n" - "vec3 dotmap_minus1_to_1_d3d(vec3 col) {\n" + "vec3 dotmap_minus1_to_1_d3d(vec4 col) {\n" " return vec3(sign1(col.r),sign1(col.g),sign1(col.b));\n" "}\n" - "vec3 dotmap_minus1_to_1_gl(vec3 col) {\n" + "vec3 dotmap_minus1_to_1_gl(vec4 col) {\n" " return vec3(sign2(col.r),sign2(col.g),sign2(col.b));\n" "}\n" - "vec3 dotmap_minus1_to_1(vec3 col) {\n" + "vec3 dotmap_minus1_to_1(vec4 col) {\n" " return vec3(sign3(col.r),sign3(col.g),sign3(col.b));\n" "}\n" - "vec3 dotmap_hilo_1(vec3 col) {\n" - " return col;\n" // FIXME + "vec3 dotmap_hilo_1(vec4 col) {\n" + " uint hi_i = uint(col.a * float(0xff)) << 8\n" + " | uint(col.r * float(0xff));\n" + " uint lo_i = uint(col.g * float(0xff)) << 8\n" + " | uint(col.b * float(0xff));\n" + " float hi_f = float(hi_i) / float(0xffff);\n" + " float lo_f = float(lo_i) / float(0xffff);\n" + " return vec3(hi_f, lo_f, 1.0);\n" "}\n" - "vec3 dotmap_hilo_hemisphere_d3d(vec3 col) {\n" - " return col;\n" // FIXME + "vec3 dotmap_hilo_hemisphere_d3d(vec4 col) {\n" + " return col.rgb;\n" // FIXME "}\n" - "vec3 dotmap_hilo_hemisphere_gl(vec3 col) {\n" - " return col;\n" // FIXME + "vec3 dotmap_hilo_hemisphere_gl(vec4 col) {\n" + " return col.rgb;\n" // FIXME "}\n" - "vec3 dotmap_hilo_hemisphere(vec3 col) {\n" - " return col;\n" // FIXME + "vec3 dotmap_hilo_hemisphere(vec4 col) {\n" + " return col.rgb;\n" // FIXME "}\n" "const float[9] gaussian3x3 = float[9](\n" " 1.0/16.0, 2.0/16.0, 1.0/16.0,\n" @@ -950,7 +956,7 @@ static MString* psh_convert(struct PixelShader *ps) assert(i >= 2); mstring_append_fmt(vars, "/* PS_TEXTUREMODES_DOT_ST */\n"); mstring_append_fmt(vars, - "float dot%d = dot(pT%d.xyz, %s(t%d.rgb));\n" + "float dot%d = dot(pT%d.xyz, %s(t%d));\n" "vec2 dotST%d = vec2(dot%d, dot%d);\n", i, i, dotmap_func, ps->input_tex[i], i, i-1, i); @@ -961,7 +967,7 @@ static MString* psh_convert(struct PixelShader *ps) case PS_TEXTUREMODES_DOT_ZW: assert(i >= 2); mstring_append_fmt(vars, "/* PS_TEXTUREMODES_DOT_ZW */\n"); - mstring_append_fmt(vars, "float dot%d = dot(pT%d.xyz, %s(t%d.rgb));\n", + mstring_append_fmt(vars, "float dot%d = dot(pT%d.xyz, %s(t%d));\n", i, i, dotmap_func, ps->input_tex[i]); mstring_append_fmt(vars, "vec4 t%d = vec4(0.0);\n", i); // FIXME: mstring_append_fmt(vars, "gl_FragDepth = t%d.x;\n", i); @@ -969,10 +975,10 @@ static MString* psh_convert(struct PixelShader *ps) case PS_TEXTUREMODES_DOT_RFLCT_DIFF: assert(i == 2); mstring_append_fmt(vars, "/* PS_TEXTUREMODES_DOT_RFLCT_DIFF */\n"); - mstring_append_fmt(vars, "float dot%d = dot(pT%d.xyz, %s(t%d.rgb));\n", + mstring_append_fmt(vars, "float dot%d = dot(pT%d.xyz, %s(t%d));\n", i, i, dotmap_func, ps->input_tex[i]); assert(ps->dot_map[i+1] < 8); - mstring_append_fmt(vars, "float dot%d_n = dot(pT%d.xyz, %s(t%d.rgb));\n", + mstring_append_fmt(vars, "float dot%d_n = dot(pT%d.xyz, %s(t%d));\n", i, i+1, dotmap_funcs[ps->dot_map[i+1]], ps->input_tex[i+1]); mstring_append_fmt(vars, "vec3 n_%d = vec3(dot%d, dot%d, dot%d_n);\n", i, i-1, i, i); @@ -983,7 +989,7 @@ static MString* psh_convert(struct PixelShader *ps) case PS_TEXTUREMODES_DOT_RFLCT_SPEC: assert(i == 3); mstring_append_fmt(vars, "/* PS_TEXTUREMODES_DOT_RFLCT_SPEC */\n"); - mstring_append_fmt(vars, "float dot%d = dot(pT%d.xyz, %s(t%d.rgb));\n", + mstring_append_fmt(vars, "float dot%d = dot(pT%d.xyz, %s(t%d));\n", i, i, dotmap_func, ps->input_tex[i]); mstring_append_fmt(vars, "vec3 n_%d = vec3(dot%d, dot%d, dot%d);\n", i, i-2, i-1, i); @@ -999,7 +1005,7 @@ static MString* psh_convert(struct PixelShader *ps) assert(i == 3); mstring_append_fmt(vars, "/* PS_TEXTUREMODES_DOT_STR_3D */\n"); mstring_append_fmt(vars, - "float dot%d = dot(pT%d.xyz, %s(t%d.rgb));\n" + "float dot%d = dot(pT%d.xyz, %s(t%d));\n" "vec3 dotSTR%d = vec3(dot%d, dot%d, dot%d);\n", i, i, dotmap_func, ps->input_tex[i], i, i-2, i-1, i); @@ -1011,7 +1017,7 @@ static MString* psh_convert(struct PixelShader *ps) case PS_TEXTUREMODES_DOT_STR_CUBE: assert(i == 3); mstring_append_fmt(vars, "/* PS_TEXTUREMODES_DOT_STR_CUBE */\n"); - mstring_append_fmt(vars, "float dot%d = dot(pT%d.xyz, %s(t%d.rgb));\n", + mstring_append_fmt(vars, "float dot%d = dot(pT%d.xyz, %s(t%d));\n", i, i, dotmap_func, ps->input_tex[i]); mstring_append_fmt(vars, "vec3 dotSTR%dCube = vec3(dot%d, dot%d, dot%d);\n", i, i-2, i-1, i); @@ -1038,7 +1044,7 @@ static MString* psh_convert(struct PixelShader *ps) case PS_TEXTUREMODES_DOTPRODUCT: assert(i == 1 || i == 2); mstring_append_fmt(vars, "/* PS_TEXTUREMODES_DOTPRODUCT */\n"); - mstring_append_fmt(vars, "float dot%d = dot(pT%d.xyz, %s(t%d.rgb));\n", + mstring_append_fmt(vars, "float dot%d = dot(pT%d.xyz, %s(t%d));\n", i, i, dotmap_func, ps->input_tex[i]); mstring_append_fmt(vars, "vec4 t%d = vec4(0.0);\n", i); break; From ea81265a5682f8e0199379a384ffb7d72eec4255 Mon Sep 17 00:00:00 2001 From: Ryzee119 Date: Wed, 12 Jun 2024 11:20:59 +0930 Subject: [PATCH 02/22] sha1_rc4: Move hash functions from eeprom_generation to utils --- util/meson.build | 1 + util/rc4.c | 49 +++++++++++++ util/rc4.h | 29 ++++++++ util/sha1.c | 175 +++++++++++++++++++++++++++++++++++++++++++++++ util/sha1.h | 35 ++++++++++ 5 files changed, 289 insertions(+) create mode 100644 util/rc4.c create mode 100644 util/rc4.h create mode 100644 util/sha1.c create mode 100644 util/sha1.h diff --git a/util/meson.build b/util/meson.build index 8cc9b59c74b..4269ef4e38f 100644 --- a/util/meson.build +++ b/util/meson.build @@ -106,3 +106,4 @@ if have_block endif util_ss.add(when: 'CONFIG_LINUX', if_true: files('vfio-helpers.c')) endif +util_ss.add(files('sha1.c','rc4.c')) diff --git a/util/rc4.c b/util/rc4.c new file mode 100644 index 00000000000..525793fa7c0 --- /dev/null +++ b/util/rc4.c @@ -0,0 +1,49 @@ +/* + * QEMU RC4 Implementation + * + * Copyright (c) 2020 Mike Davis + * Copyright (c) 2024 Ryan Wendland + * + * 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, see . + */ + +#include "rc4.h" + +static void xbox_rc4_swap(RC4Context *ctx, int first, int second) +{ + uint8_t temp = ctx->s[first]; + ctx->s[first] = ctx->s[second]; + ctx->s[second] = temp; +} + +void xbox_rc4_init(RC4Context *ctx, uint8_t *data, size_t len) +{ + for (int i = 0; i < 256; i++) { + ctx->s[i] = i; + } + for (int i = 0, j = 0; i < 256; i++) { + j = (j + ctx->s[i] + data[i % len]) % 256; + xbox_rc4_swap(ctx, i, j); + } +} + +void xbox_rc4_crypt(RC4Context *ctx, uint8_t *data, size_t len) +{ + for (int i = 0, j = 0, k = 0; k < len; k++) { + i = (i + 1) % 256; + j = (j + ctx->s[i]) % 256; + xbox_rc4_swap(ctx, i, j); + data[k] ^= ctx->s[(ctx->s[i] + ctx->s[j]) % 256]; + } +} diff --git a/util/rc4.h b/util/rc4.h new file mode 100644 index 00000000000..2ba2008b6fd --- /dev/null +++ b/util/rc4.h @@ -0,0 +1,29 @@ +/* + * QEMU RC4 Implementation + * + * Copyright (c) 2020 Mike Davis + * Copyright (c) 2024 Ryan Wendland + * + * 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, see . + */ + +#include +#include + +typedef struct RC4Context { + uint8_t s[256]; +} RC4Context; + +void xbox_rc4_init(RC4Context *ctx, uint8_t *data, size_t len); +void xbox_rc4_crypt(RC4Context *ctx, uint8_t *data, size_t len); diff --git a/util/sha1.c b/util/sha1.c new file mode 100644 index 00000000000..4e055d00b00 --- /dev/null +++ b/util/sha1.c @@ -0,0 +1,175 @@ +/* + * QEMU SHA1 Implementation + * + * Copyright (c) 2020 Mike Davis + * Copyright (c) 2024 Ryan Wendland + * + * 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, see . + */ + +#include "qemu/osdep.h" +#include "crypto/random.h" +#include "qapi/error.h" +#include "qemu/bswap.h" +#include "sha1.h" + +static uint32_t xbox_sha1_rotate(uint32_t bits, uint32_t val) +{ + return (val << bits) | (val >> (32 - bits)); +} + +void xbox_sha1_fill(SHA1Context *ctx, uint32_t a, uint32_t b, uint32_t c, + uint32_t d, uint32_t e) +{ + ctx->intermediate[0] = a; + ctx->intermediate[1] = b; + ctx->intermediate[2] = c; + ctx->intermediate[3] = d; + ctx->intermediate[4] = e; +} + +static void xbox_sha1_process(SHA1Context *ctx) +{ + const uint32_t k[] = { 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6 }; + uint32_t w[80]; + uint32_t a = ctx->intermediate[0]; + uint32_t b = ctx->intermediate[1]; + uint32_t c = ctx->intermediate[2]; + uint32_t d = ctx->intermediate[3]; + uint32_t e = ctx->intermediate[4]; + + for (int i = 0; i < 16; i++) { + *(uint32_t *)&w[i] = cpu_to_be32(((uint32_t *)ctx->msg_blk)[i]); + } + + for (int i = 16; i < 80; i++) { + w[i] = xbox_sha1_rotate(1, w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]); + } + + for (int i = 0; i < 80; i++) { + uint32_t temp = xbox_sha1_rotate(5, a) + w[i] + e; + switch (i / 20) { + case 0: + temp += k[0] + ((b & c) | ((~b) & d)); + break; + case 1: + temp += k[1] + (b ^ c ^ d); + break; + case 2: + temp += k[2] + ((b & c) | (b & d) | (c & d)); + break; + case 3: + temp += k[3] + (b ^ c ^ d); + break; + } + e = d; + d = c; + c = xbox_sha1_rotate(30, b); + b = a; + a = temp; + } + + ctx->intermediate[0] += a; + ctx->intermediate[1] += b; + ctx->intermediate[2] += c; + ctx->intermediate[3] += d; + ctx->intermediate[4] += e; + ctx->msg_blk_index = 0; +} + +static void xbox_sha1_pad(SHA1Context *ctx) +{ + ctx->msg_blk[ctx->msg_blk_index++] = 0x80; + if (ctx->msg_blk_index > 56) { + while (ctx->msg_blk_index < 64) { + ctx->msg_blk[ctx->msg_blk_index++] = 0; + } + xbox_sha1_process(ctx); + } + while (ctx->msg_blk_index < 56) { + ctx->msg_blk[ctx->msg_blk_index++] = 0; + } + *(uint32_t *)&ctx->msg_blk[56] = 0; + *(uint32_t *)&ctx->msg_blk[60] = cpu_to_be32(ctx->length); + xbox_sha1_process(ctx); +} + +void xbox_sha1_input(SHA1Context *ctx, uint8_t *data, size_t len) +{ + ctx->length += len << 3; + for (int i = 0; i < len; i++) { + ctx->msg_blk[ctx->msg_blk_index++] = data[i]; + if (ctx->msg_blk_index == 64) { + xbox_sha1_process(ctx); + } + } +} + +void xbox_sha1_result(SHA1Context *ctx, uint8_t *data) +{ + if (!ctx->computed) { + xbox_sha1_pad(ctx); + ctx->length = 0; + ctx->computed = true; + } + for (int i = 0; i < 20; ++i) { + data[i] = ctx->intermediate[i >> 2] >> 8 * (3 - (i & 3)); + } +} + +void xbox_sha1_reset(SHA1Context *ctx, XboxEEPROMVersion ver, bool first) +{ + ctx->msg_blk_index = 0; + ctx->computed = false; + ctx->length = 512; + + // https://web.archive.org/web/20040618164907/http://www.xbox-linux.org/down/The%20Middle%20Message-1a.pdf + switch (ver) { + case XBOX_EEPROM_VERSION_D: + if (first) { + xbox_sha1_fill(ctx, 0x85F9E51A, 0xE04613D2, 0x6D86A50C, 0x77C32E3C, + 0x4BD717A4); + } else { + xbox_sha1_fill(ctx, 0x5D7A9C6B, 0xE1922BEB, 0xB82CCDBC, 0x3137AB34, + 0x486B52B3); + } + break; + case XBOX_EEPROM_VERSION_R2: + if (first) { + xbox_sha1_fill(ctx, 0x39B06E79, 0xC9BD25E8, 0xDBC6B498, 0x40B4389D, + 0x86BBD7ED); + } else { + xbox_sha1_fill(ctx, 0x9B49BED3, 0x84B430FC, 0x6B8749CD, 0xEBFE5FE5, + 0xD96E7393); + } + break; + case XBOX_EEPROM_VERSION_R3: + if (first) { + xbox_sha1_fill(ctx, 0x8058763A, 0xF97D4E0E, 0x865A9762, 0x8A3D920D, + 0x08995B2C); + } else { + xbox_sha1_fill(ctx, 0x01075307, 0xA2f1E037, 0x1186EEEA, 0x88DA9992, + 0x168A5609); + } + break; + default: // default to 1.0 version + if (first) { + xbox_sha1_fill(ctx, 0x72127625, 0x336472B9, 0xBE609BEA, 0xF55E226B, + 0x99958DAC); + } else { + xbox_sha1_fill(ctx, 0x76441D41, 0x4DE82659, 0x2E8EF85E, 0xB256FACA, + 0xC4FE2DE8); + } + } +} diff --git a/util/sha1.h b/util/sha1.h new file mode 100644 index 00000000000..e62d98c181a --- /dev/null +++ b/util/sha1.h @@ -0,0 +1,35 @@ +/* + * QEMU SHA1 Implementation + * + * Copyright (c) 2020 Mike Davis + * Copyright (c) 2024 Ryan Wendland + * + * 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, see . + */ + +#include +#include + +typedef struct SHA1Context { + uint32_t intermediate[5]; + uint8_t msg_blk[64]; + uint32_t msg_blk_index; + uint32_t length; + bool computed; +} SHA1Context; + +void xbox_sha1_fill(SHA1Context *ctx, uint32_t a, uint32_t b, uint32_t c, uint32_t d, uint32_t e); +void xbox_sha1_input(SHA1Context *ctx, uint8_t *data, size_t len); +void xbox_sha1_result(SHA1Context *ctx, uint8_t *data); +void xbox_sha1_reset(SHA1Context *ctx, XboxEEPROMVersion ver, bool first); From 68ed79f9254ee4cbc0acd949e6c3798b17cc6ccb Mon Sep 17 00:00:00 2001 From: Ryzee119 Date: Wed, 12 Jun 2024 11:21:43 +0930 Subject: [PATCH 03/22] sha1_rc4: Remove xbox eeprom specific aspects --- util/rc4.c | 10 ++++---- util/rc4.h | 4 +-- util/sha1.c | 74 +++++++++++++---------------------------------------- util/sha1.h | 8 +++--- 4 files changed, 29 insertions(+), 67 deletions(-) diff --git a/util/rc4.c b/util/rc4.c index 525793fa7c0..73dd0f3c55e 100644 --- a/util/rc4.c +++ b/util/rc4.c @@ -20,30 +20,30 @@ #include "rc4.h" -static void xbox_rc4_swap(RC4Context *ctx, int first, int second) +static void rc4_swap(RC4Context *ctx, int first, int second) { uint8_t temp = ctx->s[first]; ctx->s[first] = ctx->s[second]; ctx->s[second] = temp; } -void xbox_rc4_init(RC4Context *ctx, uint8_t *data, size_t len) +void rc4_init(RC4Context *ctx, uint8_t *data, size_t len) { for (int i = 0; i < 256; i++) { ctx->s[i] = i; } for (int i = 0, j = 0; i < 256; i++) { j = (j + ctx->s[i] + data[i % len]) % 256; - xbox_rc4_swap(ctx, i, j); + rc4_swap(ctx, i, j); } } -void xbox_rc4_crypt(RC4Context *ctx, uint8_t *data, size_t len) +void rc4_crypt(RC4Context *ctx, uint8_t *data, size_t len) { for (int i = 0, j = 0, k = 0; k < len; k++) { i = (i + 1) % 256; j = (j + ctx->s[i]) % 256; - xbox_rc4_swap(ctx, i, j); + rc4_swap(ctx, i, j); data[k] ^= ctx->s[(ctx->s[i] + ctx->s[j]) % 256]; } } diff --git a/util/rc4.h b/util/rc4.h index 2ba2008b6fd..44aea7af72d 100644 --- a/util/rc4.h +++ b/util/rc4.h @@ -25,5 +25,5 @@ typedef struct RC4Context { uint8_t s[256]; } RC4Context; -void xbox_rc4_init(RC4Context *ctx, uint8_t *data, size_t len); -void xbox_rc4_crypt(RC4Context *ctx, uint8_t *data, size_t len); +void rc4_init(RC4Context *ctx, uint8_t *data, size_t len); +void rc4_crypt(RC4Context *ctx, uint8_t *data, size_t len); diff --git a/util/sha1.c b/util/sha1.c index 4e055d00b00..bf52474d9a2 100644 --- a/util/sha1.c +++ b/util/sha1.c @@ -19,18 +19,17 @@ */ #include "qemu/osdep.h" -#include "crypto/random.h" #include "qapi/error.h" #include "qemu/bswap.h" #include "sha1.h" -static uint32_t xbox_sha1_rotate(uint32_t bits, uint32_t val) +static uint32_t sha1_rotate(uint32_t bits, uint32_t val) { return (val << bits) | (val >> (32 - bits)); } -void xbox_sha1_fill(SHA1Context *ctx, uint32_t a, uint32_t b, uint32_t c, - uint32_t d, uint32_t e) +void sha1_fill(SHA1Context *ctx, uint32_t a, uint32_t b, uint32_t c, + uint32_t d, uint32_t e) { ctx->intermediate[0] = a; ctx->intermediate[1] = b; @@ -39,7 +38,7 @@ void xbox_sha1_fill(SHA1Context *ctx, uint32_t a, uint32_t b, uint32_t c, ctx->intermediate[4] = e; } -static void xbox_sha1_process(SHA1Context *ctx) +static void sha1_process(SHA1Context *ctx) { const uint32_t k[] = { 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6 }; uint32_t w[80]; @@ -54,11 +53,11 @@ static void xbox_sha1_process(SHA1Context *ctx) } for (int i = 16; i < 80; i++) { - w[i] = xbox_sha1_rotate(1, w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]); + w[i] = sha1_rotate(1, w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]); } for (int i = 0; i < 80; i++) { - uint32_t temp = xbox_sha1_rotate(5, a) + w[i] + e; + uint32_t temp = sha1_rotate(5, a) + w[i] + e; switch (i / 20) { case 0: temp += k[0] + ((b & c) | ((~b) & d)); @@ -75,7 +74,7 @@ static void xbox_sha1_process(SHA1Context *ctx) } e = d; d = c; - c = xbox_sha1_rotate(30, b); + c = sha1_rotate(30, b); b = a; a = temp; } @@ -88,38 +87,38 @@ static void xbox_sha1_process(SHA1Context *ctx) ctx->msg_blk_index = 0; } -static void xbox_sha1_pad(SHA1Context *ctx) +static void sha1_pad(SHA1Context *ctx) { ctx->msg_blk[ctx->msg_blk_index++] = 0x80; if (ctx->msg_blk_index > 56) { while (ctx->msg_blk_index < 64) { ctx->msg_blk[ctx->msg_blk_index++] = 0; } - xbox_sha1_process(ctx); + sha1_process(ctx); } while (ctx->msg_blk_index < 56) { ctx->msg_blk[ctx->msg_blk_index++] = 0; } *(uint32_t *)&ctx->msg_blk[56] = 0; *(uint32_t *)&ctx->msg_blk[60] = cpu_to_be32(ctx->length); - xbox_sha1_process(ctx); + sha1_process(ctx); } -void xbox_sha1_input(SHA1Context *ctx, uint8_t *data, size_t len) +void sha1_input(SHA1Context *ctx, uint8_t *data, size_t len) { ctx->length += len << 3; for (int i = 0; i < len; i++) { ctx->msg_blk[ctx->msg_blk_index++] = data[i]; if (ctx->msg_blk_index == 64) { - xbox_sha1_process(ctx); + sha1_process(ctx); } } } -void xbox_sha1_result(SHA1Context *ctx, uint8_t *data) +void sha1_result(SHA1Context *ctx, uint8_t *data) { if (!ctx->computed) { - xbox_sha1_pad(ctx); + sha1_pad(ctx); ctx->length = 0; ctx->computed = true; } @@ -128,48 +127,11 @@ void xbox_sha1_result(SHA1Context *ctx, uint8_t *data) } } -void xbox_sha1_reset(SHA1Context *ctx, XboxEEPROMVersion ver, bool first) +void sha1_reset(SHA1Context *ctx) { + sha1_fill(ctx, 0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0); + ctx->msg_blk_index = 0; ctx->computed = false; - ctx->length = 512; - - // https://web.archive.org/web/20040618164907/http://www.xbox-linux.org/down/The%20Middle%20Message-1a.pdf - switch (ver) { - case XBOX_EEPROM_VERSION_D: - if (first) { - xbox_sha1_fill(ctx, 0x85F9E51A, 0xE04613D2, 0x6D86A50C, 0x77C32E3C, - 0x4BD717A4); - } else { - xbox_sha1_fill(ctx, 0x5D7A9C6B, 0xE1922BEB, 0xB82CCDBC, 0x3137AB34, - 0x486B52B3); - } - break; - case XBOX_EEPROM_VERSION_R2: - if (first) { - xbox_sha1_fill(ctx, 0x39B06E79, 0xC9BD25E8, 0xDBC6B498, 0x40B4389D, - 0x86BBD7ED); - } else { - xbox_sha1_fill(ctx, 0x9B49BED3, 0x84B430FC, 0x6B8749CD, 0xEBFE5FE5, - 0xD96E7393); - } - break; - case XBOX_EEPROM_VERSION_R3: - if (first) { - xbox_sha1_fill(ctx, 0x8058763A, 0xF97D4E0E, 0x865A9762, 0x8A3D920D, - 0x08995B2C); - } else { - xbox_sha1_fill(ctx, 0x01075307, 0xA2f1E037, 0x1186EEEA, 0x88DA9992, - 0x168A5609); - } - break; - default: // default to 1.0 version - if (first) { - xbox_sha1_fill(ctx, 0x72127625, 0x336472B9, 0xBE609BEA, 0xF55E226B, - 0x99958DAC); - } else { - xbox_sha1_fill(ctx, 0x76441D41, 0x4DE82659, 0x2E8EF85E, 0xB256FACA, - 0xC4FE2DE8); - } - } + ctx->length = 0; } diff --git a/util/sha1.h b/util/sha1.h index e62d98c181a..c0b5f01d13c 100644 --- a/util/sha1.h +++ b/util/sha1.h @@ -29,7 +29,7 @@ typedef struct SHA1Context { bool computed; } SHA1Context; -void xbox_sha1_fill(SHA1Context *ctx, uint32_t a, uint32_t b, uint32_t c, uint32_t d, uint32_t e); -void xbox_sha1_input(SHA1Context *ctx, uint8_t *data, size_t len); -void xbox_sha1_result(SHA1Context *ctx, uint8_t *data); -void xbox_sha1_reset(SHA1Context *ctx, XboxEEPROMVersion ver, bool first); +void sha1_fill(SHA1Context *ctx, uint32_t a, uint32_t b, uint32_t c, uint32_t d, uint32_t e); +void sha1_input(SHA1Context *ctx, uint8_t *data, size_t len); +void sha1_result(SHA1Context *ctx, uint8_t *data); +void sha1_reset(SHA1Context *ctx); From e7633ed4a5ace95a686113eaa7e246b31459666f Mon Sep 17 00:00:00 2001 From: Ryzee119 Date: Wed, 12 Jun 2024 11:39:01 +0930 Subject: [PATCH 04/22] eeprom: Use sha1 and rc4 util for hashing functions --- hw/xbox/eeprom_generation.c | 146 +++++------------------------------- hw/xbox/eeprom_generation.h | 12 --- 2 files changed, 17 insertions(+), 141 deletions(-) diff --git a/hw/xbox/eeprom_generation.c b/hw/xbox/eeprom_generation.c index 291e2077dcf..f51df73e932 100644 --- a/hw/xbox/eeprom_generation.c +++ b/hw/xbox/eeprom_generation.c @@ -2,6 +2,7 @@ * QEMU Xbox EEPROM Generation (MCPX Version 1.0) * * Copyright (c) 2020 Mike Davis + * Copyright (c) 2024 Ryan Wendland * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -18,6 +19,8 @@ */ #include "eeprom_generation.h" +#include "util/sha1.h" +#include "util/rc4.h" static uint32_t xbox_eeprom_crc(uint8_t *data, size_t len) { uint32_t high = 0; @@ -32,44 +35,6 @@ static uint32_t xbox_eeprom_crc(uint8_t *data, size_t len) { return ~(high + low); } -static void xbox_rc4_swap(RC4Context *ctx, int first, int second) { - uint8_t temp = ctx->s[first]; - ctx->s[first] = ctx->s[second]; - ctx->s[second] = temp; -} - -static void xbox_rc4_init(RC4Context *ctx, uint8_t *data, size_t len) { - for (int i = 0; i < 256; i++) { - ctx->s[i] = i; - } - for (int i = 0, j = 0; i < 256; i++) { - j = (j + ctx->s[i] + data[i % len]) % 256; - xbox_rc4_swap(ctx, i, j); - } -} - -static void xbox_rc4_crypt(RC4Context *ctx, uint8_t *data, size_t len) { - for (int i = 0, j = 0, k = 0; k < len; k++) { - i = (i + 1) % 256; - j = (j + ctx->s[i]) % 256; - xbox_rc4_swap(ctx, i, j); - data[k] ^= ctx->s[(ctx->s[i] + ctx->s[j]) % 256]; - } -} - -static uint32_t xbox_sha1_rotate(uint32_t bits, uint32_t val) { - return (val << bits) | (val >> (32 - bits)); -} - -static void xbox_sha1_fill(SHA1Context *ctx, - uint32_t a, uint32_t b, uint32_t c, uint32_t d, uint32_t e) { - ctx->intermediate[0] = a; - ctx->intermediate[1] = b; - ctx->intermediate[2] = c; - ctx->intermediate[3] = d; - ctx->intermediate[4] = e; -} - static void xbox_sha1_reset(SHA1Context *ctx, XboxEEPROMVersion ver, bool first) { ctx->msg_blk_index = 0; ctx->computed = false; @@ -79,127 +44,50 @@ static void xbox_sha1_reset(SHA1Context *ctx, XboxEEPROMVersion ver, bool first) switch (ver) { case XBOX_EEPROM_VERSION_D: if (first) { - xbox_sha1_fill(ctx, 0x85F9E51A, 0xE04613D2, + sha1_fill(ctx, 0x85F9E51A, 0xE04613D2, 0x6D86A50C, 0x77C32E3C, 0x4BD717A4); } else { - xbox_sha1_fill(ctx, 0x5D7A9C6B, 0xE1922BEB, + sha1_fill(ctx, 0x5D7A9C6B, 0xE1922BEB, 0xB82CCDBC, 0x3137AB34, 0x486B52B3); } break; case XBOX_EEPROM_VERSION_R2: if (first) { - xbox_sha1_fill(ctx, 0x39B06E79, 0xC9BD25E8, + sha1_fill(ctx, 0x39B06E79, 0xC9BD25E8, 0xDBC6B498, 0x40B4389D, 0x86BBD7ED); } else { - xbox_sha1_fill(ctx, 0x9B49BED3, 0x84B430FC, + sha1_fill(ctx, 0x9B49BED3, 0x84B430FC, 0x6B8749CD, 0xEBFE5FE5, 0xD96E7393); } break; case XBOX_EEPROM_VERSION_R3: if (first) { - xbox_sha1_fill(ctx, 0x8058763A, 0xF97D4E0E, + sha1_fill(ctx, 0x8058763A, 0xF97D4E0E, 0x865A9762, 0x8A3D920D, 0x08995B2C); } else { - xbox_sha1_fill(ctx, 0x01075307, 0xA2f1E037, + sha1_fill(ctx, 0x01075307, 0xA2f1E037, 0x1186EEEA, 0x88DA9992, 0x168A5609); } break; default: // default to 1.0 version if (first) { - xbox_sha1_fill(ctx, 0x72127625, 0x336472B9, + sha1_fill(ctx, 0x72127625, 0x336472B9, 0xBE609BEA, 0xF55E226B, 0x99958DAC); } else { - xbox_sha1_fill(ctx, 0x76441D41, 0x4DE82659, + sha1_fill(ctx, 0x76441D41, 0x4DE82659, 0x2E8EF85E, 0xB256FACA, 0xC4FE2DE8); } } } -static void xbox_sha1_process(SHA1Context *ctx) { - const uint32_t k[] = { 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6 }; - uint32_t w[80]; - uint32_t a = ctx->intermediate[0]; - uint32_t b = ctx->intermediate[1]; - uint32_t c = ctx->intermediate[2]; - uint32_t d = ctx->intermediate[3]; - uint32_t e = ctx->intermediate[4]; - - for (int i = 0; i < 16; i++) { - *(uint32_t*)&w[i] = cpu_to_be32(((uint32_t*)ctx->msg_blk)[i]); - } - - for (int i = 16; i < 80; i++) { - w[i] = xbox_sha1_rotate(1, w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]); - } - - for (int i = 0; i < 80; i++) { - uint32_t temp = xbox_sha1_rotate(5, a) + w[i] + e; - switch (i / 20) { - case 0: temp += k[0] + ((b & c) | ((~b) & d)); break; - case 1: temp += k[1] + (b ^ c ^ d); break; - case 2: temp += k[2] + ((b & c) | (b & d) | (c & d)); break; - case 3: temp += k[3] + (b ^ c ^ d); break; - } - e = d; - d = c; - c = xbox_sha1_rotate(30, b); - b = a; - a = temp; - } - - ctx->intermediate[0] += a; - ctx->intermediate[1] += b; - ctx->intermediate[2] += c; - ctx->intermediate[3] += d; - ctx->intermediate[4] += e; - ctx->msg_blk_index = 0; -} - -static void xbox_sha1_input(SHA1Context *ctx, uint8_t *data, size_t len) { - ctx->length += len << 3; - for (int i = 0; i < len; i++) { - ctx->msg_blk[ctx->msg_blk_index++] = data[i]; - if (ctx->msg_blk_index == 64) { - xbox_sha1_process(ctx); - } - } -} - -static void xbox_sha1_pad(SHA1Context *ctx) { - ctx->msg_blk[ctx->msg_blk_index++] = 0x80; - if (ctx->msg_blk_index > 56) { - while (ctx->msg_blk_index < 64) { - ctx->msg_blk[ctx->msg_blk_index++] = 0; - } - xbox_sha1_process(ctx); - } - while (ctx->msg_blk_index < 56) { - ctx->msg_blk[ctx->msg_blk_index++] = 0; - } - *(uint32_t*)&ctx->msg_blk[56] = 0; - *(uint32_t*)&ctx->msg_blk[60] = cpu_to_be32(ctx->length); - xbox_sha1_process(ctx); -} - -static void xbox_sha1_result(SHA1Context *ctx, uint8_t *data) { - if (!ctx->computed) { - xbox_sha1_pad(ctx); - ctx->length = 0; - ctx->computed = true; - } - for (int i = 0; i < 20; ++i) { - data[i] = ctx->intermediate[i >> 2] >> 8 * (3 - (i & 3)); - } -} - static void xbox_sha1_compute(SHA1Context *ctx, XboxEEPROMVersion ver, uint8_t *data, size_t len, uint8_t *hash) { xbox_sha1_reset(ctx, ver, true); - xbox_sha1_input(ctx, data, len); - xbox_sha1_result(ctx, ctx->msg_blk); + sha1_input(ctx, data, len); + sha1_result(ctx, ctx->msg_blk); xbox_sha1_reset(ctx, ver, false); - xbox_sha1_input(ctx, ctx->msg_blk, 20); - xbox_sha1_result(ctx, hash); + sha1_input(ctx, ctx->msg_blk, 20); + sha1_result(ctx, hash); } bool xbox_eeprom_generate(const char *file, XboxEEPROMVersion ver) { @@ -237,8 +125,8 @@ bool xbox_eeprom_generate(const char *file, XboxEEPROMVersion ver) { uint8_t seed[20]; xbox_sha1_compute(&sctx, ver, e.confounder, 0x1C, e.hash); xbox_sha1_compute(&sctx, ver, e.hash, sizeof(e.hash), seed); - xbox_rc4_init(&rctx, seed, sizeof(seed)); - xbox_rc4_crypt(&rctx, e.confounder, 0x1C); + rc4_init(&rctx, seed, sizeof(seed)); + rc4_crypt(&rctx, e.confounder, 0x1C); // save to file FILE *fd = qemu_fopen(file, "wb"); diff --git a/hw/xbox/eeprom_generation.h b/hw/xbox/eeprom_generation.h index 44e13165ac7..c74e594c7d1 100644 --- a/hw/xbox/eeprom_generation.h +++ b/hw/xbox/eeprom_generation.h @@ -25,18 +25,6 @@ #include "crypto/random.h" #include "include/qemu/bswap.h" -typedef struct RC4Context { - uint8_t s[256]; -} RC4Context; - -typedef struct SHA1Context { - uint32_t intermediate[5]; - uint8_t msg_blk[64]; - uint32_t msg_blk_index; - uint32_t length; - bool computed; -} SHA1Context; - #pragma pack(push,1) typedef struct XboxEEPROM { uint8_t hash[20]; From 8867b3c951dcdea699e59da9649fb10d34311053 Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Fri, 14 Jun 2024 19:08:47 -0700 Subject: [PATCH 05/22] meson: Drop GLU dependency --- meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meson.build b/meson.build index 38127c98098..a6fd6fa5a3b 100644 --- a/meson.build +++ b/meson.build @@ -1164,7 +1164,7 @@ if not get_option('opengl').auto() or have_system or have_vhost_user_gpu elif targetos == 'windows' opengl_libs=['-lopengl32', '-lgdi32'] elif targetos == 'linux' - opengl_libs=['-lGLU', '-lGL'] + opengl_libs=['-lGL'] else error('Unknown GL platform') endif From d6ba0b050a1935653d701770f5d5313d778f352e Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Fri, 14 Jun 2024 19:09:17 -0700 Subject: [PATCH 06/22] meson: Use meson 1.4.1 --- meson | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meson b/meson index 3a9b285a55b..1e2e30bbcfe 160000 --- a/meson +++ b/meson @@ -1 +1 @@ -Subproject commit 3a9b285a55b91b53b2acda987192274352ecb5be +Subproject commit 1e2e30bbcfea876e05ce5b863579dc7eb71b5fb3 From be31d931f7da0b9aa6dd7030433c9783af2aa167 Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Fri, 14 Jun 2024 19:36:36 -0700 Subject: [PATCH 07/22] ci: Bump macOS runner to 14 --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3736eee443f..de22b00c2b2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -239,7 +239,7 @@ jobs: macOS: name: Build for macOS (${{ matrix.arch }}, ${{ matrix.configuration }}) - runs-on: macOS-11 + runs-on: macOS-14 needs: Init strategy: matrix: @@ -311,7 +311,7 @@ jobs: macOSUniversal: name: Build macOS Universal Bundle (${{ matrix.configuration }}) - runs-on: macOS-11 + runs-on: macOS-14 needs: [macOS] strategy: matrix: From 4af86b5f61d919ce54b6f91fc8a7417755305997 Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Fri, 14 Jun 2024 19:55:29 -0700 Subject: [PATCH 08/22] ci: Use setup-python action on macOS --- .github/workflows/build.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index de22b00c2b2..c0f520ad218 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -271,6 +271,9 @@ jobs: name: src.tar.gz - name: Extract source package run: tar xf src.tar.gz + - uses: actions/setup-python@v5.1.0 + with: + python-version: '3.12' - name: Install dependencies run: | export HOMEBREW_NO_AUTO_UPDATE=1 @@ -281,7 +284,7 @@ jobs: dylibbundler \ pkg-config \ ninja - python3 -m pip install pyyaml requests + pip install pyyaml requests - name: Initialize compiler, library cache id: cache uses: actions/cache@v4 From 7dd485318124f7ad0b9b75787b9ef82bfb315f47 Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Fri, 14 Jun 2024 20:15:08 -0700 Subject: [PATCH 09/22] ci: Drop pkg-config install requirement (already installed) --- .github/workflows/build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c0f520ad218..65ba6a8ea2b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -282,7 +282,6 @@ jobs: ccache \ coreutils \ dylibbundler \ - pkg-config \ ninja pip install pyyaml requests - name: Initialize compiler, library cache From b2b6a98d5ea21970cd2436a1912230f4b97c5e03 Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Fri, 14 Jun 2024 20:43:51 -0700 Subject: [PATCH 10/22] ci: Bump macOS min ver to 14.4 --- build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.sh b/build.sh index d73fbeb61b1..600e21590c2 100755 --- a/build.sh +++ b/build.sh @@ -199,9 +199,9 @@ case "$platform" in # Adjust compilation options based on platform Darwin) echo "Compiling for MacOS for $target_arch..." if [ "$target_arch" == "arm64" ]; then - macos_min_ver=11.3 + macos_min_ver=14.4 elif [ "$target_arch" == "x86_64" ]; then - macos_min_ver=10.13 + macos_min_ver=14.4 else echo "Unsupported arch $target_arch" exit 1 From 6153fa14c9def6d274637d7eeb96af8138038a1f Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Sat, 15 Jun 2024 11:21:52 -0700 Subject: [PATCH 11/22] win64-cross: Update MXE, drop upstreamed patches --- ubuntu-win64-cross/Dockerfile | 9 +------- ubuntu-win64-cross/libslirp-1.patch | 34 ----------------------------- ubuntu-win64-cross/libslirp.mk | 19 ---------------- 3 files changed, 1 insertion(+), 61 deletions(-) delete mode 100644 ubuntu-win64-cross/libslirp-1.patch delete mode 100644 ubuntu-win64-cross/libslirp.mk diff --git a/ubuntu-win64-cross/Dockerfile b/ubuntu-win64-cross/Dockerfile index bd26ee81700..8c9a5198366 100644 --- a/ubuntu-win64-cross/Dockerfile +++ b/ubuntu-win64-cross/Dockerfile @@ -4,7 +4,7 @@ FROM ubuntu:22.04 -ENV MXE_VERSION=1707285df63b8590ce6b91c7ff3a5b56e3cc8980 +ENV MXE_VERSION=8fa8c126f64a0ca6d263c641632645db4f941f00 RUN apt-get update \ && DEBIAN_FRONTEND=noninteractive \ @@ -71,13 +71,6 @@ RUN V=1 MXE_VERBOSE=1 make -C /opt/mxe \ MXE_PLUGIN_DIRS=plugins/gcc10 \ sdl2 -COPY libslirp.mk /opt/mxe/src/libslirp.mk -COPY libslirp-1.patch /opt/mxe/src/libslirp-1.patch -RUN V=1 MXE_VERBOSE=1 make -C /opt/mxe \ - MXE_TARGETS=x86_64-w64-mingw32.static \ - MXE_PLUGIN_DIRS=plugins/gcc10 \ - libslirp - RUN find /opt/mxe/usr -executable -type f -exec chmod a+x {} \; ENV CROSSPREFIX=x86_64-w64-mingw32.static- diff --git a/ubuntu-win64-cross/libslirp-1.patch b/ubuntu-win64-cross/libslirp-1.patch deleted file mode 100644 index eb4b6a328cd..00000000000 --- a/ubuntu-win64-cross/libslirp-1.patch +++ /dev/null @@ -1,34 +0,0 @@ -From d1417aed0b335d03c67c998b17b72933764ccbe3 Mon Sep 17 00:00:00 2001 -From: Matt Borgerson -Date: Mon, 23 Jan 2023 03:06:46 -0700 -Subject: [PATCH] Rename pingtest's slirp_inet_aton - ---- - test/pingtest.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/test/pingtest.c b/test/pingtest.c -index 3bb0488..04b63ce 100644 ---- a/test/pingtest.c -+++ b/test/pingtest.c -@@ -24,7 +24,7 @@ - #ifdef _WIN32 - //#include - #include --int slirp_inet_aton(const char *cp, struct in_addr *ia) -+int pingtest_inet_aton(const char *cp, struct in_addr *ia) - { - uint32_t addr = inet_addr(cp); - if (addr == 0xffffffff) { -@@ -33,7 +33,7 @@ int slirp_inet_aton(const char *cp, struct in_addr *ia) - ia->s_addr = addr; - return 1; - } --#define inet_aton slirp_inet_aton -+#define inet_aton pingtest_inet_aton - #else - #include - #endif --- -2.34.1 - diff --git a/ubuntu-win64-cross/libslirp.mk b/ubuntu-win64-cross/libslirp.mk deleted file mode 100644 index 71449d14c6b..00000000000 --- a/ubuntu-win64-cross/libslirp.mk +++ /dev/null @@ -1,19 +0,0 @@ -# This file is part of MXE. See LICENSE.md for licensing information. - -PKG := libslirp -$(PKG)_WEBSITE := https://gitlab.freedesktop.org/slirp/libslirp -$(PKG)_IGNORE := -$(PKG)_VERSION := 4.7.0 -$(PKG)_SUBDIR := libslirp-v$($(PKG)_VERSION) -$(PKG)_FILE := libslirp-v$($(PKG)_VERSION).tar.gz -$(PKG)_CHECKSUM := 9398f0ec5a581d4e1cd6856b88ae83927e458d643788c3391a39e61b75db3d3b -$(PKG)_URL := https://gitlab.freedesktop.org/slirp/$(PKG)/-/archive/v$($(PKG)_VERSION)/$($(PKG)_FILE) -$(PKG)_DEPS := cc glib meson-wrapper - -define $(PKG)_BUILD - '$(MXE_MESON_WRAPPER)' $(MXE_MESON_OPTS) \ - $(PKG_MESON_OPTS) \ - --buildtype=plain \ - '$(BUILD_DIR)' '$(SOURCE_DIR)' - '$(MXE_NINJA)' -C '$(BUILD_DIR)' -j '$(JOBS)' install -endef From 11884a58514dd91fb51930bf26abfc470fe3f387 Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Sat, 15 Jun 2024 11:22:21 -0700 Subject: [PATCH 12/22] win64-cross: Update Docker image base to ubuntu:24.04 --- ubuntu-win64-cross/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ubuntu-win64-cross/Dockerfile b/ubuntu-win64-cross/Dockerfile index 8c9a5198366..3d1319a6508 100644 --- a/ubuntu-win64-cross/Dockerfile +++ b/ubuntu-win64-cross/Dockerfile @@ -2,7 +2,7 @@ # Environment to cross-compile xemu for Windows # -FROM ubuntu:22.04 +FROM ubuntu:24.04 ENV MXE_VERSION=8fa8c126f64a0ca6d263c641632645db4f941f00 From 621908076d120268abafcaad9358d1be6aaa2c2f Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Sat, 15 Jun 2024 11:22:50 -0700 Subject: [PATCH 13/22] win64-cross: Use GCC 13 --- ubuntu-win64-cross/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ubuntu-win64-cross/Dockerfile b/ubuntu-win64-cross/Dockerfile index 3d1319a6508..5d31d74f140 100644 --- a/ubuntu-win64-cross/Dockerfile +++ b/ubuntu-win64-cross/Dockerfile @@ -55,7 +55,7 @@ RUN cd /opt \ && cd mxe \ && git checkout ${MXE_VERSION} \ && make MXE_TARGETS=x86_64-w64-mingw32.static \ - MXE_PLUGIN_DIRS=plugins/gcc10 \ + MXE_PLUGIN_DIRS=plugins/gcc13 \ cc \ glib \ libepoxy \ @@ -68,7 +68,7 @@ RUN rm /opt/mxe/src/sdl2*.patch COPY sdl2.mk /opt/mxe/src/sdl2.mk RUN V=1 MXE_VERBOSE=1 make -C /opt/mxe \ MXE_TARGETS=x86_64-w64-mingw32.static \ - MXE_PLUGIN_DIRS=plugins/gcc10 \ + MXE_PLUGIN_DIRS=plugins/gcc13 \ sdl2 RUN find /opt/mxe/usr -executable -type f -exec chmod a+x {} \; From 8ef45cc333881b88f24c4a52b8937c4d99f3e979 Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Sat, 15 Jun 2024 11:17:55 -0700 Subject: [PATCH 14/22] win64-cross: Update SDL2 to 2.30.3 --- ubuntu-win64-cross/sdl2.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ubuntu-win64-cross/sdl2.mk b/ubuntu-win64-cross/sdl2.mk index 4ed53822b8a..e86637308e7 100644 --- a/ubuntu-win64-cross/sdl2.mk +++ b/ubuntu-win64-cross/sdl2.mk @@ -4,10 +4,10 @@ PKG := sdl2 $(PKG)_WEBSITE := https://www.libsdl.org/ $(PKG)_DESCR := SDL2 $(PKG)_IGNORE := -$(PKG)_VERSION := 2.26.2 +$(PKG)_VERSION := 2.30.3 $(PKG)_SUBDIR := SDL2-$($(PKG)_VERSION) $(PKG)_FILE := SDL2-$($(PKG)_VERSION).tar.gz -$(PKG)_CHECKSUM := 95d39bc3de037fbdfa722623737340648de4f180a601b0afad27645d150b99e0 +$(PKG)_CHECKSUM := 820440072f8f5b50188c1dae104f2ad25984de268785be40c41a099a510f0aec $(PKG)_URL := https://github.com/libsdl-org/SDL/releases/download/release-$($(PKG)_VERSION)/$($(PKG)_FILE) $(PKG)_GH_CONF := libsdl-org/SDL/releases/tag,release-,, $(PKG)_DEPS := cc libiconv libsamplerate From 8152913bb956385841b5df251686a13ec6d2a4de Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Sat, 15 Jun 2024 12:53:10 -0700 Subject: [PATCH 15/22] win64-cross: Add libslirp to dependecies --- ubuntu-win64-cross/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ubuntu-win64-cross/Dockerfile b/ubuntu-win64-cross/Dockerfile index 5d31d74f140..ba71d05386e 100644 --- a/ubuntu-win64-cross/Dockerfile +++ b/ubuntu-win64-cross/Dockerfile @@ -62,7 +62,8 @@ RUN cd /opt \ pixman \ libsamplerate \ openssl \ - cmake + cmake \ + libslirp RUN rm /opt/mxe/src/sdl2*.patch COPY sdl2.mk /opt/mxe/src/sdl2.mk From 055abdefea0c7ae64d821c0e2c915191f2299b77 Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Sat, 15 Jun 2024 16:51:03 -0700 Subject: [PATCH 16/22] ci: Update win64 cross image tag --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 65ba6a8ea2b..f090055698c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -67,7 +67,7 @@ jobs: build_param: artifact_name: xemu-win-release env: - DOCKER_IMAGE_NAME: ghcr.io/xemu-project/xemu-win64-toolchain:sha-d0d3e7b + DOCKER_IMAGE_NAME: ghcr.io/xemu-project/xemu-win64-toolchain:sha-8152913 steps: - name: Download source package From b4ce2b58d09baa6dfd17c0bcab2e505df9f310e4 Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Sat, 15 Jun 2024 16:51:03 -0700 Subject: [PATCH 17/22] scripts/gen-license.py: Update libpcre --- licenses/pcre2.license.txt | 94 ++++++++++++++++++++++++++++++++++++++ scripts/gen-license.py | 8 +++- 2 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 licenses/pcre2.license.txt diff --git a/licenses/pcre2.license.txt b/licenses/pcre2.license.txt new file mode 100644 index 00000000000..b1ec61be440 --- /dev/null +++ b/licenses/pcre2.license.txt @@ -0,0 +1,94 @@ +PCRE2 LICENCE +------------- + +PCRE2 is a library of functions to support regular expressions whose syntax +and semantics are as close as possible to those of the Perl 5 language. + +Releases 10.00 and above of PCRE2 are distributed under the terms of the "BSD" +licence, as specified below, with one exemption for certain binary +redistributions. The documentation for PCRE2, supplied in the "doc" directory, +is distributed under the same terms as the software itself. The data in the +testdata directory is not copyrighted and is in the public domain. + +The basic library functions are written in C and are freestanding. Also +included in the distribution is a just-in-time compiler that can be used to +optimize pattern matching. This is an optional feature that can be omitted when +the library is built. + + +THE BASIC LIBRARY FUNCTIONS +--------------------------- + +Written by: Philip Hazel +Email local part: Philip.Hazel +Email domain: gmail.com + +Retired from University of Cambridge Computing Service, +Cambridge, England. + +Copyright (c) 1997-2021 University of Cambridge +All rights reserved. + + +PCRE2 JUST-IN-TIME COMPILATION SUPPORT +-------------------------------------- + +Written by: Zoltan Herczeg +Email local part: hzmester +Email domain: freemail.hu + +Copyright(c) 2010-2021 Zoltan Herczeg +All rights reserved. + + +STACK-LESS JUST-IN-TIME COMPILER +-------------------------------- + +Written by: Zoltan Herczeg +Email local part: hzmester +Email domain: freemail.hu + +Copyright(c) 2009-2021 Zoltan Herczeg +All rights reserved. + + +THE "BSD" LICENCE +----------------- + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notices, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notices, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the University of Cambridge nor the names of any + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR CONTRIBUTORS 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. + + +EXEMPTION FOR BINARY LIBRARY-LIKE PACKAGES +------------------------------------------ + +The second condition in the BSD licence (covering binary redistributions) does +not apply all the way down a chain of software. If binary package A includes +PCRE2, it must respect the condition, but if package B is software that +includes package A, the condition is not imposed on package B unless it uses +PCRE2 independently. + +End diff --git a/scripts/gen-license.py b/scripts/gen-license.py index 05a6cb078cf..b71d4ecd56a 100755 --- a/scripts/gen-license.py +++ b/scripts/gen-license.py @@ -266,8 +266,12 @@ def head(self): # glib dep Lib('pcre', 'http://pcre.org/', bsd, 'http://www.pcre.org/original/license.txt', - ships_static={windows}, ships_dynamic={macos}, - pkgconfig=PkgConfig('libpcre'), pkg_win='pcre', pkg_mac='pcre', pkg_ubuntu='libpcre3-dev' + pkgconfig=PkgConfig('libpcre'), pkg_ubuntu='libpcre3-dev' + ), +Lib('pcre2', 'http://pcre.org/', + bsd, 'https://www.pcre.org/licence.txt', + ships_static={windows}, ships_dynamic={macos}, + pkgconfig=PkgConfig('libpcre2-8'), pkg_win='pcre2', pkg_mac='pcre2', pkg_ubuntu='libpcre2-dev' ), # glib dep From 0d14572f5c3fcf1149c90375bcee696ea704d648 Mon Sep 17 00:00:00 2001 From: mborgerson Date: Sun, 14 Jul 2024 12:45:33 -0700 Subject: [PATCH 18/22] ci: Lower macOS minimum version to 12.7.5 --- build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.sh b/build.sh index 600e21590c2..fc797467894 100755 --- a/build.sh +++ b/build.sh @@ -199,9 +199,9 @@ case "$platform" in # Adjust compilation options based on platform Darwin) echo "Compiling for MacOS for $target_arch..." if [ "$target_arch" == "arm64" ]; then - macos_min_ver=14.4 + macos_min_ver=12.7.5 elif [ "$target_arch" == "x86_64" ]; then - macos_min_ver=14.4 + macos_min_ver=12.7.5 else echo "Unsupported arch $target_arch" exit 1 From b279d57c09f26090bda32db322d510198d742afe Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Mon, 15 Jul 2024 01:30:57 -0700 Subject: [PATCH 19/22] download-macos-libs.py: Simplify package pattern match --- scripts/download-macos-libs.py | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/scripts/download-macos-libs.py b/scripts/download-macos-libs.py index 239c7ae3e60..dd1f913dd60 100755 --- a/scripts/download-macos-libs.py +++ b/scripts/download-macos-libs.py @@ -43,15 +43,7 @@ def __init__(self, arch): def get_latest_pkg_filename_url(self, pkg_name): pkg_base_url = f'{MIRROR}/{pkg_name}' pkg_list = urlopen(pkg_base_url).read().decode('utf-8') - pkgs = re.findall(pkg_name + r'[\w\.\-\_\+]*?\.' + self._darwin_target + r'\.' + self._arch + r'\.tbz2', pkg_list) - - if len(pkgs) < 1: - pkgs = re.findall(pkg_name + r'[\w\.\-\_\+]*?\.darwin_any\.' + self._arch + r'\.tbz2', pkg_list) - if len(pkgs) < 1: - pkgs = re.findall(pkg_name + r'[\w\.\-\_\+]*?\.' + self._darwin_target + r'\.noarch\.tbz2', pkg_list) - if len(pkgs) < 1: - pkgs = re.findall(pkg_name + r'[\w\.\-\_\+]*?\.darwin_any\.noarch\.tbz2', pkg_list) - + pkgs = re.findall(pkg_name + r'[\w\.\-\_\+]*?\.(?:any_any|darwin_any|' + self._darwin_target + r')\.(?:noarch|' + self._arch + r')\.tbz2', pkg_list) if len(pkgs) < 1: print(f' [*] [ERROR] Unable to find version of {pkg_name} compatible with {self._darwin_target}.{self._arch}') exit(1) From 2f8981168143a11e3001cab724975c73f24bcc4b Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Sun, 21 Jul 2024 15:35:40 -0700 Subject: [PATCH 20/22] ci: Merge in debian package files --- .github/workflows/build.yml | 16 +- debian/build_deb.sh | 30 ++ debian/changelog | 5 + debian/compat | 1 + debian/control | 33 ++ debian/copyright | 547 ++++++++++++++++++++++++++++++++ debian/patches/series | 0 debian/rules | 84 +++++ debian/source/format | 1 + debian/source/lintian-overrides | 0 debian/source/options | 2 + debian/watch | 8 + 12 files changed, 712 insertions(+), 15 deletions(-) create mode 100755 debian/build_deb.sh create mode 100644 debian/changelog create mode 100644 debian/compat create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/patches/series create mode 100755 debian/rules create mode 100644 debian/source/format create mode 100644 debian/source/lintian-overrides create mode 100644 debian/source/options create mode 100644 debian/watch diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f090055698c..e226945185a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -168,15 +168,8 @@ jobs: run: | mkdir src tar -C src -xf src.tar.gz - - name: Clone Debian packaging - uses: actions/checkout@v4 - with: - ref: deb - path: debian-tmp - - name: Integrate Debian packaging + - name: Create debian changelog run: | - mv debian-tmp/debian src - rm -rf debian-tmp pushd src echo -e "\ xemu (1:$(cat XEMU_VERSION)-0) unstable; urgency=medium\n\ @@ -420,15 +413,8 @@ jobs: run: | mkdir src tar -C src -xf src.tar.gz - - name: Clone Debian packaging - uses: actions/checkout@v4 - with: - ref: deb - path: debian-tmp - name: Integrate Debian packaging run: | - mv debian-tmp/debian src - rm -rf debian-tmp pushd src echo -e "\ xemu (1:$(cat XEMU_VERSION)-0) unstable; urgency=medium\n\ diff --git a/debian/build_deb.sh b/debian/build_deb.sh new file mode 100755 index 00000000000..575e5f6836d --- /dev/null +++ b/debian/build_deb.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +# Run from xemu root +set -e +set -x + +BUILD_DIR=/tmp/xemu-deb-build +XEMU_VERSION_TAG=0.0.0 +PKG_NAME=xemu_${XEMU_VERSION_TAG} + +# Remove previous build artifacts, create build dir +rm -rf $BUILD_DIR +mkdir -p $BUILD_DIR + +# Create source tarball +tar -czf $BUILD_DIR/${PKG_NAME}.orig.tar.gz --transform "s#^#${PKG_NAME}/#" . +pushd $BUILD_DIR + +# Build .deb +tar xf ${PKG_NAME}.orig.tar.gz +cd ${PKG_NAME} + +# Create a changelog with current version +echo -e "xemu (1:${XEMU_VERSION_TAG}-0) unstable; urgency=medium\n" > debian/changelog +echo -e " Built from $(git describe --match 'xemu-v*')\n" >> debian/changelog +echo " -- Matt Borgerson $(date -R)" >> debian/changelog + +# Place specific repo version in control file +echo -e " .\n This package was built from $(git describe --match 'xemu-v*') on $(date -R)\n" >> debian/control + +debuild --preserve-env -us -uc diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 00000000000..efffd334984 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,5 @@ +xemu (1:0.5.2-18-g12b58544b1-0) unstable; urgency=medium + + Built from 0.5.2-18-g12b58544b1 + + -- Matt Borgerson Tue, 25 May 2021 01:43:41 +0000 diff --git a/debian/compat b/debian/compat new file mode 100644 index 00000000000..b4de3947675 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +11 diff --git a/debian/control b/debian/control new file mode 100644 index 00000000000..91ed61433f4 --- /dev/null +++ b/debian/control @@ -0,0 +1,33 @@ +Source: xemu +Section: games +Priority: optional +Maintainer: Matt Borgerson +Build-Depends: debhelper (>= 11), + git, + python3:any, + python3-yaml, + ninja-build, + libgtk-3-dev, + libepoxy-dev, + libpixman-1-dev, + libsdl2-dev, + libsamplerate0-dev, + zlib1g-dev, + libssl-dev, + libpcap-dev, + libslirp-dev, +Standards-Version: 3.9.8 +Homepage: https://xemu.app +XS-Debian-Vcs-Browser: https://github.com/mborgerson/xemu +XS-Debian-Vcs-Git: https://github.com/mborgerson/xemu.git +Vcs-Browser: https://github.com/mborgerson/xemu +Vcs-Git: https://github.com/mborgerson/xemu.git + +Package: xemu +Architecture: amd64 arm arm64 armel armhf i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel mips64 mips64el powerpc powerpcspe ppc64 ppc64el riscv64 s390x sparc sparc64 x32 +Multi-Arch: foreign +Depends: ${shlibs:Depends}, ${misc:Depends} +Provides: xemu +Description: Original Xbox emulator + An open-source, cross-platform application that emulates the hardware of the + original Xbox game console. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 00000000000..ef46acb85e4 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,547 @@ +This package was debianized by Paul Russell on +Wed, 3 Mar 2004 02:18:54 +0100. + +Then maintained as part of the team by: + + Guilherme de S. Pastore + Elrond + Guillem Jover + +Now maintained as a team by: + + Aurelien Jarno + Michael Tokarev + Riku Voipio + Vagrant Cascadian + +The upstream source was downloaded from: + + git://git.qemu.org/qemu.git + + All the binary blobs without sources contained in the pc-bios/ directory + (*.dtb, *.bin, *rom, openbios-*, palcode-clipper) in the original upstream + git repository have been removed starting from Debian package version + 0.6.0.dfsg.1-1. Those roms which are free can be found in split packages + of their own, represented accordingly in the dependency relationships. + +Upstream Author: + + Fabrice Bellard + +Copyright: + + Copyright (C) 1982, 1986, 1988-1994 The Regents of the University of California + Copyright (C) 1986-2007 Free Software Foundation Inc. + Copyright (C) 1988-1992 Richard Outerbridge + Copyright (C) 1991-1992, 1996 Linus Torvalds + Copyright (C) 1992 Graven Imagery + Copyright (C) 1995 Danny Gasparovski + Copyright (C) 1996-1999 Eduardo Horvath + Copyright (C) 1996 Paul Mackerras + Copyright (C) 1997-1999, 2001, 2006-2009 Red Hat Inc. + Copyright (C) 1998-1999 Philip Blundell + Copyright (C) 1998-2001, 2003, 2006 Thomas Sailer + Copyright (C) 1998, 2003-2008 Fabrice Bellard + Copyright (C) 1998-2004 Samuel Rydh + Copyright (C) 1998 Kenneth Albanowski + Copyright (C) 1998 The Silver Hammer Group Ltd. + Copyright (C) 1999-2000, 2002-2003 Maxim Krasnyansky + Copyright (C) 1999-2000 Tatsuyuki Satoh + Copyright (C) 1999-2006, 2008 Intel Corporation + Copyright (C) 1999 AT&T Laboratories Cambridge + Copyright (C) 2000-2001 Qualcomm Incorporated + Copyright (C) 2000-2002, 2004-2009 Axis Communications AB. + Copyright (C) 2000-2003, 2005 Martin Schwidefsky + Copyright (C) 2000-2003 David McCullough + Copyright (C) 2000-2005 All Rights Reserved. + Copyright (C) 2000-2005 DENX Software Engineering + Copyright (C) 2000-2005 Silicon Graphics Inc. + Copyright (C) 2000-2005 Wolfgang Denk + Copyright (C) 2000-2007 Tibor "TS" Schütz + Copyright (C) 2001 OKTET Ltd. + Copyright (C) 2001 Xilinx Inc. + Copyright (C) 2002-2005 Vassili Karpov + Copyright (C) 2002-2006 Marcel Holtmann + Copyright (C) 2002 Greg Ungerer + Copyright (C) 2002 Paul Dale + Copyright (C) 2003-2004 James Yonan + Copyright (C) 2003-2007 Jocelyn Mayer + Copyright (C) 2003 Damion K. Wilson + Copyright (C) 2003 Thomas M. Ogrisegg + Copyright (C) 2004-2005 Johannes E. Schindelin + Copyright (C) 2004, 2007 Magnus Damm + Copyright (C) 2004 Antony T Curtis + Copyright (C) 2004 Gianni Tedesco + Copyright (C) 2004 Johannes Schindelin + Copyright (C) 2004 Makoto Suzuki + Copyright (C) 2005, 2007 Alex Beregszaszi + Copyright (C) 2005-2007 Anthony Liguori + Copyright (C) 2005-2008 Andrzej Zaborowski + Copyright (C) 2005-2009 Paul Brook + Copyright (C) 2005 Anthony Liguori + Copyright (C) 2005 Filip Navara + Copyright (C) 2005 International Business Machines Corp. + Copyright (C) 2005 LLC. Written + Copyright (C) 2005 Mike Kronenberg + Copyright (C) 2005 Samuel Tardieu + Copyright (C) 2006-2007, 2009 Aurelien Jarno + Copyright (C) 2006-2007, 2009 Stefan Weil + Copyright (C) 2006-2007 Thiemo Seufer + Copyright (C) 2006-2007 Thorsten Zitterell + Copyright (C) 2006-2008 Openedhand Ltd. + Copyright (C) 2006-2008 Qumranet Technologies + Copyright (C) 2006 Frederick Reeve + Copyright (C) 2006 Igor Kovalenko + Copyright (C) 2006 InnoTek Systemberatung GmbH + Copyright (C) 2006 Joachim Henke + Copyright (C) 2006 Lonnie Mendez + Copyright (C) 2006 Marius Groeger + Copyright (C) 2007-2008 Bull S.A.S. + Copyright (C) 2007-2008 IBM Corporation + Copyright (C) 2007-2008 Lauro Ramos Venancio + Copyright (C) 2007-2008 Nokia Corporation + Copyright (C) 2007-2008 OpenMoko Inc. + Copyright (C) 2007, 2009 Alexander Graf + Copyright (C) 2007-2009 Edgar E. Iglesias + Copyright (C) 2007-2009 Herve Poussineau + Copyright (C) 2007 Arastra Inc. + Copyright (C) 2007 Armin Kuster + Copyright (C) 2007 Dan Aloni + Copyright (C) 2007 Marko Kohtala + Copyright (C) 2007 MontaVista Software Inc. + Copyright (C) 2007 Robert Reif + Copyright (C) 2007 Vladimir Ananiev + Copyright (C) 2008-2009 Arnaud Patard + Copyright (C) 2008-2009 Citrix Systems Inc. + Copyright (C) 2008-2009 Gerd Hoffmann + Copyright (C) 2008 Dell MessageOne + Copyright (C) 2008 Dmitry Baryshkov + Copyright (C) 2008 Gleb Natapov + Copyright (C) 2008 Jean-Christophe PLAGNIOL-VILLARD + Copyright (C) 2008 Lubomir Rintel + Copyright (C) 2008 Max Krasnyansky + Copyright (C) 2008 Paul Mundt + Copyright (C) 2008 Samuel Thibault + Copyright (C) 2008 Shin-ichiro KAWASAKI + Copyright (C) 2008 Takashi YOSHII + Copyright (C) 2008 TJ + Copyright (C) 2009 CodeSourcery + Copyright (C) 2009 Freescale Semiconductor Inc. + Copyright (C) 2009 Hewlett-Packard Development Company + Copyright (C) 2009 Isaku Yamahata + Copyright (C) 2009 Kevin Wolf + Copyright (C) 2009 Laurent Vivier + Copyright (C) 2009 Michael S. Tsirkin + Copyright (C) 2009 Novell Inc. + Copyright (C) 2009 Ulrich Hecht + Copyright (C) 2009 VA Linux Systems Japan + + +License: + + QEMU as a whole is released under the GNU General Public License version 2. + On Debian systems, the complete text of the GNU General Public License + version 2 can be found in the file /usr/share/common-licenses/GPL-2. + + + Parts of QEMU have specific licenses which are compatible with the + GNU General Public License. Hence each source file contains its own + licensing information. + + + In particular, the QEMU virtual CPU core library (libqemu.a) is + released under the GNU Lesser General Public License version 2 or later. + On Debian systems, the complete text of the GNU Lesser General Public + License can be found in the file /usr/share/common-licenses/LGPL-2. + + + The BSD emulator is released under the following BSD license: + + 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. + + 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. + + + The slirp code is released under the following BSD license: + + 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. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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. + + + The TCG code and many hardware device emulation sources are released under the + following MIT license: + + 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. + + The QEMU Logo, pc-bios/qemu_logo*.svg, and also icons and pictures derived from + it, pc-bios/qemu-icon.bmp, pc-bios/qemu-nsis.*, are licensed under Creative + Commons Attribution license version 3.0 (CC-BY-3.0): + + Attribution 3.0 Unported + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR + DAMAGES RESULTING FROM ITS USE. + + License + + THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE + COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY + COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS + AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + + BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE + TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY + BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS + CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND + CONDITIONS. + + 1. Definitions + + a. "Adaptation" means a work based upon the Work, or upon the Work and + other pre-existing works, such as a translation, adaptation, + derivative work, arrangement of music or other alterations of a + literary or artistic work, or phonogram or performance and includes + cinematographic adaptations or any other form in which the Work may be + recast, transformed, or adapted including in any form recognizably + derived from the original, except that a work that constitutes a + Collection will not be considered an Adaptation for the purpose of + this License. For the avoidance of doubt, where the Work is a musical + work, performance or phonogram, the synchronization of the Work in + timed-relation with a moving image ("synching") will be considered an + Adaptation for the purpose of this License. + b. "Collection" means a collection of literary or artistic works, such as + encyclopedias and anthologies, or performances, phonograms or + broadcasts, or other works or subject matter other than works listed + in Section 1(f) below, which, by reason of the selection and + arrangement of their contents, constitute intellectual creations, in + which the Work is included in its entirety in unmodified form along + with one or more other contributions, each constituting separate and + independent works in themselves, which together are assembled into a + collective whole. A work that constitutes a Collection will not be + considered an Adaptation (as defined above) for the purposes of this + License. + c. "Distribute" means to make available to the public the original and + copies of the Work or Adaptation, as appropriate, through sale or + other transfer of ownership. + d. "Licensor" means the individual, individuals, entity or entities that + offer(s) the Work under the terms of this License. + e. "Original Author" means, in the case of a literary or artistic work, + the individual, individuals, entity or entities who created the Work + or if no individual or entity can be identified, the publisher; and in + addition (i) in the case of a performance the actors, singers, + musicians, dancers, and other persons who act, sing, deliver, declaim, + play in, interpret or otherwise perform literary or artistic works or + expressions of folklore; (ii) in the case of a phonogram the producer + being the person or legal entity who first fixes the sounds of a + performance or other sounds; and, (iii) in the case of broadcasts, the + organization that transmits the broadcast. + f. "Work" means the literary and/or artistic work offered under the terms + of this License including without limitation any production in the + literary, scientific and artistic domain, whatever may be the mode or + form of its expression including digital form, such as a book, + pamphlet and other writing; a lecture, address, sermon or other work + of the same nature; a dramatic or dramatico-musical work; a + choreographic work or entertainment in dumb show; a musical + composition with or without words; a cinematographic work to which are + assimilated works expressed by a process analogous to cinematography; + a work of drawing, painting, architecture, sculpture, engraving or + lithography; a photographic work to which are assimilated works + expressed by a process analogous to photography; a work of applied + art; an illustration, map, plan, sketch or three-dimensional work + relative to geography, topography, architecture or science; a + performance; a broadcast; a phonogram; a compilation of data to the + extent it is protected as a copyrightable work; or a work performed by + a variety or circus performer to the extent it is not otherwise + considered a literary or artistic work. + g. "You" means an individual or entity exercising rights under this + License who has not previously violated the terms of this License with + respect to the Work, or who has received express permission from the + Licensor to exercise rights under this License despite a previous + violation. + h. "Publicly Perform" means to perform public recitations of the Work and + to communicate to the public those public recitations, by any means or + process, including by wire or wireless means or public digital + performances; to make available to the public Works in such a way that + members of the public may access these Works from a place and at a + place individually chosen by them; to perform the Work to the public + by any means or process and the communication to the public of the + performances of the Work, including by public digital performance; to + broadcast and rebroadcast the Work by any means including signs, + sounds or images. + i. "Reproduce" means to make copies of the Work by any means including + without limitation by sound or visual recordings and the right of + fixation and reproducing fixations of the Work, including storage of a + protected performance or phonogram in digital form or other electronic + medium. + + 2. Fair Dealing Rights. Nothing in this License is intended to reduce, + limit, or restrict any uses free from copyright or rights arising from + limitations or exceptions that are provided for in connection with the + copyright protection under copyright law or other applicable laws. + + 3. License Grant. Subject to the terms and conditions of this License, + Licensor hereby grants You a worldwide, royalty-free, non-exclusive, + perpetual (for the duration of the applicable copyright) license to + exercise the rights in the Work as stated below: + + a. to Reproduce the Work, to incorporate the Work into one or more + Collections, and to Reproduce the Work as incorporated in the + Collections; + b. to create and Reproduce Adaptations provided that any such Adaptation, + including any translation in any medium, takes reasonable steps to + clearly label, demarcate or otherwise identify that changes were made + to the original Work. For example, a translation could be marked "The + original work was translated from English to Spanish," or a + modification could indicate "The original work has been modified."; + c. to Distribute and Publicly Perform the Work including as incorporated + in Collections; and, + d. to Distribute and Publicly Perform Adaptations. + e. For the avoidance of doubt: + + i. Non-waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme cannot be waived, the Licensor + reserves the exclusive right to collect such royalties for any + exercise by You of the rights granted under this License; + ii. Waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme can be waived, the Licensor waives the + exclusive right to collect such royalties for any exercise by You + of the rights granted under this License; and, + iii. Voluntary License Schemes. The Licensor waives the right to + collect royalties, whether individually or, in the event that the + Licensor is a member of a collecting society that administers + voluntary licensing schemes, via that society, from any exercise + by You of the rights granted under this License. + + The above rights may be exercised in all media and formats whether now + known or hereafter devised. The above rights include the right to make + such modifications as are technically necessary to exercise the rights in + other media and formats. Subject to Section 8(f), all rights not expressly + granted by Licensor are hereby reserved. + + 4. Restrictions. The license granted in Section 3 above is expressly made + subject to and limited by the following restrictions: + + a. You may Distribute or Publicly Perform the Work only under the terms + of this License. You must include a copy of, or the Uniform Resource + Identifier (URI) for, this License with every copy of the Work You + Distribute or Publicly Perform. You may not offer or impose any terms + on the Work that restrict the terms of this License or the ability of + the recipient of the Work to exercise the rights granted to that + recipient under the terms of the License. You may not sublicense the + Work. You must keep intact all notices that refer to this License and + to the disclaimer of warranties with every copy of the Work You + Distribute or Publicly Perform. When You Distribute or Publicly + Perform the Work, You may not impose any effective technological + measures on the Work that restrict the ability of a recipient of the + Work from You to exercise the rights granted to that recipient under + the terms of the License. This Section 4(a) applies to the Work as + incorporated in a Collection, but this does not require the Collection + apart from the Work itself to be made subject to the terms of this + License. If You create a Collection, upon notice from any Licensor You + must, to the extent practicable, remove from the Collection any credit + as required by Section 4(b), as requested. If You create an + Adaptation, upon notice from any Licensor You must, to the extent + practicable, remove from the Adaptation any credit as required by + Section 4(b), as requested. + b. If You Distribute, or Publicly Perform the Work or any Adaptations or + Collections, You must, unless a request has been made pursuant to + Section 4(a), keep intact all copyright notices for the Work and + provide, reasonable to the medium or means You are utilizing: (i) the + name of the Original Author (or pseudonym, if applicable) if supplied, + and/or if the Original Author and/or Licensor designate another party + or parties (e.g., a sponsor institute, publishing entity, journal) for + attribution ("Attribution Parties") in Licensor's copyright notice, + terms of service or by other reasonable means, the name of such party + or parties; (ii) the title of the Work if supplied; (iii) to the + extent reasonably practicable, the URI, if any, that Licensor + specifies to be associated with the Work, unless such URI does not + refer to the copyright notice or licensing information for the Work; + and (iv) , consistent with Section 3(b), in the case of an Adaptation, + a credit identifying the use of the Work in the Adaptation (e.g., + "French translation of the Work by Original Author," or "Screenplay + based on original Work by Original Author"). The credit required by + this Section 4 (b) may be implemented in any reasonable manner; + provided, however, that in the case of a Adaptation or Collection, at + a minimum such credit will appear, if a credit for all contributing + authors of the Adaptation or Collection appears, then as part of these + credits and in a manner at least as prominent as the credits for the + other contributing authors. For the avoidance of doubt, You may only + use the credit required by this Section for the purpose of attribution + in the manner set out above and, by exercising Your rights under this + License, You may not implicitly or explicitly assert or imply any + connection with, sponsorship or endorsement by the Original Author, + Licensor and/or Attribution Parties, as appropriate, of You or Your + use of the Work, without the separate, express prior written + permission of the Original Author, Licensor and/or Attribution + Parties. + c. Except as otherwise agreed in writing by the Licensor or as may be + otherwise permitted by applicable law, if You Reproduce, Distribute or + Publicly Perform the Work either by itself or as part of any + Adaptations or Collections, You must not distort, mutilate, modify or + take other derogatory action in relation to the Work which would be + prejudicial to the Original Author's honor or reputation. Licensor + agrees that in those jurisdictions (e.g. Japan), in which any exercise + of the right granted in Section 3(b) of this License (the right to + make Adaptations) would be deemed to be a distortion, mutilation, + modification or other derogatory action prejudicial to the Original + Author's honor and reputation, the Licensor will waive or not assert, + as appropriate, this Section, to the fullest extent permitted by the + applicable national law, to enable You to reasonably exercise Your + right under Section 3(b) of this License (right to make Adaptations) + but not otherwise. + + 5. Representations, Warranties and Disclaimer + + UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR + OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY + KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, + INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, + FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF + LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, + WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION + OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + + 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE + LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR + ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES + ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS + BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + 7. Termination + + a. This License and the rights granted hereunder will terminate + automatically upon any breach by You of the terms of this License. + Individuals or entities who have received Adaptations or Collections + from You under this License, however, will not have their licenses + terminated provided such individuals or entities remain in full + compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will + survive any termination of this License. + b. Subject to the above terms and conditions, the license granted here is + perpetual (for the duration of the applicable copyright in the Work). + Notwithstanding the above, Licensor reserves the right to release the + Work under different license terms or to stop distributing the Work at + any time; provided, however that any such election will not serve to + withdraw this License (or any other license that has been, or is + required to be, granted under the terms of this License), and this + License will continue in full force and effect unless terminated as + stated above. + + 8. Miscellaneous + + a. Each time You Distribute or Publicly Perform the Work or a Collection, + the Licensor offers to the recipient a license to the Work on the same + terms and conditions as the license granted to You under this License. + b. Each time You Distribute or Publicly Perform an Adaptation, Licensor + offers to the recipient a license to the original Work on the same + terms and conditions as the license granted to You under this License. + c. If any provision of this License is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this License, and without further action + by the parties to this agreement, such provision shall be reformed to + the minimum extent necessary to make such provision valid and + enforceable. + d. No term or provision of this License shall be deemed waived and no + breach consented to unless such waiver or consent shall be in writing + and signed by the party to be charged with such waiver or consent. + e. This License constitutes the entire agreement between the parties with + respect to the Work licensed here. There are no understandings, + agreements or representations with respect to the Work not specified + here. Licensor shall not be bound by any additional provisions that + may appear in any communication from You. This License may not be + modified without the mutual written agreement of the Licensor and You. + f. The rights granted under, and the subject matter referenced, in this + License were drafted utilizing the terminology of the Berne Convention + for the Protection of Literary and Artistic Works (as amended on + September 28, 1979), the Rome Convention of 1961, the WIPO Copyright + Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 + and the Universal Copyright Convention (as revised on July 24, 1971). + These rights and subject matter take effect in the relevant + jurisdiction in which the License terms are sought to be enforced + according to the corresponding provisions of the implementation of + those treaty provisions in the applicable national law. If the + standard suite of rights granted under applicable copyright law + includes additional rights not granted under this License, such + additional rights are deemed to be included in the License; this + License is not intended to restrict the license of any rights under + applicable law. + + + Creative Commons Notice + + Creative Commons is not a party to this License, and makes no warranty + whatsoever in connection with the Work. Creative Commons will not be + liable to You or any party on any legal theory for any damages + whatsoever, including without limitation any general, special, + incidental or consequential damages arising in connection to this + license. Notwithstanding the foregoing two (2) sentences, if Creative + Commons has expressly identified itself as the Licensor hereunder, it + shall have all rights and obligations of Licensor. + + Except for the limited purpose of indicating to the public that the + Work is licensed under the CCPL, Creative Commons does not authorize + the use by either party of the trademark "Creative Commons" or any + related trademark or logo of Creative Commons without the prior + written consent of Creative Commons. Any permitted use will be in + compliance with Creative Commons' then-current trademark usage + guidelines, as may be published on its website or otherwise made + available upon request from time to time. For the avoidance of doubt, + this trademark restriction does not form part of this License. + + Creative Commons may be contacted at https://creativecommons.org/. diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 00000000000..e69de29bb2d diff --git a/debian/rules b/debian/rules new file mode 100755 index 00000000000..25a0f7b9d08 --- /dev/null +++ b/debian/rules @@ -0,0 +1,84 @@ +#!/usr/bin/make -f +SHELL = /bin/sh -e + +# in order to keep output non-intermixed together, disable parallel building +# of different targets in this d/rules but allow running parallel submakes +.NOTPARALLEL: + +# get DEB_VERSION +include /usr/share/dpkg/pkg-info.mk +# get DEB_HOST_ARCH DEB_HOST_ARCH_OS DEB_HOST_GNU_TYPE DEB_HOST_MULTIARCH DEB_BUILD_GNU_TYPE +include /usr/share/dpkg/architecture.mk +# get CFLAGS LDFLAGS etc +include /usr/share/dpkg/buildflags.mk + +libdir = /usr/lib/${DEB_HOST_MULTIARCH} + +ifeq ($(shell dpkg-vendor --derives-from Ubuntu && echo yes),yes) +VENDOR := UBUNTU +DEB_BUILD_PARALLEL = yes +else +VENDOR := DEBIAN +endif + +# support parallel build using DEB_BUILD_OPTIONS=parallel=N +ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) + MAKEFLAGS += -j$(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) +endif + +# verbose build +V ?= 1 + +sysdatadir = debian/xemu/usr/share/xemu + +# we add another set of configure options from debian/control +common_configure_opts = \ + --with-pkgversion="Debian $(DEB_VERSION)" \ + --extra-cflags="$(CFLAGS) $(CPPFLAGS)" --extra-ldflags="$(LDFLAGS) -Wl,--as-needed" \ + --localstatedir=/var + +# Cross compiling support +ifneq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE)) +common_configure_opts += --cross-prefix=$(DEB_HOST_GNU_TYPE)- +endif + +ifneq ($(filter $(DEB_HOST_ARCH),i386 x32),) +# XXX as of 2020-04-29, i386 buildd fails to link -static-pie executable: +# /usr/bin/ld: /usr/lib/i386-linux-gnu/libc.a(memset_chk-nonshared.o): +# unsupported non-PIC call to IFUNC `memset' +# so disable PIE for qemu-user-static build on i386 for now. +# On x32 -static-pie fails in different way. +# On amd64 -static-pie appears to work fine. +# On other architectures qemu correctly detect that -static-pie is not available +XXXstaticpie = --disable-pie +else +XXXstaticpie = +endif + + +%: + dh $@ + +override_dh_auto_configure: + +override_dh_auto_build: + ./build.sh ${XEMU_BUILD_OPTIONS} ${common_configure_opts} || \ + { echo ===== BUILD FAILED ===; tail -n 50 config.log; exit 1; } + cp debian/copyright debian/qemu.deb.copyright + cp dist/LICENSE.txt debian/copyright + +override_dh_auto_test: + +override_dh_auto_install: + # mkdir -p $(sysdatadir) + # cp -r dist/data $(sysdatadir) + install -DT debian/qemu.deb.copyright debian/xemu/usr/share/doc/xemu/qemu.deb.copyright + install -DTm 0755 dist/xemu debian/xemu/usr/bin/xemu + install -DT ui/xemu.desktop debian/xemu/usr/share/applications/xemu.desktop + install -DT ui/icons/xemu_16x16.png debian/xemu/usr/share/icons/hicolor/16x16/apps/xemu.png + install -DT ui/icons/xemu_24x24.png debian/xemu/usr/share/icons/hicolor/24x24/apps/xemu.png + install -DT ui/icons/xemu_32x32.png debian/xemu/usr/share/icons/hicolor/32x32/apps/xemu.png + install -DT ui/icons/xemu_48x48.png debian/xemu/usr/share/icons/hicolor/48x48/apps/xemu.png + install -DT ui/icons/xemu_256x256.png debian/xemu/usr/share/icons/hicolor/256x256/apps/xemu.png + install -DT ui/icons/xemu_512x512.png debian/xemu/usr/share/icons/hicolor/512x512/apps/xemu.png + install -DT ui/icons/xemu.svg debian/xemu/usr/share/icons/hicolor/scalable/apps/xemu.svg diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 00000000000..163aaf8d82b --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/debian/source/lintian-overrides b/debian/source/lintian-overrides new file mode 100644 index 00000000000..e69de29bb2d diff --git a/debian/source/options b/debian/source/options new file mode 100644 index 00000000000..73dacf510cf --- /dev/null +++ b/debian/source/options @@ -0,0 +1,2 @@ +# ignore sources which are in submodules in upstream git +extend-diff-ignore ^capstone/|^dtc/|^slirp/|^roms/.*/ diff --git a/debian/watch b/debian/watch new file mode 100644 index 00000000000..1a627d8680a --- /dev/null +++ b/debian/watch @@ -0,0 +1,8 @@ +version=4 + +opts=\ +dversionmangle=auto,\ +repacksuffix=+dfsg,\ +uversionmangle=s/-rc/~rc/;s/(\d+)\.(\d+)\.(\d+)/$1.$2/g,\ +compression=xz \ + https://download.qemu.org/ qemu-@ANY_VERSION@@ARCHIVE_EXT@ \ No newline at end of file From c6bad867390403f87334d3cc73c8a407a92d400b Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Sun, 21 Jul 2024 15:25:02 -0700 Subject: [PATCH 21/22] win64-cross: Add vulkan-headers, spirv-{headers,tools}, glslang --- ubuntu-win64-cross/Dockerfile | 13 +++++++++++++ ubuntu-win64-cross/glslang.mk | 25 +++++++++++++++++++++++++ ubuntu-win64-cross/spirv-headers.mk | 16 ++++++++++++++++ ubuntu-win64-cross/spirv-tools.mk | 27 +++++++++++++++++++++++++++ ubuntu-win64-cross/vulkan-headers.mk | 16 ++++++++++++++++ 5 files changed, 97 insertions(+) create mode 100644 ubuntu-win64-cross/glslang.mk create mode 100644 ubuntu-win64-cross/spirv-headers.mk create mode 100644 ubuntu-win64-cross/spirv-tools.mk create mode 100644 ubuntu-win64-cross/vulkan-headers.mk diff --git a/ubuntu-win64-cross/Dockerfile b/ubuntu-win64-cross/Dockerfile index ba71d05386e..5f71cde7b45 100644 --- a/ubuntu-win64-cross/Dockerfile +++ b/ubuntu-win64-cross/Dockerfile @@ -72,6 +72,19 @@ RUN V=1 MXE_VERBOSE=1 make -C /opt/mxe \ MXE_PLUGIN_DIRS=plugins/gcc13 \ sdl2 +COPY vulkan-headers.mk \ + spirv-headers.mk \ + spirv-tools.mk \ + glslang.mk \ + /opt/mxe/src/ +RUN V=1 MXE_VERBOSE=1 make -C /opt/mxe \ + MXE_TARGETS=x86_64-w64-mingw32.static \ + MXE_PLUGIN_DIRS=plugins/gcc13 \ + vulkan-headers \ + spirv-headers \ + spirv-tools \ + glslang + RUN find /opt/mxe/usr -executable -type f -exec chmod a+x {} \; ENV CROSSPREFIX=x86_64-w64-mingw32.static- diff --git a/ubuntu-win64-cross/glslang.mk b/ubuntu-win64-cross/glslang.mk new file mode 100644 index 00000000000..3df28246220 --- /dev/null +++ b/ubuntu-win64-cross/glslang.mk @@ -0,0 +1,25 @@ +PKG := glslang +$(PKG)_WEBSITE := https://github.com/KhronosGroup/glslang +$(PKG)_DESCR := glslang +$(PKG)_IGNORE := +$(PKG)_VERSION := 14.3.0 +$(PKG)_SUBDIR := glslang-$($(PKG)_VERSION) +$(PKG)_FILE := glslang-$($(PKG)_VERSION).tar.gz +$(PKG)_CHECKSUM := be6339048e20280938d9cb399fcdd06e04f8654d43e170e8cce5a56c9a754284 +$(PKG)_URL := https://github.com/KhronosGroup/glslang/archive/refs/tags/$($(PKG)_VERSION).tar.gz +$(PKG)_DEPS := cc spirv-tools + +define $(PKG)_BUILD + $(TARGET)-cmake -B'$(BUILD_DIR)' -S'$(SOURCE_DIR)' \ + -G"Ninja" \ + -DBUILD_SHARED_LIBS=$(CMAKE_SHARED_BOOL) \ + -DENABLE_GLSLANG_BINARIES=OFF \ + -DGLSLANG_TESTS=OFF \ + -DBUILD_EXTERNAL=OFF \ + -DALLOW_EXTERNAL_SPIRV_TOOLS=ON \ + -DVERBOSE=1 + $(TARGET)-cmake --build '$(BUILD_DIR)' + $(TARGET)-cmake --install '$(BUILD_DIR)' +endef + +# FIXME: Shared libs diff --git a/ubuntu-win64-cross/spirv-headers.mk b/ubuntu-win64-cross/spirv-headers.mk new file mode 100644 index 00000000000..966540762f4 --- /dev/null +++ b/ubuntu-win64-cross/spirv-headers.mk @@ -0,0 +1,16 @@ +PKG := spirv-headers +$(PKG)_WEBSITE := https://github.com/KhronosGroup/SPIRV-Headers +$(PKG)_DESCR := SPIRV-Headers +$(PKG)_IGNORE := +$(PKG)_VERSION := vulkan-sdk-1.3.283.0 +$(PKG)_SUBDIR := SPIRV-Headers-$($(PKG)_VERSION) +$(PKG)_FILE := spirv-headers-$($(PKG)_VERSION).tar.gz +$(PKG)_CHECKSUM := a68a25996268841073c01514df7bab8f64e2db1945944b45087e5c40eed12cb9 +$(PKG)_URL := https://github.com/KhronosGroup/SPIRV-Headers/archive/refs/tags/$($(PKG)_VERSION).tar.gz +$(PKG)_DEPS := cc + +define $(PKG)_BUILD + $(TARGET)-cmake -B'$(BUILD_DIR)' -S'$(SOURCE_DIR)' + $(TARGET)-cmake --build '$(BUILD_DIR)' + $(TARGET)-cmake --install '$(BUILD_DIR)' +endef diff --git a/ubuntu-win64-cross/spirv-tools.mk b/ubuntu-win64-cross/spirv-tools.mk new file mode 100644 index 00000000000..c19c251fcba --- /dev/null +++ b/ubuntu-win64-cross/spirv-tools.mk @@ -0,0 +1,27 @@ +PKG := spirv-tools +$(PKG)_WEBSITE := https://github.com/KhronosGroup/SPIRV-Tools +$(PKG)_DESCR := SPIRV-Tools +$(PKG)_IGNORE := +$(PKG)_VERSION := vulkan-sdk-1.3.283.0 +$(PKG)_SUBDIR := SPIRV-Tools-$($(PKG)_VERSION) +$(PKG)_FILE := spirv-tools-$($(PKG)_VERSION).tar.gz +$(PKG)_CHECKSUM := 5e2e5158bdd7442f9e01e13b5b33417b06cddff4965c9c19aab9763ab3603aae +$(PKG)_URL := https://github.com/KhronosGroup/SPIRV-Tools/archive/refs/tags/$($(PKG)_VERSION).tar.gz +$(PKG)_DEPS := cc spirv-headers + +define $(PKG)_BUILD + $(TARGET)-cmake -B'$(BUILD_DIR)' -S'$(SOURCE_DIR)' \ + -G"Ninja" \ + -DBUILD_SHARED_LIBS=$(CMAKE_SHARED_BOOL) \ + -DSPIRV-Headers_SOURCE_DIR=$(PREFIX)/$(TARGET) \ + -DSPIRV_WERROR=OFF \ + -DBUILD_SHARED_LIBS=OFF \ + -DSPIRV_TOOLS_BUILD_STATIC=ON \ + -DSPIRV_SKIP_EXECUTABLES=ON \ + -DSPIRV_SKIP_TESTS=ON \ + -DVERBOSE=1 + $(TARGET)-cmake --build '$(BUILD_DIR)' + $(TARGET)-cmake --install '$(BUILD_DIR)' +endef + +# FIXME: Shared libs diff --git a/ubuntu-win64-cross/vulkan-headers.mk b/ubuntu-win64-cross/vulkan-headers.mk new file mode 100644 index 00000000000..9cb88ac45c0 --- /dev/null +++ b/ubuntu-win64-cross/vulkan-headers.mk @@ -0,0 +1,16 @@ +PKG := vulkan-headers +$(PKG)_WEBSITE := https://github.com/KhronosGroup/Vulkan-Headers +$(PKG)_DESCR := Vulkan-Headers +$(PKG)_IGNORE := +$(PKG)_VERSION := vulkan-sdk-1.3.283.0 +$(PKG)_SUBDIR := Vulkan-Headers-$($(PKG)_VERSION) +$(PKG)_FILE := vulkan-headers-$($(PKG)_VERSION).tar.gz +$(PKG)_CHECKSUM := cf54a812911b4e3e4ff15716c222a8fb9a87c2771c0b86060cb0ca2570ea55a9 +$(PKG)_URL := https://github.com/KhronosGroup/Vulkan-Headers/archive/refs/tags/$($(PKG)_VERSION).tar.gz +$(PKG)_DEPS := cc + +define $(PKG)_BUILD + $(TARGET)-cmake -B'$(BUILD_DIR)' -S'$(SOURCE_DIR)' + $(TARGET)-cmake --build '$(BUILD_DIR)' + $(TARGET)-cmake --install '$(BUILD_DIR)' +endef From a8d8ef5484686ab53e67ae10363747eec7eb6729 Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Mon, 22 Jul 2024 23:32:51 -0700 Subject: [PATCH 22/22] nv2a: Drop unused ShaderState field material_alpha --- hw/xbox/nv2a/pgraph.c | 1 - hw/xbox/nv2a/shaders.h | 2 -- 2 files changed, 3 deletions(-) diff --git a/hw/xbox/nv2a/pgraph.c b/hw/xbox/nv2a/pgraph.c index fbf58fce9ad..0127371df2b 100644 --- a/hw/xbox/nv2a/pgraph.c +++ b/hw/xbox/nv2a/pgraph.c @@ -4471,7 +4471,6 @@ static void pgraph_bind_shaders(PGRAPHState *pg) state.ambient_src = (enum MaterialColorSource)GET_MASK(pg->regs[NV_PGRAPH_CSV0_C], NV_PGRAPH_CSV0_C_AMBIENT); state.diffuse_src = (enum MaterialColorSource)GET_MASK(pg->regs[NV_PGRAPH_CSV0_C], NV_PGRAPH_CSV0_C_DIFFUSE); state.specular_src = (enum MaterialColorSource)GET_MASK(pg->regs[NV_PGRAPH_CSV0_C], NV_PGRAPH_CSV0_C_SPECULAR); - state.material_alpha = pg->material_alpha; } /* vertex program stuff */ diff --git a/hw/xbox/nv2a/shaders.h b/hw/xbox/nv2a/shaders.h index e58e37e2eaa..0362da10993 100644 --- a/hw/xbox/nv2a/shaders.h +++ b/hw/xbox/nv2a/shaders.h @@ -78,8 +78,6 @@ typedef struct ShaderState { enum MaterialColorSource diffuse_src; enum MaterialColorSource specular_src; - float material_alpha; - bool lighting; enum VshLight light[NV2A_MAX_LIGHTS];