From 11ec9237a3f713ba3bd3589c8740325d924abd29 Mon Sep 17 00:00:00 2001 From: Matthew Kilgore Date: Wed, 11 May 2022 01:41:10 -0400 Subject: [PATCH] Add support for mylib$ and mylibopt$ --- source/ide/ide_methods.bas | 22 +---- source/qb64.bas | 177 ++++------------------------------- source/utilities/build.bas | 28 ++++++ source/utilities/strings.bas | 4 + 4 files changed, 51 insertions(+), 180 deletions(-) create mode 100644 source/utilities/build.bas diff --git a/source/ide/ide_methods.bas b/source/ide/ide_methods.bas index 5006d4271..fe3c206e0 100644 --- a/source/ide/ide_methods.bas +++ b/source/ide/ide_methods.bas @@ -4939,7 +4939,7 @@ FUNCTION ide2 (ignore) IF menu$(m, s) = "Purge C++ #Libraries" THEN PCOPY 2, 0 - purgeprecompiledcontent + PurgeTemporaryBuildFiles (os$), (MacOSX) PCOPY 3, 0: SCREEN , , 3, 0 GOTO ideloop END IF @@ -15248,7 +15248,7 @@ FUNCTION ideadvancedbox WriteConfigSetting generalSettingsSection$, "DebugInfo", "False" + DebugInfoIniWarning$ END IF Include_GDB_Debugging_Info = idedebuginfo - purgeprecompiledcontent + PurgeTemporaryBuildFiles (os$), (MacOSX) idechangemade = 1 'force recompilation startPausedPending = 0 END IF @@ -19933,24 +19933,6 @@ END FUNCTION '$INCLUDE:'wiki\wiki_methods.bas' -SUB purgeprecompiledcontent - IF os$ = "WIN" THEN - CHDIR "internal\c" - SHELL _HIDE "cmd /c purge_all_precompiled_content_win.bat" - CHDIR "..\.." - END IF - IF os$ = "LNX" THEN - CHDIR "./internal/c" - - IF INSTR(_OS$, "[MACOSX]") THEN - SHELL _HIDE "./purge_all_precompiled_content_osx.command" - ELSE - SHELL _HIDE "./purge_all_precompiled_content_lnx.sh" - END IF - CHDIR "../.." - END IF -END SUB - SUB printWrapStatus (x AS INTEGER, y AS INTEGER, initialX AS INTEGER, __text$) DIM text$, nextWord$ DIM AS INTEGER i, findSep, findColorMarker, changeColor, changeColorAfter diff --git a/source/qb64.bas b/source/qb64.bas index da3e94608..3b3a72b55 100644 --- a/source/qb64.bas +++ b/source/qb64.bas @@ -12478,19 +12478,13 @@ o$ = LCASE$(os$) win = 0: IF os$ = "WIN" THEN win = 1 lnx = 0: IF os$ = "LNX" THEN lnx = 1 mac = 0: IF MacOSX THEN mac = 1: o$ = "osx" -defines$ = "": defines_header$ = " -D " ver$ = Version$ 'eg. "0.123" libs$ = "" -make$ = "" makedeps$ = "" +make$ = GetMakeExecutable$ localpath$ = "internal\c\" -IF os$ = "WIN" THEN - make$ = "internal\c\c_compiler\bin\mingw32-make.exe" -else - make$ = "make" -end if IF DEPENDENCY(DEPENDENCY_GL) THEN makedeps$ = makedeps$ + " DEP_GL=y" IF DEPENDENCY(DEPENDENCY_SCREENIMAGE) THEN makedeps$ = makedeps$ + " DEP_SCREENIMAGE=y" @@ -12513,25 +12507,20 @@ IF ExeIconSet OR VersionInfoSet THEN makedeps$ = makedeps$ + " DEP_IC IF tempfolderindex > 1 THEN makedeps$ = makedeps$ + " TEMP_ID=" + str2$(tempfolderindex) +CxxFlagsExtra$ = "" +CxxLibsExtra$ = "" + IF Include_GDB_Debugging_Info THEN - makedeps$ = makedeps$ + " CXXFLAGS_EXTRA=-Og" + CxxFlagsExtra$ = "-Og" ELSE - makedeps$ = makedeps$ + " CXXFLAGS_EXTRA=-O2" + CxxFlagsExtra$ = "-O2" END IF -makeline$ = make$ + makedeps$ + " EXE=" + QuotedFilename$(path.exe$ + file$ + extension$) +CxxLibsExtra$ = CxxLibsExtra$ + " " + mylib$ + " " + mylibopt$ -' Handle providing extra libraries to Make -DIM extraLibsFile AS LONG -extraLibsFile = FREEFILE -OPEN tmpdir$ + "extra_libs.txt" FOR OUTPUT AS #extraLibsFile - -_ECHO mylib$ -IF LEN(mylib$) THEN - PRINT #extraLibsFile, mylib$, mylibopt$ -END IF - -CLOSE #extraLibsFile +makeline$ = make$ + makedeps$ + " EXE=" + AddQuotes$(path.exe$ + file$ + extension$) +makeline$ = makeline$ + " CXXFLAGS_EXTRA=" + AddQuotes$(CxxFlagsExtra$) +makeline$ = makeline$ + " CXXLIBS_EXTRA=" + AddQuotes$(CxxLibsExtra$) IF os$ = "WIN" THEN @@ -12665,16 +12654,6 @@ IF os$ = "WIN" THEN END IF END IF - ffh = FREEFILE - OPEN tmpdir$ + "recompile_win.bat" FOR OUTPUT AS #ffh - PRINT #ffh, "@echo off" - PRINT #ffh, "cd %0\..\" - PRINT #ffh, "echo Recompiling..." - PRINT #ffh, "cd ../c" - PRINT #ffh, makeline$ - PRINT #ffh, "pause" - CLOSE ffh - ffh = FREEFILE OPEN tmpdir$ + "debug_win.bat" FOR OUTPUT AS #ffh PRINT #ffh, "@echo off" @@ -12825,19 +12804,6 @@ IF os$ = "LNX" THEN END IF NEXT - IF INSTR(_OS$, "[MACOSX]") THEN - OPEN "./internal/c/makeline_osx.txt" FOR INPUT AS #150 - ELSEIF DEPENDENCY(DEPENDENCY_CONSOLE_ONLY) THEN - OPEN "./internal/c/makeline_lnx_nogui.txt" FOR INPUT AS #150 - ELSE - OPEN "./internal/c/makeline_lnx.txt" FOR INPUT AS #150 - END IF - - LINE INPUT #150, a$: a$ = GDB_Fix(a$) - CLOSE #150 - 'change qbx.cpp to qbx999.cpp? - x = INSTR(a$, "qbx.cpp"): IF x <> 0 AND tempfolderindex <> 1 THEN a$ = LEFT$(a$, x - 1) + "qbx" + str2$(tempfolderindex) + ".cpp" + RIGHT$(a$, LEN(a$) - (x + 6)) - IF INSTR(_OS$, "[MACOSX]") THEN ffh = FREEFILE @@ -12845,7 +12811,7 @@ IF os$ = "LNX" THEN PRINT #ffh, "cd " + CHR_QUOTE + "$(dirname " + CHR_QUOTE + "$0" + CHR_QUOTE + ")" + CHR_QUOTE + CHR$(10); PRINT #ffh, "echo " + CHR_QUOTE + "Recompiling..." + CHR_QUOTE + CHR$(10); PRINT #ffh, "cd ../c" + CHR$(10); - PRINT #ffh, a$ + CHR$(10); + PRINT #ffh, makeline$ + CHR$(10); PRINT #ffh, "read -p " + CHR_QUOTE + "Press ENTER to exit..." + CHR_QUOTE + CHR$(10); CLOSE ffh SHELL _HIDE "chmod +x " + tmpdir$ + "recompile_osx.command" @@ -12884,7 +12850,7 @@ IF os$ = "LNX" THEN PRINT #ffh, "}" + CHR$(10); PRINT #ffh, "echo " + CHR_QUOTE + "Recompiling..." + CHR_QUOTE + CHR$(10); PRINT #ffh, "cd ../c" + CHR$(10); - PRINT #ffh, a$ + CHR$(10); + PRINT #ffh, makeline$ + CHR$(10); PRINT #ffh, "echo " + CHR_QUOTE + "Press ENTER to exit..." + CHR_QUOTE + CHR$(10); PRINT #ffh, "Pause" + CHR$(10); CLOSE ffh @@ -12951,7 +12917,7 @@ END IF IF compfailed THEN IF idemode THEN - idemessage$ = "C++ Compilation failed " + CHR$(0) + "(Check " + _TRIM$(compilelog$) + ")" + idemessage$ = "C++ Compilation failed " + CHR$(0) + "(Check " + _TRIM$(compilelog$) + " And " + _TRIM$(errorcompilelog$) + ")" GOTO ideerror END IF IF compfailed THEN @@ -13195,41 +13161,13 @@ FUNCTION ParseCMDLineArgs$ () WriteConfigSetting generalSettingsSection$, "DebugInfo", "True" + DebugInfoIniWarning$ idedebuginfo = 1 Include_GDB_Debugging_Info = idedebuginfo - IF os$ = "WIN" THEN - CHDIR "internal\c" - SHELL _HIDE "cmd /c purge_all_precompiled_content_win.bat" - CHDIR "..\.." - END IF - IF os$ = "LNX" THEN - CHDIR "./internal/c" - - IF INSTR(_OS$, "[MACOSX]") THEN - SHELL _HIDE "./purge_all_precompiled_content_osx.command" - ELSE - SHELL _HIDE "./purge_all_precompiled_content_lnx.sh" - END IF - CHDIR "../.." - END IF + PurgeTemporaryBuildFiles (os$), (MacOSX) CASE ":debuginfo=false" PRINT "debuginfo = false" WriteConfigSetting generalSettingsSection$, "DebugInfo", "False" + DebugInfoIniWarning$ idedebuginfo = 0 Include_GDB_Debugging_Info = idedebuginfo - IF os$ = "WIN" THEN - CHDIR "internal\c" - SHELL _HIDE "cmd /c purge_all_precompiled_content_win.bat" - CHDIR "..\.." - END IF - IF os$ = "LNX" THEN - CHDIR "./internal/c" - - IF INSTR(_OS$, "[MACOSX]") THEN - SHELL _HIDE "./purge_all_precompiled_content_osx.command" - ELSE - SHELL _HIDE "./purge_all_precompiled_content_lnx.sh" - END IF - CHDIR "../.." - END IF + PurgeTemporaryBuildFiles (os$), (MacOSX) CASE ELSE PRINT "Invalid settings switch: "; token$ PRINT @@ -13243,21 +13181,7 @@ FUNCTION ParseCMDLineArgs$ () IF MID$(token$, 3, 1) = ":" THEN ideStartAtLine = VAL(MID$(token$, 4)) cmdlineswitch = -1 CASE "-p" 'Purge - IF os$ = "WIN" THEN - CHDIR "internal\c" - SHELL _HIDE "cmd /c purge_all_precompiled_content_win.bat" - CHDIR "..\.." - END IF - IF os$ = "LNX" THEN - CHDIR "./internal/c" - - IF INSTR(_OS$, "[MACOSX]") THEN - SHELL _HIDE "./purge_all_precompiled_content_osx.command" - ELSE - SHELL _HIDE "./purge_all_precompiled_content_lnx.sh" - END IF - CHDIR "../.." - END IF + PurgeTemporaryBuildFiles (os$), (MacOSX) cmdlineswitch = -1 CASE "-z" 'Not compiling C code No_C_Compile_Mode = 1 @@ -24017,74 +23941,6 @@ SUB SetDependency (requirement) END IF END SUB -SUB Build (path$) - previous_dir$ = _CWD$ - - 'Count the separators in the path - depth = 1 - FOR x = 1 TO LEN(path$) - IF ASC(path$, x) = 92 OR ASC(path$, x) = 47 THEN depth = depth + 1 - NEXT - CHDIR path$ - - return_path$ = ".." - FOR x = 2 TO depth - return_path$ = return_path$ + "\.." - NEXT - - bfh = FREEFILE - OPEN "build" + BATCHFILE_EXTENSION FOR BINARY AS #bfh - DO UNTIL EOF(bfh) - LINE INPUT #bfh, c$ - use = 0 - IF LEN(c$) THEN use = 1 - IF c$ = "pause" THEN use = 0 - IF LEFT$(c$, 1) = "#" THEN use = 0 'eg. #!/bin/sh - IF LEFT$(c$, 13) = "cd " + CHR$(34) + "$(dirname" THEN use = 0 'eg. cd "$(dirname "$0")" - IF INSTR(LCASE$(c$), "press any key") THEN EXIT DO - c$ = GDB_Fix$(c$) - IF use THEN - IF os$ = "WIN" THEN - SHELL _HIDE "cmd /C " + c$ + " 2>> " + QuotedFilename$(return_path$ + "\" + compilelog$) - ELSE - SHELL _HIDE c$ + " 2>> " + QuotedFilename$(previous_dir$ + "/" + compilelog$) - END IF - END IF - LOOP - CLOSE #bfh - - IF os$ = "WIN" THEN - CHDIR return_path$ - ELSE - CHDIR previous_dir$ - END IF -END SUB - -FUNCTION GDB_Fix$ (g_command$) 'edit a gcc/g++ command line to include debugging info - c$ = g_command$ - IF Include_GDB_Debugging_Info THEN - IF LEFT$(c$, 4) = "gcc " OR LEFT$(c$, 4) = "g++ " THEN - c$ = LEFT$(c$, 4) + " -g " + RIGHT$(c$, LEN(c$) - 4) - GOTO added_gdb_flag - END IF - FOR o = 1 TO 6 - IF o = 1 THEN o$ = "\g++ " - IF o = 2 THEN o$ = "/g++ " - IF o = 3 THEN o$ = "\gcc " - IF o = 4 THEN o$ = "/gcc " - IF o = 5 THEN o$ = " gcc " - IF o = 6 THEN o$ = " g++ " - x = INSTR(UCASE$(c$), UCASE$(o$)) - 'note: -g adds debug symbols - IF x THEN c$ = LEFT$(c$, x - 1) + o$ + " -g " + RIGHT$(c$, LEN(c$) - x - (LEN(o$) - 1)): EXIT FOR - NEXT - added_gdb_flag: - 'note: -s strips all debug symbols which is good for size but not for debugging - x = INSTR(c$, " -s "): IF x THEN c$ = LEFT$(c$, x - 1) + " " + RIGHT$(c$, LEN(c$) - x - 3) - END IF - GDB_Fix$ = c$ -END FUNCTION - 'Steve Subs/Functins for _MATH support with CONST FUNCTION Evaluate_Expression$ (e$) t$ = e$ 'So we preserve our original data, we parse a temp copy of it @@ -25945,6 +25801,7 @@ END SUB '$INCLUDE:'utilities\strings.bas' '$INCLUDE:'utilities\file.bas' +'$INCLUDE:'utilities\build.bas' '$INCLUDE:'subs_functions\extensions\opengl\opengl_methods.bas' '$INCLUDE:'utilities\ini-manager\ini.bm' diff --git a/source/utilities/build.bas b/source/utilities/build.bas new file mode 100644 index 000000000..fc41697bd --- /dev/null +++ b/source/utilities/build.bas @@ -0,0 +1,28 @@ + +' +' Removes all the temporary build files (Various .o, .a, and ./internal/temp, among other things) +' +SUB PurgeTemporaryBuildFiles (os AS STRING, mac AS LONG) + make$ = GetMakeExecutable$ + + IF os = "WIN" THEN + SHELL _HIDE "cmd /c " + make$ + " OS=win clean" + ELSEIF os = "LNX" THEN + IF mac THEN + SHELL _HIDE make$ + " OS=osx clean" + ELSE + SHELL _HIDE make$ + " OS=lnx clean" + END IF + END IF +END SUB + +' +' Returns the make executable to use, with path if necessary +' +FUNCTION GetMakeExecutable$ () + IF os$ = "WIN" THEN + GetMakeExecutable$ = "internal\c\c_compiler\bin\mingw32-make.exe" + ELSE + GetMakeExecutable$ = "make" + END IF +END FUNCTION diff --git a/source/utilities/strings.bas b/source/utilities/strings.bas index f1a9aed53..f27b8da78 100644 --- a/source/utilities/strings.bas +++ b/source/utilities/strings.bas @@ -31,3 +31,7 @@ FUNCTION StrReplace$ (myString$, find$, replaceWith$) 'noncase sensitive LOOP StrReplace$ = a$ END FUNCTION + +FUNCTION AddQuotes$ (s$) + AddQuotes$ = CHR$(34) + s$ + CHR$(34) +END FUNCTION