diff --git a/build/commands/build.ts b/build/commands/build.ts index ced052a965..fd51b7c496 100644 --- a/build/commands/build.ts +++ b/build/commands/build.ts @@ -3,7 +3,7 @@ import { readFileSync, writeFileSync } from "fs"; import { resolve } from "path"; import { bin_name, log } from ".."; import { - BUILD_TARGETS, + ARCHITECTURE, BUILD_TARGETS, CONFIGS_DIR, SRC_DIR } from "../constants"; @@ -15,16 +15,19 @@ const platform: any = { linux: "linux" }; -const applyConfig = (os: string) => { +const applyConfig = (os: string, arch: string) => { log.info("Applying mozconfig..."); + const commonConfig = readFileSync( resolve(CONFIGS_DIR, "common", "mozconfig"), "utf-8" ); + const osConfig = readFileSync( - resolve(CONFIGS_DIR, os, "mozconfig"), + resolve(CONFIGS_DIR, os, arch === 'i686' ? "mozconfig-i686" : 'mozconfig'), "utf-8" ); + const mergedConfig = `# This file is automatically generated. You should only modify this if you know what you are doing!\n\n${commonConfig}\n\n${osConfig}`; writeFileSync( @@ -137,12 +140,18 @@ const success = (date: number) => { ); }; -export const build = async (os: string) => { +interface Options { + arch: string +} + +export const build = async (os: string, options: Options) => { let d = Date.now(); if (os) { // Docker build + let arch = '64bit' + if (!BUILD_TARGETS.includes(os)) return log.error( `We do not support "${os}" builds right now.\nWe only currently support ${JSON.stringify( @@ -150,7 +159,18 @@ export const build = async (os: string) => { )}.` ); - applyConfig(os); + if (options.arch) { + if (!ARCHITECTURE.includes(options.arch)) + return log.error( + `We do not support "${options.arch}" build right now.\nWe only currently support ${JSON.stringify( + ARCHITECTURE + )}.` + ) + else + arch = options.arch + } + + applyConfig(os, options.arch); setTimeout(async () => { await dockerBuild(os).then((_) => success(d)); @@ -162,7 +182,20 @@ export const build = async (os: string) => { platform[process.platform as any]; if (BUILD_TARGETS.includes(prettyHost)) { - applyConfig(prettyHost); + let arch = '64bit' + + if (options.arch) { + if (!ARCHITECTURE.includes(options.arch)) + return log.error( + `We do not support "${options.arch}" build right now.\nWe only currently support ${JSON.stringify( + ARCHITECTURE + )}.` + ) + else + arch = options.arch + } + + applyConfig(prettyHost, options.arch); setTimeout(async () => { await genericBuild(prettyHost).then((_) => diff --git a/build/constants/index.ts b/build/constants/index.ts index fb425daf19..a0259f5445 100644 --- a/build/constants/index.ts +++ b/build/constants/index.ts @@ -7,6 +7,11 @@ export const BUILD_TARGETS = [ "macos" ]; +export const ARCHITECTURE = [ + 'i686', + 'x86_64' +] + export const PATCH_ARGS = [ "--ignore-space-change", "--ignore-whitespace", diff --git a/build/index.ts b/build/index.ts index 8c376d5b08..6c00eb3adb 100644 --- a/build/index.ts +++ b/build/index.ts @@ -55,6 +55,7 @@ program program .command("build [os]") + .option('--a, --arch ', 'Specify architecture for build') .description( "Build Dot Browser. Specify the OS param for cross-platform builds." ) diff --git a/configs/linux/mozconfig-i686 b/configs/linux/mozconfig-i686 new file mode 100644 index 0000000000..2a327347b5 --- /dev/null +++ b/configs/linux/mozconfig-i686 @@ -0,0 +1,16 @@ +# Optimise builds +ac_add_options --enable-application=browser +ac_add_options --enable-hardening +ac_add_options --enable-rust-simd +ac_add_options --enable-release +ac_add_options --enable-optimize +ac_add_options --with-ccache=sccache +ac_add_options --disable-debug +ac_add_options --enable-updater + +# Disable telemetry and tracking +mk_add_options MOZ_TELEMETRY_REPORTING= +mk_add_options MOZ_DATA_REPORTING= + +# Support 32-bit builds +ac_add_options --target=i686 diff --git a/configs/macos/mozconfig-i686 b/configs/macos/mozconfig-i686 new file mode 100644 index 0000000000..759e8f4efc --- /dev/null +++ b/configs/macos/mozconfig-i686 @@ -0,0 +1,17 @@ +# Optimise builds +ac_add_options --enable-application=browser +ac_add_options --enable-hardening +ac_add_options --enable-rust-simd +ac_add_options --enable-release +ac_add_options --enable-optimize +ac_add_options --with-ccache=sccache +ac_add_options --disable-debug +ac_add_options --enable-updater +mk_add_options MOZ_MAKE_FLAGS="-j4" + +# Disable telemetry and tracking +mk_add_options MOZ_TELEMETRY_REPORTING= +mk_add_options MOZ_DATA_REPORTING= + +# Support 32-bit builds +ac_add_options --target=i686 diff --git a/configs/windows/mozconfig-i686 b/configs/windows/mozconfig-i686 new file mode 100644 index 0000000000..2a327347b5 --- /dev/null +++ b/configs/windows/mozconfig-i686 @@ -0,0 +1,16 @@ +# Optimise builds +ac_add_options --enable-application=browser +ac_add_options --enable-hardening +ac_add_options --enable-rust-simd +ac_add_options --enable-release +ac_add_options --enable-optimize +ac_add_options --with-ccache=sccache +ac_add_options --disable-debug +ac_add_options --enable-updater + +# Disable telemetry and tracking +mk_add_options MOZ_TELEMETRY_REPORTING= +mk_add_options MOZ_DATA_REPORTING= + +# Support 32-bit builds +ac_add_options --target=i686