אוטומציה של תהליך הבנייה וההרצה

עמוד

ברוכים הבאים לאתר תחרויות קודגורו! פורומים אקסטרים אוטומציה של תהליך הבנייה וההרצה

מוצגות 3 תגובות – 1 עד 3 (מתוך 3 סה״כ)
  • מאת
    תגובות
  • #83111
    tomer
    משתתף

    היי

    ברצוני לבנות כמה כלים לאוטומציה של תהליך הבנייה של השורדים והרצתם. אשמח לעזרה והמלצות מבעלי נסיון. יש לכם המלצות?

    ושאלה ספציפית: כיצד אפשר להריץ את מנוע המשחק ושהוא יוציא את ה csv רק בצורה שקטה, בלי ה GUI מ cmd או סקריפט? והאם קיימות אפשרויות כמו הרצת רק משחקים בהם נמצא השורד שלי?

    תודה רבה!
    אם יהיה ביקוש אשמח לשתף את הכלים כשיהיו מוכנים למרות שאני לא מתחייב שהם יהיו במצב סטנדרטי נוח.

    • הדיון הזה עודכן לפני 9 שנים, חודש 1 ע״יtomer.
    #83113
    Idan Dor
    משתתף

    לגבי הרצה שקטה והרצה רק עם השורד שלך – אני ויואב אחרי קודגורו 9 הכנו לעצמנו דיבאגר חדש שבין השאר יש בו את שתי הדברים האלו. אנחנו מתכננים לשחרר אותו אחרי שנשתתף התחרות הקרובה בנוסף לכלים נוספים שהכנו בשנה האחרונה. אין את האופציות האלו במנוע ואם אתה רוצה אותם אתה תאלץ לכתוב אותם בעזרת הקוד הפתוח של המנוע שנמצא פה:
    https://github.com/codeguru-il/corewars8086

    בהצלחה.

    #83117
    yoavsr
    משתתף

    אתה יכול להשתמש בסקריפט הזה בשביל בנייה אוטומטית
    https://gist.github.com/yoavst/68e4042aba897604af50

    package com.yoavst.autocompile;
     
    import javax.swing.*;
    import java.io.File;
    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    import java.nio.file.StandardCopyOption;
    import java.util.ArrayList;
     
    public class AutoCompile {
        public static boolean USE_DOSBOX = System.getProperty("sun.arch.data.model").contains("64");
        public static void main(String[] args) throws IOException {
            File[] warriorFiles = new File("work").listFiles();
            assert warriorFiles != null;
            ArrayList<File> files = new ArrayList<File>(warriorFiles.length);
            for (File file : warriorFiles) {
                if (getFileExtension(file).equalsIgnoreCase(".asm")) {
                    files.add(file);
                }
            }
            if (files.size() > 0) {
                // User need to have dosbox in path
                String currentPath = new File(".").getAbsolutePath();
                for (File asm : files) {
                    String name = stripExtension(asm.getName());
                    // FIXME use USE_DOSBOX
                    Process command = Runtime.getRuntime().exec("dosbox -noconsole " +
                            "-c \"mount g: " + currentPath + "\" " +
                            "-c \"g:\" " +
                            "-c \"copy work\\" + name + ".asm asm\\" + name + ".asm\" " +
                            "-c \"cd asm\" " +
                            "-c \"tasm -zi " + name + ".asm\" " +
                            "-c \"tlink /t " + name + ".obj\" " +
                            "-c \"del " + name + ".obj\" " +
                            "-c \"del " + name + ".map\" " +
                            "-c \"del " + name + ".asm\" " +
                            "-c \"exit\"\n");
                    try {
                        command.waitFor();
                    } catch (InterruptedException e) {
                        JOptionPane.showMessageDialog(null,
                                "Error - cant compile asm file " + asm.getName());
                        System.exit(1);
                    }
                    File compiledFile = new File("asm", name + ".com");
                    if (!compiledFile.exists()) {
                        JOptionPane.showMessageDialog(null,
                                "Error - cant compile asm file " + asm.getName());
                        System.exit(1);
                    } else {
                        Files.move(Paths.get(compiledFile.getAbsolutePath()), Paths.get(new File("survivors", name).getAbsolutePath()), StandardCopyOption.REPLACE_EXISTING);
                    }
                }
            }
        }
     
        public static String getFileExtension(File file) {
            String name = file.getName();
            int lastIndexOf = name.lastIndexOf(".");
            if (lastIndexOf == -1) {
                return ""; // empty extension
            }
            return name.substring(lastIndexOf);
        }
     
        public static String stripExtension(String str) {
            // Handle null case specially.
            if (str == null) return null;
            // Get position of last '.'.
            int pos = str.lastIndexOf(".");
            // If there wasn't any '.' just return the string as is.
            if (pos == -1) return str;
            // Otherwise return the string, up to the dot.
            return str.substring(0, pos);
        }
    }
    

    אתה צריך לקמפל, ולהוסיף את ההרצה של ה-class לbat שפותח את התוכנה.
    בעיקרון זה לכל קובץ בתקיית work פותח dosbox ומקמפל אותו באמצעות tasm (אצלי זה פשוט 64 ביט, אז אני חייב DOSBOX).
    כדי שזה יעבוד:
    צריך תקיית WORK שבא כל קבצי ה-ASM
    צריך תקיית ASM שבא TASM של 16ביט נמצא
    כמובן שאתה יכול לשנות את הפקודה ולהשתמש במה שאתה רוצה.

מוצגות 3 תגובות – 1 עד 3 (מתוך 3 סה״כ)
  • יש להתחבר למערכת על מנת להגיב.