浏览代码

Autolinking on Windows

Arthur Yefimov 2 年之前
父节点
当前提交
317becefbb
共有 7 个文件被更改,包括 36 次插入70 次删除
  1. 15 8
      Data/bin/link.bat
  2. 0 59
      Data/bin/link_console.bat
  3. 二进制
      allegro-5.2.dll
  4. 二进制
      allegro_image-5.2.dll
  5. 二进制
      allegro_primitives-5.2.dll
  6. 20 2
      src/Builder.Mod
  7. 1 1
      src/make.bat

+ 15 - 8
Data/bin/link_graph.bat → Data/bin/link.bat

@@ -24,17 +24,25 @@ SET OFRTAR=%OFRDIR%\Target\Win32
 SET PATH=%OFRTAR%;%GCCDIR%;%PATH%
 SET CC=gcc
 
-REM Put all arguments starting from the 2nd to ARGS
-SHIFT
-SET ARGS=%1
+REM Put all args from 2nd upto --linker-libs to FILES, put others in FLAGS
 SHIFT
+SET FILES=
 :START
 IF [%1] == [] GOTO FINISH
-SET ARGS=%ARGS% %1
+IF [%1] == [--linker-libs] GOTO FLAGSLOOP
+SET FILES=%FILES% %1
 SHIFT
 GOTO START
+:FLAGSLOOP
+SHIFT
+SET FLAGS=
+:START2
+IF [%1] == [] GOTO FINISH
+SET FLAGS=%FLAGS% %1
+SHIFT
+GOTO START2
 :FINISH
-REM END Put all ARGS.
+REM END: Put all FILES and FLAGS
 ECHO ON
 
 @DEL /s %~n1.exe >nul 2>&1
@@ -44,14 +52,13 @@ ECHO ON
   -I %OFRDIR%\Mod\Lib ^
   -I %OFRTAR%\Lib\Obj ^
   %ONAME%.c -o %ONAME%.exe ^
-  %ARGS% ^
+  %FILES% ^
   %FOBDIR%\Data\bin\FreeOberon.a ^
   %OFRTAR%\Lib\Ofront.a ^
-  -lallegro -lallegro_primitives -lallegro_image ^
   -I..\Data\bin\mingw32\include ^
   -Wl,-e_WinMain@16 -nostartfiles ^
   %OFRDIR%\Mod\Lib\crt1.c ^
-  -Wl,-subsystem,windows
+  %FLAGS%
 
 @SET RETCODE=%ERRORLEVEL%
 

+ 0 - 59
Data/bin/link_console.bat

@@ -1,59 +0,0 @@
-@ECHO OFF
-REM This script is run by Free Oberon on Windows
-REM to link a console program.
-REM When it is being run, the current directory
-REM must be the root directory of Free Oberon.
-
-
-REM Set DIR = directory of this script
-
-
-
-
-
-SET DIR=%~dp0
-
-CD _Build >nul 2>&1
-
-
-SET ONAME=%~n1
-SET GCCDIR=%DIR%mingw32\bin
-SET FOBDIR=%DIR%..\..
-SET OFRDIR=%DIR%OfrontPlus
-SET OFRTAR=%OFRDIR%\Target\Win32
-SET PATH=%OFRTAR%;%GCCDIR%;%PATH%
-SET CC=gcc
-
-REM Put all arguments starting from the 2nd to ARGS
-SHIFT
-SET ARGS=%1
-SHIFT
-:START
-IF [%1] == [] GOTO FINISH
-SET ARGS=%ARGS% %1
-SHIFT
-GOTO START
-:FINISH
-REM END Put all ARGS.
-ECHO ON
-
-@DEL /s %~n1.exe >nul 2>&1
-
-@%CC% -O0 -fno-exceptions ^
-  -I %FOBDIR%\src ^
-  -I %OFRDIR%\Mod\Lib ^
-  -I %OFRTAR%\Lib\Obj ^
-  %ONAME%.c -o %ONAME%.exe ^
-  %ARGS% ^
-  %FOBDIR%\Data\bin\FreeOberon.a ^
-  %OFRTAR%\Lib\Ofront.a ^
-  -Wl,-e_WinMain@16 -nostartfiles ^
-  %OFRDIR%\Mod\Lib\crt1.c
-
-
-
-
-@SET RETCODE=%ERRORLEVEL%
-
-@CD ..
-@EXIT /b %RETCODE%

二进制
allegro-5.2.dll


二进制
allegro_image-5.2.dll


二进制
allegro_primitives-5.2.dll


+ 20 - 2
src/Builder.Mod

@@ -188,6 +188,24 @@ BEGIN
   END
 END AppendDataBin;
 
+PROCEDURE AppendArgument(IN arg: ARRAY OF CHAR; VAR s: ARRAY OF CHAR);
+BEGIN Strings.Append(arg, s)
+END AppendArgument;
+
+(*PROCEDURE AppendArgument(IN arg: ARRAY OF CHAR; VAR s: ARRAY OF CHAR);
+VAR i, j: INTEGER;
+BEGIN
+  j := 0; WHILE s[j] # 0X DO INC(j) END;
+  i := 0;
+  WHILE arg[i] # 0X DO
+    IF arg[i] = ',' THEN s[j] := '^'; INC(j); s[j] := ','
+    ELSE s[j] := arg[i]
+    END;
+    INC(i); INC(j)
+  END;
+  s[j] := 0X
+END AppendArgument;*)
+
 PROCEDURE RunCommand(IN fname, mod: ARRAY OF CHAR; link, main: BOOLEAN;
     list: Module; onError: ErrorHandler): BOOLEAN;
 CONST bufLen = 20480;
@@ -233,7 +251,7 @@ BEGIN ok := TRUE;
       p := list;
       WHILE p.next # NIL DO
         IF p.libs[0] # 0X THEN
-          Strings.Append(' ', cmd); Strings.Append(p.libs, cmd)
+          Strings.Append(' ', cmd); AppendArgument(p.libs, cmd)
         END;
         p := p.next
       END
@@ -303,7 +321,7 @@ PROCEDURE ResetSysModules*;
     Add('Graph'); p := sysModules;
     IF Config.isWindows THEN
       p.libs := '-lallegro -lallegro_primitives -lallegro_image';
-      Strings.Append(' -Wl,-subsystem,window', p.libs)
+      Strings.Append(' "-Wl,-subsystem,windows"', p.libs)
     ELSE
       p.libs := '$(pkg-config allegro_primitives-5 allegro_image-5';
       Strings.Append(' allegro_audio-5 allegro_acodec-5', p.libs);

+ 1 - 1
src/make.bat

@@ -2,7 +2,7 @@
 SET PROG1=FreeOberon
 SET PROG2=fob
 SET OFRDIR=..\Data\bin\OfrontPlus\Target\Win32
-SET GCCDIR=C:\mingw-w64\i686\mingw32\bin
+SET GCCDIR=C:\prg\mingw32\bin
 SET GCCDIR=..\Data\bin\mingw32\bin
 SET PATH=%GCCDIR%;%OFRDIR%;%PATH%
 SET OBERON=.;%OFRDIR%\Lib\Sym